Skip to content

Commit 6036ea6

Browse files
committed
feat: typed attachment version identifiers
1 parent 2f94039 commit 6036ea6

File tree

9 files changed

+75
-97
lines changed

9 files changed

+75
-97
lines changed

examples/nodejs/basic/listMessages.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const {
2-
isAttachmentVersion,
2+
hasAttachment,
33
TransactionType,
44
TransactionArbitrarySubtype, Address
55
} = require('@signumjs/core');
@@ -8,7 +8,7 @@ const {api, askAccount, handleError } = require('../helper');
88

99
// here we check for a certain attachment type, and get the text message if not encrypted
1010
const getMessageText = transaction =>
11-
isAttachmentVersion(transaction, 'EncryptedMessage')
11+
hasAttachment(transaction, 'EncryptedMessage')
1212
? '<encrypted>'
1313
: transaction.attachment.message;
1414

packages/core/src/api/__tests__/e2e/messageApi.spec.e2e.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
import {describe, it, beforeAll, expect} from "vitest"
12
import {loadEnvironment} from './helpers/environment';
23
import {ChainService} from '../../../service/chainService';
3-
import {decryptMessage, generateMasterKeys, getAccountIdFromPublicKey, SignKeys} from '@signumjs/crypto';
4+
import {decryptMessage, generateSignKeys, getAccountIdFromPublicKey, SignKeys} from '@signumjs/crypto';
45
import {getTransaction} from '../../factories/transaction/getTransaction';
5-
import {isAttachmentVersion} from '../../../attachment';
6+
import {getAttachmentVersion} from '../../../attachment';
67
import {sendEncryptedMessage, sendMessage} from '../../factories/message';
78
import {FeeQuantPlanck} from '@signumjs/util';
89
import {TransactionId} from '../../../typings/transactionId';
910

1011

12+
1113
describe('[E2E] Message Api', () => {
1214

1315
let environment;
@@ -22,10 +24,9 @@ describe('[E2E] Message Api', () => {
2224
nodeHost: environment.testNetHost,
2325
apiRootUrl: environment.testNetApiPath
2426
});
25-
vi.setTimeout(environment.timeout);
2627

27-
senderKeys = generateMasterKeys(environment.testPassphrase);
28-
recipientKeys = generateMasterKeys(environment.testRecipientPassphrase);
28+
senderKeys = generateSignKeys(environment.testPassphrase);
29+
recipientKeys = generateSignKeys(environment.testRecipientPassphrase);
2930
recipientId = getAccountIdFromPublicKey(recipientKeys.publicKey);
3031
});
3132

@@ -45,7 +46,7 @@ describe('[E2E] Message Api', () => {
4546
expect(transactionId).not.toBeUndefined();
4647

4748
const transaction = await getTransaction(service)(transactionId.transaction);
48-
expect(isAttachmentVersion(transaction, 'PublicKeyAnnouncement')).toBeTruthy();
49+
expect(getAttachmentVersion(transaction, 'PublicKeyAnnouncement')).toBeTruthy();
4950

5051
});
5152

@@ -65,7 +66,7 @@ describe('[E2E] Message Api', () => {
6566
expect(transactionId).not.toBeUndefined();
6667

6768
const transaction = await getTransaction(service)(transactionId.transaction);
68-
expect(isAttachmentVersion(transaction, 'PublicKeyAnnouncement')).toBeTruthy();
69+
expect(getAttachmentVersion(transaction, 'PublicKeyAnnouncement')).toBe(1);
6970

7071
});
7172

@@ -88,11 +89,11 @@ describe('[E2E] Message Api', () => {
8889
it('should get a transaction from BRS with encrypted message and decrypt successfully', async () => {
8990
const transaction = await getTransaction(service)(environment.testEncryptedMessageTransactionId);
9091
expect(transaction).not.toBeUndefined();
91-
isAttachmentVersion(transaction, 'EncryptedMessage');
9292
const {encryptedMessage} = transaction.attachment;
93-
9493
const recipientsMessage = decryptMessage(encryptedMessage, transaction.senderPublicKey, recipientKeys.agreementPrivateKey);
94+
9595
const sendersMessage = decryptMessage(encryptedMessage, recipientKeys.publicKey, senderKeys.agreementPrivateKey);
96+
expect(getAttachmentVersion(transaction, 'EncryptedMessage')).toBe(1);
9697
expect(recipientsMessage).toEqual('[E2E] sendEncryptedTextMessage TEST (encrypted)');
9798
expect(recipientsMessage).toEqual(sendersMessage);
9899

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
1+
import {describe, it, expect} from "vitest"
12
import {getAttachmentVersion} from '../getAttachmentVersion';
3+
import {Transaction} from '../../typings/transaction';
4+
25
describe('getAttachmentVersion', () => {
36

47
it('return the correct version string', () => {
58
const transaction = {
69
transaction: '123',
7-
attachment: {'version.CustomVersionId': 1, foo: 1}
8-
};
10+
attachment: {'version.AliasAssignment': 1, foo: 1}
11+
} as Transaction;
912

10-
const result = getAttachmentVersion(transaction);
11-
expect(result).toBe('CustomVersionId');
13+
expect( getAttachmentVersion(transaction, "AliasAssignment")).toBe(1);
1214

1315
});
1416

1517
it('returns undefined in case of not existing attachment', () => {
1618
const transaction = {
1719
transaction: '123'
18-
};
19-
const result = getAttachmentVersion(transaction);
20-
expect(result).not.toBeDefined();
20+
} as Transaction;
21+
expect(getAttachmentVersion(transaction, "AliasAssignment")).toBe(0);
2122
});
2223

2324
it('return undefined in case of not existing version', () => {
2425
const transaction = {
2526
transaction: '123',
2627
attachment: {foo: 123}
27-
};
28-
const result = getAttachmentVersion(transaction);
29-
expect(result).not.toBeDefined();
28+
} as Transaction;
29+
expect(getAttachmentVersion(transaction, "AliasAssignment")).toBe(0);
3030
});
3131
});

packages/core/src/attachment/__tests__/isAttachmentVersion.spec.ts

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
import {Transaction} from '../typings/transaction';
2+
import {AttachmentVersionIdentifier} from '../typings/attachmentVersionIdentifier';
23

34
/**
4-
* Get the transaction attachment version identifier
5-
*
6-
* Attachment types are identified by a field _version.<Identifier>_
7-
*
5+
* Gets the attachment version
86
* @param transaction The transaction to be checked
9-
* @return return _Identifier_, if exists, otherwise `undefined`
7+
* @param versionIdentifier The versionIdentifier string, i.e. MultiOutCreation
8+
* @return 0 if not existent, or version number
109
*
1110
*/
12-
export function getAttachmentVersion(transaction: Transaction): string {
13-
const {attachment} = transaction;
14-
if (!attachment) { return undefined; }
15-
16-
const versionIdentifier = Object.keys(attachment).filter(k => k.startsWith('version'));
17-
if (versionIdentifier.length === 0) { return undefined; }
18-
19-
const identifier = versionIdentifier[0];
20-
return identifier.substr(identifier.indexOf('.') + 1);
11+
export function getAttachmentVersion(transaction: Transaction, versionIdentifier: AttachmentVersionIdentifier): number {
12+
return transaction?.attachment?.[`version.${versionIdentifier}`] ?? 0;
2113
}
Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
import {isAttachmentVersion} from './isAttachmentVersion';
2-
import {getAttachmentVersion} from './getAttachmentVersion';
1+
export {getAttachmentVersion} from './getAttachmentVersion';
32

4-
// TODO: create a value object for Attachment
5-
export {
6-
isAttachmentVersion,
7-
getAttachmentVersion,
8-
};
93

packages/core/src/attachment/isAttachmentVersion.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

packages/core/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export * from './typings/assetAccount';
3333
export * from './typings/assetAccountList';
3434
export * from './typings/assetBalance';
3535
export * from './typings/attachment';
36+
export * from './typings/attachmentVersionIdentifier';
3637
export * from './typings/balance';
3738
export * from './typings/block';
3839
export * from './typings/blockId';
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
export type AttachmentVersionIdentifier = string |
2+
"OrdinaryPayment" |
3+
"AssetAddTreasuryAccount" |
4+
"MultiOutCreation" |
5+
"ArbitraryMessage" |
6+
"AT Payment" |
7+
"AliasAssignment" |
8+
"TLDAssignment" |
9+
"AliasSell" |
10+
"AliasBuy" |
11+
"AccountInfo" |
12+
"AssetIssuance" |
13+
"AssetTransfer" |
14+
"AssetMultiTransfer" |
15+
"AssetTransferOwnership" |
16+
"AssetMint" |
17+
"AssetDistributeToHolders" |
18+
"AskOrderPlacement" |
19+
"BidOrderPlacement" |
20+
"AskOrderCancellation" |
21+
"BidOrderCancellation" |
22+
"DigitalGoodsListing" |
23+
"DigitalGoodsDelisting" |
24+
"DigitalGoodsPriceChange" |
25+
"DigitalGoodsQuantityChange" |
26+
"DigitalGoodsPurchase" |
27+
"DigitalGoodsDelivery" |
28+
"DigitalGoodsFeedback" |
29+
"DigitalGoodsRefund" |
30+
"EffectiveBalanceLeasing" |
31+
"RewardRecipientAssignment" |
32+
"CommitmentAdd" |
33+
"CommitmentRemove" |
34+
"EscrowCreation" |
35+
"EscrowSign" |
36+
"EscrowResult" |
37+
"SubscriptionSubscribe" |
38+
"SubscriptionCancel" |
39+
"SubscriptionPayment" |
40+
"AutomatedTransactionsCreation" |
41+
"PublicKeyAnnouncement" |
42+
"Message" |
43+
"EncryptedMessage" |
44+
"EncryptToSelfMessage"
45+

0 commit comments

Comments
 (0)