- Updated auth-context.tsx to use new exchange permissions (CREATE_EXCHANGE, VIEW_OWN_EXCHANGES, etc.) instead of old appointment permissions (BOOK_APPOINTMENT, etc.) - Updated exchange/page.tsx, trades/page.tsx, admin/trades/page.tsx to use correct permission constants - Updated profile/page.test.tsx mock permissions - Updated admin/availability/page.tsx to use constants.exchange instead of constants.booking - Added /api/exchange/slots endpoint to return available slots for a date, filtering out already booked slots - Fixed E2E tests: - exchange.spec.ts: Wait for button to be enabled before clicking - permissions.spec.ts: Use more specific heading selector - price-history.spec.ts: Expect /exchange redirect for regular users
1818 lines
52 KiB
TypeScript
1818 lines
52 KiB
TypeScript
/**
|
|
* This file was auto-generated by openapi-typescript.
|
|
* Do not make direct changes to the file.
|
|
*/
|
|
|
|
export interface paths {
|
|
"/api/auth/register": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Register
|
|
* @description Register a new user using an invite code.
|
|
*/
|
|
post: operations["register_api_auth_register_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/auth/login": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Login
|
|
* @description Authenticate a user and return their info with an auth cookie.
|
|
*/
|
|
post: operations["login_api_auth_login_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/auth/logout": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Logout
|
|
* @description Log out the current user by clearing their auth cookie.
|
|
*/
|
|
post: operations["logout_api_auth_logout_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/auth/me": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get Me
|
|
* @description Get the current authenticated user's info.
|
|
*/
|
|
get: operations["get_me_api_auth_me_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/audit/price-history": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get Price History
|
|
* @description Get the 20 most recent price history records.
|
|
*/
|
|
get: operations["get_price_history_api_audit_price_history_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/audit/price-history/fetch": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Fetch Price Now
|
|
* @description Manually trigger a price fetch from Bitfinex.
|
|
*/
|
|
post: operations["fetch_price_now_api_audit_price_history_fetch_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/profile": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get Profile
|
|
* @description Get the current user's profile (contact details and godfather).
|
|
*/
|
|
get: operations["get_profile_api_profile_get"];
|
|
/**
|
|
* Update Profile
|
|
* @description Update the current user's profile (contact details).
|
|
*/
|
|
put: operations["update_profile_api_profile_put"];
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/availability": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get Availability
|
|
* @description Get availability slots for a date range.
|
|
*/
|
|
get: operations["get_availability_api_admin_availability_get"];
|
|
/**
|
|
* Set Availability
|
|
* @description Set availability for a specific date. Replaces any existing availability.
|
|
*/
|
|
put: operations["set_availability_api_admin_availability_put"];
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/availability/copy": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Copy Availability
|
|
* @description Copy availability from one day to multiple target days.
|
|
*/
|
|
post: operations["copy_availability_api_admin_availability_copy_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/meta/constants": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get Constants
|
|
* @description Get shared constants for frontend/backend synchronization.
|
|
*/
|
|
get: operations["get_constants_api_meta_constants_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/invites/{identifier}/check": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Check Invite
|
|
* @description Check if an invite is valid and can be used for signup.
|
|
*/
|
|
get: operations["check_invite_api_invites__identifier__check_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/invites": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get My Invites
|
|
* @description Get all invites owned by the current user.
|
|
*/
|
|
get: operations["get_my_invites_api_invites_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/users": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* List Users For Admin
|
|
* @description List all users for admin dropdowns (invite creation, etc.).
|
|
*/
|
|
get: operations["list_users_for_admin_api_admin_users_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/invites": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* List All Invites
|
|
* @description List all invites with optional filtering and pagination.
|
|
*/
|
|
get: operations["list_all_invites_api_admin_invites_get"];
|
|
put?: never;
|
|
/**
|
|
* Create Invite
|
|
* @description Create a new invite for a specified godfather user.
|
|
*/
|
|
post: operations["create_invite_api_admin_invites_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/invites/{invite_id}/revoke": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Revoke Invite
|
|
* @description Revoke an invite. Only READY invites can be revoked.
|
|
*/
|
|
post: operations["revoke_invite_api_admin_invites__invite_id__revoke_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/exchange/price": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get Exchange Price
|
|
* @description Get the current BTC/EUR price for trading.
|
|
*
|
|
* Returns the latest price from the database. If no price exists or the price
|
|
* is stale, attempts to fetch a fresh price from Bitfinex.
|
|
*
|
|
* The response includes:
|
|
* - market_price: The raw price from the exchange
|
|
* - agreed_price: The price with admin premium applied
|
|
* - is_stale: Whether the price is older than 5 minutes
|
|
* - config: Trading configuration (min/max EUR, increment)
|
|
*/
|
|
get: operations["get_exchange_price_api_exchange_price_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/exchange/slots": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get Available Slots
|
|
* @description Get available booking slots for a specific date.
|
|
*
|
|
* Returns all slots that:
|
|
* - Fall within admin-defined availability windows
|
|
* - Are not already booked by another user
|
|
*/
|
|
get: operations["get_available_slots_api_exchange_slots_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/exchange": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Create Exchange
|
|
* @description Create a new exchange trade booking.
|
|
*
|
|
* Validates:
|
|
* - Slot is on a valid date and time boundary
|
|
* - Slot is within admin availability
|
|
* - Slot is not already booked
|
|
* - Price is not stale
|
|
* - EUR amount is within configured limits
|
|
*/
|
|
post: operations["create_exchange_api_exchange_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/trades": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get My Trades
|
|
* @description Get the current user's exchanges, sorted by date (newest first).
|
|
*/
|
|
get: operations["get_my_trades_api_trades_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/trades/{exchange_id}/cancel": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Cancel My Trade
|
|
* @description Cancel one of the current user's exchanges.
|
|
*/
|
|
post: operations["cancel_my_trade_api_trades__exchange_id__cancel_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/trades/upcoming": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get Upcoming Trades
|
|
* @description Get all upcoming booked trades, sorted by slot time ascending.
|
|
*/
|
|
get: operations["get_upcoming_trades_api_admin_trades_upcoming_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/trades/past": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
/**
|
|
* Get Past Trades
|
|
* @description Get past trades with optional filters.
|
|
*
|
|
* Filters:
|
|
* - status: Filter by exchange status
|
|
* - start_date, end_date: Filter by slot_start date range
|
|
* - user_search: Search by user email (partial match)
|
|
*/
|
|
get: operations["get_past_trades_api_admin_trades_past_get"];
|
|
put?: never;
|
|
post?: never;
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/trades/{exchange_id}/complete": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Complete Trade
|
|
* @description Mark a trade as completed. Only possible after slot time has passed.
|
|
*/
|
|
post: operations["complete_trade_api_admin_trades__exchange_id__complete_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/trades/{exchange_id}/no-show": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Mark No Show
|
|
* @description Mark a trade as no-show. Only possible after slot time has passed.
|
|
*/
|
|
post: operations["mark_no_show_api_admin_trades__exchange_id__no_show_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/api/admin/trades/{exchange_id}/cancel": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/**
|
|
* Admin Cancel Trade
|
|
* @description Cancel any trade (admin only).
|
|
*/
|
|
post: operations["admin_cancel_trade_api_admin_trades__exchange_id__cancel_post"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
}
|
|
export type webhooks = Record<string, never>;
|
|
export interface components {
|
|
schemas: {
|
|
/**
|
|
* AdminExchangeResponse
|
|
* @description Response model for admin exchange view (includes user contact).
|
|
*/
|
|
AdminExchangeResponse: {
|
|
/** Id */
|
|
id: number;
|
|
/** User Id */
|
|
user_id: number;
|
|
/** User Email */
|
|
user_email: string;
|
|
user_contact: components["schemas"]["ExchangeUserContact"];
|
|
/**
|
|
* Slot Start
|
|
* Format: date-time
|
|
*/
|
|
slot_start: string;
|
|
/**
|
|
* Slot End
|
|
* Format: date-time
|
|
*/
|
|
slot_end: string;
|
|
/** Direction */
|
|
direction: string;
|
|
/** Eur Amount */
|
|
eur_amount: number;
|
|
/** Sats Amount */
|
|
sats_amount: number;
|
|
/** Market Price Eur */
|
|
market_price_eur: number;
|
|
/** Agreed Price Eur */
|
|
agreed_price_eur: number;
|
|
/** Premium Percentage */
|
|
premium_percentage: number;
|
|
/** Status */
|
|
status: string;
|
|
/**
|
|
* Created At
|
|
* Format: date-time
|
|
*/
|
|
created_at: string;
|
|
/** Cancelled At */
|
|
cancelled_at: string | null;
|
|
/** Completed At */
|
|
completed_at: string | null;
|
|
};
|
|
/**
|
|
* AdminUserResponse
|
|
* @description Minimal user info for admin dropdowns.
|
|
*/
|
|
AdminUserResponse: {
|
|
/** Id */
|
|
id: number;
|
|
/** Email */
|
|
email: string;
|
|
};
|
|
/**
|
|
* AvailabilityDay
|
|
* @description Availability for a single day.
|
|
*/
|
|
AvailabilityDay: {
|
|
/**
|
|
* Date
|
|
* Format: date
|
|
*/
|
|
date: string;
|
|
/** Slots */
|
|
slots: components["schemas"]["TimeSlot"][];
|
|
};
|
|
/**
|
|
* AvailabilityResponse
|
|
* @description Response model for availability query.
|
|
*/
|
|
AvailabilityResponse: {
|
|
/** Days */
|
|
days: components["schemas"]["AvailabilityDay"][];
|
|
};
|
|
/**
|
|
* AvailableSlotsResponse
|
|
* @description Response containing available slots for a date.
|
|
*/
|
|
AvailableSlotsResponse: {
|
|
/**
|
|
* Date
|
|
* Format: date
|
|
*/
|
|
date: string;
|
|
/** Slots */
|
|
slots: components["schemas"]["BookableSlot"][];
|
|
};
|
|
/**
|
|
* BookableSlot
|
|
* @description A single bookable time slot.
|
|
*/
|
|
BookableSlot: {
|
|
/**
|
|
* Start Time
|
|
* Format: date-time
|
|
*/
|
|
start_time: string;
|
|
/**
|
|
* End Time
|
|
* Format: date-time
|
|
*/
|
|
end_time: string;
|
|
};
|
|
/**
|
|
* ConstantsResponse
|
|
* @description Response model for shared constants.
|
|
*
|
|
* Note: Using actual enum types ensures OpenAPI schema includes enum values,
|
|
* allowing frontend type generation to produce matching TypeScript enums.
|
|
*/
|
|
ConstantsResponse: {
|
|
/** Permissions */
|
|
permissions: components["schemas"]["Permission"][];
|
|
/** Roles */
|
|
roles: string[];
|
|
/** Invite Statuses */
|
|
invite_statuses: components["schemas"]["InviteStatus"][];
|
|
};
|
|
/**
|
|
* CopyAvailabilityRequest
|
|
* @description Request to copy availability from one day to others.
|
|
*/
|
|
CopyAvailabilityRequest: {
|
|
/**
|
|
* Source Date
|
|
* Format: date
|
|
*/
|
|
source_date: string;
|
|
/** Target Dates */
|
|
target_dates: string[];
|
|
};
|
|
/**
|
|
* ExchangeConfigResponse
|
|
* @description Exchange configuration for the frontend.
|
|
*/
|
|
ExchangeConfigResponse: {
|
|
/** Eur Min */
|
|
eur_min: number;
|
|
/** Eur Max */
|
|
eur_max: number;
|
|
/** Eur Increment */
|
|
eur_increment: number;
|
|
/** Premium Percentage */
|
|
premium_percentage: number;
|
|
};
|
|
/**
|
|
* ExchangePriceResponse
|
|
* @description Combined price and configuration response.
|
|
*/
|
|
ExchangePriceResponse: {
|
|
price: components["schemas"]["PriceResponse"] | null;
|
|
config: components["schemas"]["ExchangeConfigResponse"];
|
|
/** Error */
|
|
error?: string | null;
|
|
};
|
|
/**
|
|
* ExchangeRequest
|
|
* @description Request to create an exchange trade.
|
|
*/
|
|
ExchangeRequest: {
|
|
/**
|
|
* Slot Start
|
|
* Format: date-time
|
|
*/
|
|
slot_start: string;
|
|
/** Direction */
|
|
direction: string;
|
|
/** Eur Amount */
|
|
eur_amount: number;
|
|
};
|
|
/**
|
|
* ExchangeResponse
|
|
* @description Response model for an exchange trade.
|
|
*/
|
|
ExchangeResponse: {
|
|
/** Id */
|
|
id: number;
|
|
/** User Id */
|
|
user_id: number;
|
|
/** User Email */
|
|
user_email: string;
|
|
/**
|
|
* Slot Start
|
|
* Format: date-time
|
|
*/
|
|
slot_start: string;
|
|
/**
|
|
* Slot End
|
|
* Format: date-time
|
|
*/
|
|
slot_end: string;
|
|
/** Direction */
|
|
direction: string;
|
|
/** Eur Amount */
|
|
eur_amount: number;
|
|
/** Sats Amount */
|
|
sats_amount: number;
|
|
/** Market Price Eur */
|
|
market_price_eur: number;
|
|
/** Agreed Price Eur */
|
|
agreed_price_eur: number;
|
|
/** Premium Percentage */
|
|
premium_percentage: number;
|
|
/** Status */
|
|
status: string;
|
|
/**
|
|
* Created At
|
|
* Format: date-time
|
|
*/
|
|
created_at: string;
|
|
/** Cancelled At */
|
|
cancelled_at: string | null;
|
|
/** Completed At */
|
|
completed_at: string | null;
|
|
};
|
|
/**
|
|
* ExchangeUserContact
|
|
* @description User contact info for admin view.
|
|
*/
|
|
ExchangeUserContact: {
|
|
/** Email */
|
|
email: string;
|
|
/** Contact Email */
|
|
contact_email: string | null;
|
|
/** Telegram */
|
|
telegram: string | null;
|
|
/** Signal */
|
|
signal: string | null;
|
|
/** Nostr Npub */
|
|
nostr_npub: string | null;
|
|
};
|
|
/** HTTPValidationError */
|
|
HTTPValidationError: {
|
|
/** Detail */
|
|
detail?: components["schemas"]["ValidationError"][];
|
|
};
|
|
/**
|
|
* InviteCheckResponse
|
|
* @description Response for invite check endpoint.
|
|
*/
|
|
InviteCheckResponse: {
|
|
/** Valid */
|
|
valid: boolean;
|
|
/** Status */
|
|
status?: string | null;
|
|
/** Error */
|
|
error?: string | null;
|
|
};
|
|
/**
|
|
* InviteCreate
|
|
* @description Request model for creating an invite.
|
|
*/
|
|
InviteCreate: {
|
|
/** Godfather Id */
|
|
godfather_id: number;
|
|
};
|
|
/**
|
|
* InviteResponse
|
|
* @description Response model for invite data (admin view).
|
|
*/
|
|
InviteResponse: {
|
|
/** Id */
|
|
id: number;
|
|
/** Identifier */
|
|
identifier: string;
|
|
/** Godfather Id */
|
|
godfather_id: number;
|
|
/** Godfather Email */
|
|
godfather_email: string;
|
|
/** Status */
|
|
status: string;
|
|
/** Used By Id */
|
|
used_by_id: number | null;
|
|
/** Used By Email */
|
|
used_by_email: string | null;
|
|
/**
|
|
* Created At
|
|
* Format: date-time
|
|
*/
|
|
created_at: string;
|
|
/** Spent At */
|
|
spent_at: string | null;
|
|
/** Revoked At */
|
|
revoked_at: string | null;
|
|
};
|
|
/**
|
|
* InviteStatus
|
|
* @description Status of an invite.
|
|
* @enum {string}
|
|
*/
|
|
InviteStatus: "ready" | "spent" | "revoked";
|
|
/** PaginatedResponse[InviteResponse] */
|
|
PaginatedResponse_InviteResponse_: {
|
|
/** Records */
|
|
records: components["schemas"]["InviteResponse"][];
|
|
/** Total */
|
|
total: number;
|
|
/** Page */
|
|
page: number;
|
|
/** Per Page */
|
|
per_page: number;
|
|
/** Total Pages */
|
|
total_pages: number;
|
|
};
|
|
/**
|
|
* Permission
|
|
* @description All available permissions in the system.
|
|
* @enum {string}
|
|
*/
|
|
Permission: "view_audit" | "fetch_price" | "manage_own_profile" | "manage_invites" | "view_own_invites" | "create_exchange" | "view_own_exchanges" | "cancel_own_exchange" | "manage_availability" | "view_all_exchanges" | "cancel_any_exchange" | "complete_exchange";
|
|
/**
|
|
* PriceHistoryResponse
|
|
* @description Response model for a price history record.
|
|
*/
|
|
PriceHistoryResponse: {
|
|
/** Id */
|
|
id: number;
|
|
/** Source */
|
|
source: string;
|
|
/** Pair */
|
|
pair: string;
|
|
/** Price */
|
|
price: number;
|
|
/**
|
|
* Timestamp
|
|
* Format: date-time
|
|
*/
|
|
timestamp: string;
|
|
/**
|
|
* Created At
|
|
* Format: date-time
|
|
*/
|
|
created_at: string;
|
|
};
|
|
/**
|
|
* PriceResponse
|
|
* @description Current BTC/EUR price with premium applied.
|
|
*/
|
|
PriceResponse: {
|
|
/** Market Price */
|
|
market_price: number;
|
|
/** Agreed Price */
|
|
agreed_price: number;
|
|
/** Premium Percentage */
|
|
premium_percentage: number;
|
|
/**
|
|
* Timestamp
|
|
* Format: date-time
|
|
*/
|
|
timestamp: string;
|
|
/** Is Stale */
|
|
is_stale: boolean;
|
|
};
|
|
/**
|
|
* ProfileResponse
|
|
* @description Response model for profile data.
|
|
*/
|
|
ProfileResponse: {
|
|
/** Contact Email */
|
|
contact_email: string | null;
|
|
/** Telegram */
|
|
telegram: string | null;
|
|
/** Signal */
|
|
signal: string | null;
|
|
/** Nostr Npub */
|
|
nostr_npub: string | null;
|
|
/** Godfather Email */
|
|
godfather_email?: string | null;
|
|
};
|
|
/**
|
|
* ProfileUpdate
|
|
* @description Request model for updating profile.
|
|
*/
|
|
ProfileUpdate: {
|
|
/** Contact Email */
|
|
contact_email?: string | null;
|
|
/** Telegram */
|
|
telegram?: string | null;
|
|
/** Signal */
|
|
signal?: string | null;
|
|
/** Nostr Npub */
|
|
nostr_npub?: string | null;
|
|
};
|
|
/**
|
|
* RegisterWithInvite
|
|
* @description Request model for registration with invite.
|
|
*/
|
|
RegisterWithInvite: {
|
|
/**
|
|
* Email
|
|
* Format: email
|
|
*/
|
|
email: string;
|
|
/** Password */
|
|
password: string;
|
|
/** Invite Identifier */
|
|
invite_identifier: string;
|
|
};
|
|
/**
|
|
* SetAvailabilityRequest
|
|
* @description Request to set availability for a specific date.
|
|
*/
|
|
SetAvailabilityRequest: {
|
|
/**
|
|
* Date
|
|
* Format: date
|
|
*/
|
|
date: string;
|
|
/** Slots */
|
|
slots: components["schemas"]["TimeSlot"][];
|
|
};
|
|
/**
|
|
* TimeSlot
|
|
* @description A single time slot (start and end time).
|
|
*/
|
|
TimeSlot: {
|
|
/**
|
|
* Start Time
|
|
* Format: time
|
|
*/
|
|
start_time: string;
|
|
/**
|
|
* End Time
|
|
* Format: time
|
|
*/
|
|
end_time: string;
|
|
};
|
|
/**
|
|
* UserCredentials
|
|
* @description Base model for user email/password.
|
|
*/
|
|
UserCredentials: {
|
|
/**
|
|
* Email
|
|
* Format: email
|
|
*/
|
|
email: string;
|
|
/** Password */
|
|
password: string;
|
|
};
|
|
/**
|
|
* UserInviteResponse
|
|
* @description Response model for a user's invite (simpler than admin view).
|
|
*/
|
|
UserInviteResponse: {
|
|
/** Id */
|
|
id: number;
|
|
/** Identifier */
|
|
identifier: string;
|
|
/** Status */
|
|
status: string;
|
|
/** Used By Email */
|
|
used_by_email: string | null;
|
|
/**
|
|
* Created At
|
|
* Format: date-time
|
|
*/
|
|
created_at: string;
|
|
/** Spent At */
|
|
spent_at: string | null;
|
|
};
|
|
/**
|
|
* UserResponse
|
|
* @description Response model for authenticated user info.
|
|
*/
|
|
UserResponse: {
|
|
/** Id */
|
|
id: number;
|
|
/** Email */
|
|
email: string;
|
|
/** Roles */
|
|
roles: string[];
|
|
/** Permissions */
|
|
permissions: string[];
|
|
};
|
|
/** ValidationError */
|
|
ValidationError: {
|
|
/** Location */
|
|
loc: (string | number)[];
|
|
/** Message */
|
|
msg: string;
|
|
/** Error Type */
|
|
type: string;
|
|
};
|
|
};
|
|
responses: never;
|
|
parameters: never;
|
|
requestBodies: never;
|
|
headers: never;
|
|
pathItems: never;
|
|
}
|
|
export type $defs = Record<string, never>;
|
|
export interface operations {
|
|
register_api_auth_register_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody: {
|
|
content: {
|
|
"application/json": components["schemas"]["RegisterWithInvite"];
|
|
};
|
|
};
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["UserResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
login_api_auth_login_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody: {
|
|
content: {
|
|
"application/json": components["schemas"]["UserCredentials"];
|
|
};
|
|
};
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["UserResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
logout_api_auth_logout_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": {
|
|
[key: string]: boolean;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_me_api_auth_me_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["UserResponse"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_price_history_api_audit_price_history_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["PriceHistoryResponse"][];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
fetch_price_now_api_audit_price_history_fetch_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["PriceHistoryResponse"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_profile_api_profile_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["ProfileResponse"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
update_profile_api_profile_put: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody: {
|
|
content: {
|
|
"application/json": components["schemas"]["ProfileUpdate"];
|
|
};
|
|
};
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["ProfileResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_availability_api_admin_availability_get: {
|
|
parameters: {
|
|
query: {
|
|
/** @description Start date (inclusive) */
|
|
from: string;
|
|
/** @description End date (inclusive) */
|
|
to: string;
|
|
};
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AvailabilityResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
set_availability_api_admin_availability_put: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody: {
|
|
content: {
|
|
"application/json": components["schemas"]["SetAvailabilityRequest"];
|
|
};
|
|
};
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AvailabilityDay"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
copy_availability_api_admin_availability_copy_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody: {
|
|
content: {
|
|
"application/json": components["schemas"]["CopyAvailabilityRequest"];
|
|
};
|
|
};
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AvailabilityResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_constants_api_meta_constants_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["ConstantsResponse"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
check_invite_api_invites__identifier__check_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path: {
|
|
identifier: string;
|
|
};
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["InviteCheckResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_my_invites_api_invites_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["UserInviteResponse"][];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
list_users_for_admin_api_admin_users_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AdminUserResponse"][];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
list_all_invites_api_admin_invites_get: {
|
|
parameters: {
|
|
query?: {
|
|
page?: number;
|
|
per_page?: number;
|
|
/** @description Filter by status: ready, spent, revoked */
|
|
status?: string | null;
|
|
/** @description Filter by godfather user ID */
|
|
godfather_id?: number | null;
|
|
};
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["PaginatedResponse_InviteResponse_"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
create_invite_api_admin_invites_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody: {
|
|
content: {
|
|
"application/json": components["schemas"]["InviteCreate"];
|
|
};
|
|
};
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["InviteResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
revoke_invite_api_admin_invites__invite_id__revoke_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path: {
|
|
invite_id: number;
|
|
};
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["InviteResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_exchange_price_api_exchange_price_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["ExchangePriceResponse"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_available_slots_api_exchange_slots_get: {
|
|
parameters: {
|
|
query: {
|
|
date: string;
|
|
};
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AvailableSlotsResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
create_exchange_api_exchange_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody: {
|
|
content: {
|
|
"application/json": components["schemas"]["ExchangeRequest"];
|
|
};
|
|
};
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["ExchangeResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_my_trades_api_trades_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["ExchangeResponse"][];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
cancel_my_trade_api_trades__exchange_id__cancel_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path: {
|
|
exchange_id: number;
|
|
};
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["ExchangeResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_upcoming_trades_api_admin_trades_upcoming_get: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AdminExchangeResponse"][];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
get_past_trades_api_admin_trades_past_get: {
|
|
parameters: {
|
|
query?: {
|
|
status?: string | null;
|
|
start_date?: string | null;
|
|
end_date?: string | null;
|
|
user_search?: string | null;
|
|
};
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AdminExchangeResponse"][];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
complete_trade_api_admin_trades__exchange_id__complete_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path: {
|
|
exchange_id: number;
|
|
};
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AdminExchangeResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
mark_no_show_api_admin_trades__exchange_id__no_show_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path: {
|
|
exchange_id: number;
|
|
};
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AdminExchangeResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
admin_cancel_trade_api_admin_trades__exchange_id__cancel_post: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path: {
|
|
exchange_id: number;
|
|
};
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description Successful Response */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["AdminExchangeResponse"];
|
|
};
|
|
};
|
|
/** @description Validation Error */
|
|
422: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["HTTPValidationError"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|