- Validation of public keys and delegate names for
api.voteForDelegate()
method
- Check if an address is actually a delegate in
api.voteForDelegate()
- More validation error messages for
api.voteForDelegate()
- A bug when only one random node was checked
- Log messages for health checks
-
transformTransactionQuery
function:const transformed = transformTransactionQuery({ fromHeight: 7585271, and: { toHeight: 7586280, }, or: { senderId: 'U18132012621449491414', }, }); /** * { * and:fromHeight: 7585271, * and:toHeight: 7586280, * or:senderId: 'U18132012621449491414' * } */ console.log(transformed);
-
TypeScript:
id
should havestring
type in the methods:api.getTransaction()
,api.getQueuedTransaction()
,api.getUnconfirmedTransaction()
-
Global installation of packages that use
adamant-api
as its dependency -
Transaction query methods:
const blocks = await api.getTransactions({ fromHeight: 7585271, and: { toHeight: 7586280, }, or: { senderId: 'U18132012621449491414', }, });
-
Export validator utils:
function isPassphrase(passphrase: unknown): passphrase is string; function isAdmAddress(address: unknown): address is AdamantAddress; function isAdmPublicKey(publicKey: unknown): publicKey is string; function isAdmVoteForPublicKey(publicKey: unknown): publicKey is string; function isAdmVoteForAddress(address: unknown): boolean; function isAdmVoteForDelegateName( delegateName: unknown ): delegateName is string; function validateMessage( message: string, messageType: MessageType = MessageType.Chat ): {success: false; error: string} | {success: true}; function isDelegateName(name: unknown): name is string; function admToSats(amount: number): number;
-
api.initSocket()
now accepts an instance ofWebSocketClient
as an argument:const socket = new WebSocketClient({ /* ... */ }); api.initSocket(socket); // instead of api.socket = socket;
-
Improved the
encodeMessage()
anddecodeMessage()
functions to accept public keys as Uint8Array or Bufferimport {encodeMessage, createKeypairFromPassphrase} from 'adamant-api' const {publicKey} = createKeypairFromPassphrase('...') const message = encodeMessage(,, publicKey) // No need to convert public key to string
-
decodeMessage()
allows passing a key pair instead of a passphrase:import {decodeMessage, createKeypairFromPassphrase} from 'adamant-api' const keyPair = createKeypairFromPassphrase('...') const message = decodeMessage(,, keyPair,) // <- It won't create a key pair from passphrase again
-
TypeScript: Export transaction handlers TypeScript utils:
SingleTransactionHandler
,AnyTransactionHandler
,TransactionHandler<T extends AnyTransaction>
-
TypeScript: Fixed typing for
AdamantApiOptions
by addingLogLevelName
as possible value forlogLevel
property.For example, you can now use
'log'
instead ofLogLevel.Log
in TypeScript:const api = new AdamantApi({/* ... */ logLevel: 'log'});
-
TypeScript: Added missing declaration modules to npm that led to the error:
Could not find a declaration file for module 'coininfo'. /// <reference path="../../types/coininfo.d.ts" />
-
TypeScript:
amount
property inChatTransactionData
(createChatTransaction()
argument) is now truly optional:- amount: number | undefined; + amount?: number;
-
TypeScript support
The project was fully rewritten in TypeScript, which means it supports typings now.
See examples directory.
-
More API methods
Added more API methods:
// before const block = await api.get('blocks/get', {id}); // after const block = await api.getBlock(id);
and
post()
method:await api.post('transactions/process', {transaction});
-
getTransactionId() method
Pass signed transaction with signature to get a transaction id as a string:
import {getTransactionId} from 'adamant-api'; const id = getTransactionId(signedTransaction);
See documentation for more information.
-
Creating multiple instances
Previously, it was not possible to create multiple instances due to the storage of Logger and "Node Manager" data in the modules.
-
Importing module several times
Fixed a bug where importing adamant-api-jsclient caused issues when it was also imported as a dependency.
-
API Initialization
Now you will create new instances of
adamant-api
using keywordnew
:import {AdamantApi} from 'adamant-api'; const api = new AdamantApi({ nodes: [ /* ... */ ], });
-
Socket Initialization
Replace
api.socket.initSocket()
withapi.initSocket()
.Use
api.socket.on()
instead of.initSocket({ onNewMessage() {} })
.// before api.socket.initSocket({ admAddress: 'U1234..', onNewMessage(transaction) { // ... }, }); // after api.initSocket({admAddress: 'U1234..'}); api.socket.on((transaction: AnyTransaction) => { // ... });
Or specify
socket
option when initializing API:// socket.ts import {WebSocketClient, TransactionType} from 'adamant-api'; const socket = new WebSocketClient({admAddress: 'U1234..'}); socket.on( [TransactionType.CHAT_MESSAGE, TransactionType.SEND], transaction => { // handle chat messages and transfer tokens transactions } ); socket.on(TransactionType.VOTE, transaction => { // handle vote for delegate transaction }); export {socket};
// api.ts import {AdamantApi} from 'adamant-api'; import {socket} from './socket'; export const api = new AdamantApi({ socket, nodes: [ /* ... */ ], });
-
createTransaction()
Use
createSendTransaction
,createStateTransaction
,createChatTransaction
,createDelegateTransaction
,createVoteTransaction
methods instead.