{"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","remaining"],"mappings":"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","file":"chunk-KTJUD62X.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    EXTEND_LIVE_SUCCESS: 'Event extended.',\n    EXTEND_LIVE_NOT_LIVE: 'This event isn’t live, so it can’t be extended.',\n    EXTEND_LIVE_CONFLICT: 'Someone just extended this event. Refresh and try again.',\n    EXTEND_LIVE_CAP_REACHED: (remaining: number) =>\n      remaining > 0\n        ? `You can add up to ${remaining} more minutes to this event.`\n        : 'You’ve used all the extra time available for this event.',\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    // Guest list import\n    GUEST_IMPORT_UNSUPPORTED_TYPE: 'Unsupported file type. Re-save as .xlsx or .csv.',\n    GUEST_IMPORT_FILE_MISSING: 'Attach a .csv or .xlsx file in the `file` field.',\n    GUEST_IMPORT_TOO_LARGE: 'Guest list files must be 5 MB or smaller.',\n    GUEST_IMPORT_UNREADABLE:\n      'We couldn’t read that file. Re-save it as .xlsx or .csv and try again.',\n    GUEST_IMPORT_NO_EMAILS: 'No email addresses were found in that file.',\n    GUEST_IMPORT_TOO_MANY: 'A guest list can have at most 5,000 email addresses.',\n    GUEST_IMPORT_NOT_FOUND: 'One or more guest imports could not be found.',\n\n    // Private event invites (viewer)\n    INVITE_NOT_FOUND: 'You don’t have an invite to this event.',\n    INVITE_DECLINED: 'Invite declined.',\n    INVITE_LINK_INVALID: 'This invite link is no longer valid.',\n    PRIVATE_NOT_INVITED: 'Only people on the host’s guest list can join this event.',\n    PRIVATE_SIGN_IN_REQUIRED: 'This is a private event. Sign in to continue.',\n\n    // Guest list (host)\n    GUESTS_ADDED: 'Guests added.',\n    GUEST_REMOVED: 'Guest removed.',\n    GUEST_NOT_FOUND: 'We couldn’t find that guest.',\n    GUEST_HAS_PAID_TICKET: 'This guest paid for a ticket. Confirm the refund to remove them.',\n    GUEST_EARNINGS_RELEASED:\n      'This guest’s ticket can’t be refunded here because the event’s earnings were already paid out. Contact support.',\n    GUEST_LAST_INVITE_ONLY:\n      'Invite-only events need at least one guest. Switch to “Anyone with the link” instead.',\n    GUEST_INVITE_ONLY_REQUIRES_GUESTS: 'Add at least one guest to make this event invite-only.',\n    GUEST_INVITE_ONLY_PRIVATE_ONLY: 'Only private events can be invite-only.',\n    GUEST_LIST_PRIVATE_ONLY: 'Only private events have a guest list.',\n    GUEST_INVITE_RESENT: 'Invite sent again.',\n    GUEST_RESEND_TOO_SOON: 'You can resend this invite once an hour.',\n    GUEST_RESEND_NOT_ALLOWED: 'Only guests who haven’t responded can be sent the invite again.',\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_HOST_NOT_STREAMING: 'The host hasn’t started streaming yet. Hang tight.',\n    PLAYBACK_HOST_PAUSED: 'The host paused the stream. It’ll pick up here as soon as they’re back.',\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  // 14 · Waitlist  (14-waitlist.md)\n  // ________________________________________________________________\n  WAITLIST: {\n    JOINED: 'You are in. See you when we go live.',\n    ALREADY_JOINED: 'You are already in. See you when we go live.',\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"]}