-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathtransaction-factory.ts
More file actions
53 lines (47 loc) · 2.73 KB
/
Copy pathtransaction-factory.ts
File metadata and controls
53 lines (47 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { Transaction } from '@hiero-ledger/sdk';
import { TransactionBaseModel } from './transaction-base.model';
import { getTransactionType } from '@app/common';
import { AccountAllowanceApproveTransactionModel } from './account-allowance-approve-transaction.model';
import { AccountCreateTransactionModel } from './account-create-transaction.model';
import { AccountDeleteTransactionModel } from './account-delete-transaction.model';
import { AccountUpdateTransactionModel } from './account-update-transaction.model';
import { FileAppendTransactionModel } from './file-append-transaction.model';
import { FileCreateTransactionModel } from './file-create-transaction.model';
import { FileUpdateTransactionModel } from './file-update-transaction.model';
import { FreezeTransactionModel } from './freeze-transaction.model';
import { NodeCreateTransactionModel } from './node-create-transaction.model';
import { NodeDeleteTransactionModel } from './node-delete-transaction.model';
import { NodeUpdateTransactionModel } from './node-update-transaction.model';
import { SystemDeleteTransactionModel } from './system-delete-transaction.model';
import { SystemUndeleteTransactionModel } from './system-undelete-transaction.model';
import { TransferTransactionModel } from './transfer-transaction.model';
type TxModelCtor = new (tx: Transaction) => TransactionBaseModel<any>;
const TRANSACTION_MODEL_MAP = new Map<string, TxModelCtor>([
['AccountAllowanceApproveTransaction', AccountAllowanceApproveTransactionModel],
['AccountCreateTransaction', AccountCreateTransactionModel],
['AccountDeleteTransaction', AccountDeleteTransactionModel],
['AccountUpdateTransaction', AccountUpdateTransactionModel],
['FileAppendTransaction', FileAppendTransactionModel],
['FileCreateTransaction', FileCreateTransactionModel],
['FileUpdateTransaction', FileUpdateTransactionModel],
['FreezeTransaction', FreezeTransactionModel],
['NodeCreateTransaction', NodeCreateTransactionModel],
['NodeDeleteTransaction', NodeDeleteTransactionModel],
['NodeUpdateTransaction', NodeUpdateTransactionModel],
['SystemDeleteTransaction', SystemDeleteTransactionModel],
['SystemUndeleteTransaction', SystemUndeleteTransactionModel],
['TransferTransaction', TransferTransactionModel],
] as unknown as Array<[string, TxModelCtor]>);
export default class TransactionFactory {
static fromTransaction(tx: Transaction): TransactionBaseModel<any> {
const type = getTransactionType(tx, true);
const Model = TRANSACTION_MODEL_MAP.get(type);
if (!Model) {
throw new Error(`No transaction model registered for type: ${type}`);
}
return new Model(tx);
}
static fromBytes(bytes: Buffer): TransactionBaseModel<any> {
return this.fromTransaction(Transaction.fromBytes(bytes));
}
}