diff --git a/src/models/common/index.ts b/src/models/common/index.ts index 27fef92e..2520d445 100644 --- a/src/models/common/index.ts +++ b/src/models/common/index.ts @@ -18,3 +18,11 @@ export interface IssuedCurrencyAmount extends IssuedCurrency { } export type Amount = IssuedCurrencyAmount | string + +interface PathStep { + account?: string + currency?: string + issuer?: string +} + +export type Path = PathStep[] diff --git a/src/models/methods/bookOffers.ts b/src/models/methods/bookOffers.ts new file mode 100644 index 00000000..1222ebf3 --- /dev/null +++ b/src/models/methods/bookOffers.ts @@ -0,0 +1,34 @@ +import { Amount, LedgerIndex } from '../common'; +import { Offer } from '../ledger'; +import { BaseRequest, BaseResponse } from './baseMethod'; + +interface TakerAmount { + currency: string + issuer?: string +} + +export interface BookOffersRequest extends BaseRequest { + command: "book_offers" + ledger_hash?: string + ledger_index?: LedgerIndex + limit?: number + taker?: string + taker_gets: TakerAmount + taker_pays: TakerAmount +} + +interface BookOffer extends Offer { + owner_funds?: string + taker_gets_funded?: Amount + taker_pays_funded?: Amount + quality?: string +} + +export interface BookOffersResponse extends BaseResponse { + result: { + ledger_current_index?: number + ledger_index?: number + ledger_hash?: string + offers: BookOffer[] + } +} diff --git a/src/models/methods/depositAuthorized.ts b/src/models/methods/depositAuthorized.ts new file mode 100644 index 00000000..686c3d39 --- /dev/null +++ b/src/models/methods/depositAuthorized.ts @@ -0,0 +1,22 @@ +import { LedgerIndex } from '../common'; +import { BaseRequest, BaseResponse } from './baseMethod'; + +export interface DepositAuthorizedRequest extends BaseRequest { + command: "deposit_authorized" + source_account: string + destination_account: string + ledger_hash?: string + ledger_index?: LedgerIndex +} + +export interface DepositAuthorizedResponse extends BaseResponse { + result: { + deposit_authorized: boolean + destination_account: string + ledger_hash?: string + ledger_index?: number + ledger_current_index?: number + source_account: string + validated?: boolean + } +} diff --git a/src/models/methods/index.ts b/src/models/methods/index.ts index 4914713d..94a01b99 100644 --- a/src/models/methods/index.ts +++ b/src/models/methods/index.ts @@ -5,10 +5,15 @@ import { AccountLinesRequest, AccountLinesResponse } from "./accountLines"; import { AccountObjectsRequest, AccountObjectsResponse } from "./accountObjects"; import { AccountOffersRequest, AccountOffersResponse } from "./accountOffers"; import { AccountTxRequest, AccountTxResponse } from "./accountTx"; +import { BookOffersRequest, BookOffersResponse } from "./bookOffers"; +import { DepositAuthorizedRequest, DepositAuthorizedResponse } from "./depositAuthorized"; import { GatewayBalancesRequest, GatewayBalancesResponse } from "./gatewayBalances"; import { NoRippleCheckRequest, NoRippleCheckResponse } from "./norippleCheck"; +import { PathFindRequest, PathFindResponse } from "./pathFind"; +import { RipplePathFindRequest, RipplePathFindResponse } from "./ripplePathFind"; -type Request = AccountChannelsRequest +type Request = // account methods + AccountChannelsRequest | AccountCurrenciesRequest | AccountInfoRequest | AccountLinesRequest @@ -17,8 +22,14 @@ type Request = AccountChannelsRequest | AccountTxRequest | GatewayBalancesRequest | NoRippleCheckRequest + // path and order book methods + | BookOffersRequest + | DepositAuthorizedRequest + | PathFindRequest + | RipplePathFindRequest -type Response = AccountChannelsResponse +type Response = // account methods + AccountChannelsResponse | AccountCurrenciesResponse | AccountInfoResponse | AccountLinesResponse @@ -27,10 +38,16 @@ type Response = AccountChannelsResponse | AccountTxResponse | GatewayBalancesResponse | NoRippleCheckResponse + // path and order book methods + | BookOffersResponse + | DepositAuthorizedResponse + | PathFindResponse + | RipplePathFindResponse export { Request, Response, + // account methods AccountChannelsRequest, AccountChannelsResponse, AccountCurrenciesRequest, @@ -48,5 +65,14 @@ export { GatewayBalancesRequest, GatewayBalancesResponse, NoRippleCheckRequest, - NoRippleCheckResponse + NoRippleCheckResponse, + // path and order book methods + BookOffersRequest, + BookOffersResponse, + DepositAuthorizedRequest, + DepositAuthorizedResponse, + PathFindRequest, + PathFindResponse, + RipplePathFindRequest, + RipplePathFindResponse } \ No newline at end of file diff --git a/src/models/methods/pathFind.ts b/src/models/methods/pathFind.ts new file mode 100644 index 00000000..edf030cc --- /dev/null +++ b/src/models/methods/pathFind.ts @@ -0,0 +1,48 @@ +import { Amount, Path } from '../common' +import { BaseRequest, BaseResponse } from './baseMethod'; + +interface BasePathFindRequest extends BaseRequest { + command: "path_find" + subcommand: string +} + +interface PathFindCreateRequest extends BasePathFindRequest { + subcommand: "create" + source_account: string + destination_account: string + destination_amount: Amount + send_max?: Amount + paths?: Path[] +} + +interface PathFindCloseRequest extends BasePathFindRequest { + subcommand: "close" +} + +interface PathFindStatusRequest extends BasePathFindRequest { + subcommand: "status" +} + +export type PathFindRequest = PathFindCreateRequest | PathFindCloseRequest | PathFindStatusRequest + +interface PathOption { + paths_computed: Path[] + source_amount: Amount +} + +export interface PathFindResponse extends BaseResponse { + result: { + alternatives: PathOption[] + destination_account: string + destination_amount: Amount + source_account: string + full_reply: boolean + id?: number | string + closed?: true + status?: true + } +} + +// TODO: figure out where to put the path_find asynchronous follow-ups +// https://xrpl.org/path_find.html#asynchronous-follow-ups +// probably with the subscribe response objects diff --git a/src/models/methods/ripplePathFind.ts b/src/models/methods/ripplePathFind.ts new file mode 100644 index 00000000..7e1721eb --- /dev/null +++ b/src/models/methods/ripplePathFind.ts @@ -0,0 +1,31 @@ +import { Amount, LedgerIndex, Path } from "../common"; +import { BaseRequest, BaseResponse } from "./baseMethod"; + +interface SourceCurrencyAmount { + currency: string + issuer?: string + } + +export interface RipplePathFindRequest extends BaseRequest { + command: "ripple_path_find" + source_account: string + destination_account: string + destination_amount: Amount + send_max?: Amount + source_currencies?: SourceCurrencyAmount + ledger_hash?: string + ledger_index?: LedgerIndex +} + +interface PathOption { + paths_computed: Path[] + source_amount: Amount +} + +export interface RipplePathFindResponse extends BaseResponse { + result: { + alternatives: PathOption[] + destination_account: string + destination_currencies: string[] + } +} \ No newline at end of file