diff --git a/packages/xrpl/src/client/index.ts b/packages/xrpl/src/client/index.ts index 420d60058f..dd7b75556a 100644 --- a/packages/xrpl/src/client/index.ts +++ b/packages/xrpl/src/client/index.ts @@ -352,6 +352,17 @@ class Client extends EventEmitter { * console.log(response) * ``` */ + // public async request< + // R extends Request, + // V extends APIVersion = typeof DEFAULT_API_VERSION, + // >(req: R): Promise> + + // public async request< + // R extends Request, + // V extends APIVersion = typeof DEFAULT_API_VERSION, + // T = RequestResponseMap, + // >(req: R): Promise + public async request< R extends Request, V extends APIVersion = typeof DEFAULT_API_VERSION, diff --git a/packages/xrpl/src/models/ledger/LedgerEntry.ts b/packages/xrpl/src/models/ledger/LedgerEntry.ts index abaa50ad07..f98d8eafdd 100644 --- a/packages/xrpl/src/models/ledger/LedgerEntry.ts +++ b/packages/xrpl/src/models/ledger/LedgerEntry.ts @@ -6,6 +6,7 @@ import Check from './Check' import Credential from './Credential' import Delegate from './Delegate' import DepositPreauth from './DepositPreauth' +import DID from './DID' import DirectoryNode from './DirectoryNode' import Escrow from './Escrow' import FeeSettings from './FeeSettings' @@ -33,6 +34,7 @@ type LedgerEntry = | Credential | Delegate | DepositPreauth + | DID | DirectoryNode | Escrow | FeeSettings diff --git a/packages/xrpl/src/models/methods/index.ts b/packages/xrpl/src/models/methods/index.ts index 96e01dc992..0121278e09 100644 --- a/packages/xrpl/src/models/methods/index.ts +++ b/packages/xrpl/src/models/methods/index.ts @@ -2,6 +2,27 @@ /* eslint-disable max-lines -- There is a lot to export */ /* eslint-disable prettier/prettier -- Required here to keep formatting in line */ import type { APIVersion, DEFAULT_API_VERSION } from '../common' +import type { + AccountRoot, + AMM, + Bridge, + Check, + Credential, + Delegate, + DepositPreauth, + DID, + DirectoryNode, + Escrow, + MPToken, + MPTokenIssuance, + NFTokenPage, + Offer, + PayChannel, + RippleState, + Ticket, + XChainOwnedClaimID, + XChainOwnedCreateAccountClaimID, +} from '../ledger' import { AccountChannelsRequest, @@ -115,6 +136,26 @@ import { LedgerEntryBinaryResponse, LedgerEntryJsonResponse, LedgerEntryResponse, + LedgerEntryAccountRootRequest, + LedgerEntryAMMRequest, + LedgerEntryBridgeAccountRequest, + LedgerEntryBridgeRequest, + LedgerEntryCheckRequest, + LedgerEntryCredentialRequest, + LedgerEntryDelegateRequest, + LedgerEntryDepositPreauthRequest, + LedgerEntryDIDRequest, + LedgerEntryDirectoryRequest, + LedgerEntryEscrowRequest, + LedgerEntryMPTokenIssuanceRequest, + LedgerEntryMPTokenRequest, + LedgerEntryNFTokenPageRequest, + LedgerEntryOfferRequest, + LedgerEntryPayChannelRequest, + LedgerEntryRippleStateRequest, + LedgerEntryTicketRequest, + LedgerEntryXChainOwnedClaimIDRequest, + LedgerEntryXChainOwnedCreateAccountClaimIDRequest, } from './ledgerEntry' import { ManifestRequest, ManifestResponse } from './manifest' import { NFTBuyOffersRequest, NFTBuyOffersResponse } from './nftBuyOffers' @@ -198,6 +239,12 @@ import { UnsubscribeResponse, } from './unsubscribe' import { VaultInfoRequest, VaultInfoResponse } from './vaultInfo' + +type LedgerEntryLookupResponse = + T extends LedgerEntryJsonRequest + ? LedgerEntryJsonResponse + : LedgerEntryResponse + /** * @category Requests */ @@ -218,6 +265,28 @@ type Request = | LedgerClosedRequest | LedgerCurrentRequest | LedgerDataRequest + | LedgerEntryBinaryRequest + | LedgerEntryJsonRequest + | LedgerEntryAccountRootRequest + | LedgerEntryAMMRequest + | LedgerEntryBridgeAccountRequest + | LedgerEntryBridgeRequest + | LedgerEntryCheckRequest + | LedgerEntryCredentialRequest + | LedgerEntryDelegateRequest + | LedgerEntryDepositPreauthRequest + | LedgerEntryDIDRequest + | LedgerEntryDirectoryRequest + | LedgerEntryEscrowRequest + | LedgerEntryMPTokenIssuanceRequest + | LedgerEntryMPTokenRequest + | LedgerEntryNFTokenPageRequest + | LedgerEntryOfferRequest + | LedgerEntryPayChannelRequest + | LedgerEntryRippleStateRequest + | LedgerEntryTicketRequest + | LedgerEntryXChainOwnedClaimIDRequest + | LedgerEntryXChainOwnedCreateAccountClaimIDRequest | LedgerEntryRequest // transaction methods | SimulateRequest @@ -421,6 +490,46 @@ export type RequestResponseMap< ? LedgerDataResponse : T extends LedgerEntryBinaryRequest ? LedgerEntryBinaryResponse + : T extends LedgerEntryAccountRootRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryAMMRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryBridgeAccountRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryBridgeRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryCheckRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryCredentialRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryDelegateRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryDepositPreauthRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryDIDRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryDirectoryRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryEscrowRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryMPTokenIssuanceRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryMPTokenRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryNFTokenPageRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryOfferRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryPayChannelRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryRippleStateRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryTicketRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryXChainOwnedClaimIDRequest + ? LedgerEntryLookupResponse + : T extends LedgerEntryXChainOwnedCreateAccountClaimIDRequest + ? LedgerEntryLookupResponse : T extends LedgerEntryJsonRequest ? LedgerEntryJsonResponse : T extends LedgerEntryRequest @@ -582,6 +691,26 @@ export { LedgerEntryBinaryResponse, LedgerEntryJsonResponse, LedgerEntryResponse, + LedgerEntryAccountRootRequest, + LedgerEntryAMMRequest, + LedgerEntryBridgeRequest, + LedgerEntryBridgeAccountRequest, + LedgerEntryCheckRequest, + LedgerEntryCredentialRequest, + LedgerEntryDelegateRequest, + LedgerEntryDepositPreauthRequest, + LedgerEntryDIDRequest, + LedgerEntryDirectoryRequest, + LedgerEntryEscrowRequest, + LedgerEntryMPTokenIssuanceRequest, + LedgerEntryMPTokenRequest, + LedgerEntryNFTokenPageRequest, + LedgerEntryOfferRequest, + LedgerEntryPayChannelRequest, + LedgerEntryRippleStateRequest, + LedgerEntryTicketRequest, + LedgerEntryXChainOwnedClaimIDRequest, + LedgerEntryXChainOwnedCreateAccountClaimIDRequest, // transaction methods with types SimulateRequest, SimulateResponse, diff --git a/packages/xrpl/src/models/methods/ledgerEntry.ts b/packages/xrpl/src/models/methods/ledgerEntry.ts index de4a6d579f..124fab8e8b 100644 --- a/packages/xrpl/src/models/methods/ledgerEntry.ts +++ b/packages/xrpl/src/models/methods/ledgerEntry.ts @@ -230,6 +230,88 @@ export interface LedgerEntryRequest extends BaseRequest, LookupByLedgerRequest { } } +export interface LedgerEntryAccountRootRequest extends LedgerEntryRequest { + account_root: Required['account_root'] +} + +export interface LedgerEntryAMMRequest extends LedgerEntryRequest { + amm: Required['amm'] +} + +export interface LedgerEntryBridgeAccountRequest extends LedgerEntryRequest { + bridge_account: Required['bridge_account'] +} + +export interface LedgerEntryBridgeRequest extends LedgerEntryRequest { + bridge: Required['bridge'] +} + +export interface LedgerEntryCheckRequest extends LedgerEntryRequest { + check: Required['check'] +} + +export interface LedgerEntryCredentialRequest extends LedgerEntryRequest { + credential: Required['credential'] +} + +export interface LedgerEntryDelegateRequest extends LedgerEntryRequest { + delegate: Required['delegate'] +} + +export interface LedgerEntryDepositPreauthRequest extends LedgerEntryRequest { + deposit_preauth: Required['deposit_preauth'] +} + +export interface LedgerEntryDIDRequest extends LedgerEntryRequest { + did: Required['did'] +} + +export interface LedgerEntryDirectoryRequest extends LedgerEntryRequest { + directory: Required['directory'] +} + +export interface LedgerEntryEscrowRequest extends LedgerEntryRequest { + escrow: Required['escrow'] +} + +export interface LedgerEntryMPTokenIssuanceRequest extends LedgerEntryRequest { + mpt_issuance: Required['mpt_issuance'] +} + +export interface LedgerEntryMPTokenRequest extends LedgerEntryRequest { + mptoken: Required['mptoken'] +} + +export interface LedgerEntryNFTokenPageRequest extends LedgerEntryRequest { + nft_page: Required['nft_page'] +} + +export interface LedgerEntryOfferRequest extends LedgerEntryRequest { + offer: Required['offer'] +} + +export interface LedgerEntryPayChannelRequest extends LedgerEntryRequest { + payment_channel: Required['payment_channel'] +} + +export interface LedgerEntryRippleStateRequest extends LedgerEntryRequest { + ripple_state: Required['ripple_state'] +} + +export interface LedgerEntryTicketRequest extends LedgerEntryRequest { + ticket: Required['ticket'] +} + +// eslint-disable-next-line max-len -- Disable for interface declaration. +export interface LedgerEntryXChainOwnedClaimIDRequest extends LedgerEntryRequest { + xchain_owned_claim_id: Required['xchain_owned_claim_id'] +} + +// eslint-disable-next-line max-len -- Disable for interface declaration. +export interface LedgerEntryXChainOwnedCreateAccountClaimIDRequest extends LedgerEntryRequest { + xchain_owned_create_account_claim_id: Required['xchain_owned_create_account_claim_id'] +} + export type LedgerEntryBinaryRequest = LedgerEntryRequest & { binary: true } diff --git a/packages/xrpl/test/integration/requests/ledgerEntry.test.ts b/packages/xrpl/test/integration/requests/ledgerEntry.test.ts index 82d2366f66..4f3cbc63c6 100644 --- a/packages/xrpl/test/integration/requests/ledgerEntry.test.ts +++ b/packages/xrpl/test/integration/requests/ledgerEntry.test.ts @@ -68,6 +68,9 @@ describe('ledger_entry', function () { }) assert.isDefined(ledgerEntryResponse.result.node) + assert.isDefined(ledgerEntryResponse.result.node.OwnerCount) + // @ts-expect-error - Owner is not present in the AccountRoot response + assert.isUndefined(ledgerEntryResponse.result.node.Owner) // @ts-expect-error - node_binary is not present in the response assert.isUndefined(ledgerEntryResponse.result.node_binary) }, @@ -86,6 +89,9 @@ describe('ledger_entry', function () { }) assert.isDefined(ledgerEntryResponse.result.node) + assert.isDefined(ledgerEntryResponse.result.node.OwnerCount) + // @ts-expect-error - Owner is not present in the AccountRoot response + assert.isUndefined(ledgerEntryResponse.result.node.Owner) // @ts-expect-error - node_binary is not present in the response assert.isUndefined(ledgerEntryResponse.result.node_binary) }, diff --git a/packages/xrpl/test/integration/transactions/clawback.test.ts b/packages/xrpl/test/integration/transactions/clawback.test.ts index 58935a2782..c842b7e6e0 100644 --- a/packages/xrpl/test/integration/transactions/clawback.test.ts +++ b/packages/xrpl/test/integration/transactions/clawback.test.ts @@ -10,7 +10,6 @@ import { MPTokenIssuanceCreateFlags, MPTokenAuthorize, TransactionMetadata, - LedgerEntryResponse, } from '../../../src' import serverUrl from '../serverUrl' import { @@ -162,17 +161,15 @@ describe('Clawback', function () { await testTransaction(testContext.client, paymentTx, testContext.wallet) - let ledgerEntryResponse: LedgerEntryResponse = - await testContext.client.request({ - command: 'ledger_entry', - mptoken: { - mpt_issuance_id: mptID!, - account: wallet2.classicAddress, - }, - }) + let ledgerEntryResponse = await testContext.client.request({ + command: 'ledger_entry', + mptoken: { + mpt_issuance_id: mptID!, + account: wallet2.classicAddress, + }, + }) assert.equal( - // @ts-expect-error: Known issue with unknown object type ledgerEntryResponse.result.node.MPTAmount, '9223372036854775807', ) @@ -198,7 +195,6 @@ describe('Clawback', function () { }) assert.equal( - // @ts-expect-error: Known issue with unknown object type ledgerEntryResponse.result.node.MPTAmount, '9223372036854775307', ) diff --git a/packages/xrpl/test/integration/transactions/delegateSet.test.ts b/packages/xrpl/test/integration/transactions/delegateSet.test.ts index 961627b2f1..8c94d7bf25 100644 --- a/packages/xrpl/test/integration/transactions/delegateSet.test.ts +++ b/packages/xrpl/test/integration/transactions/delegateSet.test.ts @@ -3,12 +3,10 @@ import { assert } from 'chai' import { AccountSet, DelegateSet, - LedgerEntryResponse, Payment, Wallet, xrpToDrops, } from '../../../src' -import { Delegate } from '../../../src/models/ledger' import serverUrl from '../serverUrl' import { setupClient, @@ -51,15 +49,14 @@ describe('DelegateSet', function () { await testTransaction(testContext.client, delegateTx, alice) // Verify Delegate ledger entry - const ledgerEntryRes: LedgerEntryResponse = - await testContext.client.request({ - command: 'ledger_entry', - delegate: { - account: alice.address, - authorize: bob.address, - }, - }) - const delegateLedgerEntry = ledgerEntryRes.result.node as Delegate + const ledgerEntryRes = await testContext.client.request({ + command: 'ledger_entry', + delegate: { + account: alice.address, + authorize: bob.address, + }, + }) + const delegateLedgerEntry = ledgerEntryRes.result.node assert.equal(delegateLedgerEntry.LedgerEntryType, 'Delegate') assert.equal(delegateLedgerEntry.Account, alice.address) assert.equal(delegateLedgerEntry.Authorize, bob.address) diff --git a/packages/xrpl/test/integration/transactions/permissionedDEX.test.ts b/packages/xrpl/test/integration/transactions/permissionedDEX.test.ts index 7c90b405ac..6b5247f911 100644 --- a/packages/xrpl/test/integration/transactions/permissionedDEX.test.ts +++ b/packages/xrpl/test/integration/transactions/permissionedDEX.test.ts @@ -8,7 +8,6 @@ import { IssuedCurrencyAmount, AccountSetAsfFlags, } from '../../../src' -import DirectoryNode from '../../../src/models/ledger/DirectoryNode' import Offer from '../../../src/models/ledger/Offer' import PermissionedDomain from '../../../src/models/ledger/PermissionedDomain' import { @@ -232,7 +231,7 @@ describe('PermissionedDEX', function () { seq: offerCreateTxResponse.result.tx_json.Sequence as number, }, }) - ).result.node as Offer + ).result.node assert.equal(offerLedgerObject.LedgerEntryType, 'Offer') assert.equal(offerLedgerObject.DomainID, permDomainLedgerObject.index) @@ -258,16 +257,17 @@ describe('PermissionedDEX', function () { directory: offerLedgerObject.BookDirectory, }) + assert.ok(ledgerEntryResponse.result.node, 'node should be present') assert.equal( - (ledgerEntryResponse.result.node as DirectoryNode).index, + ledgerEntryResponse.result.node.index, offerLedgerObject.BookDirectory, ) assert.equal( - (ledgerEntryResponse.result.node as DirectoryNode).LedgerEntryType, + ledgerEntryResponse.result.node.LedgerEntryType, 'DirectoryNode', ) assert.equal( - (ledgerEntryResponse.result.node as DirectoryNode).DomainID, + ledgerEntryResponse.result.node.DomainID, permDomainLedgerObject.index, )