{"version":3,"sources":["../src/common/audit.enums.ts","../src/common/common.schemas.ts","../src/common/messages.ts"],"names":["AuditActorRole","AuditActorRoleSchema","z","MAX_PAGE_SIZE","DEFAULT_PAGE_SIZE","DEFAULT_PAGE_NUMBER","CurrencyEnum","PaginationParamsSchema","MoneySchema","DeltaDirection","DeltaDirectionSchema","PaginationResponseSchema","ApiResponseSchema","dataSchema","ResponseMessages","time"],"mappings":"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","file":"chunk-6BWWSFEJ.mjs","sourcesContent":["import { z } from 'zod';\n\n/**\n * Canonical actor roles persisted on `audit_logs.actor_role`.\n * Broader than {@link BookingTransitionActor} — includes VIEWER/USER for\n * platform-wide audit events (playback, registration, re-auth, etc.).\n */\nexport const AuditActorRole = {\n  HOST: 'HOST',\n  VENDOR: 'VENDOR',\n  ADMIN: 'ADMIN',\n  SYSTEM: 'SYSTEM',\n  VIEWER: 'VIEWER',\n  USER: 'USER',\n} as const;\nexport type AuditActorRole = (typeof AuditActorRole)[keyof typeof AuditActorRole];\n\nexport const AuditActorRoleSchema = z.enum([\n  AuditActorRole.HOST,\n  AuditActorRole.VENDOR,\n  AuditActorRole.ADMIN,\n  AuditActorRole.SYSTEM,\n  AuditActorRole.VIEWER,\n  AuditActorRole.USER,\n]);\n","import { z } from 'zod';\n\nexport const MAX_PAGE_SIZE = 50;\nexport const DEFAULT_PAGE_SIZE = 20;\nexport const DEFAULT_PAGE_NUMBER = 1;\n\nexport const CurrencyEnum = {\n  NGN: 'NGN',\n  USD: 'USD',\n  GBP: 'GBP',\n  EUR: 'EUR',\n} as const;\nexport type CurrencyEnum = (typeof CurrencyEnum)[keyof typeof CurrencyEnum];\n/**\n * Common pagination parameters for query strings.\n */\nexport const PaginationParamsSchema = z.object({\n  pageNumber: z.coerce.number().int().min(1).default(DEFAULT_PAGE_NUMBER),\n  pageSize: z.coerce.number().int().min(1).max(MAX_PAGE_SIZE).default(DEFAULT_PAGE_SIZE),\n});\n\nexport const MoneySchema = z.object({\n  amountMinor: z.string().regex(/^-?\\d+$/, 'amountMinor must be a signed integer string'),\n  currency: z.enum(CurrencyEnum),\n});\n\nexport const DeltaDirection = {\n  UP: 'UP',\n  DOWN: 'DOWN',\n  FLAT: 'FLAT',\n} as const;\nexport type DeltaDirection = (typeof DeltaDirection)[keyof typeof DeltaDirection];\nexport const DeltaDirectionSchema = z.enum(DeltaDirection);\n\n/**\n * Common pagination metadata returned alongside list responses.\n */\nexport const PaginationResponseSchema = z.object({\n  totalCount: z.number().int().nonnegative(),\n  pageNumber: z.number().int().min(1),\n  pageSize: z.number().int().min(1),\n  totalPages: z.number().int().nonnegative(),\n  hasPreviousPage: z.boolean(),\n  hasNextPage: z.boolean(),\n});\n\n/**\n * Standard API response wrapper for all LivDot endpoints.\n * @template T The type of the data payload.\n */\nexport const ApiResponseSchema = <T extends z.ZodTypeAny>(dataSchema: T) =>\n  z.object({\n    success: z.boolean(),\n    data: dataSchema.optional(),\n    error: z\n      .object({\n        type: z.url(),\n        title: z.string(),\n        status: z.number(),\n        detail: z.string(),\n        instance: z.string().optional(),\n      })\n      .optional(),\n    meta: PaginationResponseSchema.optional(),\n  });\n\nexport type PaginationParams = z.infer<typeof PaginationParamsSchema>;\nexport type PaginationResponse = z.infer<typeof PaginationResponseSchema>;\nexport type MoneyDto = z.infer<typeof MoneySchema>;\n","/**\n * Human-readable response messages for the LivDot platform.\n *\n * Used for API success payloads, notification bodies, and toast copy.\n * Grouped to mirror docs/integration — one sub-object per module.\n *\n * Rules of thumb:\n *  - Speak to the user, not about them (\"your\", not \"the user's\").\n *  - Never leak internal state (attempts remaining, provider names, ledger accounts).\n *  - Keep copy terse; the FE composes surrounding UI.\n *  - Do NOT put URLs, ids, or amounts in these strings — the FE renders those.\n */\nexport const ResponseMessages = {\n  // ────────────────────────────────────────────────────────────────\n  // 01 · Auth  (docs/integration/01-auth.md)\n  // ────────────────────────────────────────────────────────────────\n  AUTH: {\n    REGISTER_SUCCESS: 'Account created. Check your email for the verification code.',\n    REGISTER_EMAIL_EXISTS: 'An account with that email already exists. Try logging in instead.',\n    OTP_SENT: 'We sent you a fresh code. It expires in a few minutes.',\n    OTP_VERIFIED: 'Code verified.',\n    OTP_INVALID: 'That code is invalid or has expired. Request a new one.',\n    LOGIN_SUCCESS: 'Welcome back.',\n    LOGIN_INVALID_CREDENTIALS: 'That email and password combination is incorrect.',\n    LOGIN_ROLE_UNAVAILABLE:\n      'You don’t have access to this app yet. Switch role or upgrade your account.',\n    LOGIN_UNVERIFIED: 'Please verify your email before continuing. We resent the code.',\n    LOGOUT_SUCCESS: 'You’ve been signed out.',\n    REFRESH_SUCCESS: 'Session refreshed.',\n    REFRESH_REVOKED: 'Your session has expired. Sign in again to continue.',\n    PASSWORD_RESET_SENT: 'If an account exists for that email, a reset code is on its way.',\n    PASSWORD_RESET_SUCCESS: 'Your password has been updated.',\n    PASSWORD_CHANGE_SUCCESS: 'Password changed. Other sessions have been signed out.',\n    ACCOUNT_DELETE_SUCCESS: 'Your account has been deleted.',\n    ACCOUNT_DELETE_CONFIRM_MISMATCH:\n      'The confirmation email doesn’t match. Type your email exactly as shown.',\n    CONFIRM_PASSWORD_SUCCESS: 'Password confirmed. Continue with your change.',\n    CONFIRM_PASSWORD_INVALID: 'That password is incorrect.',\n\n    // OAuth\n    OAUTH_PROVIDER_DISABLED: 'This sign-in method is temporarily unavailable. Try another option.',\n    OAUTH_LINK_REQUIRED_EMAIL_MATCH:\n      'An account with this email already exists. Verify to link them.',\n    OAUTH_LINK_REQUIRED_EMAIL_MISSING:\n      'We couldn’t get an email from your provider. Enter one to continue.',\n    OAUTH_LINK_SUCCESS: 'Accounts linked.',\n    OAUTH_INVALID_HANDOFF: 'This sign-in link has expired. Start again from the sign-in screen.',\n\n    // MFA (TOTP)\n    MFA_ENROL_STARTED: 'Scan the code with your authenticator app, then enter a code to enable.',\n    MFA_ENABLED: 'Two-factor authentication is on.',\n    MFA_DISABLED: 'Two-factor authentication is off.',\n    MFA_CODE_INVALID: 'That code isn’t right. Try again with a fresh code.',\n    MFA_NOT_ENROLLED: 'Set up two-factor authentication before continuing.',\n    MFA_CHALLENGE_ISSUED: 'Enter your authenticator code to continue.',\n    MFA_VERIFY_SUCCESS: 'Verified. You have 60 seconds to complete this action.',\n    MFA_TOKEN_EXPIRED: 'This verification has expired. Start the security check again.',\n    MFA_LOCKED: 'Too many failed attempts. Try again after the cooldown.',\n    MFA_RECOVERY_CODES_REGENERATED:\n      'New recovery codes generated. Save them now — we won’t show them again.',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 02 · User & Profiles  (docs/integration/02-user-profiles.md)\n  // ────────────────────────────────────────────────────────────────\n  USER: {\n    PROFILE_UPDATE_SUCCESS: 'Profile updated.',\n    HANDLE_TAKEN: 'That handle is already taken. Try another.',\n    CURRENCY_UPDATED: 'Display currency updated.',\n    CURRENCY_UNSUPPORTED: 'That currency isn’t supported yet.',\n    NOTIFICATION_PREFS_UPDATED: 'Notification preferences saved.',\n    FEEDBACK_RECEIVED: 'Thanks for the feedback — we’ve got it.',\n    PIN_SET: 'PIN set.',\n    PIN_ROTATED: 'PIN updated.',\n    PIN_CURRENT_INVALID: 'Your current PIN is incorrect.',\n\n    HOST_PROFILE_CREATED: 'Host profile created. Set a PIN before your first payout.',\n    HOST_PROFILE_UPDATED: 'Host profile updated.',\n    HOST_PROFILE_EXISTS: 'You already have a host profile.',\n    HOST_PROFILE_NOT_FOUND: 'You haven’t created a host profile yet.',\n\n    VENDOR_PROFILE_CREATED: 'Vendor profile created. Submit for verification to appear in search.',\n    VENDOR_PROFILE_UPDATED: 'Vendor profile updated.',\n    VENDOR_PROFILE_EXISTS: 'You already have a vendor profile.',\n    VENDOR_PROFILE_NOT_FOUND: 'You haven’t created a vendor profile yet.',\n    VENDOR_VERIFY_SUBMITTED: 'Verification submitted. We’ll let you know once review is complete.',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 03 · Host events + wizard + live console  (03-host-events.md)\n  // ────────────────────────────────────────────────────────────────\n  EVENT: {\n    WIZARD_DRAFT_CREATED: 'Draft saved.',\n    WIZARD_STEP_SAVED: 'Progress saved.',\n    WIZARD_PUBLISHED: 'Event published — it’s now live to your audience.',\n    WIZARD_PUBLISH_INCOMPLETE:\n      'A few details are still missing. Finish the highlighted steps to publish.',\n    WIZARD_NOT_DRAFT: 'This event can’t be edited from the wizard anymore.',\n\n    UPDATED: 'Event details updated.',\n    DELETED: 'Event deleted.',\n    DELETE_NOT_ALLOWED: 'Only draft or empty scheduled events can be deleted.',\n    PAUSED: 'Event paused.',\n    UNPAUSED: 'Event resumed.',\n    CANCELLED: 'Event cancelled. Refunds are processing and viewers have been notified.',\n    CANCEL_NOT_ALLOWED: 'This event can no longer be cancelled.',\n\n    // Stream test + go-live + end-live\n    STREAM_TEST_READY: 'Stream credentials are ready. Copy the key now — you won’t see it again.',\n    STREAM_TEST_RATE_LIMITED: 'You’ve run stream test too many times this hour. Try again later.',\n    STREAM_TEST_WRONG_STATE: 'Stream test isn’t available in the current event state.',\n\n    GO_LIVE_SOON: (time: string) => `Your event goes live in ${time}.`,\n    GO_LIVE_SUCCESS: 'You’re live.',\n    GO_LIVE_CHECKLIST_INCOMPLETE: 'Finish the pre-live checklist before going live.',\n    GO_LIVE_BEFORE_WINDOW: 'Too early — the go-live window hasn’t opened yet.',\n    GO_LIVE_AFTER_WINDOW: 'The go-live window has closed. Contact support.',\n    GO_LIVE_ALREADY_LIVE: 'This event is already live.',\n    GO_LIVE_NOT_OWNED: 'You’re not the host of this event.',\n\n    END_LIVE_SUCCESS: 'Event ended. Replay will be available shortly.',\n    END_LIVE_NOT_LIVE: 'This event isn’t live.',\n\n    STREAM_CONTROL_UPDATED: 'Stream control updated.',\n\n    REPLAY_PERIOD_EXTENDED: 'Replay availability updated.',\n    REPLAY_PERIOD_NOT_ENDED: 'You can extend replay availability once the event ends.',\n\n    NOT_OWNED: 'You don’t have access to this event.',\n    NOT_FOUND: 'We couldn’t find that event.',\n\n    // Post-event dashboard\n    AUDIENCE_ROLLUP_PENDING: 'Audience insights will appear here once the rollup completes.',\n\n    // Viewer feedback\n    FEEDBACK_SAVED: 'Thanks for your feedback.',\n    FEEDBACK_NOT_OPEN: 'Feedback opens once the event goes live.',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 04 · Payouts, settlement, earnings  (04-payouts.md)\n  // ────────────────────────────────────────────────────────────────\n  PAYOUT: {\n    WITHDRAW_ACCEPTED: 'Withdrawal requested. We’ll notify you once it reaches your bank.',\n    WITHDRAW_PIN_INVALID: 'Incorrect PIN.',\n    WITHDRAW_PIN_NOT_SET: 'Set a PIN in your profile before withdrawing.',\n    WITHDRAW_SETTLEMENT_MISSING: 'Add a verified settlement account before withdrawing.',\n    WITHDRAW_INSUFFICIENT_BALANCE: 'Your available balance is below the minimum withdrawal amount.',\n    WITHDRAW_IDEMPOTENCY_MISSING: 'This request is missing a required key. Please retry.',\n    WITHDRAW_IDEMPOTENCY_CONFLICT:\n      'This request key has already been used. Start a new withdrawal.',\n    WITHDRAW_PROVIDER_UNAVAILABLE: 'Payouts are temporarily unavailable. Try again shortly.',\n\n    SETTLEMENT_UPDATED: 'Settlement account saved.',\n    SETTLEMENT_ACCOUNT_UNVERIFIED:\n      'We couldn’t verify that account. Double-check the bank and account number.',\n    SETTLEMENT_NAME_MISMATCH: 'The bank account name doesn’t match the name on your profile.',\n    SETTLEMENT_PROVIDER_UNAVAILABLE:\n      'Bank verification is temporarily unavailable. Please try again.',\n\n    ACCOUNT_RESOLVE_FAILED: 'That account number couldn’t be resolved. Check the digits and bank.',\n\n    VIRTUAL_ACCOUNT_PROVISIONING:\n      'Your deposit account is being set up. This usually takes under a minute.',\n    VIRTUAL_ACCOUNT_READY: 'Your deposit account is ready.',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 05 · Marketplace  (05-marketplace.md)\n  // ────────────────────────────────────────────────────────────────\n  MARKETPLACE: {\n    // Job listings\n    LISTING_DRAFT_SAVED: 'Draft saved.',\n    LISTING_PUBLISHED: 'Job listing published.',\n    LISTING_PUBLISH_INCOMPLETE: 'Fill in the required fields before publishing.',\n    LISTING_UPDATED: 'Job listing updated.',\n    LISTING_CANCELLED: 'Job listing cancelled.',\n    LISTING_DELETED: 'Draft deleted.',\n    LISTING_NOT_DRAFT: 'Only draft listings can be deleted.',\n    LISTING_NOT_OPEN: 'This job listing is no longer accepting applications.',\n    LISTING_ALREADY_EXISTS: 'You already have a listing for this event.',\n\n    // Indications of interest\n    IOI_SUBMITTED: 'Your interest has been sent to the host.',\n    IOI_ALREADY_SUBMITTED: 'You’ve already applied to this listing. Wait for the host to respond.',\n    IOI_WITHDRAWN: 'Application withdrawn.',\n    IOI_WITHDRAW_NOT_ALLOWED: 'This application can no longer be withdrawn.',\n\n    // Bookings\n    BOOKING_CREATED: 'Booking created. The vendor has been notified.',\n    BOOKING_STATE_UPDATED: 'Booking updated.',\n    BOOKING_TRANSITION_FORBIDDEN: 'You’re not allowed to make this change on this booking.',\n    BOOKING_TRANSITION_INVALID: 'That change isn’t allowed from the current state.',\n    BOOKING_ESCROW_UNFUNDED: 'Escrow must be funded before this booking can be confirmed.',\n    BOOKING_REASON_REQUIRED: 'Add a short reason to continue.',\n    BOOKING_ACCEPTED: 'Booking accepted.',\n    BOOKING_REJECTED: 'Booking rejected.',\n    BOOKING_CANCELLED: 'Booking cancelled.',\n    BOOKING_COMPLETION_ACK: 'Your completion is recorded. Waiting on the other party to confirm.',\n    BOOKING_COMPLETED: 'Service marked complete. Funds will release after the dispute window.',\n    BOOKING_NOT_PARTICIPANT: 'You’re not a participant on this booking.',\n\n    // Reviews\n    REVIEW_SUBMITTED: 'Thanks for your review.',\n    REVIEW_ALREADY_EXISTS: 'You’ve already reviewed this booking.',\n    REVIEW_NOT_REVIEWABLE:\n      'Reviews are available once service is completed (or the booking is closed).',\n    BOOKING_REVIEW_REQUIRED_BEFORE_RELEASE:\n      'Submit a review for the vendor before closing this booking and releasing funds.',\n\n    // Hiring thread\n    THREAD_MESSAGE_SENT: 'Message sent.',\n    THREAD_MESSAGE_TOO_LONG: 'Your message is too long. Trim it and try again.',\n    THREAD_CLOSED: 'This thread is closed. You can no longer send messages here.',\n    THREAD_READ_RECEIPTS_UPDATED: 'Messages marked as read.',\n\n    // Direct Event Hire — crew role assignments\n    CREW_ASSIGNMENT_SAVED: 'Crew role saved.',\n    CREW_ASSIGNMENT_UPDATED: 'Crew role updated.',\n    CREW_ASSIGNMENT_REMOVED: 'Crew role removed.',\n    CREW_ASSIGNMENT_NOT_FOUND: 'That crew assignment was not found.',\n    CREW_ASSIGNMENT_INVALID_STATE: 'That action isn’t allowed for this invite right now.',\n    CREW_ASSIGNMENT_ALREADY_EXISTS: 'This vendor already has a role on this event.',\n    CREW_ASSIGNMENT_BOOKING_EXISTS:\n      'A booking already exists for this vendor on the event. Remove it before inviting again.',\n    CREW_ASSIGNMENT_ACCEPTED: 'Invite accepted. Your booking is ready.',\n    CREW_ASSIGNMENT_REJECTED: 'Invite declined.',\n    CREW_ASSIGNMENT_INVITED: 'You’ve been invited to join a production crew.',\n    CREW_ASSIGNMENT_REPLACED: 'Crew member replaced and invite sent.',\n    CREW_ASSIGNMENT_NOT_REPLACABLE: 'Only cancelled or declined crew roles can be replaced.',\n    CREW_ASSIGNMENT_ALREADY_REPLACED: 'This crew role has already been replaced.',\n\n    // Booking disputes (inbox + email copy)\n    DISPUTE_OPENED_TITLE: 'Booking dispute opened',\n    DISPUTE_OPENED_BODY_RAISER:\n      'Your dispute on this booking was submitted. Escrow is on hold until it is resolved.',\n    DISPUTE_OPENED_BODY_COUNTERPARTY:\n      'A dispute was opened on this booking. Escrow is on hold until it is resolved.',\n    DISPUTE_RESOLVED_TITLE: 'Booking dispute resolved',\n    DISPUTE_RESOLVED_BODY: 'The dispute on this booking was resolved.',\n    DISPUTE_RESOLVED_OUTCOME_REFUNDED: 'refunded',\n    DISPUTE_RESOLVED_OUTCOME_PARTIAL_REFUND: 'partially refunded',\n    DISPUTE_RESOLVED_OUTCOME_DENIED: 'denied',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 06 · Payments  (06-payments.md)\n  // ────────────────────────────────────────────────────────────────\n  PAYMENT: {\n    QUOTE_ISSUED: 'Price quote ready.',\n    PURCHASE_INITIATED: 'Redirecting you to checkout.',\n    PURCHASE_PENDING: 'We’re confirming your payment. This usually takes a few seconds.',\n    PURCHASE_SUCCESS: 'Payment received. You’re in.',\n    PURCHASE_FAILED: 'Payment failed. Try again or use a different method.',\n    PURCHASE_CANCELLED: 'You cancelled the payment.',\n    PURCHASE_EXPIRED: 'Your checkout session expired. Start the purchase again.',\n    PURCHASE_NOT_FOUND: 'We couldn’t find that purchase.',\n    PROVIDER_UNAVAILABLE: 'Payments are temporarily unavailable. Please try again shortly.',\n    IDEMPOTENCY_KEY_REQUIRED: 'Your app didn’t send a payment key. Refresh and try again.',\n\n    REGISTRATION_FREE_SUCCESS: 'You’re registered.',\n    REGISTRATION_PAID_PENDING: 'Complete payment to confirm your registration.',\n    REGISTRATION_CANCELLED: 'Your registration has been cancelled.',\n    REGISTRATION_ALREADY_ACTIVE: 'You’re already registered for this event.',\n    REGISTRATION_SOLD_OUT: 'Sorry — this event is sold out.',\n    REGISTRATION_PRIVATE_NOT_ALLOWED: 'You’re not on the guest list for this event.',\n    REGISTRATION_REPLAY_CLOSED: 'The replay window has closed for this event.',\n\n    ACCESS_CHECK_QUALIFIED: 'You’re on the guest list — go ahead and register.',\n    ACCESS_CHECK_NOT_QUALIFIED:\n      'This email isn’t on the guest list. Try another, or contact the host.',\n\n    RECEIPT_READY: 'Receipt ready.',\n    RECEIPT_NOT_AVAILABLE: 'The receipt will be available once payment is confirmed.',\n    CALENDAR_READY: 'Calendar file ready.',\n\n    REPLAY_ACCESS_INCLUDED: 'Replay unlocked — enjoy.',\n    REPLAY_PURCHASE_PENDING: 'Complete payment to unlock replay.',\n    REPLAY_DISABLED: 'The host disabled replay for this event.',\n    REPLAY_REGISTRATION_REQUIRED: 'You need an active ticket before you can watch this replay.',\n\n    REFUND_PROCESSING:\n      'Refund is being processed. It usually completes within a few business days.',\n    REFUND_COMPLETE: 'Refund complete.',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 07 · Streaming  (07-streaming.md)\n  // ────────────────────────────────────────────────────────────────\n  STREAMING: {\n    PLAYBACK_LIVE_READY: 'You’re watching live.',\n    PLAYBACK_REPLAY_READY: 'Replay ready.',\n    PLAYBACK_NOT_ENTITLED: 'You need a ticket or replay pass to watch this event.',\n    PLAYBACK_REPLAY_ONLY_NOT_LIVE:\n      'This pass unlocks the replay. We’ll let you know once it’s ready.',\n    PLAYBACK_UNAVAILABLE: 'This event isn’t playable yet. Check back closer to start time.',\n    PLAYBACK_REPLAY_EXPIRED: 'The replay window for this event has closed.',\n    PLAYBACK_SESSION_ELSEWHERE: 'You’re watching on another device. Resume here to switch.',\n    PLAYBACK_KILLSWITCH: 'Playback is temporarily disabled by the host or support.',\n\n    CREW_HEARTBEAT_OK: 'Presence updated.',\n    CREW_NOT_ASSIGNED: 'You’re not confirmed crew on this event.',\n\n    CREW_NOT_LIVE: 'This event isn’t live yet.',\n    CREW_ALREADY_LIVE: 'This event is already live.',\n    CREW_NOT_OWNED: 'You’re not the host of this event.',\n    CREW_STREAM_NOT_READY: 'The stream isn’t ready yet. Check back in a few minutes.',\n    CREW_STREAM_TEST_NOT_READY: 'The stream test isn’t ready yet. Try again in a few minutes.',\n    INGEST_DISCONNECTED: 'Stream ingest disconnected',\n    INGEST_RECONNECTING: 'Stream ingest reconnected',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 08 · Chat  (08-chat.md)\n  // ────────────────────────────────────────────────────────────────\n  CHAT: {\n    MESSAGE_SENT: 'Message sent.',\n    MESSAGE_TOO_LONG: 'Messages can’t be longer than 500 characters.',\n    MESSAGE_EMPTY: 'Type a message before sending.',\n    MESSAGE_PROFANITY: 'Message blocked by moderation.',\n    ROOM_MUTED: 'Chat is muted right now.',\n    ROOM_NOT_LIVE: 'Chat is closed for this event.',\n    ROOM_MUTED_BY_HOST: 'You’ve muted the room.',\n    ROOM_UNMUTED_BY_HOST: 'Room unmuted.',\n    MESSAGE_DELETED: 'Message removed.',\n    MESSAGE_ALREADY_DELETED: 'That message has already been removed.',\n    RATE_LIMITED: 'You’re sending too fast. Slow down a moment.',\n    NOT_ENTITLED: 'You need an active registration to chat.',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 09 · Notifications & push devices  (09-notifications.md)\n  // ────────────────────────────────────────────────────────────────\n  NOTIFICATIONS: {\n    DEVICE_REGISTERED: 'Push notifications enabled on this device.',\n    DEVICE_REVOKED: 'Push notifications disabled on this device.',\n    DEVICE_TOKEN_INVALID: 'That push token isn’t valid. Try again after re-opening the app.',\n    NOTIFICATION_MARKED_READ: 'Marked as read.',\n    ALL_MARKED_READ: 'All caught up.',\n    ALL_CLEARED: 'Notifications cleared.',\n    NOTIFICATION_NOT_FOUND: 'We couldn’t find that notification.',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 10 · Public share links  (10-share.md)\n  // ────────────────────────────────────────────────────────────────\n  SHARE: {\n    LINK_RESOLVED: 'Loading event.',\n    LINK_NOT_FOUND: 'This share link isn’t available anymore.',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // 11 · Viewer events + sessions  (11-viewer-events.md)\n  // ────────────────────────────────────────────────────────────────\n  VIEWER: {\n    SESSION_STARTED: 'Session started.',\n    SESSION_ENDED: 'Session ended.',\n    SESSION_ALREADY_ENDED: 'This viewing session has already ended.',\n    WATCH_PROGRESS_SAVED: 'Progress saved.',\n    WATCH_PROGRESS_NOT_REPLAYABLE: 'Watch progress is only saved during replays.',\n  },\n\n  // ────────────────────────────────────────────────────────────────\n  // General / cross-cutting\n  // ────────────────────────────────────────────────────────────────\n  GENERAL: {\n    SUCCESS: 'Done.',\n    ERROR: 'Something went wrong. Please try again — if it keeps happening, contact support.',\n    VALIDATION_ERROR: 'Check the highlighted fields and try again.',\n\n    UNAUTHORIZED: 'Please sign in to continue.',\n    FORBIDDEN: 'You don’t have permission to do that.',\n    NOT_FOUND: 'We couldn’t find what you were looking for.',\n    CONFLICT: 'That action isn’t allowed from the current state.',\n    PRECONDITION_FAILED: 'A required setup step is missing. Complete it, then try again.',\n    LOCKED: 'Too many attempts. Try again in a few minutes.',\n    RATE_LIMITED: 'You’re doing that too often. Wait a moment and try again.',\n    SERVICE_UNAVAILABLE: 'This feature is temporarily unavailable. Try again shortly.',\n    UNSUPPORTED_CURRENCY: 'That currency isn’t supported.',\n\n    IDEMPOTENCY_KEY_REQUIRED: 'Missing request key. Refresh and try again.',\n    IDEMPOTENCY_KEY_CONFLICT: 'This request key was already used. Retry with a fresh action.',\n  },\n} as const;\n\nexport type ResponseMessages = typeof ResponseMessages;\n"]}