mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-05 21:35:49 +00:00
Parse transaction flags into map of names:booleans (#2734)
* overview logic of parsetransactionflags * parse transaction flags works * basic tests * eslint and docs * linting * lint * fix typing * test fix * revert import delete * lint * integration fix * lint * imports * added numeric test * add history log * history update
This commit is contained in:
@@ -2,6 +2,11 @@
|
||||
|
||||
Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xrpl-announce) for release announcements. We recommend that xrpl.js (ripple-lib) users stay up-to-date with the latest stable release.
|
||||
|
||||
## Unreleased Changes
|
||||
|
||||
### Added
|
||||
* parseTransactionFlags as a utility function in the xrpl package to streamline transactions flags-to-map conversion
|
||||
|
||||
## 4.0.0 (2024-07-15)
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
@@ -10,6 +10,7 @@ export * as LedgerEntry from './ledger'
|
||||
export {
|
||||
setTransactionFlagsToNumber,
|
||||
parseAccountRootFlags,
|
||||
parseTransactionFlags,
|
||||
} from './utils/flags'
|
||||
export * from './methods'
|
||||
export * from './transactions'
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/* eslint-disable no-param-reassign -- param reassign is safe */
|
||||
/* eslint-disable no-bitwise -- flags require bitwise operations */
|
||||
|
||||
import { ValidationError } from '../../errors'
|
||||
import {
|
||||
AccountRootFlagsInterface,
|
||||
@@ -90,3 +89,30 @@ function convertFlagsToNumber(flags: GlobalFlags, flagEnum: any): number {
|
||||
return flags[flag] ? resultFlags | flagEnum[flag] : resultFlags
|
||||
}, 0)
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a Transaction flags property into a map for easy interpretation.
|
||||
*
|
||||
* @param tx - A transaction to parse flags for.
|
||||
* @returns A map with all flags as booleans.
|
||||
*/
|
||||
export function parseTransactionFlags(tx: Transaction): object {
|
||||
setTransactionFlagsToNumber(tx)
|
||||
if (typeof tx.Flags !== 'number' || !tx.Flags || tx.Flags === 0) {
|
||||
return {}
|
||||
}
|
||||
|
||||
const flags = tx.Flags
|
||||
const flagsMap = {}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- safe member access
|
||||
const flagEnum = txToFlag[tx.TransactionType]
|
||||
Object.values(flagEnum).forEach((flag) => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- safe member access
|
||||
if (typeof flag === 'string' && isFlagEnabled(flags, flagEnum[flag])) {
|
||||
flagsMap[flag] = true
|
||||
}
|
||||
})
|
||||
|
||||
return flagsMap
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import { isFlagEnabled } from '../../src/models/utils'
|
||||
import {
|
||||
setTransactionFlagsToNumber,
|
||||
parseAccountRootFlags,
|
||||
parseTransactionFlags,
|
||||
} from '../../src/models/utils/flags'
|
||||
|
||||
/**
|
||||
@@ -207,5 +208,60 @@ describe('Models Utils', function () {
|
||||
assert.isUndefined(parsed.lsfDisallowIncomingTrustline)
|
||||
assert.isUndefined(parsed.lsfAllowTrustLineClawback)
|
||||
})
|
||||
|
||||
it('parseTransactionFlags all enabled', function () {
|
||||
const tx: PaymentChannelClaim = {
|
||||
Account: 'r...',
|
||||
TransactionType: 'PaymentChannelClaim',
|
||||
Channel:
|
||||
'C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198',
|
||||
Flags: {
|
||||
tfRenew: true,
|
||||
tfClose: false,
|
||||
},
|
||||
}
|
||||
|
||||
const expected = {
|
||||
tfRenew: true,
|
||||
}
|
||||
|
||||
const flagsMap = parseTransactionFlags(tx)
|
||||
assert.notStrictEqual(flagsMap, expected)
|
||||
})
|
||||
|
||||
it('parseTransactionFlags all false', function () {
|
||||
const tx: PaymentChannelClaim = {
|
||||
Account: 'r...',
|
||||
TransactionType: 'PaymentChannelClaim',
|
||||
Channel:
|
||||
'C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198',
|
||||
Flags: {
|
||||
tfRenew: false,
|
||||
tfClose: false,
|
||||
},
|
||||
}
|
||||
|
||||
const expected = {}
|
||||
|
||||
const flagsMap = parseTransactionFlags(tx)
|
||||
assert.notStrictEqual(flagsMap, expected)
|
||||
})
|
||||
|
||||
it('parseTransactionFlags flag is already numeric', function () {
|
||||
const tx: PaymentChannelClaim = {
|
||||
Account: 'r...',
|
||||
TransactionType: 'PaymentChannelClaim',
|
||||
Channel:
|
||||
'C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198',
|
||||
Flags: 65536,
|
||||
}
|
||||
|
||||
const expected = {
|
||||
tfRenew: true,
|
||||
}
|
||||
|
||||
const flagsMap = parseTransactionFlags(tx)
|
||||
assert.notStrictEqual(flagsMap, expected)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user