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