From e09638ee3e055b8e5a6905a54af638b95a9ecbe1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 Aug 2025 16:34:55 +0000 Subject: [PATCH 01/24] Initial plan From 80e4764fbad4e8c82fc8705f2acb2be35fa799ef Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 Aug 2025 16:53:40 +0000 Subject: [PATCH 02/24] Implement XLS-70 CredentialIDs and DepositPreauth credentials support Co-authored-by: mvadari <8029314+mvadari@users.noreply.github.com> --- public/locales/en-US/translations.json | 1 + .../Transaction/AccountDelete/Simple.tsx | 21 +++-- .../Transaction/AccountDelete/index.ts | 7 +- .../test/AccountDeleteSimple.test.tsx | 25 +++--- .../AccountDeleteWithCredentialIDs.json | 62 ++++++++++++++ .../components/Transaction/CredentialIDs.tsx | 28 +++++++ .../Transaction/DepositPreauth/Simple.tsx | 72 +++++++++++++++-- .../test/DepositPreauthSimple.test.tsx | 51 +++++++++--- .../DepositPreauthAuthorizeCredentials.json | 80 +++++++++++++++++++ .../DepositPreauthUnauthorizeCredentials.json | 72 +++++++++++++++++ .../Transaction/DepositPreauth/types.ts | 26 ++++++ .../Transaction/EscrowFinish/Simple.tsx | 5 ++ .../Transaction/EscrowFinish/parser.ts | 1 + .../components/Transaction/Payment/Simple.tsx | 6 +- .../Transaction/Payment/TableDetail.tsx | 20 ++++- .../components/Transaction/Payment/parser.ts | 2 + .../Payment/test/PaymentSimple.test.tsx | 32 ++++++++ .../mock_data/PaymentWithCredentialIDs.json | 54 +++++++++++++ .../components/Transaction/Payment/types.ts | 1 + .../PaymentChannelClaim/Simple.tsx | 5 ++ .../Transaction/PaymentChannelClaim/parser.ts | 1 + .../Transaction/PaymentChannelClaim/types.ts | 1 + 22 files changed, 538 insertions(+), 35 deletions(-) create mode 100644 src/containers/shared/components/Transaction/AccountDelete/test/mock_data/AccountDeleteWithCredentialIDs.json create mode 100644 src/containers/shared/components/Transaction/CredentialIDs.tsx create mode 100644 src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthAuthorizeCredentials.json create mode 100644 src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorizeCredentials.json create mode 100644 src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithCredentialIDs.json diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 6a85013c0..8e028ab6d 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -572,6 +572,7 @@ "expiration": "Expiration", "domain_id": "Domain ID", "accepted_credentials": "Accepted Credentials", + "credential_ids": "Credential IDs", "data": "Data", "finish_function": "Finish Function", "quorum_description": "Min. number of trusted validations needed to confirm a ledger", diff --git a/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx b/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx index 321e77c4e..d8a2f75aa 100644 --- a/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx +++ b/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx @@ -4,15 +4,26 @@ import type { AccountDelete } from 'xrpl' import { SimpleRow } from '../SimpleRow' import { TransactionSimpleProps } from '../types' import { Account } from '../../Account' +import { CredentialIDs } from '../CredentialIDs' -export const Simple = ({ data }: TransactionSimpleProps) => { +// Extend the AccountDelete type to include CredentialIDs +interface AccountDeleteWithCredentials extends AccountDelete { + CredentialIDs?: string[] +} + +export const Simple = ({ data }: TransactionSimpleProps) => { const { t } = useTranslation() const tx = data.instructions return ( - - - {tx.DestinationTag && :{tx.DestinationTag}} - + <> + + + {tx.DestinationTag && :{tx.DestinationTag}} + + {tx.CredentialIDs && tx.CredentialIDs.length > 0 && ( + + )} + ) } diff --git a/src/containers/shared/components/Transaction/AccountDelete/index.ts b/src/containers/shared/components/Transaction/AccountDelete/index.ts index 8ccf40a4c..bb85ed620 100644 --- a/src/containers/shared/components/Transaction/AccountDelete/index.ts +++ b/src/containers/shared/components/Transaction/AccountDelete/index.ts @@ -7,9 +7,14 @@ import { import { Simple } from './Simple' +// Extend the AccountDelete type to include CredentialIDs +interface AccountDeleteWithCredentials extends AccountDelete { + CredentialIDs?: string[] +} + export const AccountDeleteTransaction: TransactionMapping = { Simple, action: TransactionAction.CANCEL, category: TransactionCategory.ACCOUNT, - parser: (tx: AccountDelete): AccountDelete => tx, + parser: (tx: AccountDeleteWithCredentials): AccountDeleteWithCredentials => tx, } diff --git a/src/containers/shared/components/Transaction/AccountDelete/test/AccountDeleteSimple.test.tsx b/src/containers/shared/components/Transaction/AccountDelete/test/AccountDeleteSimple.test.tsx index 97a9c908f..9bde8b4be 100644 --- a/src/containers/shared/components/Transaction/AccountDelete/test/AccountDeleteSimple.test.tsx +++ b/src/containers/shared/components/Transaction/AccountDelete/test/AccountDeleteSimple.test.tsx @@ -1,28 +1,33 @@ import i18n from '../../../../../../i18n/testConfigEnglish' -import { createSimpleWrapperFactory } from '../../test/createWrapperFactory' +import { createSimpleWrapperFactory, expectSimpleRowText, expectSimpleRowLabel } from '../../test' import { Simple } from '../Simple' import mockAccountDelete from './mock_data/AccountDelete.json' import mockAccountDeleteWithDestinationTag from './mock_data/AccountDeleteWithDestinationTag.json' +import mockAccountDeleteWithCredentialIDs from './mock_data/AccountDeleteWithCredentialIDs.json' -const createWrapper = createSimpleWrapperFactory(Simple, i18n) +const createWrapper = createSimpleWrapperFactory(Simple) describe('AccountDelete: Simple', () => { it('renders', () => { const wrapper = createWrapper(mockAccountDelete) - expect(wrapper.find('.label')).toHaveText('destination') - expect(wrapper.find('.value')).toHaveText( - 'raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J', - ) + expectSimpleRowText(wrapper, 'destination', 'raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J') wrapper.unmount() }) it('renders with destination tag', () => { const wrapper = createWrapper(mockAccountDeleteWithDestinationTag) - expect(wrapper.find('.label')).toHaveText('destination') - expect(wrapper.find('.value')).toHaveText( - 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:123123', - ) + expectSimpleRowText(wrapper, 'destination', 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:123123') + wrapper.unmount() + }) + + it('renders with CredentialIDs', () => { + const wrapper = createWrapper(mockAccountDeleteWithCredentialIDs) + + expectSimpleRowText(wrapper, 'destination', 'raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J') + expectSimpleRowText(wrapper, 'credential-id-0', '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955') + expectSimpleRowLabel(wrapper, 'credential-id-0', 'credential_ids') + wrapper.unmount() }) }) diff --git a/src/containers/shared/components/Transaction/AccountDelete/test/mock_data/AccountDeleteWithCredentialIDs.json b/src/containers/shared/components/Transaction/AccountDelete/test/mock_data/AccountDeleteWithCredentialIDs.json new file mode 100644 index 000000000..d9712db7b --- /dev/null +++ b/src/containers/shared/components/Transaction/AccountDelete/test/mock_data/AccountDeleteWithCredentialIDs.json @@ -0,0 +1,62 @@ +{ + "tx": { + "Account": "raf19Ns8czi85kTfia3KJ9ndjSp9baTLyH", + "Destination": "raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J", + "CredentialIDs": ["7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955"], + "Fee": "5000000", + "Flags": 2147483648, + "Sequence": 58118671, + "SigningPubKey": "0211DA2A9AEF04FB772776CD35291AF20DC09A6F0EF52C1A58E4ED43C8685D7093", + "TransactionType": "AccountDelete", + "TxnSignature": "304402202E61AC4B56BFFD2186D3E9BDECE7B68CD21B9486F691C5B31AA0E84E161E2C1C022048B70011A1D04566883EFEC3E988C31A853B89D18E0159315EF488DE89F7BA8B" + }, + "meta": { + "AffectedNodes": [ + { + "DeletedNode": { + "FinalFields": { + "Account": "raf19Ns8czi85kTfia3KJ9ndjSp9baTLyH", + "Balance": "0", + "Flags": 0, + "MessageKey": "020000000000000000000000007C50654DCAE0020232ABB4C236F7CE03CF2784B0", + "OwnerCount": 0, + "PreviousTxnID": "9A0AD95BA92118D66BDB3DCF86575BAEBE34D3F640146BD5A68D4AC355E56A21", + "PreviousTxnLgrSeq": 58233607, + "Sequence": 58118672 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "1F8BBAE9AD8533D18C1A2DD03E22232D49A28CCF2383D80CEE50735E82900068", + "PreviousFields": { + "Balance": "19999988", + "Sequence": 58118671 + } + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J", + "Balance": "11468518495", + "Flags": 0, + "OwnerCount": 0, + "Sequence": 58233435 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "40D5C5FF088C4BC3CA79974DCB585DDD04E9D88FF732AE6E7E36F0FF1CDD4220", + "PreviousFields": { + "Balance": "11453518507" + }, + "PreviousTxnID": "9A0AD95BA92118D66BDB3DCF86575BAEBE34D3F640146BD5A68D4AC355E56A21", + "PreviousTxnLgrSeq": 58233607 + } + } + ], + "DeliveredAmount": "14999988", + "TransactionIndex": 34, + "TransactionResult": "tesSUCCESS", + "delivered_amount": "14999988" + }, + "hash": "91BCF2965F7381EC01EDA6A36948A23480B566A0DDD3B13610ED8FD59840956D", + "ledger_index": 58233707, + "date": "2020-09-16T23:18:20Z" +} \ No newline at end of file diff --git a/src/containers/shared/components/Transaction/CredentialIDs.tsx b/src/containers/shared/components/Transaction/CredentialIDs.tsx new file mode 100644 index 000000000..6b526ed25 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialIDs.tsx @@ -0,0 +1,28 @@ +import { useTranslation } from 'react-i18next' +import { SimpleRow } from './SimpleRow' + +interface CredentialIDsProps { + credentialIDs: string[] +} + +export const CredentialIDs = ({ credentialIDs }: CredentialIDsProps) => { + const { t } = useTranslation() + + if (!credentialIDs || credentialIDs.length === 0) { + return null + } + + return ( + <> + {credentialIDs.map((credentialID, index) => ( + + {credentialID} + + ))} + + ) +} \ No newline at end of file diff --git a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx index cd9f9d395..acc895ce3 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx @@ -1,15 +1,73 @@ import { useTranslation } from 'react-i18next' import { SimpleRow } from '../SimpleRow' import { TransactionSimpleProps } from '../types' -import { DepositPreauth } from './types' +import { DepositPreauth, CredentialAuth } from './types' +import { convertHexToString } from '../../../../../rippled/lib/utils' + +const renderCredentials = (credentials: CredentialAuth[], t: any) => { + return ( + <> + {credentials.map((cred, index) => ( +
+ + {cred.Issuer} + + + {convertHexToString(cred.CredentialType)} + +
+ ))} + + ) +} export const Simple = ({ data }: TransactionSimpleProps) => { const { t } = useTranslation() - const { Authorize, Unauthorize } = data.instructions + const { Authorize, Unauthorize, AuthorizeCredentials, UnauthorizeCredentials } = data.instructions - return Authorize ? ( - {Authorize} - ) : ( - {Unauthorize} - ) + if (Authorize) { + return ( + + {Authorize} + + ) + } + + if (Unauthorize) { + return ( + + {Unauthorize} + + ) + } + + if (AuthorizeCredentials && AuthorizeCredentials.length > 0) { + return ( + <> + + {t('accepted_credentials')} + + {renderCredentials(AuthorizeCredentials, t)} + + ) + } + + if (UnauthorizeCredentials && UnauthorizeCredentials.length > 0) { + return ( + <> + + {t('accepted_credentials')} + + {renderCredentials(UnauthorizeCredentials, t)} + + ) + } + + return null } diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx index 3793f16d2..d4d64d021 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx @@ -1,28 +1,59 @@ import i18n from '../../../../../../i18n/testConfigEnglish' -import { createSimpleWrapperFactory } from '../../test/createWrapperFactory' +import { createSimpleWrapperFactory, expectSimpleRowText, expectSimpleRowLabel } from '../../test' import { Simple } from '../Simple' import mockDepositPreauth from './mock_data/DepositPreauth.json' import mockDepositPreauthUnauthorize from './mock_data/DepositPreauthUnauthorize.json' +import mockDepositPreauthAuthorizeCredentials from './mock_data/DepositPreauthAuthorizeCredentials.json' +import mockDepositPreauthUnauthorizeCredentials from './mock_data/DepositPreauthUnauthorizeCredentials.json' -const createWrapper = createSimpleWrapperFactory(Simple, i18n) +const createWrapper = createSimpleWrapperFactory(Simple) describe('DepositPreauth: Simple', () => { it('renders authorized', () => { const wrapper = createWrapper(mockDepositPreauth) - expect(wrapper.find('.label')).toHaveText('authorize') - expect(wrapper.find('.value')).toHaveText( - 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM', - ) + expectSimpleRowText(wrapper, 'authorize', 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM') wrapper.unmount() }) it('renders unauthorized', () => { const wrapper = createWrapper(mockDepositPreauthUnauthorize) - expect(wrapper.find('.label')).toHaveText('unauthorize') - expect(wrapper.find('.value')).toHaveText( - 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM', - ) + expectSimpleRowText(wrapper, 'unauthorize', 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM') + wrapper.unmount() + }) + + it('renders authorize credentials', () => { + const wrapper = createWrapper(mockDepositPreauthAuthorizeCredentials) + + expectSimpleRowText(wrapper, 'authorize-credentials-label', 'accepted_credentials') + expectSimpleRowLabel(wrapper, 'authorize-credentials-label', 'authorize') + + // Check first credential + expectSimpleRowText(wrapper, 'credential-issuer-0', 'rISABEL......') + expectSimpleRowLabel(wrapper, 'credential-issuer-0', 'credential_issuer') + expectSimpleRowText(wrapper, 'credential-type-0', 'KYC') // 4B5943 hex decodes to "KYC" + expectSimpleRowLabel(wrapper, 'credential-type-0', 'credential_type') + + // Check second credential + expectSimpleRowText(wrapper, 'credential-issuer-1', 'rTRUSTED.....') + expectSimpleRowLabel(wrapper, 'credential-issuer-1', '') // Empty label for subsequent items + expectSimpleRowText(wrapper, 'credential-type-1', 'ID') // 4944 hex decodes to "ID" + expectSimpleRowLabel(wrapper, 'credential-type-1', '') // Empty label for subsequent items + + wrapper.unmount() + }) + + it('renders unauthorize credentials', () => { + const wrapper = createWrapper(mockDepositPreauthUnauthorizeCredentials) + + expectSimpleRowText(wrapper, 'unauthorize-credentials-label', 'accepted_credentials') + expectSimpleRowLabel(wrapper, 'unauthorize-credentials-label', 'unauthorize') + + expectSimpleRowText(wrapper, 'credential-issuer-0', 'rISABEL......') + expectSimpleRowLabel(wrapper, 'credential-issuer-0', 'credential_issuer') + expectSimpleRowText(wrapper, 'credential-type-0', 'KYC') // 4B5943 hex decodes to "KYC" + expectSimpleRowLabel(wrapper, 'credential-type-0', 'credential_type') + wrapper.unmount() }) }) diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthAuthorizeCredentials.json b/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthAuthorizeCredentials.json new file mode 100644 index 000000000..750a1b022 --- /dev/null +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthAuthorizeCredentials.json @@ -0,0 +1,80 @@ +{ + "hash": "B5D94C027C846171B2F5D4C2D126E88580BF369986A155C1890352F5BC4D7AF9", + "ledger_index": 37360499, + "date": "2018-03-20T12:48:10+00:00", + "tx": { + "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "AuthorizeCredentials": [ + { + "Issuer": "rISABEL......", + "CredentialType": "4B5943" + }, + { + "Issuer": "rTRUSTED.....", + "CredentialType": "4944" + } + ], + "Fee": "10", + "Flags": 2147483648, + "Sequence": 65, + "SigningPubKey": "03EB1E2603E7571D6144684996C10DA75063D6E2F3B3FDABE38B857C1BE9578A55", + "TransactionType": "DepositPreauth", + "TxnSignature": "3045022100B0A5672E3E09FA3AF8CF1DCC1D8C881F58B39212D6FDC42CCF30E5400D0EFD9F02202DDD9517D9409D1D9A529B8AEA7DE13AE4CDF96BB6D18FA0D9732DBFC887348D" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "Balance": "9827999174", + "Flags": 0, + "OwnerCount": 8, + "Sequence": 66 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "146AAAF7A266D8A92DFFEAB1A71B6523534F27820873F4E213014B23398867D2", + "PreviousFields": { + "Balance": "9827999184", + "OwnerCount": 7, + "Sequence": 65 + }, + "PreviousTxnID": "8107CEE99D556326ACD4662CA10A24550240D9F933E55435A0C0DB3B06DD343E", + "PreviousTxnLgrSeq": 11427673 + } + }, + { + "CreatedNode": { + "LedgerEntryType": "DepositPreauth", + "LedgerIndex": "C2D0317AD266B93CB3B36AEB0ABB673B0AFFAB134809CCACFD7158F539603C3A", + "NewFields": { + "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "AuthorizeCredentials": [ + { + "Issuer": "rISABEL......", + "CredentialType": "4B5943" + }, + { + "Issuer": "rTRUSTED.....", + "CredentialType": "4944" + } + ] + } + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "RootIndex": "CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC" + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + } +} \ No newline at end of file diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorizeCredentials.json b/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorizeCredentials.json new file mode 100644 index 000000000..38b8820b5 --- /dev/null +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorizeCredentials.json @@ -0,0 +1,72 @@ +{ + "hash": "B5D94C027C846171B2F5D4C2D126E88580BF369986A155C1890352F5BC4D7AF9", + "ledger_index": 37360499, + "date": "2018-03-20T12:48:10+00:00", + "tx": { + "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "UnauthorizeCredentials": [ + { + "Issuer": "rISABEL......", + "CredentialType": "4B5943" + } + ], + "Fee": "10", + "Flags": 2147483648, + "Sequence": 65, + "SigningPubKey": "03EB1E2603E7571D6144684996C10DA75063D6E2F3B3FDABE38B857C1BE9578A55", + "TransactionType": "DepositPreauth", + "TxnSignature": "3045022100B0A5672E3E09FA3AF8CF1DCC1D8C881F58B39212D6FDC42CCF30E5400D0EFD9F02202DDD9517D9409D1D9A529B8AEA7DE13AE4CDF96BB6D18FA0D9732DBFC887348D" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "Balance": "9827999174", + "Flags": 0, + "OwnerCount": 8, + "Sequence": 66 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "146AAAF7A266D8A92DFFEAB1A71B6523534F27820873F4E213014B23398867D2", + "PreviousFields": { + "Balance": "9827999184", + "OwnerCount": 7, + "Sequence": 65 + }, + "PreviousTxnID": "8107CEE99D556326ACD4662CA10A24550240D9F933E55435A0C0DB3B06DD343E", + "PreviousTxnLgrSeq": 11427673 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "UnauthorizeCredentials": [ + { + "Issuer": "rISABEL......", + "CredentialType": "4B5943" + } + ] + }, + "LedgerEntryType": "DepositPreauth", + "LedgerIndex": "C2D0317AD266B93CB3B36AEB0ABB673B0AFFAB134809CCACFD7158F539603C3A" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "RootIndex": "CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC" + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + } +} \ No newline at end of file diff --git a/src/containers/shared/components/Transaction/DepositPreauth/types.ts b/src/containers/shared/components/Transaction/DepositPreauth/types.ts index b2e37bcd0..892561b20 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/types.ts +++ b/src/containers/shared/components/Transaction/DepositPreauth/types.ts @@ -1,13 +1,39 @@ +// Credential authorization object as per XLS-70 spec +export interface CredentialAuth { + Issuer: string + CredentialType: string +} + export interface DepositPreauthWithAuthorize { Authorize: string Unauthorize: never + AuthorizeCredentials: never + UnauthorizeCredentials: never } export interface DepositPreauthWithUnauthorize { Authorize: never Unauthorize: string + AuthorizeCredentials: never + UnauthorizeCredentials: never +} + +export interface DepositPreauthWithAuthorizeCredentials { + Authorize: never + Unauthorize: never + AuthorizeCredentials: CredentialAuth[] + UnauthorizeCredentials: never +} + +export interface DepositPreauthWithUnauthorizeCredentials { + Authorize: never + Unauthorize: never + AuthorizeCredentials: never + UnauthorizeCredentials: CredentialAuth[] } export type DepositPreauth = | DepositPreauthWithAuthorize | DepositPreauthWithUnauthorize + | DepositPreauthWithAuthorizeCredentials + | DepositPreauthWithUnauthorizeCredentials diff --git a/src/containers/shared/components/Transaction/EscrowFinish/Simple.tsx b/src/containers/shared/components/Transaction/EscrowFinish/Simple.tsx index e97fe0cba..23f99ef31 100644 --- a/src/containers/shared/components/Transaction/EscrowFinish/Simple.tsx +++ b/src/containers/shared/components/Transaction/EscrowFinish/Simple.tsx @@ -5,6 +5,7 @@ import { SimpleRow } from '../SimpleRow' import { Amount } from '../../Amount' import { RouteLink } from '../../../routing' import { TRANSACTION_ROUTE } from '../../../../App/routes' +import { CredentialIDs } from '../CredentialIDs' const Simple: TransactionSimpleComponent = (props: TransactionSimpleProps) => { const { t } = useTranslation() @@ -18,6 +19,7 @@ const Simple: TransactionSimpleComponent = (props: TransactionSimpleProps) => { condition, fulfillment, computationAllowance, + credentialIDs, } = data.instructions return ( @@ -72,6 +74,9 @@ const Simple: TransactionSimpleComponent = (props: TransactionSimpleProps) => { )} + {credentialIDs && credentialIDs.length > 0 && ( + + )} ) } diff --git a/src/containers/shared/components/Transaction/EscrowFinish/parser.ts b/src/containers/shared/components/Transaction/EscrowFinish/parser.ts index b3d16ac4a..2b4a1b724 100644 --- a/src/containers/shared/components/Transaction/EscrowFinish/parser.ts +++ b/src/containers/shared/components/Transaction/EscrowFinish/parser.ts @@ -21,5 +21,6 @@ export function parser(tx: EscrowFinish, meta: TransactionMetadata) { condition: escrow.Condition, fulfillment: tx.Fulfillment, computationAllowance: tx.ComputationAllowance, + credentialIDs: (tx as any).CredentialIDs, // Cast to any to include CredentialIDs } } diff --git a/src/containers/shared/components/Transaction/Payment/Simple.tsx b/src/containers/shared/components/Transaction/Payment/Simple.tsx index 2e13da0b2..b2c6fe97e 100644 --- a/src/containers/shared/components/Transaction/Payment/Simple.tsx +++ b/src/containers/shared/components/Transaction/Payment/Simple.tsx @@ -4,6 +4,7 @@ import { Amount } from '../../Amount' import { PaymentInstructions } from './types' import { TransactionSimpleProps } from '../types' import { SimpleRow } from '../SimpleRow' +import { CredentialIDs } from '../CredentialIDs' export const Simple = (props: TransactionSimpleProps) => { const { data } = props @@ -18,7 +19,7 @@ export const Simple = (props: TransactionSimpleProps) => { } const renderPayment = () => { - const { max, destination, sourceTag, partial, domainID } = data.instructions + const { max, destination, sourceTag, partial, domainID, credentialIDs } = data.instructions return ( <> @@ -48,6 +49,9 @@ export const Simple = (props: TransactionSimpleProps) => { + {credentialIDs && credentialIDs.length > 0 && ( + + )} ) } diff --git a/src/containers/shared/components/Transaction/Payment/TableDetail.tsx b/src/containers/shared/components/Transaction/Payment/TableDetail.tsx index 22ce1b6d8..35952eda3 100644 --- a/src/containers/shared/components/Transaction/Payment/TableDetail.tsx +++ b/src/containers/shared/components/Transaction/Payment/TableDetail.tsx @@ -8,13 +8,29 @@ export const TableDetail = ({ instructions, }: TransactionTableDetailProps) => { const { t } = useTranslation() - const { convert, amount, destination, partial, sourceTag, domainID } = + const { convert, amount, destination, partial, sourceTag, domainID, credentialIDs } = instructions const renderPartial = () => (
{t('partial_payment_allowed')}
) + const renderCredentialIDs = () => { + if (!credentialIDs || credentialIDs.length === 0) { + return null + } + return ( +
+ {t('credential_ids')}: + {credentialIDs.map((id, index) => ( +
+ {id} +
+ ))} +
+ ) + } + if (convert) { return (
@@ -23,6 +39,7 @@ export const TableDetail = ({ {t('to')} {partial && renderPartial()} + {renderCredentialIDs()}
) } @@ -47,6 +64,7 @@ export const TableDetail = ({ {domainID} )} + {renderCredentialIDs()} {partial && renderPartial()} ) diff --git a/src/containers/shared/components/Transaction/Payment/parser.ts b/src/containers/shared/components/Transaction/Payment/parser.ts index 7e70aeea1..44bc5f82c 100644 --- a/src/containers/shared/components/Transaction/Payment/parser.ts +++ b/src/containers/shared/components/Transaction/Payment/parser.ts @@ -28,6 +28,7 @@ export const parser = (tx: any, meta: any): PaymentInstructions => { destination, partial, domainID: tx.DomainID, + credentialIDs: tx.CredentialIDs, } } @@ -38,5 +39,6 @@ export const parser = (tx: any, meta: any): PaymentInstructions => { sourceTag: tx.SourceTag, partial, domainID: tx.DomainID, + credentialIDs: tx.CredentialIDs, } } diff --git a/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx b/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx index 88e452578..c03de38fe 100644 --- a/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx +++ b/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx @@ -13,6 +13,7 @@ import mockPaymentSendMax from './mock_data/PaymentWithSendMax.json' import mockPaymentSourceTag from './mock_data/PaymentWithSourceTag.json' import mockPaymentMPT from './mock_data/PaymentMPT.json' import mockPermDomainID from './mock_data/PaymentWithPermDomainID.json' +import mockPaymentWithCredentialIDs from './mock_data/PaymentWithCredentialIDs.json' jest.mock('react-query', () => ({ ...jest.requireActual('react-query'), @@ -163,4 +164,35 @@ describe('Payment: Simple', () => { wrapper.unmount() }) + + it('renders with CredentialIDs', () => { + const wrapper = createWrapper(mockPaymentWithCredentialIDs) + + expectSimpleRowText(wrapper, 'amount', `\uE9002,421.8268 XRP`) + expectSimpleRowLabel(wrapper, 'amount', `send`) + + expectSimpleRowText( + wrapper, + 'destination', + `rHoPwMC75KVUhBMeV3uDMybKG5JND74teh`, + ) + + // Check first credential ID + expectSimpleRowText( + wrapper, + 'credential-id-0', + '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955', + ) + expectSimpleRowLabel(wrapper, 'credential-id-0', 'credential_ids') + + // Check second credential ID (should have empty label) + expectSimpleRowText( + wrapper, + 'credential-id-1', + '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956', + ) + expectSimpleRowLabel(wrapper, 'credential-id-1', '') + + wrapper.unmount() + }) }) diff --git a/src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithCredentialIDs.json b/src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithCredentialIDs.json new file mode 100644 index 000000000..0c54b86cb --- /dev/null +++ b/src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithCredentialIDs.json @@ -0,0 +1,54 @@ +{ + "hash": "F4AD54E6FE56B53F8FB8B422C4E9636D6AD56682EA45FF3C8AFBC66EF2D82612", + "ledger_index": 37432866, + "date": "2018-03-23T13:34:51+00:00", + "tx": { + "TransactionType": "Payment", + "Flags": 2147483648, + "Sequence": 31030, + "Amount": "2421826800", + "Fee": "150000", + "SigningPubKey": "0287A3059E24E773CB585A77D59771E54DDABEACD9503650269BA4E3413CA35036", + "TxnSignature": "30450221008D56168A5794D1F87D29F83D241477710AA32027F89D68925166477529D0CD50022043E2BFEEE543AA983BA036D3BC2303A6EB13DB7BC0770FBFD9E855DB04BBADED", + "Account": "rNQEMJA4PsoSrZRn9J6RajAYhcDzzhf8ok", + "Destination": "rHoPwMC75KVUhBMeV3uDMybKG5JND74teh", + "CredentialIDs": ["7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955", "8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956"] + }, + "meta": { + "TransactionIndex": 7, + "AffectedNodes": [ + { + "CreatedNode": { + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "62B63A85C9753AD909B67225CBCC5271C3DDED972DDB89A74BC4347D1C62B4A0", + "NewFields": { + "Sequence": 231, + "Balance": "2421826800", + "Account": "rHoPwMC75KVUhBMeV3uDMybKG5JND74teh" + } + } + }, + { + "ModifiedNode": { + "LedgerEntryType": "AccountRoot", + "PreviousTxnLgrSeq": 37432853, + "PreviousTxnID": "884A9090391E30E7AD2789A20425E99192A227358DE4117D1469108DB3DFE5D7", + "LedgerIndex": "B8B66C89364DF501737D1AE9A5B4583E8945B8B27CB81FDAB39A50FBAF57B639", + "PreviousFields": { + "Sequence": 31030, + "Balance": "27121947538132" + }, + "FinalFields": { + "Flags": 131072, + "Sequence": 31031, + "OwnerCount": 0, + "Balance": "27119525561332", + "Account": "rNQEMJA4PsoSrZRn9J6RajAYhcDzzhf8ok" + } + } + } + ], + "TransactionResult": "tesSUCCESS", + "delivered_amount": "2421826800" + } +} \ No newline at end of file diff --git a/src/containers/shared/components/Transaction/Payment/types.ts b/src/containers/shared/components/Transaction/Payment/types.ts index 0d72ac13a..34eca3dbb 100644 --- a/src/containers/shared/components/Transaction/Payment/types.ts +++ b/src/containers/shared/components/Transaction/Payment/types.ts @@ -8,4 +8,5 @@ export interface PaymentInstructions { destination: string sourceTag?: number domainID?: string + credentialIDs?: string[] } diff --git a/src/containers/shared/components/Transaction/PaymentChannelClaim/Simple.tsx b/src/containers/shared/components/Transaction/PaymentChannelClaim/Simple.tsx index 890501665..6d39b593f 100644 --- a/src/containers/shared/components/Transaction/PaymentChannelClaim/Simple.tsx +++ b/src/containers/shared/components/Transaction/PaymentChannelClaim/Simple.tsx @@ -4,6 +4,7 @@ import { SimpleRow } from '../SimpleRow' import { Amount } from '../../Amount' import { TransactionSimpleProps } from '../types' import { PaymentChannelClaimInstructions } from './types' +import { CredentialIDs } from '../CredentialIDs' export const Simple = ({ data, @@ -19,6 +20,7 @@ export const Simple = ({ renew, close, deleted, + credentialIDs, } = data.instructions const dParts = destination.split(':') const sParts = source.split(':') @@ -72,6 +74,9 @@ export const Simple = ({ {t('payment_channel_closed')} )} + {credentialIDs && credentialIDs.length > 0 && ( + + )} ) } diff --git a/src/containers/shared/components/Transaction/PaymentChannelClaim/parser.ts b/src/containers/shared/components/Transaction/PaymentChannelClaim/parser.ts index c57f3fa4f..84a5cc255 100644 --- a/src/containers/shared/components/Transaction/PaymentChannelClaim/parser.ts +++ b/src/containers/shared/components/Transaction/PaymentChannelClaim/parser.ts @@ -28,6 +28,7 @@ export const parser = ( totalClaimed: tx.Balance ? formatAmount(tx.Balance) : undefined, renew: hasRenew(typeof tx.Flags === 'number' ? tx.Flags : 0) || undefined, close: hasClose(typeof tx.Flags === 'number' ? tx.Flags : 0) || undefined, + credentialIDs: (tx as any).CredentialIDs, // Cast to any to include CredentialIDs } if (node) { diff --git a/src/containers/shared/components/Transaction/PaymentChannelClaim/types.ts b/src/containers/shared/components/Transaction/PaymentChannelClaim/types.ts index ef16c8fc0..41ad0d64d 100644 --- a/src/containers/shared/components/Transaction/PaymentChannelClaim/types.ts +++ b/src/containers/shared/components/Transaction/PaymentChannelClaim/types.ts @@ -11,4 +11,5 @@ export interface PaymentChannelClaimInstructions { renew?: boolean close?: boolean deleted?: boolean + credentialIDs?: string[] } From 45f7edb95e394f0194cb2fc711efea1fe7ea63d5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 Aug 2025 17:13:18 +0000 Subject: [PATCH 03/24] Fix DepositPreauth credentials display by adding parser for nested structure Co-authored-by: mvadari <8029314+mvadari@users.noreply.github.com> --- .../Transaction/DepositPreauth/index.ts | 2 ++ .../Transaction/DepositPreauth/parser.ts | 30 +++++++++++++++++++ .../DepositPreauthAuthorizeCredentials.json | 24 ++++++++++----- .../DepositPreauthUnauthorizeCredentials.json | 12 +++++--- 4 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 src/containers/shared/components/Transaction/DepositPreauth/parser.ts diff --git a/src/containers/shared/components/Transaction/DepositPreauth/index.ts b/src/containers/shared/components/Transaction/DepositPreauth/index.ts index 3e5cef1a8..69ec185d9 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/index.ts +++ b/src/containers/shared/components/Transaction/DepositPreauth/index.ts @@ -6,10 +6,12 @@ import { import { Simple } from './Simple' import { Description } from './Description' +import { parser } from './parser' export const DepositPreauthTransaction: TransactionMapping = { Description, Simple, + parser, action: TransactionAction.MODIFY, category: TransactionCategory.ACCOUNT, } diff --git a/src/containers/shared/components/Transaction/DepositPreauth/parser.ts b/src/containers/shared/components/Transaction/DepositPreauth/parser.ts new file mode 100644 index 000000000..83f2d94f6 --- /dev/null +++ b/src/containers/shared/components/Transaction/DepositPreauth/parser.ts @@ -0,0 +1,30 @@ +import { CredentialAuth, DepositPreauth } from './types' + +// Transform the nested XRPL credential structure to flat CredentialAuth objects +const transformCredentials = (credentials: any[]): CredentialAuth[] => { + return credentials.map((item) => ({ + Issuer: item.Credential.Issuer, + CredentialType: item.Credential.CredentialType, + })) +} + +export const parser = (tx: any): DepositPreauth => { + // Handle AuthorizeCredentials with nested structure + if (tx.AuthorizeCredentials) { + return { + ...tx, + AuthorizeCredentials: transformCredentials(tx.AuthorizeCredentials), + } as DepositPreauth + } + + // Handle UnauthorizeCredentials with nested structure + if (tx.UnauthorizeCredentials) { + return { + ...tx, + UnauthorizeCredentials: transformCredentials(tx.UnauthorizeCredentials), + } as DepositPreauth + } + + // For Authorize/Unauthorize fields (string-based), pass through unchanged + return tx as DepositPreauth +} \ No newline at end of file diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthAuthorizeCredentials.json b/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthAuthorizeCredentials.json index 750a1b022..5d457823a 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthAuthorizeCredentials.json +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthAuthorizeCredentials.json @@ -6,12 +6,16 @@ "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", "AuthorizeCredentials": [ { - "Issuer": "rISABEL......", - "CredentialType": "4B5943" + "Credential": { + "Issuer": "rISABEL......", + "CredentialType": "4B5943" + } }, { - "Issuer": "rTRUSTED.....", - "CredentialType": "4944" + "Credential": { + "Issuer": "rTRUSTED.....", + "CredentialType": "4944" + } } ], "Fee": "10", @@ -51,12 +55,16 @@ "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", "AuthorizeCredentials": [ { - "Issuer": "rISABEL......", - "CredentialType": "4B5943" + "Credential": { + "Issuer": "rISABEL......", + "CredentialType": "4B5943" + } }, { - "Issuer": "rTRUSTED.....", - "CredentialType": "4944" + "Credential": { + "Issuer": "rTRUSTED.....", + "CredentialType": "4944" + } } ] } diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorizeCredentials.json b/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorizeCredentials.json index 38b8820b5..cdeacdad8 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorizeCredentials.json +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorizeCredentials.json @@ -6,8 +6,10 @@ "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", "UnauthorizeCredentials": [ { - "Issuer": "rISABEL......", - "CredentialType": "4B5943" + "Credential": { + "Issuer": "rISABEL......", + "CredentialType": "4B5943" + } } ], "Fee": "10", @@ -45,8 +47,10 @@ "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", "UnauthorizeCredentials": [ { - "Issuer": "rISABEL......", - "CredentialType": "4B5943" + "Credential": { + "Issuer": "rISABEL......", + "CredentialType": "4B5943" + } } ] }, From 21f834996d7cb279dcfc954029a08a047156ffc1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 Aug 2025 17:30:53 +0000 Subject: [PATCH 04/24] Fix parser to handle both nested and flat credential structures, use SimpleGroup for better UI Co-authored-by: mvadari <8029314+mvadari@users.noreply.github.com> --- .../Transaction/DepositPreauth/Simple.tsx | 72 ++++++++++--------- .../Transaction/DepositPreauth/parser.ts | 23 ++++-- 2 files changed, 54 insertions(+), 41 deletions(-) diff --git a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx index acc895ce3..551e31dad 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx @@ -1,32 +1,10 @@ import { useTranslation } from 'react-i18next' import { SimpleRow } from '../SimpleRow' +import { SimpleGroup } from '../SimpleGroup' import { TransactionSimpleProps } from '../types' import { DepositPreauth, CredentialAuth } from './types' import { convertHexToString } from '../../../../../rippled/lib/utils' -const renderCredentials = (credentials: CredentialAuth[], t: any) => { - return ( - <> - {credentials.map((cred, index) => ( -
- - {cred.Issuer} - - - {convertHexToString(cred.CredentialType)} - -
- ))} - - ) -} - export const Simple = ({ data }: TransactionSimpleProps) => { const { t } = useTranslation() const { Authorize, Unauthorize, AuthorizeCredentials, UnauthorizeCredentials } = data.instructions @@ -49,23 +27,47 @@ export const Simple = ({ data }: TransactionSimpleProps) => { if (AuthorizeCredentials && AuthorizeCredentials.length > 0) { return ( - <> - - {t('accepted_credentials')} - - {renderCredentials(AuthorizeCredentials, t)} - + + {AuthorizeCredentials.map((cred, index) => ( +
+ + {cred.Issuer} + + + {convertHexToString(cred.CredentialType)} + +
+ ))} +
) } if (UnauthorizeCredentials && UnauthorizeCredentials.length > 0) { return ( - <> - - {t('accepted_credentials')} - - {renderCredentials(UnauthorizeCredentials, t)} - + + {UnauthorizeCredentials.map((cred, index) => ( +
+ + {cred.Issuer} + + + {convertHexToString(cred.CredentialType)} + +
+ ))} +
) } diff --git a/src/containers/shared/components/Transaction/DepositPreauth/parser.ts b/src/containers/shared/components/Transaction/DepositPreauth/parser.ts index 83f2d94f6..c0dbe82ba 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/parser.ts +++ b/src/containers/shared/components/Transaction/DepositPreauth/parser.ts @@ -2,14 +2,25 @@ import { CredentialAuth, DepositPreauth } from './types' // Transform the nested XRPL credential structure to flat CredentialAuth objects const transformCredentials = (credentials: any[]): CredentialAuth[] => { - return credentials.map((item) => ({ - Issuer: item.Credential.Issuer, - CredentialType: item.Credential.CredentialType, - })) + return credentials.map((item) => { + // Check if it's nested (has Credential wrapper) or already flat + if (item.Credential) { + return { + Issuer: item.Credential.Issuer, + CredentialType: item.Credential.CredentialType, + } + } else { + // Already flat, return as-is + return { + Issuer: item.Issuer, + CredentialType: item.CredentialType, + } + } + }) } export const parser = (tx: any): DepositPreauth => { - // Handle AuthorizeCredentials with nested structure + // Handle AuthorizeCredentials (both nested and flat structures) if (tx.AuthorizeCredentials) { return { ...tx, @@ -17,7 +28,7 @@ export const parser = (tx: any): DepositPreauth => { } as DepositPreauth } - // Handle UnauthorizeCredentials with nested structure + // Handle UnauthorizeCredentials (both nested and flat structures) if (tx.UnauthorizeCredentials) { return { ...tx, From be82a2183ebd07fb6aab93e8716edecf43fb86b8 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 29 Aug 2025 13:39:37 -0400 Subject: [PATCH 05/24] copilot-setup-steps --- .github/workflows/copilot-setup-steps.yml | 46 ++ package-lock.json | 897 +--------------------- package.json | 4 +- 3 files changed, 67 insertions(+), 880 deletions(-) create mode 100644 .github/workflows/copilot-setup-steps.yml diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 000000000..be6e38ee4 --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,46 @@ +name: Copilot Setup Steps + +env: + NODE_VERSION: 22.x + VITE_VALIDATOR: vl.ripple.com + VITE_RIPPLED_WS_PORT: 51233 + VITE_RIPPLED_HOST: fake.rippled.example.com + VITE_MAINNET_LINK: mainnet.example.com + VITE_TESTNET_LINK: testnet.example.com + VITE_CUSTOMNETWORK_LINK: custom.example.com + VITE_DATA_URL: https://data.xrpl.org/v1/network + +on: + workflow_dispatch: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + copilot-setup: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ env.NODE_VERSION }} + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Cache node modules + id: cache-nodemodules + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + # caching node_modules + path: node_modules + key: ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}- + ${{ env.NODE_VERSION }}-build- + + - name: Install Dependencies + if: steps.cache-nodemodules.outputs.cache-hit != 'true' + run: npm ci diff --git a/package-lock.json b/package-lock.json index 752028178..4e21665ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -114,8 +114,8 @@ "xrpl": "^4.4.0" }, "engines": { - "node": ">=22.0.0 <23", - "npm": ">=9.0.0 <11.0.0" + "node": ">=22.0.0 <23.0.0", + "npm": ">=9.0.0 <12.0.0" } }, "node_modules/@adobe/css-tools": { @@ -3322,79 +3322,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "optional": true, - "peer": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -5716,13 +5643,6 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "deprecated": "Use your platform's native atob() and btoa() methods instead" }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true, - "peer": true - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -5898,28 +5818,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "optional": true, - "peer": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", - "optional": true, - "peer": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -7062,22 +6960,6 @@ } ] }, - "node_modules/canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/capture-exit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", @@ -7406,16 +7288,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "optional": true, - "peer": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -7520,13 +7392,6 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true, - "peer": true - }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -8371,19 +8236,6 @@ "node": ">=0.10" } }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "optional": true, - "peer": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dedent": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", @@ -8528,13 +8380,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "optional": true, - "peer": true - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -8552,16 +8397,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -11276,39 +11111,6 @@ "node": ">=12" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -11364,60 +11166,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", - "optional": true, - "peer": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true, - "peer": true - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -11869,13 +11617,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "optional": true, - "peer": true - }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -16514,19 +16255,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -16583,50 +16311,6 @@ "node": ">=0.10.0" } }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -17111,22 +16795,6 @@ "node": ">=4" } }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "optional": true, - "peer": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -17375,20 +17043,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", - "optional": true, - "peer": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -18645,7 +18299,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "devOptional": true, + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -19859,13 +19513,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "optional": true, - "peer": true - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -20074,40 +19721,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "devOptional": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "peer": true - }, - "node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "optional": true, - "peer": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } + "dev": true }, "node_modules/simple-update-notifier": { "version": "2.0.0", @@ -20663,7 +20277,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "devOptional": true, + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -20876,7 +20490,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -21382,54 +20996,6 @@ "node": ">=8" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "optional": true, - "peer": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, "node_modules/temp": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", @@ -22357,7 +21923,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "devOptional": true + "dev": true }, "node_modules/util.promisify": { "version": "1.1.3", @@ -22660,9 +22226,10 @@ } }, "node_modules/vite-tsconfig-paths/node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://artifactory.ops.ripple.com/artifactory/api/npm/ripple-npm/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "license": "Apache-2.0", "optional": true, "peer": true, "bin": { @@ -22891,48 +22458,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, - "peer": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wide-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true, - "peer": true - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -25257,64 +24782,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "optional": true, - "peer": true, - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "optional": true, - "peer": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "optional": true, - "peer": true - } - } - }, - "semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "optional": true, - "peer": true - } - } - }, - "@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "optional": true, - "requires": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, "@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -26742,13 +26209,6 @@ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true, - "peer": true - }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -26871,24 +26331,6 @@ } } }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "optional": true, - "peer": true - }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "optional": true, - "peer": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -27703,18 +27145,6 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==" }, - "canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "optional": true, - "peer": true, - "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - } - }, "capture-exit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", @@ -27973,13 +27403,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "optional": true, - "peer": true - }, "colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -28068,13 +27491,6 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true, - "peer": true - }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -28710,16 +28126,6 @@ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "optional": true, - "peer": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, "dedent": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", @@ -28831,13 +28237,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "optional": true, - "peer": true - }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -28848,13 +28247,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, - "detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "optional": true, - "peer": true - }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -30835,35 +30227,6 @@ "universalify": "^2.0.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - } - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -30900,52 +30263,6 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "optional": true, - "peer": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true, - "peer": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "optional": true, - "peer": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "peer": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -31257,13 +30574,6 @@ "has-symbols": "^1.0.3" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "optional": true, - "peer": true - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -34744,13 +34054,6 @@ "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "optional": true, - "peer": true - }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -34791,43 +34094,6 @@ } } }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "optional": true, - "peer": true - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - } - } - }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -35191,16 +34457,6 @@ } } }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "optional": true, - "peer": true, - "requires": { - "abbrev": "1" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -35391,19 +34647,6 @@ "path-key": "^3.0.0" } }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "optional": true, - "peer": true, - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -36282,7 +35525,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "devOptional": true, + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -37186,13 +36429,6 @@ "send": "0.19.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "optional": true, - "peer": true - }, "set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -37346,26 +36582,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "devOptional": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "optional": true, - "peer": true - }, - "simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "optional": true, - "peer": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } + "dev": true }, "simple-update-notifier": { "version": "2.0.0", @@ -37811,7 +37028,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "devOptional": true, + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -37969,7 +37186,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -38330,44 +37547,6 @@ } } }, - "tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "optional": true, - "peer": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "optional": true, - "peer": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "peer": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - } - } - }, "temp": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", @@ -39032,7 +38211,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "devOptional": true + "dev": true }, "util.promisify": { "version": "1.1.3", @@ -39211,9 +38390,9 @@ "requires": {} }, "typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://artifactory.ops.ripple.com/artifactory/api/npm/ripple-npm/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "optional": true, "peer": true } @@ -39391,44 +38570,6 @@ "has-tostringtag": "^1.0.2" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, - "peer": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true, - "peer": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "optional": true, - "peer": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "peer": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, "word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", diff --git a/package.json b/package.json index d16c9538a..b7ceea79b 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ ], "prettier": "@xrplf/prettier-config", "engines": { - "node": ">=22.0.0 <23", - "npm": ">=9.0.0 <11.0.0" + "node": ">=22.0.0 <23.0.0", + "npm": ">=9.0.0 <12.0.0" } } From 45142b370a1a82cb3fb2c13939cb33606114d11f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 Aug 2025 18:13:19 +0000 Subject: [PATCH 06/24] Fix linting, TypeScript, and test failures Co-authored-by: mvadari <8029314+mvadari@users.noreply.github.com> --- .../Transaction/AccountDelete/Simple.tsx | 4 +- .../Transaction/AccountDelete/index.ts | 3 +- .../test/AccountDeleteSimple.test.tsx | 36 ++++++++++---- .../components/Transaction/CredentialIDs.tsx | 10 ++-- .../Transaction/DepositPreauth/Simple.tsx | 25 ++++++---- .../Transaction/DepositPreauth/parser.ts | 18 ++++--- .../test/DepositPreauthSimple.test.tsx | 48 ++++++++++++------- .../components/Transaction/Payment/Simple.tsx | 3 +- .../Transaction/Payment/TableDetail.tsx | 13 +++-- 9 files changed, 102 insertions(+), 58 deletions(-) diff --git a/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx b/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx index d8a2f75aa..4a4715c68 100644 --- a/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx +++ b/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx @@ -11,7 +11,9 @@ interface AccountDeleteWithCredentials extends AccountDelete { CredentialIDs?: string[] } -export const Simple = ({ data }: TransactionSimpleProps) => { +export const Simple = ({ + data, +}: TransactionSimpleProps) => { const { t } = useTranslation() const tx = data.instructions diff --git a/src/containers/shared/components/Transaction/AccountDelete/index.ts b/src/containers/shared/components/Transaction/AccountDelete/index.ts index bb85ed620..9279b3d77 100644 --- a/src/containers/shared/components/Transaction/AccountDelete/index.ts +++ b/src/containers/shared/components/Transaction/AccountDelete/index.ts @@ -16,5 +16,6 @@ export const AccountDeleteTransaction: TransactionMapping = { Simple, action: TransactionAction.CANCEL, category: TransactionCategory.ACCOUNT, - parser: (tx: AccountDeleteWithCredentials): AccountDeleteWithCredentials => tx, + parser: (tx: AccountDeleteWithCredentials): AccountDeleteWithCredentials => + tx, } diff --git a/src/containers/shared/components/Transaction/AccountDelete/test/AccountDeleteSimple.test.tsx b/src/containers/shared/components/Transaction/AccountDelete/test/AccountDeleteSimple.test.tsx index 9bde8b4be..0e8de4b1f 100644 --- a/src/containers/shared/components/Transaction/AccountDelete/test/AccountDeleteSimple.test.tsx +++ b/src/containers/shared/components/Transaction/AccountDelete/test/AccountDeleteSimple.test.tsx @@ -1,6 +1,8 @@ -import i18n from '../../../../../../i18n/testConfigEnglish' - -import { createSimpleWrapperFactory, expectSimpleRowText, expectSimpleRowLabel } from '../../test' +import { + createSimpleWrapperFactory, + expectSimpleRowText, + expectSimpleRowLabel, +} from '../../test' import { Simple } from '../Simple' import mockAccountDelete from './mock_data/AccountDelete.json' import mockAccountDeleteWithDestinationTag from './mock_data/AccountDeleteWithDestinationTag.json' @@ -11,23 +13,39 @@ const createWrapper = createSimpleWrapperFactory(Simple) describe('AccountDelete: Simple', () => { it('renders', () => { const wrapper = createWrapper(mockAccountDelete) - expectSimpleRowText(wrapper, 'destination', 'raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J') + expectSimpleRowText( + wrapper, + 'destination', + 'raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J', + ) wrapper.unmount() }) it('renders with destination tag', () => { const wrapper = createWrapper(mockAccountDeleteWithDestinationTag) - expectSimpleRowText(wrapper, 'destination', 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:123123') + expectSimpleRowText( + wrapper, + 'destination', + 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:123123', + ) wrapper.unmount() }) it('renders with CredentialIDs', () => { const wrapper = createWrapper(mockAccountDeleteWithCredentialIDs) - - expectSimpleRowText(wrapper, 'destination', 'raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J') - expectSimpleRowText(wrapper, 'credential-id-0', '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955') + + expectSimpleRowText( + wrapper, + 'destination', + 'raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J', + ) + expectSimpleRowText( + wrapper, + 'credential-id-0', + '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955', + ) expectSimpleRowLabel(wrapper, 'credential-id-0', 'credential_ids') - + wrapper.unmount() }) }) diff --git a/src/containers/shared/components/Transaction/CredentialIDs.tsx b/src/containers/shared/components/Transaction/CredentialIDs.tsx index 6b526ed25..176c57450 100644 --- a/src/containers/shared/components/Transaction/CredentialIDs.tsx +++ b/src/containers/shared/components/Transaction/CredentialIDs.tsx @@ -7,7 +7,7 @@ interface CredentialIDsProps { export const CredentialIDs = ({ credentialIDs }: CredentialIDsProps) => { const { t } = useTranslation() - + if (!credentialIDs || credentialIDs.length === 0) { return null } @@ -15,9 +15,9 @@ export const CredentialIDs = ({ credentialIDs }: CredentialIDsProps) => { return ( <> {credentialIDs.map((credentialID, index) => ( - {credentialID} @@ -25,4 +25,4 @@ export const CredentialIDs = ({ credentialIDs }: CredentialIDsProps) => { ))} ) -} \ No newline at end of file +} diff --git a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx index 551e31dad..16a339845 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx @@ -2,12 +2,17 @@ import { useTranslation } from 'react-i18next' import { SimpleRow } from '../SimpleRow' import { SimpleGroup } from '../SimpleGroup' import { TransactionSimpleProps } from '../types' -import { DepositPreauth, CredentialAuth } from './types' +import { DepositPreauth } from './types' import { convertHexToString } from '../../../../../rippled/lib/utils' export const Simple = ({ data }: TransactionSimpleProps) => { const { t } = useTranslation() - const { Authorize, Unauthorize, AuthorizeCredentials, UnauthorizeCredentials } = data.instructions + const { + Authorize, + Unauthorize, + AuthorizeCredentials, + UnauthorizeCredentials, + } = data.instructions if (Authorize) { return ( @@ -30,14 +35,14 @@ export const Simple = ({ data }: TransactionSimpleProps) => { {AuthorizeCredentials.map((cred, index) => (
- {cred.Issuer} - {convertHexToString(cred.CredentialType)} @@ -53,14 +58,14 @@ export const Simple = ({ data }: TransactionSimpleProps) => { {UnauthorizeCredentials.map((cred, index) => (
- {cred.Issuer} - {convertHexToString(cred.CredentialType)} diff --git a/src/containers/shared/components/Transaction/DepositPreauth/parser.ts b/src/containers/shared/components/Transaction/DepositPreauth/parser.ts index c0dbe82ba..8e1eaaf9c 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/parser.ts +++ b/src/containers/shared/components/Transaction/DepositPreauth/parser.ts @@ -1,23 +1,21 @@ import { CredentialAuth, DepositPreauth } from './types' // Transform the nested XRPL credential structure to flat CredentialAuth objects -const transformCredentials = (credentials: any[]): CredentialAuth[] => { - return credentials.map((item) => { +const transformCredentials = (credentials: any[]): CredentialAuth[] => + credentials.map((item) => { // Check if it's nested (has Credential wrapper) or already flat if (item.Credential) { return { Issuer: item.Credential.Issuer, CredentialType: item.Credential.CredentialType, } - } else { - // Already flat, return as-is - return { - Issuer: item.Issuer, - CredentialType: item.CredentialType, - } + } + // Already flat, return as-is + return { + Issuer: item.Issuer, + CredentialType: item.CredentialType, } }) -} export const parser = (tx: any): DepositPreauth => { // Handle AuthorizeCredentials (both nested and flat structures) @@ -38,4 +36,4 @@ export const parser = (tx: any): DepositPreauth => { // For Authorize/Unauthorize fields (string-based), pass through unchanged return tx as DepositPreauth -} \ No newline at end of file +} diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx index d4d64d021..251ddb0ba 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx @@ -1,6 +1,8 @@ -import i18n from '../../../../../../i18n/testConfigEnglish' - -import { createSimpleWrapperFactory, expectSimpleRowText, expectSimpleRowLabel } from '../../test' +import { + createSimpleWrapperFactory, + expectSimpleRowText, + expectSimpleRowLabel, +} from '../../test' import { Simple } from '../Simple' import mockDepositPreauth from './mock_data/DepositPreauth.json' import mockDepositPreauthUnauthorize from './mock_data/DepositPreauthUnauthorize.json' @@ -12,48 +14,58 @@ const createWrapper = createSimpleWrapperFactory(Simple) describe('DepositPreauth: Simple', () => { it('renders authorized', () => { const wrapper = createWrapper(mockDepositPreauth) - expectSimpleRowText(wrapper, 'authorize', 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM') + expectSimpleRowText( + wrapper, + 'authorize', + 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM', + ) wrapper.unmount() }) it('renders unauthorized', () => { const wrapper = createWrapper(mockDepositPreauthUnauthorize) - expectSimpleRowText(wrapper, 'unauthorize', 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM') + expectSimpleRowText( + wrapper, + 'unauthorize', + 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM', + ) wrapper.unmount() }) it('renders authorize credentials', () => { const wrapper = createWrapper(mockDepositPreauthAuthorizeCredentials) - - expectSimpleRowText(wrapper, 'authorize-credentials-label', 'accepted_credentials') - expectSimpleRowLabel(wrapper, 'authorize-credentials-label', 'authorize') - + + // Check that SimpleGroup is rendered + expect(wrapper.find('.group')).toHaveLength(1) + expect(wrapper.find('.group-title')).toHaveLength(1) + // Check first credential expectSimpleRowText(wrapper, 'credential-issuer-0', 'rISABEL......') expectSimpleRowLabel(wrapper, 'credential-issuer-0', 'credential_issuer') expectSimpleRowText(wrapper, 'credential-type-0', 'KYC') // 4B5943 hex decodes to "KYC" expectSimpleRowLabel(wrapper, 'credential-type-0', 'credential_type') - + // Check second credential expectSimpleRowText(wrapper, 'credential-issuer-1', 'rTRUSTED.....') - expectSimpleRowLabel(wrapper, 'credential-issuer-1', '') // Empty label for subsequent items + expectSimpleRowLabel(wrapper, 'credential-issuer-1', 'credential_issuer') expectSimpleRowText(wrapper, 'credential-type-1', 'ID') // 4944 hex decodes to "ID" - expectSimpleRowLabel(wrapper, 'credential-type-1', '') // Empty label for subsequent items - + expectSimpleRowLabel(wrapper, 'credential-type-1', 'credential_type') + wrapper.unmount() }) it('renders unauthorize credentials', () => { const wrapper = createWrapper(mockDepositPreauthUnauthorizeCredentials) - - expectSimpleRowText(wrapper, 'unauthorize-credentials-label', 'accepted_credentials') - expectSimpleRowLabel(wrapper, 'unauthorize-credentials-label', 'unauthorize') - + + // Check that SimpleGroup is rendered + expect(wrapper.find('.group')).toHaveLength(1) + expect(wrapper.find('.group-title')).toHaveLength(1) + expectSimpleRowText(wrapper, 'credential-issuer-0', 'rISABEL......') expectSimpleRowLabel(wrapper, 'credential-issuer-0', 'credential_issuer') expectSimpleRowText(wrapper, 'credential-type-0', 'KYC') // 4B5943 hex decodes to "KYC" expectSimpleRowLabel(wrapper, 'credential-type-0', 'credential_type') - + wrapper.unmount() }) }) diff --git a/src/containers/shared/components/Transaction/Payment/Simple.tsx b/src/containers/shared/components/Transaction/Payment/Simple.tsx index b2c6fe97e..5c120b6b5 100644 --- a/src/containers/shared/components/Transaction/Payment/Simple.tsx +++ b/src/containers/shared/components/Transaction/Payment/Simple.tsx @@ -19,7 +19,8 @@ export const Simple = (props: TransactionSimpleProps) => { } const renderPayment = () => { - const { max, destination, sourceTag, partial, domainID, credentialIDs } = data.instructions + const { max, destination, sourceTag, partial, domainID, credentialIDs } = + data.instructions return ( <> diff --git a/src/containers/shared/components/Transaction/Payment/TableDetail.tsx b/src/containers/shared/components/Transaction/Payment/TableDetail.tsx index 35952eda3..8978595f1 100644 --- a/src/containers/shared/components/Transaction/Payment/TableDetail.tsx +++ b/src/containers/shared/components/Transaction/Payment/TableDetail.tsx @@ -8,8 +8,15 @@ export const TableDetail = ({ instructions, }: TransactionTableDetailProps) => { const { t } = useTranslation() - const { convert, amount, destination, partial, sourceTag, domainID, credentialIDs } = - instructions + const { + convert, + amount, + destination, + partial, + sourceTag, + domainID, + credentialIDs, + } = instructions const renderPartial = () => (
{t('partial_payment_allowed')}
@@ -22,7 +29,7 @@ export const TableDetail = ({ return (
{t('credential_ids')}: - {credentialIDs.map((id, index) => ( + {credentialIDs.map((id) => (
{id}
From 2ce9473b0509e8e3af925eb6b6201d87b7a15a73 Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Wed, 26 Nov 2025 13:29:35 -0500 Subject: [PATCH 07/24] fix extraneous typing in accountdelete --- .../components/Transaction/AccountDelete/Simple.tsx | 9 +-------- .../shared/components/Transaction/AccountDelete/index.ts | 8 +------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx b/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx index 4a4715c68..6865d3d50 100644 --- a/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx +++ b/src/containers/shared/components/Transaction/AccountDelete/Simple.tsx @@ -6,14 +6,7 @@ import { TransactionSimpleProps } from '../types' import { Account } from '../../Account' import { CredentialIDs } from '../CredentialIDs' -// Extend the AccountDelete type to include CredentialIDs -interface AccountDeleteWithCredentials extends AccountDelete { - CredentialIDs?: string[] -} - -export const Simple = ({ - data, -}: TransactionSimpleProps) => { +export const Simple = ({ data }: TransactionSimpleProps) => { const { t } = useTranslation() const tx = data.instructions diff --git a/src/containers/shared/components/Transaction/AccountDelete/index.ts b/src/containers/shared/components/Transaction/AccountDelete/index.ts index 9279b3d77..8ccf40a4c 100644 --- a/src/containers/shared/components/Transaction/AccountDelete/index.ts +++ b/src/containers/shared/components/Transaction/AccountDelete/index.ts @@ -7,15 +7,9 @@ import { import { Simple } from './Simple' -// Extend the AccountDelete type to include CredentialIDs -interface AccountDeleteWithCredentials extends AccountDelete { - CredentialIDs?: string[] -} - export const AccountDeleteTransaction: TransactionMapping = { Simple, action: TransactionAction.CANCEL, category: TransactionCategory.ACCOUNT, - parser: (tx: AccountDeleteWithCredentials): AccountDeleteWithCredentials => - tx, + parser: (tx: AccountDelete): AccountDelete => tx, } From 6f0ee1e3d9391e7f6dfc28203a4eec59cd0fdf91 Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Thu, 4 Dec 2025 13:29:26 -0500 Subject: [PATCH 08/24] cleanup, formatting, tested' --- .../Transaction/DepositPreauth/Simple.tsx | 6 ++ .../DepositPreauth/TableDetail.tsx | 78 +++++++++++++++++++ .../Transaction/DepositPreauth/index.ts | 2 + .../Transaction/DepositPreauth/parser.ts | 12 ++- 4 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx diff --git a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx index 16a339845..3d0384d9e 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx @@ -35,6 +35,9 @@ export const Simple = ({ data }: TransactionSimpleProps) => { {AuthorizeCredentials.map((cred, index) => (
+ {index > 0 && ( +
+ )} ) => { {UnauthorizeCredentials.map((cred, index) => (
+ {index > 0 && ( +
+ )} ) => { + const { t } = useTranslation() + const { + Authorize, + Unauthorize, + AuthorizeCredentials, + UnauthorizeCredentials, + } = instructions + + if (Authorize) { + return ( +
+ {t('authorize')} + +
+ ) + } + + if (Unauthorize) { + return ( +
+ {t('unauthorize')} + +
+ ) + } + + if (AuthorizeCredentials && AuthorizeCredentials.length > 0) { + return ( +
+ {t('authorize')} {t('accepted_credentials')} +
+ {AuthorizeCredentials.map((cred, index) => ( +
+ + {convertHexToString(cred.CredentialType)} + + + + +
+ ))} +
+
+ ) + } + + if (UnauthorizeCredentials && UnauthorizeCredentials.length > 0) { + return ( +
+ {t('unauthorize')} {t('accepted_credentials')} +
+ {UnauthorizeCredentials.map((cred, index) => ( +
+ + {convertHexToString(cred.CredentialType)} + + + + +
+ ))} +
+
+ ) + } + + return null +} + diff --git a/src/containers/shared/components/Transaction/DepositPreauth/index.ts b/src/containers/shared/components/Transaction/DepositPreauth/index.ts index 69ec185d9..cc645da8c 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/index.ts +++ b/src/containers/shared/components/Transaction/DepositPreauth/index.ts @@ -6,11 +6,13 @@ import { import { Simple } from './Simple' import { Description } from './Description' +import { TableDetail } from './TableDetail' import { parser } from './parser' export const DepositPreauthTransaction: TransactionMapping = { Description, Simple, + TableDetail, parser, action: TransactionAction.MODIFY, category: TransactionCategory.ACCOUNT, diff --git a/src/containers/shared/components/Transaction/DepositPreauth/parser.ts b/src/containers/shared/components/Transaction/DepositPreauth/parser.ts index 8e1eaaf9c..5ae662af6 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/parser.ts +++ b/src/containers/shared/components/Transaction/DepositPreauth/parser.ts @@ -20,18 +20,22 @@ const transformCredentials = (credentials: any[]): CredentialAuth[] => export const parser = (tx: any): DepositPreauth => { // Handle AuthorizeCredentials (both nested and flat structures) if (tx.AuthorizeCredentials) { - return { - ...tx, + const { Authorize, Unauthorize, ...rest } = tx + const result = { + ...rest, AuthorizeCredentials: transformCredentials(tx.AuthorizeCredentials), } as DepositPreauth + return result } // Handle UnauthorizeCredentials (both nested and flat structures) if (tx.UnauthorizeCredentials) { - return { - ...tx, + const { Authorize, Unauthorize, ...rest } = tx + const result = { + ...rest, UnauthorizeCredentials: transformCredentials(tx.UnauthorizeCredentials), } as DepositPreauth + return result } // For Authorize/Unauthorize fields (string-based), pass through unchanged From d6a45ab2efaeb443833826919b5433efcb32a184 Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Thu, 4 Dec 2025 14:48:29 -0500 Subject: [PATCH 09/24] lock sync --- package-lock.json | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4e21665ed..e48586ba2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3322,6 +3322,19 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://artifactory.ops.ripple.com/artifactory/api/npm/ripple-npm/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -5774,7 +5787,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -24782,6 +24795,18 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://artifactory.ops.ripple.com/artifactory/api/npm/ripple-npm/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, "@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -26303,7 +26328,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true + "dev": true }, "ansi-styles": { "version": "4.3.0", From ecda0b9e5bf0e98f339a79f7964e665ebad5d1d4 Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Thu, 4 Dec 2025 14:50:47 -0500 Subject: [PATCH 10/24] transalations null --- public/locales/es-ES/translations.json | 1 + public/locales/fr-FR/translations.json | 1 + public/locales/ja-JP/translations.json | 1 + public/locales/ko-KR/translations.json | 1 + public/locales/my-MM/translations.json | 1 + 5 files changed, 5 insertions(+) diff --git a/public/locales/es-ES/translations.json b/public/locales/es-ES/translations.json index 42ce3b072..7003721c6 100644 --- a/public/locales/es-ES/translations.json +++ b/public/locales/es-ES/translations.json @@ -567,6 +567,7 @@ "expiration": null, "domain_id": null, "accepted_credentials": null, + "credential_ids": null, "action_from_and": null, "data": null, "finish_function": null, diff --git a/public/locales/fr-FR/translations.json b/public/locales/fr-FR/translations.json index d94b0a2f1..9ed7bc564 100644 --- a/public/locales/fr-FR/translations.json +++ b/public/locales/fr-FR/translations.json @@ -568,6 +568,7 @@ "expiration": null, "domain_id": null, "accepted_credentials": null, + "credential_ids": null, "action_from_and": null, "data": null, "finish_function": null, diff --git a/public/locales/ja-JP/translations.json b/public/locales/ja-JP/translations.json index 3ed660e77..0d04ae9cd 100644 --- a/public/locales/ja-JP/translations.json +++ b/public/locales/ja-JP/translations.json @@ -567,6 +567,7 @@ "expiration": null, "domain_id": null, "accepted_credentials": null, + "credential_ids": null, "action_from_and": null, "data": null, "finish_function": null, diff --git a/public/locales/ko-KR/translations.json b/public/locales/ko-KR/translations.json index 4c9916ae0..345dfefea 100644 --- a/public/locales/ko-KR/translations.json +++ b/public/locales/ko-KR/translations.json @@ -565,6 +565,7 @@ "expiration": null, "domain_id": null, "accepted_credentials": null, + "credential_ids": null, "action_from_and": null, "data": null, "finish_function": null, diff --git a/public/locales/my-MM/translations.json b/public/locales/my-MM/translations.json index fea13bed9..ab5bbbfc5 100644 --- a/public/locales/my-MM/translations.json +++ b/public/locales/my-MM/translations.json @@ -731,6 +731,7 @@ "expiration": null, "domain_id": null, "accepted_credentials": null, + "credential_ids": null, "data": null, "token_page.general_overview": null, "token_page.issuer": null, From b23fb1feb15f2b535ab00a9568534e001a955f1e Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Thu, 4 Dec 2025 15:01:55 -0500 Subject: [PATCH 11/24] lint --- .../DepositPreauth/TableDetail.tsx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx b/src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx index a2573d4ec..8d8d8f316 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx @@ -36,10 +36,15 @@ export const TableDetail = ({ if (AuthorizeCredentials && AuthorizeCredentials.length > 0) { return (
- {t('authorize')} {t('accepted_credentials')} + + {t('authorize')} {t('accepted_credentials')} +
{AuthorizeCredentials.map((cred, index) => ( -
+
{convertHexToString(cred.CredentialType)} @@ -56,10 +61,15 @@ export const TableDetail = ({ if (UnauthorizeCredentials && UnauthorizeCredentials.length > 0) { return (
- {t('unauthorize')} {t('accepted_credentials')} + + {t('unauthorize')} {t('accepted_credentials')} +
{UnauthorizeCredentials.map((cred, index) => ( -
+
{convertHexToString(cred.CredentialType)} @@ -75,4 +85,3 @@ export const TableDetail = ({ return null } - From b48e7265e096eeaa0385276665071b8d0fcf8914 Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Thu, 4 Dec 2025 15:02:36 -0500 Subject: [PATCH 12/24] typescript check --- .../components/Transaction/DepositPreauth/TableDetail.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx b/src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx index 8d8d8f316..9d3d0320f 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx @@ -40,7 +40,7 @@ export const TableDetail = ({ {t('authorize')} {t('accepted_credentials')}
- {AuthorizeCredentials.map((cred, index) => ( + {AuthorizeCredentials.map((cred) => (
- {UnauthorizeCredentials.map((cred, index) => ( + {UnauthorizeCredentials.map((cred) => (
Date: Mon, 15 Dec 2025 20:38:19 +0000 Subject: [PATCH 13/24] Add unit tests for Payment and EscrowFinish CredentialIDs support Co-authored-by: mvadari <8029314+mvadari@users.noreply.github.com> --- .../test/EscrowFinishSimple.test.tsx | 21 +++++++ .../EscrowFinishWithCredentialIDs.json | 62 +++++++++++++++++++ .../Payment/test/PaymentTableDetail.test.tsx | 17 +++++ 3 files changed, 100 insertions(+) create mode 100644 src/containers/shared/components/Transaction/EscrowFinish/test/mock_data/EscrowFinishWithCredentialIDs.json diff --git a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx index 18a893c1c..9aab08cb2 100644 --- a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx +++ b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx @@ -3,6 +3,7 @@ import { createSimpleWrapperFactory } from '../../test/createWrapperFactory' import { Simple } from '../Simple' import mockEscrowFinish from './mock_data/EscrowFinish.json' import mockEscrowFinishCompAllow from './mock_data/EscrowFinishComputationAllowance.json' +import mockEscrowFinishCredentialIDs from './mock_data/EscrowFinishWithCredentialIDs.json' const createWrapper = createSimpleWrapperFactory(Simple) @@ -82,4 +83,24 @@ describe('EscrowFinishSimple', () => { ) wrapper.unmount() }) + + it('renders with CredentialIDs', () => { + const wrapper = createWrapper(mockEscrowFinishCredentialIDs) + expect(wrapper.find('[data-testid="escrow-amount"] .value')).toHaveText( + `\uE9000.0154 XRP`, + ) + expect(wrapper.find('[data-testid="credential-id-0"]')).toExist() + expect(wrapper.find('[data-testid="credential-id-1"]')).toExist() + expect( + wrapper.find('[data-testid="credential-id-0"] .value'), + ).toHaveText( + '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955', + ) + expect( + wrapper.find('[data-testid="credential-id-1"] .value'), + ).toHaveText( + '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956', + ) + wrapper.unmount() + }) }) diff --git a/src/containers/shared/components/Transaction/EscrowFinish/test/mock_data/EscrowFinishWithCredentialIDs.json b/src/containers/shared/components/Transaction/EscrowFinish/test/mock_data/EscrowFinishWithCredentialIDs.json new file mode 100644 index 000000000..a78d263bc --- /dev/null +++ b/src/containers/shared/components/Transaction/EscrowFinish/test/mock_data/EscrowFinishWithCredentialIDs.json @@ -0,0 +1,62 @@ +{ + "hash": "985F9CA6FD2256D5C59F8B2CC1F51BDB2F12EB7C58CB2CCA7E4A74161432B7C4", + "ledger_index": 37467862, + "date": "2018-03-25T00:45:12+00:00", + "tx": { + "TransactionType": "EscrowFinish", + "Flags": 2147483648, + "Fulfillment": "Fulfillment", + "Sequence": 31, + "OfferSequence": 28, + "LastLedgerSequence": 37467863, + "Fee": "12", + "SigningPubKey": "0380BB0305B1192D1F20E2E15C93E99434F8DF52ED72FC18FA4F69671B578691DF", + "TxnSignature": "30450221009254A6DE4960F185E19A6717B000EB542C1340BABB5E1C0447D743FB00A026A50220232DFE95819DA27B789DF47359C3EDD29FC539041EFF8526185D42485CF886A6", + "Account": "r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8", + "Owner": "r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8", + "CredentialIDs": [ + "7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955", + "8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956" + ] + }, + "meta": { + "TransactionIndex": 23, + "AffectedNodes": [ + { + "ModifiedNode": { + "LedgerEntryType": "AccountRoot", + "PreviousTxnLgrSeq": 37467849, + "PreviousTxnID": "C730DAD26F068100CDD7F5CF17CFB7EA729D3000BFDF92BBC36590C4FE906866", + "LedgerIndex": "70AD67C13AB61B6FCAF9CD65862478E079B05C772D65F60179EC8E7E7701740E", + "PreviousFields": { + "Sequence": 31, + "OwnerCount": 4, + "Balance": "59916121" + }, + "FinalFields": { + "Flags": 0, + "Sequence": 32, + "OwnerCount": 3, + "Balance": "59931509", + "Account": "r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8" + } + } + }, + { + "DeletedNode": { + "LedgerEntryType": "Escrow", + "LedgerIndex": "89C78DC2F504E3C8CA91C7BE9EA53CA7F72F44A30F8F57CFA8CF8BA90ADC6826", + "FinalFields": { + "Destination": "r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8", + "Amount": "15400", + "PreviousTxnLgrSeq": 37467849, + "Account": "r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8", + "PreviousTxnID": "3E2E755FA75FF1020C39E2ECC407E9F1C0E49A7229EDD15FF93B9F869878F1CC" + } + } + } + ], + "TransactionResult": "tesSUCCESS", + "delivered_amount": "15400" + } +} diff --git a/src/containers/shared/components/Transaction/Payment/test/PaymentTableDetail.test.tsx b/src/containers/shared/components/Transaction/Payment/test/PaymentTableDetail.test.tsx index 4d4647240..0c23e66be 100644 --- a/src/containers/shared/components/Transaction/Payment/test/PaymentTableDetail.test.tsx +++ b/src/containers/shared/components/Transaction/Payment/test/PaymentTableDetail.test.tsx @@ -7,6 +7,7 @@ import mockPaymentPartial from './mock_data/PaymentWithPartial.json' import mockPaymentSendMax from './mock_data/PaymentWithSendMax.json' import mockPaymentSourceTag from './mock_data/PaymentWithSourceTag.json' import mockPermDomainID from './mock_data/PaymentWithPermDomainID.json' +import mockPaymentCredentialIDs from './mock_data/PaymentWithCredentialIDs.json' const createWrapper = createTableDetailWrapperFactory(TableDetail) @@ -81,4 +82,20 @@ describe('Payment: TableDetail', () => { `domain_id: D3261DF48CDA3B860ED3FA99F02138856393CD44556E028D5CB66192A18A8D02`, ) }) + + it('renders with CredentialIDs', () => { + const wrapper = createWrapper(mockPaymentCredentialIDs) + + expect(wrapper.find('.credential-ids')).toExist() + expect(wrapper.find('.credential-ids .label')).toHaveText('credential_ids: ') + expect(wrapper.find('.credential-id').length).toBe(2) + expect(wrapper.find('.credential-id').at(0)).toHaveText( + '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955', + ) + expect(wrapper.find('.credential-id').at(1)).toHaveText( + '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956', + ) + + wrapper.unmount() + }) }) From c863f9a17795282cb8401c795fd6b944e73f47ce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 20:39:46 +0000 Subject: [PATCH 14/24] Fix linting issues in test files Co-authored-by: mvadari <8029314+mvadari@users.noreply.github.com> --- .../EscrowFinish/test/EscrowFinishSimple.test.tsx | 8 ++------ .../Transaction/Payment/test/PaymentTableDetail.test.tsx | 4 +++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx index 9aab08cb2..d98520191 100644 --- a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx +++ b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx @@ -91,14 +91,10 @@ describe('EscrowFinishSimple', () => { ) expect(wrapper.find('[data-testid="credential-id-0"]')).toExist() expect(wrapper.find('[data-testid="credential-id-1"]')).toExist() - expect( - wrapper.find('[data-testid="credential-id-0"] .value'), - ).toHaveText( + expect(wrapper.find('[data-testid="credential-id-0"] .value')).toHaveText( '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955', ) - expect( - wrapper.find('[data-testid="credential-id-1"] .value'), - ).toHaveText( + expect(wrapper.find('[data-testid="credential-id-1"] .value')).toHaveText( '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956', ) wrapper.unmount() diff --git a/src/containers/shared/components/Transaction/Payment/test/PaymentTableDetail.test.tsx b/src/containers/shared/components/Transaction/Payment/test/PaymentTableDetail.test.tsx index 0c23e66be..fa26f1184 100644 --- a/src/containers/shared/components/Transaction/Payment/test/PaymentTableDetail.test.tsx +++ b/src/containers/shared/components/Transaction/Payment/test/PaymentTableDetail.test.tsx @@ -87,7 +87,9 @@ describe('Payment: TableDetail', () => { const wrapper = createWrapper(mockPaymentCredentialIDs) expect(wrapper.find('.credential-ids')).toExist() - expect(wrapper.find('.credential-ids .label')).toHaveText('credential_ids: ') + expect(wrapper.find('.credential-ids .label')).toHaveText( + 'credential_ids: ', + ) expect(wrapper.find('.credential-id').length).toBe(2) expect(wrapper.find('.credential-id').at(0)).toHaveText( '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955', From 7f9c5b69cc0e4ba494e254bde15482a5aba14984 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 22:51:01 +0000 Subject: [PATCH 15/24] Remove inline styles and add PaymentChannelClaim CredentialIDs test Co-authored-by: mvadari <8029314+mvadari@users.noreply.github.com> --- .../Transaction/DepositPreauth/Simple.tsx | 6 -- .../test/PaymentChannelClaimSimple.test.tsx | 17 +++++ .../PaymentChannelClaimWithCredentialIDs.json | 70 +++++++++++++++++++ 3 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 src/containers/shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaimWithCredentialIDs.json diff --git a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx index 3d0384d9e..16a339845 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx @@ -35,9 +35,6 @@ export const Simple = ({ data }: TransactionSimpleProps) => { {AuthorizeCredentials.map((cred, index) => (
- {index > 0 && ( -
- )} ) => { {UnauthorizeCredentials.map((cred, index) => (
- {index > 0 && ( -
- )} { expectSimpleRowNotToExist(wrapper, 'closed') wrapper.unmount() }) + + it('renders tx with CredentialIDs', () => { + const wrapper = createWrapper(mockPaymentChannelClaimWithCredentialIDs) + expectSimpleRowText(wrapper, 'amount', '\uE90070.00 XRP') + expectSimpleRowText(wrapper, 'claimed', '\uE9000.01 XRP') + expectSimpleRowText(wrapper, 'total', '\uE90049.65716 XRP') + expect(wrapper.find('[data-testid="credential-id-0"]')).toExist() + expect(wrapper.find('[data-testid="credential-id-1"]')).toExist() + expect(wrapper.find('[data-testid="credential-id-0"] .value')).toHaveText( + '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955', + ) + expect(wrapper.find('[data-testid="credential-id-1"] .value')).toHaveText( + '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956', + ) + wrapper.unmount() + }) }) diff --git a/src/containers/shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaimWithCredentialIDs.json b/src/containers/shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaimWithCredentialIDs.json new file mode 100644 index 000000000..90ae03cc6 --- /dev/null +++ b/src/containers/shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaimWithCredentialIDs.json @@ -0,0 +1,70 @@ +{ + "hash": "B576A11C6AE8830A1C1B77C27567D62E39A03E62DBE8FC1A09D463C2400B808A", + "ledger_index": 37564494, + "date": "2018-03-29T01:38:11+00:00", + "tx": { + "TransactionType": "PaymentChannelClaim", + "Flags": 2147483648, + "Sequence": 1103, + "LastLedgerSequence": 37564495, + "Channel": "50107651E7163E294CE0EAD8A20BF7CC046304480FCC9C74A49FFAB3F46FB98E", + "Balance": "49657160", + "Fee": "12", + "PublicKey": "ED46FF956B8EEC4BA614B1A6B0B4343D623AE37A891A0461F1F51464CFC3442CF7", + "SigningPubKey": "03D488B5AA26C87CB14BF23D470520F592A0006A916F5FEEAAB48335D8811A2E9F", + "TxnSignature": "304402205E511EE2CA9BEE36F4078C24E8849A87565692938DB6C1998B449EE4A4A7BFF402201B9B78A1CE11522CCEB973FFA0BC55D8F561657A5383331EAADC6F0D67F2C347", + "Signature": "55C8169517E6353A7168B4F6BE202C0C4D0828CBC3556D4576A3FF67D117F678AEC624FC98417460FA172F313FD920030C8C50B38542BD8744F578A568FB730B", + "Account": "rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN", + "CredentialIDs": [ + "7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955", + "8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956" + ] + }, + "meta": { + "TransactionIndex": 10, + "AffectedNodes": [ + { + "ModifiedNode": { + "LedgerEntryType": "AccountRoot", + "PreviousTxnLgrSeq": 37563014, + "PreviousTxnID": "6540E08162D034074B36A130C3683147C5BAC4E081138A97AABC4425ED264DDB", + "LedgerIndex": "1779FCFCF53ACAF81150E49FCDA32AE74B3DB67FCA77C054E0DEA3DEC4EFE053", + "PreviousFields": { + "Sequence": 1103, + "Balance": "284620533" + }, + "FinalFields": { + "Flags": 0, + "Sequence": 1104, + "OwnerCount": 50, + "Balance": "284630521", + "Account": "rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN" + } + } + }, + { + "ModifiedNode": { + "LedgerEntryType": "PayChannel", + "PreviousTxnLgrSeq": 37539781, + "PreviousTxnID": "9CB070C9F40DB0D50D70E1EB1E4C69D8B48DBDDDE06263711D01595F68722936", + "LedgerIndex": "50107651E7163E294CE0EAD8A20BF7CC046304480FCC9C74A49FFAB3F46FB98E", + "PreviousFields": { + "Balance": "49647160" + }, + "FinalFields": { + "Flags": 0, + "SourceTag": 1002539517, + "SettleDelay": 3600, + "OwnerNode": "0000000000000001", + "Amount": "70000000", + "Balance": "49657160", + "PublicKey": "ED46FF956B8EEC4BA614B1A6B0B4343D623AE37A891A0461F1F51464CFC3442CF7", + "Account": "rnNzy3iPc7gPEAJbAdXwxY1UTBamBqTYhR", + "Destination": "rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN" + } + } + } + ], + "TransactionResult": "tesSUCCESS" + } +} From abf6e8a3f23116509db46e61430bf16dec168efc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 19:08:52 +0000 Subject: [PATCH 16/24] Add unit tests for DepositPreauth TableDetail component Co-authored-by: mvadari <8029314+mvadari@users.noreply.github.com> --- .../test/DepositPreauthTableDetail.test.tsx | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthTableDetail.test.tsx diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthTableDetail.test.tsx b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthTableDetail.test.tsx new file mode 100644 index 000000000..40ba8880c --- /dev/null +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthTableDetail.test.tsx @@ -0,0 +1,58 @@ +import { createTableDetailWrapperFactory } from '../../test' +import { TableDetail } from '../TableDetail' +import mockDepositPreauth from './mock_data/DepositPreauth.json' +import mockDepositPreauthAuthorizeCredentials from './mock_data/DepositPreauthAuthorizeCredentials.json' +import mockDepositPreauthUnauthorize from './mock_data/DepositPreauthUnauthorize.json' +import mockDepositPreauthUnauthorizeCredentials from './mock_data/DepositPreauthUnauthorizeCredentials.json' +import i18n from '../../../../../../i18n/testConfigEnglish' + +const createWrapper = createTableDetailWrapperFactory(TableDetail, i18n) + +describe('DepositPreauthTableDetail', () => { + it('renders DepositPreauth with Authorize', () => { + const wrapper = createWrapper(mockDepositPreauth) + expect(wrapper.find('.deposit-preauth')).toExist() + expect(wrapper.find('.deposit-preauth .label')).toHaveText('authorize') + expect(wrapper.find('[data-testid="account"]')).toExist() + expect(wrapper.find('[data-testid="account"]').at(0)).toHaveText( + 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM', + ) + wrapper.unmount() + }) + + it('renders DepositPreauth with Unauthorize', () => { + const wrapper = createWrapper(mockDepositPreauthUnauthorize) + expect(wrapper.find('.deposit-preauth')).toExist() + expect(wrapper.find('.deposit-preauth .label')).toHaveText('unauthorize') + expect(wrapper.find('[data-testid="account"]')).toExist() + expect(wrapper.find('[data-testid="account"]').at(0)).toHaveText( + 'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM', + ) + wrapper.unmount() + }) + + it('renders DepositPreauth with AuthorizeCredentials', () => { + const wrapper = createWrapper(mockDepositPreauthAuthorizeCredentials) + expect(wrapper.find('.deposit-preauth')).toExist() + expect(wrapper.find('.deposit-preauth .label')).toHaveText( + 'authorize Accepted Credentials', + ) + expect(wrapper.find('.credentials')).toExist() + expect(wrapper.find('.credential').length).toBe(2) + expect(wrapper.find('.credential-type').at(0)).toHaveText('KYC') + expect(wrapper.find('.credential-type').at(1)).toHaveText('ID') + wrapper.unmount() + }) + + it('renders DepositPreauth with UnauthorizeCredentials', () => { + const wrapper = createWrapper(mockDepositPreauthUnauthorizeCredentials) + expect(wrapper.find('.deposit-preauth')).toExist() + expect(wrapper.find('.deposit-preauth .label')).toHaveText( + 'unauthorize Accepted Credentials', + ) + expect(wrapper.find('.credentials')).toExist() + expect(wrapper.find('.credential').length).toBe(1) + expect(wrapper.find('.credential-type').at(0)).toHaveText('KYC') + wrapper.unmount() + }) +}) From 7331a7af2b2ddd6289dda36648eb401ccfcbdaa5 Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Tue, 16 Dec 2025 14:24:15 -0500 Subject: [PATCH 17/24] revert package and package lock --- package-lock.json | 880 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 4 +- 2 files changed, 859 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index e48586ba2..752028178 100644 --- a/package-lock.json +++ b/package-lock.json @@ -114,8 +114,8 @@ "xrpl": "^4.4.0" }, "engines": { - "node": ">=22.0.0 <23.0.0", - "npm": ">=9.0.0 <12.0.0" + "node": ">=22.0.0 <23", + "npm": ">=9.0.0 <11.0.0" } }, "node_modules/@adobe/css-tools": { @@ -3322,9 +3322,69 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "peer": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "peer": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", - "resolved": "https://artifactory.ops.ripple.com/artifactory/api/npm/ripple-npm/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", "dev": true, "license": "MIT", @@ -5656,6 +5716,13 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "deprecated": "Use your platform's native atob() and btoa() methods instead" }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true, + "peer": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -5787,7 +5854,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -5831,6 +5898,28 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true, + "peer": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "peer": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -6973,6 +7062,22 @@ } ] }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/capture-exit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", @@ -7301,6 +7406,16 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "peer": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -7405,6 +7520,13 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true, + "peer": true + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -8249,6 +8371,19 @@ "node": ">=0.10" } }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "peer": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dedent": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", @@ -8393,6 +8528,13 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true, + "peer": true + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -8410,6 +8552,16 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -11124,6 +11276,39 @@ "node": ">=12" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true, + "peer": true + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -11179,6 +11364,60 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "optional": true, + "peer": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true, + "peer": true + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -11630,6 +11869,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true, + "peer": true + }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -16268,6 +16514,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -16324,6 +16583,50 @@ "node": ">=0.10.0" } }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true, + "peer": true + }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -16808,6 +17111,22 @@ "node": ">=4" } }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "peer": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -17056,6 +17375,20 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "peer": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -18312,7 +18645,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -19526,6 +19859,13 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true, + "peer": true + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -19734,7 +20074,40 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "devOptional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "peer": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "peer": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } }, "node_modules/simple-update-notifier": { "version": "2.0.0", @@ -20290,7 +20663,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, + "devOptional": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -20503,7 +20876,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -21009,6 +21382,54 @@ "node": ">=8" } }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "peer": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true, + "peer": true + }, "node_modules/temp": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", @@ -21936,7 +22357,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "devOptional": true }, "node_modules/util.promisify": { "version": "1.1.3", @@ -22239,10 +22660,9 @@ } }, "node_modules/vite-tsconfig-paths/node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://artifactory.ops.ripple.com/artifactory/api/npm/ripple-npm/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", - "license": "Apache-2.0", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "optional": true, "peer": true, "bin": { @@ -22471,6 +22891,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "peer": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wide-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true, + "peer": true + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -24795,9 +25257,55 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "peer": true, + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "peer": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "optional": true, + "peer": true + } + } + }, + "semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "optional": true, + "peer": true + } + } + }, "@napi-rs/wasm-runtime": { "version": "0.2.12", - "resolved": "https://artifactory.ops.ripple.com/artifactory/api/npm/ripple-npm/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", "dev": true, "optional": true, @@ -26234,6 +26742,13 @@ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true, + "peer": true + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -26328,7 +26843,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "devOptional": true }, "ansi-styles": { "version": "4.3.0", @@ -26356,6 +26871,24 @@ } } }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true, + "peer": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "optional": true, + "peer": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -27170,6 +27703,18 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==" }, + "canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "optional": true, + "peer": true, + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + } + }, "capture-exit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", @@ -27428,6 +27973,13 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "peer": true + }, "colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -27516,6 +28068,13 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true, + "peer": true + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -28151,6 +28710,16 @@ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "peer": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, "dedent": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", @@ -28262,6 +28831,13 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true, + "peer": true + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -28272,6 +28848,13 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "optional": true, + "peer": true + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -30252,6 +30835,35 @@ "universalify": "^2.0.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "peer": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true, + "peer": true + } + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -30288,6 +30900,52 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "optional": true, + "peer": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true, + "peer": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "peer": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "peer": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -30599,6 +31257,13 @@ "has-symbols": "^1.0.3" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true, + "peer": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -34079,6 +34744,13 @@ "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "peer": true + }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -34119,6 +34791,43 @@ } } }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "peer": true + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "peer": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true, + "peer": true + } + } + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -34482,6 +35191,16 @@ } } }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "peer": true, + "requires": { + "abbrev": "1" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -34672,6 +35391,19 @@ "path-key": "^3.0.0" } }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "optional": true, + "peer": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -35550,7 +36282,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -36454,6 +37186,13 @@ "send": "0.19.0" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true, + "peer": true + }, "set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -36607,7 +37346,26 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "devOptional": true + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "optional": true, + "peer": true + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "peer": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } }, "simple-update-notifier": { "version": "2.0.0", @@ -37053,7 +37811,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, + "devOptional": true, "requires": { "safe-buffer": "~5.2.0" } @@ -37211,7 +37969,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "devOptional": true, "requires": { "ansi-regex": "^5.0.1" } @@ -37572,6 +38330,44 @@ } } }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "peer": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true, + "peer": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "peer": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true, + "peer": true + } + } + }, "temp": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", @@ -38236,7 +39032,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "devOptional": true }, "util.promisify": { "version": "1.1.3", @@ -38415,9 +39211,9 @@ "requires": {} }, "typescript": { - "version": "5.9.2", - "resolved": "https://artifactory.ops.ripple.com/artifactory/api/npm/ripple-npm/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "optional": true, "peer": true } @@ -38595,6 +39391,44 @@ "has-tostringtag": "^1.0.2" } }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "peer": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true, + "peer": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "peer": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "peer": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, "word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", diff --git a/package.json b/package.json index b7ceea79b..d16c9538a 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ ], "prettier": "@xrplf/prettier-config", "engines": { - "node": ">=22.0.0 <23.0.0", - "npm": ">=9.0.0 <12.0.0" + "node": ">=22.0.0 <23", + "npm": ">=9.0.0 <11.0.0" } } From 40f06bb52a4c8b48e69eaef8142cdd109cf78f15 Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Tue, 16 Dec 2025 15:26:17 -0500 Subject: [PATCH 18/24] fix desc for depositpreauth --- .../DepositPreauth/Description.tsx | 79 ++++++++++++++----- .../test/DepositPreauthDescription.test.tsx | 24 ++++++ 2 files changed, 85 insertions(+), 18 deletions(-) diff --git a/src/containers/shared/components/Transaction/DepositPreauth/Description.tsx b/src/containers/shared/components/Transaction/DepositPreauth/Description.tsx index e722ba14c..eb7bf59cd 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/Description.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/Description.tsx @@ -2,26 +2,69 @@ import { Trans } from 'react-i18next' import { Account } from '../../Account' import { TransactionDescriptionProps } from '../types' import { DepositPreauth } from './types' +import { convertHexToString } from '../../../../../rippled/lib/utils' +import { parser } from './parser' export const Description = ({ data, }: TransactionDescriptionProps) => { - const { tx } = data - return tx.Authorize ? ( -
- - It Authorizes - - to send payments to the account - -
- ) : ( -
- - It removes the authorization for - - to send payments to the account - -
- ) + const tx = parser(data.tx) + + if (tx.Authorize) { + return ( +
+ + It Authorizes + + to send payments to the account + +
+ ) + } + + if (tx.Unauthorize) { + return ( +
+ + It removes the authorization for + + to send payments to the account + +
+ ) + } + + if (tx.AuthorizeCredentials && tx.AuthorizeCredentials.length > 0) { + return ( +
+

It authorizes the following credentials:

+
    + {tx.AuthorizeCredentials.map((cred) => ( +
  • + {convertHexToString(cred.CredentialType)} from{' '} + +
  • + ))} +
+
+ ) + } + + if (tx.UnauthorizeCredentials && tx.UnauthorizeCredentials.length > 0) { + return ( +
+

It removes the authorization for the following credentials:

+
    + {tx.UnauthorizeCredentials.map((cred) => ( +
  • + {convertHexToString(cred.CredentialType)} from{' '} + +
  • + ))} +
+
+ ) + } + + return null } diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthDescription.test.tsx b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthDescription.test.tsx index fdaa7079e..325da6b52 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthDescription.test.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthDescription.test.tsx @@ -2,6 +2,8 @@ import i18n from '../../../../../../i18n/testConfigEnglish' import mockDepositPreaut from './mock_data/DepositPreauth.json' import mockDepositPreauthUnauthorize from './mock_data/DepositPreauthUnauthorize.json' +import mockDepositPreauthAuthorizeCredentials from './mock_data/DepositPreauthAuthorizeCredentials.json' +import mockDepositPreauthUnauthorizeCredentials from './mock_data/DepositPreauthUnauthorizeCredentials.json' import { Description } from '../Description' import { createDescriptionWrapperFactory } from '../../test' @@ -24,4 +26,26 @@ describe('DepositPreauth: Description', () => { ) wrapper.unmount() }) + + it('renders description for authorize credentials', () => { + const wrapper = createWrapper(mockDepositPreauthAuthorizeCredentials) + const html = wrapper.html() + expect(html).toContain('It authorizes the following credentials:') + expect(html).toContain('4B5943') + expect(html).toContain('rISABEL') + expect(html).toContain('4944') + expect(html).toContain('rTRUSTED') + wrapper.unmount() + }) + + it('renders description for unauthorize credentials', () => { + const wrapper = createWrapper(mockDepositPreauthUnauthorizeCredentials) + const html = wrapper.html() + expect(html).toContain( + 'It removes the authorization for the following credentials:', + ) + expect(html).toContain('4B5943') + expect(html).toContain('rISABEL') + wrapper.unmount() + }) }) From 9261c436c5c5e6ac79100b15c349db0d2577bcbe Mon Sep 17 00:00:00 2001 From: Phu Pham Date: Tue, 16 Dec 2025 15:39:52 -0500 Subject: [PATCH 19/24] fix SimpleGroup display --- src/containers/Transactions/simpleTab.scss | 9 +++++++++ .../components/Transaction/DepositPreauth/Simple.tsx | 9 +++++---- .../DepositPreauth/test/DepositPreauthSimple.test.tsx | 4 ++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/containers/Transactions/simpleTab.scss b/src/containers/Transactions/simpleTab.scss index 33ca57a64..9f2681031 100644 --- a/src/containers/Transactions/simpleTab.scss +++ b/src/containers/Transactions/simpleTab.scss @@ -6,6 +6,15 @@ $subdued-color: $black-40; .rows { padding-top: 0px; + .groups-title { + display: block; + flex-direction: row; + color: $black-40; + font-size: 14px; + font-weight: 600; + text-transform: uppercase; + } + .partial-row { display: flex; overflow: hidden; diff --git a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx index 16a339845..a7ac06a7b 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx @@ -32,9 +32,10 @@ export const Simple = ({ data }: TransactionSimpleProps) => { if (AuthorizeCredentials && AuthorizeCredentials.length > 0) { return ( - + <> +
{`${t('authorize')} ${t('accepted_credentials')}`}
{AuthorizeCredentials.map((cred, index) => ( -
+ ) => { > {convertHexToString(cred.CredentialType)} -
+
))} - + ) } diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx index 251ddb0ba..049884694 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx @@ -36,7 +36,7 @@ describe('DepositPreauth: Simple', () => { const wrapper = createWrapper(mockDepositPreauthAuthorizeCredentials) // Check that SimpleGroup is rendered - expect(wrapper.find('.group')).toHaveLength(1) + expect(wrapper.find('.group')).toHaveLength(2) expect(wrapper.find('.group-title')).toHaveLength(1) // Check first credential @@ -59,7 +59,7 @@ describe('DepositPreauth: Simple', () => { // Check that SimpleGroup is rendered expect(wrapper.find('.group')).toHaveLength(1) - expect(wrapper.find('.group-title')).toHaveLength(1) + expect(wrapper.find('.groups-title')).toHaveLength(1) expectSimpleRowText(wrapper, 'credential-issuer-0', 'rISABEL......') expectSimpleRowLabel(wrapper, 'credential-issuer-0', 'credential_issuer') From 40146cea9b353b857c6101e7cb2848f000e33f8e Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Tue, 16 Dec 2025 15:50:08 -0500 Subject: [PATCH 20/24] translations --- public/locales/en-US/translations.json | 2 ++ public/locales/es-ES/translations.json | 2 ++ public/locales/fr-FR/translations.json | 2 ++ public/locales/ja-JP/translations.json | 2 ++ public/locales/ko-KR/translations.json | 2 ++ public/locales/my-MM/translations.json | 2 ++ .../Transaction/DepositPreauth/Description.tsx | 9 +++++---- 7 files changed, 17 insertions(+), 4 deletions(-) diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 5cd8db619..1b1acce98 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -332,6 +332,8 @@ "set_nftoken_minter_description": "It sets <0>{{account}} as the authorized minter for this account", "deposit_auth": "It authorizes <1><0>{{account}} to send payments to this account", "deposit_unauth": "It removes the authorization for <1><0>{{account}} to send payments to this account", + "deposit_auth_credentials": "It authorizes the following credentials:", + "deposit_unauth_credentials": "It removes the authorization for the following credentials:", "invalid_xrpl_address": "Invalid XRPL address", "loading": "Loading", "get_ledger_failed": "Unable to load ledger", diff --git a/public/locales/es-ES/translations.json b/public/locales/es-ES/translations.json index 0ff5ba1e9..0a1feadee 100644 --- a/public/locales/es-ES/translations.json +++ b/public/locales/es-ES/translations.json @@ -318,6 +318,8 @@ "set_nftoken_minter_description": "Se establece a <0>{{account}} como el acuñador autorizado para esta cuenta", "deposit_auth": "Se autoriza a <1><0>{{account}} a enviar pagos a esta cuenta", "deposit_unauth": "Se elimina la autorización a <1><0>{{account}} para enviar pagos a esta cuenta", + "deposit_auth_credentials": null, + "deposit_unauth_credentials": null, "invalid_xrpl_address": "Dirección XRPL inválida", "loading": "Cargando", "get_ledger_failed": "No ha sido posible cargar el libro contable", diff --git a/public/locales/fr-FR/translations.json b/public/locales/fr-FR/translations.json index 127d687c8..281f370bf 100644 --- a/public/locales/fr-FR/translations.json +++ b/public/locales/fr-FR/translations.json @@ -320,6 +320,8 @@ "set_nftoken_minter_description": "Définit <0>{{account}} comme le forgeur autorisé pour ce compte.", "deposit_auth": "Autorise <1><0>{{account}} à envoyer des paiements vers ce compte.", "deposit_unauth": "Supprime l'autorisation pour <1><0>{{account}} d'envoyer des paiements à ce compte.", + "deposit_auth_credentials": null, + "deposit_unauth_credentials": null, "invalid_xrpl_address": "Adresse XRPL invalide", "loading": "Chargement en cours", "get_ledger_failed": "Impossible de charger le registre", diff --git a/public/locales/ja-JP/translations.json b/public/locales/ja-JP/translations.json index 680bf2527..6476699ae 100644 --- a/public/locales/ja-JP/translations.json +++ b/public/locales/ja-JP/translations.json @@ -320,6 +320,8 @@ "set_nftoken_minter_description": "<0>{{account}} をNFTの認可発行者として設定しました。", "deposit_auth": "<1><0>{{account}} からの送金を許可しました", "deposit_unauth": "<1><0>{{account}} からの送金の許可を削除しました", + "deposit_auth_credentials": null, + "deposit_unauth_credentials": null, "invalid_xrpl_address": "不正なXRPLアドレスです", "loading": "読み込み中", "get_ledger_failed": "レジャ情報ーを取得することができません", diff --git a/public/locales/ko-KR/translations.json b/public/locales/ko-KR/translations.json index 6463fc01a..584e8c01f 100644 --- a/public/locales/ko-KR/translations.json +++ b/public/locales/ko-KR/translations.json @@ -319,6 +319,8 @@ "set_nftoken_minter_description": "<0>{{account}}을 이 계정의 공인 발행인으로 설정합니다", "deposit_auth": "<1><0>{{account}}을 이 계정으로 결제를 보낼 수 있도록 승인합니다", "deposit_unauth": "<1><0>{{account}}의 이 계정으로의 결제 권한을 삭제합니다", + "deposit_auth_credentials": null, + "deposit_unauth_credentials": null, "invalid_xrpl_address": "유효하지 않은 XRPL 주소", "loading": "불러오는 중", "get_ledger_failed": "원장을 불러올 수 없습니다", diff --git a/public/locales/my-MM/translations.json b/public/locales/my-MM/translations.json index f44ecf0ac..0a2cc50e4 100644 --- a/public/locales/my-MM/translations.json +++ b/public/locales/my-MM/translations.json @@ -324,6 +324,8 @@ "set_nftoken_minter_description": "၎င်းသည် <0>{{account}} ကို ဤအကောင့်အတွက် ခွင့်ပြုချက်ရ NFT ထုတ်လုပ်သူအဖြစ် သတ်မှတ်သည်", "deposit_auth": "၎င်းသည် <1><0>{{account}} အား ဤအကောင့်သို့ ငွေပေးချေရန် ခွင့်ပြုသည်", "deposit_unauth": "၎င်းသည် <1><0>{{account}} ၏ ဤအကောင့်သို့ ငွေပေးချေခွင့်ကို ပယ်ဖျက်သည်", + "deposit_auth_credentials": null, + "deposit_unauth_credentials": null, "invalid_xrpl_address": "XRPL လိပ်စာ မှားယွင်းနေပါသည်", "loading": "ဖွင့်နေသည်", "get_ledger_failed": "Ledger ကို ဖွင့်၍မရပါ", diff --git a/src/containers/shared/components/Transaction/DepositPreauth/Description.tsx b/src/containers/shared/components/Transaction/DepositPreauth/Description.tsx index eb7bf59cd..68c16fec5 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/Description.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/Description.tsx @@ -1,4 +1,4 @@ -import { Trans } from 'react-i18next' +import { Trans, useTranslation } from 'react-i18next' import { Account } from '../../Account' import { TransactionDescriptionProps } from '../types' import { DepositPreauth } from './types' @@ -8,13 +8,14 @@ import { parser } from './parser' export const Description = ({ data, }: TransactionDescriptionProps) => { + const { t } = useTranslation() const tx = parser(data.tx) if (tx.Authorize) { return (
- It Authorizes + It authorizes to send payments to the account @@ -37,7 +38,7 @@ export const Description = ({ if (tx.AuthorizeCredentials && tx.AuthorizeCredentials.length > 0) { return (
-

It authorizes the following credentials:

+

{t('deposit_auth_credentials')}

    {tx.AuthorizeCredentials.map((cred) => (
  • @@ -53,7 +54,7 @@ export const Description = ({ if (tx.UnauthorizeCredentials && tx.UnauthorizeCredentials.length > 0) { return (
    -

    It removes the authorization for the following credentials:

    +

    {t('deposit_unauth_credentials')}

      {tx.UnauthorizeCredentials.map((cred) => (
    • From 851c3c2694ae9f48beb4e1dad127cf689ba7699d Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Tue, 16 Dec 2025 15:58:53 -0500 Subject: [PATCH 21/24] fix payment --- .../components/Transaction/CredentialIDs.tsx | 14 +++----------- .../Payment/test/PaymentSimple.test.tsx | 16 ++++------------ 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/src/containers/shared/components/Transaction/CredentialIDs.tsx b/src/containers/shared/components/Transaction/CredentialIDs.tsx index 176c57450..24ca39033 100644 --- a/src/containers/shared/components/Transaction/CredentialIDs.tsx +++ b/src/containers/shared/components/Transaction/CredentialIDs.tsx @@ -13,16 +13,8 @@ export const CredentialIDs = ({ credentialIDs }: CredentialIDsProps) => { } return ( - <> - {credentialIDs.map((credentialID, index) => ( - - {credentialID} - - ))} - + + {credentialIDs.join(', ')} + ) } diff --git a/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx b/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx index c03de38fe..9e5a0f6ee 100644 --- a/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx +++ b/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx @@ -177,21 +177,13 @@ describe('Payment: Simple', () => { `rHoPwMC75KVUhBMeV3uDMybKG5JND74teh`, ) - // Check first credential ID + // Check credential IDs as comma-separated list expectSimpleRowText( wrapper, - 'credential-id-0', - '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955', + 'credential-ids', + '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955, 8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956', ) - expectSimpleRowLabel(wrapper, 'credential-id-0', 'credential_ids') - - // Check second credential ID (should have empty label) - expectSimpleRowText( - wrapper, - 'credential-id-1', - '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956', - ) - expectSimpleRowLabel(wrapper, 'credential-id-1', '') + expectSimpleRowLabel(wrapper, 'credential-ids', 'credential_ids') wrapper.unmount() }) From 6e2ce73275709d22aa1aa7c62fb52c80ccc6c36b Mon Sep 17 00:00:00 2001 From: Phu Pham Date: Tue, 16 Dec 2025 16:01:39 -0500 Subject: [PATCH 22/24] fix SimpleGroups for Unauthorize --- .../components/Transaction/DepositPreauth/Simple.tsx | 9 +++++---- .../DepositPreauth/test/DepositPreauthSimple.test.tsx | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx index a7ac06a7b..748195ab6 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx @@ -56,9 +56,10 @@ export const Simple = ({ data }: TransactionSimpleProps) => { if (UnauthorizeCredentials && UnauthorizeCredentials.length > 0) { return ( - + <> +
      {`${t('unauthorize')} ${t('accepted_credentials')}`}
      {UnauthorizeCredentials.map((cred, index) => ( -
      + ) => { > {convertHexToString(cred.CredentialType)} -
      +
      ))} - + ) } diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx index 049884694..d85380d05 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx @@ -37,7 +37,7 @@ describe('DepositPreauth: Simple', () => { // Check that SimpleGroup is rendered expect(wrapper.find('.group')).toHaveLength(2) - expect(wrapper.find('.group-title')).toHaveLength(1) + expect(wrapper.find('.groups-title')).toHaveLength(1) // Check first credential expectSimpleRowText(wrapper, 'credential-issuer-0', 'rISABEL......') From dc06b627f112fe8223eaf87fdb92553ef453ad47 Mon Sep 17 00:00:00 2001 From: Phu Pham Date: Tue, 16 Dec 2025 16:08:08 -0500 Subject: [PATCH 23/24] fix tests --- .../DepositPreauth/test/DepositPreauthDescription.test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthDescription.test.tsx b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthDescription.test.tsx index 325da6b52..ee6847485 100644 --- a/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthDescription.test.tsx +++ b/src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthDescription.test.tsx @@ -31,9 +31,9 @@ describe('DepositPreauth: Description', () => { const wrapper = createWrapper(mockDepositPreauthAuthorizeCredentials) const html = wrapper.html() expect(html).toContain('It authorizes the following credentials:') - expect(html).toContain('4B5943') + expect(html).toContain('KYC') expect(html).toContain('rISABEL') - expect(html).toContain('4944') + expect(html).toContain('ID') expect(html).toContain('rTRUSTED') wrapper.unmount() }) @@ -44,7 +44,7 @@ describe('DepositPreauth: Description', () => { expect(html).toContain( 'It removes the authorization for the following credentials:', ) - expect(html).toContain('4B5943') + expect(html).toContain('KYC') expect(html).toContain('rISABEL') wrapper.unmount() }) From a1f12f441f7a23e1ea311f79fed300a3c48ff92d Mon Sep 17 00:00:00 2001 From: Ashray Chowdhry Date: Tue, 16 Dec 2025 16:37:24 -0500 Subject: [PATCH 24/24] fix tests --- .../components/Transaction/CredentialIDs.tsx | 14 +++++++++++--- .../Payment/test/PaymentSimple.test.tsx | 14 ++++++++++---- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/containers/shared/components/Transaction/CredentialIDs.tsx b/src/containers/shared/components/Transaction/CredentialIDs.tsx index 24ca39033..d4c9a101b 100644 --- a/src/containers/shared/components/Transaction/CredentialIDs.tsx +++ b/src/containers/shared/components/Transaction/CredentialIDs.tsx @@ -13,8 +13,16 @@ export const CredentialIDs = ({ credentialIDs }: CredentialIDsProps) => { } return ( - - {credentialIDs.join(', ')} - + <> + {credentialIDs.map((id, index) => ( + + {id} + + ))} + ) } diff --git a/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx b/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx index 9e5a0f6ee..3bda80b96 100644 --- a/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx +++ b/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx @@ -177,13 +177,19 @@ describe('Payment: Simple', () => { `rHoPwMC75KVUhBMeV3uDMybKG5JND74teh`, ) - // Check credential IDs as comma-separated list + // Check credential IDs as individual rows expectSimpleRowText( wrapper, - 'credential-ids', - '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955, 8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956', + 'credential-id-0', + '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955', ) - expectSimpleRowLabel(wrapper, 'credential-ids', 'credential_ids') + expectSimpleRowLabel(wrapper, 'credential-id-0', 'credential_ids') + expectSimpleRowText( + wrapper, + 'credential-id-1', + '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956', + ) + expectSimpleRowLabel(wrapper, 'credential-id-1', '') wrapper.unmount() })