@hashgraphonline/standards-sdk 0.0.174 → 0.0.176
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{index-xQfUfn20.cjs → index-DBI7RYzm.cjs} +19 -19
- package/dist/cjs/{index-xQfUfn20.cjs.map → index-DBI7RYzm.cjs.map} +1 -1
- package/dist/cjs/{index-DNOBUKZd-g0uNa1rQ.cjs → index-DNOBUKZd-PuaZE8zI.cjs} +2 -2
- package/dist/cjs/{index-DNOBUKZd-g0uNa1rQ.cjs.map → index-DNOBUKZd-PuaZE8zI.cjs.map} +1 -1
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/cjs/{standards-sdk.es47-LpJXpYet-fj1bqMZs.cjs → standards-sdk.es47-LpJXpYet-Dn0a_M7H.cjs} +2 -2
- package/dist/cjs/{standards-sdk.es47-LpJXpYet-fj1bqMZs.cjs.map → standards-sdk.es47-LpJXpYet-Dn0a_M7H.cjs.map} +1 -1
- package/dist/cjs/{standards-sdk.es48-PT6ZHlCU-vkSluOOc.cjs → standards-sdk.es48-PT6ZHlCU-CpnblkfW.cjs} +2 -2
- package/dist/cjs/{standards-sdk.es48-PT6ZHlCU-vkSluOOc.cjs.map → standards-sdk.es48-PT6ZHlCU-CpnblkfW.cjs.map} +1 -1
- package/dist/cjs/{standards-sdk.es49-BoFc-ELK-DC0zfqT0.cjs → standards-sdk.es49-BoFc-ELK-AFqdqMBQ.cjs} +2 -2
- package/dist/cjs/{standards-sdk.es49-BoFc-ELK-DC0zfqT0.cjs.map → standards-sdk.es49-BoFc-ELK-AFqdqMBQ.cjs.map} +1 -1
- package/dist/cjs/{standards-sdk.es50-miBtNmtl-B2MpsQnf.cjs → standards-sdk.es50-miBtNmtl-BXhMfUtd.cjs} +2 -2
- package/dist/cjs/{standards-sdk.es50-miBtNmtl-B2MpsQnf.cjs.map → standards-sdk.es50-miBtNmtl-BXhMfUtd.cjs.map} +1 -1
- package/dist/cjs/{standards-sdk.es51-rS2UvvV5-CRkd1bF-.cjs → standards-sdk.es51-rS2UvvV5-Bh2x7xrp.cjs} +2 -2
- package/dist/cjs/{standards-sdk.es51-rS2UvvV5-CRkd1bF-.cjs.map → standards-sdk.es51-rS2UvvV5-Bh2x7xrp.cjs.map} +1 -1
- package/dist/cjs/{standards-sdk.es52-D-lvSMBY-DdUJIqZX.cjs → standards-sdk.es52-D-lvSMBY-DvI5ClIb.cjs} +2 -2
- package/dist/cjs/{standards-sdk.es52-D-lvSMBY-DdUJIqZX.cjs.map → standards-sdk.es52-D-lvSMBY-DvI5ClIb.cjs.map} +1 -1
- package/dist/cjs/utils/parsers/crypto-parser.d.ts +37 -0
- package/dist/cjs/utils/parsers/crypto-parser.d.ts.map +1 -1
- package/dist/cjs/utils/parsers/file-parser.d.ts +46 -0
- package/dist/cjs/utils/parsers/file-parser.d.ts.map +1 -1
- package/dist/cjs/utils/parsers/hcs-parser.d.ts +10 -0
- package/dist/cjs/utils/parsers/hcs-parser.d.ts.map +1 -1
- package/dist/cjs/utils/parsers/hts-parser.d.ts +23 -5
- package/dist/cjs/utils/parsers/hts-parser.d.ts.map +1 -1
- package/dist/cjs/utils/parsers/parser-utils.d.ts +11 -0
- package/dist/cjs/utils/parsers/parser-utils.d.ts.map +1 -1
- package/dist/cjs/utils/parsers/schedule-parser.d.ts +56 -11
- package/dist/cjs/utils/parsers/schedule-parser.d.ts.map +1 -1
- package/dist/cjs/utils/parsers/scs-parser.d.ts +51 -0
- package/dist/cjs/utils/parsers/scs-parser.d.ts.map +1 -1
- package/dist/cjs/utils/parsers/util-parser.d.ts +72 -1
- package/dist/cjs/utils/parsers/util-parser.d.ts.map +1 -1
- package/dist/cjs/utils/transaction-parser-types.d.ts +60 -0
- package/dist/cjs/utils/transaction-parser-types.d.ts.map +1 -1
- package/dist/cjs/utils/transaction-parser.d.ts +16 -14
- package/dist/cjs/utils/transaction-parser.d.ts.map +1 -1
- package/dist/es/standards-sdk.es35.js +388 -387
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js.map +1 -1
- package/dist/es/standards-sdk.es39.js +385 -18
- package/dist/es/standards-sdk.es39.js.map +1 -1
- package/dist/es/standards-sdk.es40.js +209 -86
- package/dist/es/standards-sdk.es40.js.map +1 -1
- package/dist/es/standards-sdk.es50.js +55 -0
- package/dist/es/standards-sdk.es50.js.map +1 -1
- package/dist/es/standards-sdk.es51.js +249 -1
- package/dist/es/standards-sdk.es51.js.map +1 -1
- package/dist/es/standards-sdk.es52.js +90 -0
- package/dist/es/standards-sdk.es52.js.map +1 -1
- package/dist/es/standards-sdk.es53.js +268 -9
- package/dist/es/standards-sdk.es53.js.map +1 -1
- package/dist/es/standards-sdk.es54.js +306 -0
- package/dist/es/standards-sdk.es54.js.map +1 -1
- package/dist/es/standards-sdk.es55.js +32 -0
- package/dist/es/standards-sdk.es55.js.map +1 -1
- package/dist/es/utils/parsers/crypto-parser.d.ts +37 -0
- package/dist/es/utils/parsers/crypto-parser.d.ts.map +1 -1
- package/dist/es/utils/parsers/file-parser.d.ts +46 -0
- package/dist/es/utils/parsers/file-parser.d.ts.map +1 -1
- package/dist/es/utils/parsers/hcs-parser.d.ts +10 -0
- package/dist/es/utils/parsers/hcs-parser.d.ts.map +1 -1
- package/dist/es/utils/parsers/hts-parser.d.ts +23 -5
- package/dist/es/utils/parsers/hts-parser.d.ts.map +1 -1
- package/dist/es/utils/parsers/parser-utils.d.ts +11 -0
- package/dist/es/utils/parsers/parser-utils.d.ts.map +1 -1
- package/dist/es/utils/parsers/schedule-parser.d.ts +56 -11
- package/dist/es/utils/parsers/schedule-parser.d.ts.map +1 -1
- package/dist/es/utils/parsers/scs-parser.d.ts +51 -0
- package/dist/es/utils/parsers/scs-parser.d.ts.map +1 -1
- package/dist/es/utils/parsers/util-parser.d.ts +72 -1
- package/dist/es/utils/parsers/util-parser.d.ts.map +1 -1
- package/dist/es/utils/transaction-parser-types.d.ts +60 -0
- package/dist/es/utils/transaction-parser-types.d.ts.map +1 -1
- package/dist/es/utils/transaction-parser.d.ts +16 -14
- package/dist/es/utils/transaction-parser.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/utils/__tests__/hts-parser.test.d.ts +0 -2
- package/dist/cjs/utils/__tests__/hts-parser.test.d.ts.map +0 -1
- package/dist/cjs/utils/__tests__/schedule-parser.test.d.ts +0 -2
- package/dist/cjs/utils/__tests__/schedule-parser.test.d.ts.map +0 -1
- package/dist/cjs/utils/__tests__/token-create-parsing.test.d.ts +0 -2
- package/dist/cjs/utils/__tests__/token-create-parsing.test.d.ts.map +0 -1
- package/dist/cjs/utils/__tests__/transaction-parser.test.d.ts +0 -2
- package/dist/cjs/utils/__tests__/transaction-parser.test.d.ts.map +0 -1
- package/dist/es/utils/__tests__/hts-parser.test.d.ts +0 -2
- package/dist/es/utils/__tests__/hts-parser.test.d.ts.map +0 -1
- package/dist/es/utils/__tests__/schedule-parser.test.d.ts +0 -2
- package/dist/es/utils/__tests__/schedule-parser.test.d.ts.map +0 -1
- package/dist/es/utils/__tests__/token-create-parsing.test.d.ts +0 -2
- package/dist/es/utils/__tests__/token-create-parsing.test.d.ts.map +0 -1
- package/dist/es/utils/__tests__/transaction-parser.test.d.ts +0 -2
- package/dist/es/utils/__tests__/transaction-parser.test.d.ts.map +0 -1
|
@@ -1,4 +1,303 @@
|
|
|
1
|
+
import { proto } from "@hashgraph/proto";
|
|
2
|
+
import { Long, FileId, ContractId } from "@hashgraph/sdk";
|
|
3
|
+
import { hasTransactionType } from "./standards-sdk.es55.js";
|
|
1
4
|
class UtilParser {
|
|
5
|
+
/**
|
|
6
|
+
* Parse Utility/System Service transaction using unified dual-branch approach
|
|
7
|
+
* This handles both regular transactions and signed transaction variants
|
|
8
|
+
*/
|
|
9
|
+
static parseUtilTransaction(transaction, originalBytes) {
|
|
10
|
+
try {
|
|
11
|
+
if (originalBytes || transaction.toBytes) {
|
|
12
|
+
try {
|
|
13
|
+
const bytesToParse = originalBytes || transaction.toBytes();
|
|
14
|
+
const decoded = proto.TransactionList.decode(bytesToParse);
|
|
15
|
+
if (decoded.transactionList && decoded.transactionList.length > 0) {
|
|
16
|
+
const tx = decoded.transactionList[0];
|
|
17
|
+
let txBody = null;
|
|
18
|
+
if (tx.bodyBytes && tx.bodyBytes.length > 0) {
|
|
19
|
+
txBody = proto.TransactionBody.decode(tx.bodyBytes);
|
|
20
|
+
} else if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
|
|
21
|
+
const signedTx = proto.SignedTransaction.decode(tx.signedTransactionBytes);
|
|
22
|
+
if (signedTx.bodyBytes) {
|
|
23
|
+
txBody = proto.TransactionBody.decode(signedTx.bodyBytes);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (txBody) {
|
|
27
|
+
const protoResult = this.parseFromProtobufTxBody(txBody);
|
|
28
|
+
if (protoResult.type && protoResult.type !== "UNKNOWN") {
|
|
29
|
+
return protoResult;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
} catch (protoError) {
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return this.parseFromTransactionInternals(transaction);
|
|
37
|
+
} catch (error) {
|
|
38
|
+
return { type: "UNKNOWN", humanReadableType: "Unknown Utility Transaction" };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Parse utility transaction from protobuf TransactionBody
|
|
43
|
+
* Handles all utility operations from decoded protobuf data
|
|
44
|
+
*/
|
|
45
|
+
static parseFromProtobufTxBody(txBody) {
|
|
46
|
+
if (txBody.utilPrng) {
|
|
47
|
+
const utilPrng = this.parseUtilPrng(txBody.utilPrng);
|
|
48
|
+
if (utilPrng) {
|
|
49
|
+
return {
|
|
50
|
+
type: "PRNG",
|
|
51
|
+
humanReadableType: "Pseudo Random Number",
|
|
52
|
+
utilPrng
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (txBody.freeze) {
|
|
57
|
+
const networkFreeze = this.parseNetworkFreezeFromProto(txBody.freeze);
|
|
58
|
+
if (networkFreeze) {
|
|
59
|
+
return {
|
|
60
|
+
type: "FREEZE",
|
|
61
|
+
humanReadableType: "Network Freeze",
|
|
62
|
+
networkFreeze
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (txBody.systemDelete) {
|
|
67
|
+
const systemDelete = this.parseSystemDeleteFromProto(txBody.systemDelete);
|
|
68
|
+
if (systemDelete) {
|
|
69
|
+
return {
|
|
70
|
+
type: "SYSTEMDELETE",
|
|
71
|
+
humanReadableType: "System Delete",
|
|
72
|
+
systemDelete
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (txBody.systemUndelete) {
|
|
77
|
+
const systemUndelete = this.parseSystemUndeleteFromProto(txBody.systemUndelete);
|
|
78
|
+
if (systemUndelete) {
|
|
79
|
+
return {
|
|
80
|
+
type: "SYSTEMUNDELETE",
|
|
81
|
+
humanReadableType: "System Undelete",
|
|
82
|
+
systemUndelete
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (txBody.nodeCreate) {
|
|
87
|
+
const nodeCreate = this.parseNodeCreateFromProto(txBody.nodeCreate);
|
|
88
|
+
if (nodeCreate) {
|
|
89
|
+
return {
|
|
90
|
+
type: "NODECREATE",
|
|
91
|
+
humanReadableType: "Node Create",
|
|
92
|
+
nodeCreate
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (txBody.nodeUpdate) {
|
|
97
|
+
const nodeUpdate = this.parseNodeUpdateFromProto(txBody.nodeUpdate);
|
|
98
|
+
if (nodeUpdate) {
|
|
99
|
+
return {
|
|
100
|
+
type: "NODEUPDATE",
|
|
101
|
+
humanReadableType: "Node Update",
|
|
102
|
+
nodeUpdate
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (txBody.nodeDelete) {
|
|
107
|
+
const nodeDelete = this.parseNodeDeleteFromProto(txBody.nodeDelete);
|
|
108
|
+
if (nodeDelete) {
|
|
109
|
+
return {
|
|
110
|
+
type: "NODEDELETE",
|
|
111
|
+
humanReadableType: "Node Delete",
|
|
112
|
+
nodeDelete
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return {};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Extract utility data from Transaction internal fields
|
|
120
|
+
* This handles cases where data is stored in Transaction object internals
|
|
121
|
+
*/
|
|
122
|
+
static parseFromTransactionInternals(transaction) {
|
|
123
|
+
try {
|
|
124
|
+
const tx = transaction;
|
|
125
|
+
if (hasTransactionType(transaction, "utilPrng")) {
|
|
126
|
+
const utilPrng = {};
|
|
127
|
+
if (tx._range && tx._range !== 0) {
|
|
128
|
+
utilPrng.range = tx._range;
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
type: "PRNG",
|
|
132
|
+
humanReadableType: "Pseudo Random Number",
|
|
133
|
+
utilPrng
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
if (hasTransactionType(transaction, "freeze")) {
|
|
137
|
+
const networkFreeze = {};
|
|
138
|
+
if (tx._startTime) {
|
|
139
|
+
networkFreeze.startTime = tx._startTime.toString();
|
|
140
|
+
}
|
|
141
|
+
if (tx._endTime) {
|
|
142
|
+
networkFreeze.endTime = tx._endTime.toString();
|
|
143
|
+
}
|
|
144
|
+
if (tx._updateFile) {
|
|
145
|
+
networkFreeze.updateFile = tx._updateFile.toString();
|
|
146
|
+
}
|
|
147
|
+
if (tx._fileHash) {
|
|
148
|
+
networkFreeze.fileHash = Buffer.from(tx._fileHash).toString("hex");
|
|
149
|
+
}
|
|
150
|
+
if (tx._freezeType) {
|
|
151
|
+
networkFreeze.freezeType = tx._freezeType;
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
type: "FREEZE",
|
|
155
|
+
humanReadableType: "Network Freeze",
|
|
156
|
+
networkFreeze
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
if (hasTransactionType(transaction, "systemDelete")) {
|
|
160
|
+
const systemDelete = {};
|
|
161
|
+
if (tx._fileId) {
|
|
162
|
+
systemDelete.fileId = tx._fileId.toString();
|
|
163
|
+
} else if (tx._contractId) {
|
|
164
|
+
systemDelete.contractId = tx._contractId.toString();
|
|
165
|
+
}
|
|
166
|
+
if (tx._expirationTime) {
|
|
167
|
+
systemDelete.expirationTime = tx._expirationTime.toString();
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
type: "SYSTEMDELETE",
|
|
171
|
+
humanReadableType: "System Delete",
|
|
172
|
+
systemDelete
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
if (hasTransactionType(transaction, "systemUndelete")) {
|
|
176
|
+
const systemUndelete = {};
|
|
177
|
+
if (tx._fileId) {
|
|
178
|
+
systemUndelete.fileId = tx._fileId.toString();
|
|
179
|
+
} else if (tx._contractId) {
|
|
180
|
+
systemUndelete.contractId = tx._contractId.toString();
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
type: "SYSTEMUNDELETE",
|
|
184
|
+
humanReadableType: "System Undelete",
|
|
185
|
+
systemUndelete
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
return {};
|
|
189
|
+
} catch (error) {
|
|
190
|
+
return {};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Parse Network Freeze from protobuf data
|
|
195
|
+
*/
|
|
196
|
+
static parseNetworkFreezeFromProto(body) {
|
|
197
|
+
if (!body) return void 0;
|
|
198
|
+
const data = {};
|
|
199
|
+
if (body.startTime?.seconds) {
|
|
200
|
+
data.startTime = `${Long.fromValue(
|
|
201
|
+
body.startTime.seconds
|
|
202
|
+
).toString()}.${body.startTime.nanos ?? 0}`;
|
|
203
|
+
}
|
|
204
|
+
if (body.updateFile) {
|
|
205
|
+
data.updateFile = new FileId(
|
|
206
|
+
body.updateFile.shardNum ?? 0,
|
|
207
|
+
body.updateFile.realmNum ?? 0,
|
|
208
|
+
body.updateFile.fileNum ?? 0
|
|
209
|
+
).toString();
|
|
210
|
+
}
|
|
211
|
+
if (body.fileHash && body.fileHash.length > 0) {
|
|
212
|
+
data.fileHash = Buffer.from(body.fileHash).toString("hex");
|
|
213
|
+
}
|
|
214
|
+
if (body.freezeType !== void 0) {
|
|
215
|
+
const freezeTypes = ["FREEZE_ONLY", "PREPARE_UPGRADE", "FREEZE_UPGRADE", "FREEZE_ABORT"];
|
|
216
|
+
data.freezeType = freezeTypes[body.freezeType] || "FREEZE_ONLY";
|
|
217
|
+
}
|
|
218
|
+
return data;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Parse System Delete from protobuf data
|
|
222
|
+
*/
|
|
223
|
+
static parseSystemDeleteFromProto(body) {
|
|
224
|
+
if (!body) return void 0;
|
|
225
|
+
const data = {};
|
|
226
|
+
if (body.fileID) {
|
|
227
|
+
data.fileId = new FileId(
|
|
228
|
+
body.fileID.shardNum ?? 0,
|
|
229
|
+
body.fileID.realmNum ?? 0,
|
|
230
|
+
body.fileID.fileNum ?? 0
|
|
231
|
+
).toString();
|
|
232
|
+
} else if (body.contractID) {
|
|
233
|
+
data.contractId = new ContractId(
|
|
234
|
+
body.contractID.shardNum ?? 0,
|
|
235
|
+
body.contractID.realmNum ?? 0,
|
|
236
|
+
body.contractID.contractNum ?? 0
|
|
237
|
+
).toString();
|
|
238
|
+
}
|
|
239
|
+
if (body.expirationTime?.seconds) {
|
|
240
|
+
data.expirationTime = Long.fromValue(
|
|
241
|
+
body.expirationTime.seconds
|
|
242
|
+
).toString();
|
|
243
|
+
}
|
|
244
|
+
return data;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Parse System Undelete from protobuf data
|
|
248
|
+
*/
|
|
249
|
+
static parseSystemUndeleteFromProto(body) {
|
|
250
|
+
if (!body) return void 0;
|
|
251
|
+
const data = {};
|
|
252
|
+
if (body.fileID) {
|
|
253
|
+
data.fileId = new FileId(
|
|
254
|
+
body.fileID.shardNum ?? 0,
|
|
255
|
+
body.fileID.realmNum ?? 0,
|
|
256
|
+
body.fileID.fileNum ?? 0
|
|
257
|
+
).toString();
|
|
258
|
+
} else if (body.contractID) {
|
|
259
|
+
data.contractId = new ContractId(
|
|
260
|
+
body.contractID.shardNum ?? 0,
|
|
261
|
+
body.contractID.realmNum ?? 0,
|
|
262
|
+
body.contractID.contractNum ?? 0
|
|
263
|
+
).toString();
|
|
264
|
+
}
|
|
265
|
+
return data;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Parse Node Create from protobuf data
|
|
269
|
+
*/
|
|
270
|
+
static parseNodeCreateFromProto(body) {
|
|
271
|
+
if (!body) return void 0;
|
|
272
|
+
const data = {};
|
|
273
|
+
if (body.nodeId !== void 0) {
|
|
274
|
+
data.nodeId = Long.fromValue(body.nodeId).toNumber();
|
|
275
|
+
}
|
|
276
|
+
return data;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Parse Node Update from protobuf data
|
|
280
|
+
*/
|
|
281
|
+
static parseNodeUpdateFromProto(body) {
|
|
282
|
+
if (!body) return void 0;
|
|
283
|
+
const data = {};
|
|
284
|
+
if (body.nodeId !== void 0) {
|
|
285
|
+
data.nodeId = Long.fromValue(body.nodeId).toNumber();
|
|
286
|
+
}
|
|
287
|
+
return data;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Parse Node Delete from protobuf data
|
|
291
|
+
*/
|
|
292
|
+
static parseNodeDeleteFromProto(body) {
|
|
293
|
+
if (!body) return void 0;
|
|
294
|
+
const data = {};
|
|
295
|
+
if (body.nodeId !== void 0) {
|
|
296
|
+
data.nodeId = Long.fromValue(body.nodeId).toNumber();
|
|
297
|
+
}
|
|
298
|
+
return data;
|
|
299
|
+
}
|
|
300
|
+
// Original parsing methods
|
|
2
301
|
static parseUtilPrng(body) {
|
|
3
302
|
if (!body) return void 0;
|
|
4
303
|
const data = {};
|
|
@@ -7,6 +306,13 @@ class UtilParser {
|
|
|
7
306
|
}
|
|
8
307
|
return data;
|
|
9
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Parse Utility/System Service transaction from Transaction object
|
|
311
|
+
* This is the unified entry point that delegates to the comprehensive parsing logic
|
|
312
|
+
*/
|
|
313
|
+
static parseFromTransactionObject(transaction) {
|
|
314
|
+
return this.parseUtilTransaction(transaction);
|
|
315
|
+
}
|
|
10
316
|
}
|
|
11
317
|
export {
|
|
12
318
|
UtilParser
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es54.js","sources":["../../src/utils/parsers/util-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { UtilPrngData } from '../transaction-parser-types';\n\nexport class UtilParser {\n static parseUtilPrng(\n body: proto.IUtilPrngTransactionBody,\n ): UtilPrngData | undefined {\n if (!body) return undefined;\n const data: UtilPrngData = {};\n if (body.range && body.range !== 0) {\n data.range = body.range;\n }\n return data;\n }\n}\n"],"names":[],"mappings":"AAGO,MAAM,WAAW;AAAA,EACtB,OAAO,cACL,MAC0B;AAC1B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAqB,CAAA;AAC3B,QAAI,KAAK,SAAS,KAAK,UAAU,GAAG;AAClC,WAAK,QAAQ,KAAK;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AACF;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es54.js","sources":["../../src/utils/parsers/util-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { Transaction, Long, FileId, ContractId } from '@hashgraph/sdk';\nimport {\n UtilPrngData,\n NetworkFreezeData,\n SystemDeleteData,\n SystemUndeleteData,\n NodeCreateData,\n NodeUpdateData,\n NodeDeleteData\n} from '../transaction-parser-types';\nimport { parseKey, extractTransactionBody, hasTransactionType } from './parser-utils';\n\n/**\n * Utility and System Operations Parser\n *\n * Handles parsing for utility and system transaction types including:\n * - Pseudo-random number generation (PRNG)\n * - Network freeze operations\n * - System delete/undelete operations\n * - Node management operations\n * - Proper dual-branch parsing (regular vs signed transactions)\n * - Comprehensive protobuf extraction\n */\nexport class UtilParser {\n /**\n * Parse Utility/System Service transaction using unified dual-branch approach\n * This handles both regular transactions and signed transaction variants\n */\n static parseUtilTransaction(\n transaction: Transaction,\n originalBytes?: Uint8Array\n ): {\n type?: string;\n humanReadableType?: string;\n utilPrng?: UtilPrngData;\n networkFreeze?: NetworkFreezeData;\n systemDelete?: SystemDeleteData;\n systemUndelete?: SystemUndeleteData;\n nodeCreate?: NodeCreateData;\n nodeUpdate?: NodeUpdateData;\n nodeDelete?: NodeDeleteData;\n [key: string]: unknown;\n } {\n try {\n // First, try to parse from protobuf data if available\n if (originalBytes || transaction.toBytes) {\n try {\n const bytesToParse = originalBytes || transaction.toBytes();\n const decoded = proto.TransactionList.decode(bytesToParse);\n\n if (decoded.transactionList && decoded.transactionList.length > 0) {\n const tx = decoded.transactionList[0];\n let txBody: proto.ITransactionBody | null = null;\n\n // Handle regular transaction branch\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n txBody = proto.TransactionBody.decode(tx.bodyBytes);\n }\n // Handle signed transaction branch (was missing in original)\n else if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {\n const signedTx = proto.SignedTransaction.decode(tx.signedTransactionBytes);\n if (signedTx.bodyBytes) {\n txBody = proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n if (txBody) {\n const protoResult = this.parseFromProtobufTxBody(txBody);\n if (protoResult.type && protoResult.type !== 'UNKNOWN') {\n return protoResult;\n }\n }\n }\n } catch (protoError) {\n // Continue to Transaction object parsing\n }\n }\n\n // Fallback to Transaction object parsing\n return this.parseFromTransactionInternals(transaction);\n } catch (error) {\n return { type: 'UNKNOWN', humanReadableType: 'Unknown Utility Transaction' };\n }\n }\n\n /**\n * Parse utility transaction from protobuf TransactionBody\n * Handles all utility operations from decoded protobuf data\n */\n private static parseFromProtobufTxBody(\n txBody: proto.ITransactionBody\n ): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n // PRNG (Pseudo Random Number Generation)\n if (txBody.utilPrng) {\n const utilPrng = this.parseUtilPrng(txBody.utilPrng);\n if (utilPrng) {\n return {\n type: 'PRNG',\n humanReadableType: 'Pseudo Random Number',\n utilPrng,\n };\n }\n }\n\n // Network Freeze\n if (txBody.freeze) {\n const networkFreeze = this.parseNetworkFreezeFromProto(txBody.freeze);\n if (networkFreeze) {\n return {\n type: 'FREEZE',\n humanReadableType: 'Network Freeze',\n networkFreeze,\n };\n }\n }\n\n // System Delete\n if (txBody.systemDelete) {\n const systemDelete = this.parseSystemDeleteFromProto(txBody.systemDelete);\n if (systemDelete) {\n return {\n type: 'SYSTEMDELETE',\n humanReadableType: 'System Delete',\n systemDelete,\n };\n }\n }\n\n // System Undelete\n if (txBody.systemUndelete) {\n const systemUndelete = this.parseSystemUndeleteFromProto(txBody.systemUndelete);\n if (systemUndelete) {\n return {\n type: 'SYSTEMUNDELETE',\n humanReadableType: 'System Undelete',\n systemUndelete,\n };\n }\n }\n\n // Node Create\n if (txBody.nodeCreate) {\n const nodeCreate = this.parseNodeCreateFromProto(txBody.nodeCreate);\n if (nodeCreate) {\n return {\n type: 'NODECREATE',\n humanReadableType: 'Node Create',\n nodeCreate,\n };\n }\n }\n\n // Node Update\n if (txBody.nodeUpdate) {\n const nodeUpdate = this.parseNodeUpdateFromProto(txBody.nodeUpdate);\n if (nodeUpdate) {\n return {\n type: 'NODEUPDATE',\n humanReadableType: 'Node Update',\n nodeUpdate,\n };\n }\n }\n\n // Node Delete\n if (txBody.nodeDelete) {\n const nodeDelete = this.parseNodeDeleteFromProto(txBody.nodeDelete);\n if (nodeDelete) {\n return {\n type: 'NODEDELETE',\n humanReadableType: 'Node Delete',\n nodeDelete,\n };\n }\n }\n\n return {};\n }\n\n /**\n * Extract utility data from Transaction internal fields\n * This handles cases where data is stored in Transaction object internals\n */\n private static parseFromTransactionInternals(\n transaction: Transaction\n ): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n try {\n const tx = transaction as unknown as {\n _range?: number;\n _startTime?: { toString(): string };\n _endTime?: { toString(): string };\n _updateFile?: { toString(): string };\n _fileHash?: Uint8Array;\n _freezeType?: string;\n _fileId?: { toString(): string };\n _contractId?: { toString(): string };\n _expirationTime?: { toString(): string };\n _nodeId?: number;\n _accountId?: { toString(): string };\n _description?: string;\n _gossipEndpoint?: Array<unknown>;\n _serviceEndpoint?: Array<unknown>;\n _gossipCaCertificate?: Uint8Array;\n _grpcCertificateHash?: Uint8Array;\n _adminKey?: unknown;\n constructor?: { name?: string };\n };\n\n // PRNG\n if (hasTransactionType(transaction, 'utilPrng')) {\n const utilPrng: UtilPrngData = {};\n if (tx._range && tx._range !== 0) {\n utilPrng.range = tx._range;\n }\n\n return {\n type: 'PRNG',\n humanReadableType: 'Pseudo Random Number',\n utilPrng,\n };\n }\n\n // Network Freeze\n if (hasTransactionType(transaction, 'freeze')) {\n const networkFreeze: NetworkFreezeData = {};\n\n if (tx._startTime) {\n networkFreeze.startTime = tx._startTime.toString();\n }\n if (tx._endTime) {\n networkFreeze.endTime = tx._endTime.toString();\n }\n if (tx._updateFile) {\n networkFreeze.updateFile = tx._updateFile.toString();\n }\n if (tx._fileHash) {\n networkFreeze.fileHash = Buffer.from(tx._fileHash).toString('hex');\n }\n if (tx._freezeType) {\n networkFreeze.freezeType = tx._freezeType as any;\n }\n\n return {\n type: 'FREEZE',\n humanReadableType: 'Network Freeze',\n networkFreeze,\n };\n }\n\n // System Delete\n if (hasTransactionType(transaction, 'systemDelete')) {\n const systemDelete: SystemDeleteData = {};\n\n if (tx._fileId) {\n systemDelete.fileId = tx._fileId.toString();\n } else if (tx._contractId) {\n systemDelete.contractId = tx._contractId.toString();\n }\n\n if (tx._expirationTime) {\n systemDelete.expirationTime = tx._expirationTime.toString();\n }\n\n return {\n type: 'SYSTEMDELETE',\n humanReadableType: 'System Delete',\n systemDelete,\n };\n }\n\n // System Undelete\n if (hasTransactionType(transaction, 'systemUndelete')) {\n const systemUndelete: SystemUndeleteData = {};\n\n if (tx._fileId) {\n systemUndelete.fileId = tx._fileId.toString();\n } else if (tx._contractId) {\n systemUndelete.contractId = tx._contractId.toString();\n }\n\n return {\n type: 'SYSTEMUNDELETE',\n humanReadableType: 'System Undelete',\n systemUndelete,\n };\n }\n\n // Node operations would be handled here if they were more commonly used\n // For now, they're primarily handled via protobuf parsing\n\n return {};\n } catch (error) {\n return {};\n }\n }\n\n /**\n * Parse Network Freeze from protobuf data\n */\n private static parseNetworkFreezeFromProto(\n body: proto.IFreezeTransactionBody\n ): NetworkFreezeData | undefined {\n if (!body) return undefined;\n\n const data: NetworkFreezeData = {};\n\n if (body.startTime?.seconds) {\n data.startTime = `${Long.fromValue(\n body.startTime.seconds,\n ).toString()}.${body.startTime.nanos ?? 0}`;\n }\n\n // Some proto versions may not expose endTime; skip if not present\n\n if (body.updateFile) {\n data.updateFile = new FileId(\n body.updateFile.shardNum ?? 0,\n body.updateFile.realmNum ?? 0,\n body.updateFile.fileNum ?? 0,\n ).toString();\n }\n\n if (body.fileHash && body.fileHash.length > 0) {\n data.fileHash = Buffer.from(body.fileHash).toString('hex');\n }\n\n // Map freeze type enum if available\n if (body.freezeType !== undefined) {\n const freezeTypes = ['FREEZE_ONLY', 'PREPARE_UPGRADE', 'FREEZE_UPGRADE', 'FREEZE_ABORT'];\n data.freezeType = freezeTypes[body.freezeType] as any || 'FREEZE_ONLY';\n }\n\n return data;\n }\n\n /**\n * Parse System Delete from protobuf data\n */\n private static parseSystemDeleteFromProto(\n body: proto.ISystemDeleteTransactionBody\n ): SystemDeleteData | undefined {\n if (!body) return undefined;\n\n const data: SystemDeleteData = {};\n\n if (body.fileID) {\n data.fileId = new FileId(\n body.fileID.shardNum ?? 0,\n body.fileID.realmNum ?? 0,\n body.fileID.fileNum ?? 0,\n ).toString();\n } else if (body.contractID) {\n data.contractId = new ContractId(\n body.contractID.shardNum ?? 0,\n body.contractID.realmNum ?? 0,\n body.contractID.contractNum ?? 0,\n ).toString();\n }\n\n if (body.expirationTime?.seconds) {\n data.expirationTime = Long.fromValue(\n body.expirationTime.seconds,\n ).toString();\n }\n\n return data;\n }\n\n /**\n * Parse System Undelete from protobuf data\n */\n private static parseSystemUndeleteFromProto(\n body: proto.ISystemUndeleteTransactionBody\n ): SystemUndeleteData | undefined {\n if (!body) return undefined;\n\n const data: SystemUndeleteData = {};\n\n if (body.fileID) {\n data.fileId = new FileId(\n body.fileID.shardNum ?? 0,\n body.fileID.realmNum ?? 0,\n body.fileID.fileNum ?? 0,\n ).toString();\n } else if (body.contractID) {\n data.contractId = new ContractId(\n body.contractID.shardNum ?? 0,\n body.contractID.realmNum ?? 0,\n body.contractID.contractNum ?? 0,\n ).toString();\n }\n\n return data;\n }\n\n /**\n * Parse Node Create from protobuf data\n */\n private static parseNodeCreateFromProto(\n body: any\n ): NodeCreateData | undefined {\n if (!body) return undefined;\n\n const data: NodeCreateData = {};\n\n if (body.nodeId !== undefined) {\n data.nodeId = Long.fromValue(body.nodeId).toNumber();\n }\n\n // Note: Node operations are rarely used in practice and proto definitions may vary\n // This provides basic structure for future implementation\n\n return data;\n }\n\n /**\n * Parse Node Update from protobuf data\n */\n private static parseNodeUpdateFromProto(\n body: any\n ): NodeUpdateData | undefined {\n if (!body) return undefined;\n\n const data: NodeUpdateData = {};\n\n if (body.nodeId !== undefined) {\n data.nodeId = Long.fromValue(body.nodeId).toNumber();\n }\n\n return data;\n }\n\n /**\n * Parse Node Delete from protobuf data\n */\n private static parseNodeDeleteFromProto(\n body: any\n ): NodeDeleteData | undefined {\n if (!body) return undefined;\n\n const data: NodeDeleteData = {};\n\n if (body.nodeId !== undefined) {\n data.nodeId = Long.fromValue(body.nodeId).toNumber();\n }\n\n return data;\n }\n\n // Original parsing methods\n static parseUtilPrng(\n body: proto.IUtilPrngTransactionBody,\n ): UtilPrngData | undefined {\n if (!body) return undefined;\n const data: UtilPrngData = {};\n if (body.range && body.range !== 0) {\n data.range = body.range;\n }\n return data;\n }\n\n /**\n * Parse Utility/System Service transaction from Transaction object\n * This is the unified entry point that delegates to the comprehensive parsing logic\n */\n static parseFromTransactionObject(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n return this.parseUtilTransaction(transaction);\n }\n}"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { proto } from "@hashgraph/proto";
|
|
1
2
|
import { ContractId } from "@hashgraph/sdk";
|
|
2
3
|
import { Buffer } from "buffer";
|
|
3
4
|
function parseKey(key) {
|
|
@@ -39,7 +40,38 @@ function parseKey(key) {
|
|
|
39
40
|
}
|
|
40
41
|
return "Unknown or Unset Key Type";
|
|
41
42
|
}
|
|
43
|
+
function extractTransactionBody(transaction) {
|
|
44
|
+
try {
|
|
45
|
+
const bytes = transaction.toBytes ? transaction.toBytes() : void 0;
|
|
46
|
+
if (!bytes) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const decoded = proto.TransactionList.decode(bytes);
|
|
50
|
+
if (!decoded.transactionList || decoded.transactionList.length === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const tx = decoded.transactionList[0];
|
|
54
|
+
if (tx.bodyBytes && tx.bodyBytes.length > 0) {
|
|
55
|
+
return proto.TransactionBody.decode(tx.bodyBytes);
|
|
56
|
+
}
|
|
57
|
+
if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
|
|
58
|
+
const signedTx = proto.SignedTransaction.decode(tx.signedTransactionBytes);
|
|
59
|
+
if (signedTx.bodyBytes) {
|
|
60
|
+
return proto.TransactionBody.decode(signedTx.bodyBytes);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
} catch (error) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function hasTransactionType(transaction, transactionField) {
|
|
69
|
+
const txBody = extractTransactionBody(transaction);
|
|
70
|
+
return !!(txBody && txBody[transactionField]);
|
|
71
|
+
}
|
|
42
72
|
export {
|
|
73
|
+
extractTransactionBody,
|
|
74
|
+
hasTransactionType,
|
|
43
75
|
parseKey
|
|
44
76
|
};
|
|
45
77
|
//# sourceMappingURL=standards-sdk.es55.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es55.js","sources":["../../src/utils/parsers/parser-utils.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { ContractId } from '@hashgraph/sdk';\nimport { Buffer } from 'buffer';\n\nexport function parseKey(\n key: proto.IKey | null | undefined,\n): string | undefined {\n if (!key) {\n return undefined;\n }\n\n if (key.contractID) {\n return `ContractID: ${new ContractId(\n key.contractID.shardNum ?? 0,\n key.contractID.realmNum ?? 0,\n key.contractID.contractNum ?? 0,\n ).toString()}`;\n }\n if (key.ed25519) {\n return `ED25519: ${Buffer.from(key.ed25519).toString('hex')}`;\n }\n if (key.ECDSASecp256k1) {\n return `ECDSA_secp256k1: ${Buffer.from(key.ECDSASecp256k1).toString(\n 'hex',\n )}`;\n }\n if (key?.keyList?.keys?.length > 0) {\n const keys = key.keyList.keys.map(k => parseKey(k)).filter(Boolean);\n return `KeyList (${keys.length} keys): [${keys.join(', ')}]`;\n }\n if (key?.thresholdKey?.keys?.keys?.length > 0) {\n const keys = key.thresholdKey.keys.keys\n .map(k => parseKey(k))\n .filter(Boolean);\n return `ThresholdKey (${key.thresholdKey.threshold} of ${\n keys.length\n }): [${keys.join(', ')}]`;\n }\n if (key.delegatableContractId) {\n return `DelegatableContractID: ${new ContractId(\n key.delegatableContractId.shardNum ?? 0,\n key.delegatableContractId.realmNum ?? 0,\n key.delegatableContractId.contractNum ?? 0,\n ).toString()}`;\n }\n if (Object.keys(key).length === 0) {\n return 'Empty Key Structure';\n }\n\n return 'Unknown or Unset Key Type';\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"standards-sdk.es55.js","sources":["../../src/utils/parsers/parser-utils.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { ContractId, Transaction } from '@hashgraph/sdk';\nimport { Buffer } from 'buffer';\n\nexport function parseKey(\n key: proto.IKey | null | undefined,\n): string | undefined {\n if (!key) {\n return undefined;\n }\n\n if (key.contractID) {\n return `ContractID: ${new ContractId(\n key.contractID.shardNum ?? 0,\n key.contractID.realmNum ?? 0,\n key.contractID.contractNum ?? 0,\n ).toString()}`;\n }\n if (key.ed25519) {\n return `ED25519: ${Buffer.from(key.ed25519).toString('hex')}`;\n }\n if (key.ECDSASecp256k1) {\n return `ECDSA_secp256k1: ${Buffer.from(key.ECDSASecp256k1).toString(\n 'hex',\n )}`;\n }\n if (key?.keyList?.keys?.length > 0) {\n const keys = key.keyList.keys.map(k => parseKey(k)).filter(Boolean);\n return `KeyList (${keys.length} keys): [${keys.join(', ')}]`;\n }\n if (key?.thresholdKey?.keys?.keys?.length > 0) {\n const keys = key.thresholdKey.keys.keys\n .map(k => parseKey(k))\n .filter(Boolean);\n return `ThresholdKey (${key.thresholdKey.threshold} of ${\n keys.length\n }): [${keys.join(', ')}]`;\n }\n if (key.delegatableContractId) {\n return `DelegatableContractID: ${new ContractId(\n key.delegatableContractId.shardNum ?? 0,\n key.delegatableContractId.realmNum ?? 0,\n key.delegatableContractId.contractNum ?? 0,\n ).toString()}`;\n }\n if (Object.keys(key).length === 0) {\n return 'Empty Key Structure';\n }\n\n return 'Unknown or Unset Key Type';\n}\n\n/**\n * Extract TransactionBody from Transaction object using protobuf parsing\n * This replaces fragile constructor name checking with reliable protobuf data\n */\nexport function extractTransactionBody(\n transaction: Transaction,\n): proto.ITransactionBody | null {\n try {\n const bytes = transaction.toBytes ? transaction.toBytes() : undefined;\n if (!bytes) {\n return null;\n }\n\n const decoded = proto.TransactionList.decode(bytes);\n if (!decoded.transactionList || decoded.transactionList.length === 0) {\n return null;\n }\n\n const tx = decoded.transactionList[0];\n\n // Try bodyBytes first\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n return proto.TransactionBody.decode(tx.bodyBytes);\n }\n\n // Try signedTransactionBytes as fallback\n if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {\n const signedTx = proto.SignedTransaction.decode(tx.signedTransactionBytes);\n if (signedTx.bodyBytes) {\n return proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n return null;\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Check if transaction has specific transaction type using protobuf data\n * This replaces constructor name checking with reliable protobuf field detection\n */\nexport function hasTransactionType(\n transaction: Transaction,\n transactionField: keyof proto.ITransactionBody,\n): boolean {\n const txBody = extractTransactionBody(transaction);\n return !!(txBody && txBody[transactionField]);\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,SACd,KACoB;AACpB,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,YAAY;AAClB,WAAO,eAAe,IAAI;AAAA,MACxB,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,eAAe;AAAA,IAAA,EAC9B,UAAU;AAAA,EACd;AACA,MAAI,IAAI,SAAS;AACf,WAAO,YAAY,OAAO,KAAK,IAAI,OAAO,EAAE,SAAS,KAAK,CAAC;AAAA,EAC7D;AACA,MAAI,IAAI,gBAAgB;AACtB,WAAO,oBAAoB,OAAO,KAAK,IAAI,cAAc,EAAE;AAAA,MACzD;AAAA,IAAA,CACD;AAAA,EACH;AACA,MAAI,KAAK,SAAS,MAAM,SAAS,GAAG;AAClC,UAAM,OAAO,IAAI,QAAQ,KAAK,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EAAE,OAAO,OAAO;AAClE,WAAO,YAAY,KAAK,MAAM,YAAY,KAAK,KAAK,IAAI,CAAC;AAAA,EAC3D;AACA,MAAI,KAAK,cAAc,MAAM,MAAM,SAAS,GAAG;AAC7C,UAAM,OAAO,IAAI,aAAa,KAAK,KAChC,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EACpB,OAAO,OAAO;AACjB,WAAO,iBAAiB,IAAI,aAAa,SAAS,OAChD,KAAK,MACP,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EACxB;AACA,MAAI,IAAI,uBAAuB;AAC7B,WAAO,0BAA0B,IAAI;AAAA,MACnC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,eAAe;AAAA,IAAA,EACzC,UAAU;AAAA,EACd;AACA,MAAI,OAAO,KAAK,GAAG,EAAE,WAAW,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,SAAS,uBACd,aAC+B;AAC/B,MAAI;AACF,UAAM,QAAQ,YAAY,UAAU,YAAY,YAAY;AAC5D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM,gBAAgB,OAAO,KAAK;AAClD,QAAI,CAAC,QAAQ,mBAAmB,QAAQ,gBAAgB,WAAW,GAAG;AACpE,aAAO;AAAA,IACT;AAEA,UAAM,KAAK,QAAQ,gBAAgB,CAAC;AAGpC,QAAI,GAAG,aAAa,GAAG,UAAU,SAAS,GAAG;AAC3C,aAAO,MAAM,gBAAgB,OAAO,GAAG,SAAS;AAAA,IAClD;AAGA,QAAI,GAAG,0BAA0B,GAAG,uBAAuB,SAAS,GAAG;AACrE,YAAM,WAAW,MAAM,kBAAkB,OAAO,GAAG,sBAAsB;AACzE,UAAI,SAAS,WAAW;AACtB,eAAO,MAAM,gBAAgB,OAAO,SAAS,SAAS;AAAA,MACxD;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;AAMO,SAAS,mBACd,aACA,kBACS;AACT,QAAM,SAAS,uBAAuB,WAAW;AACjD,SAAO,CAAC,EAAE,UAAU,OAAO,gBAAgB;AAC7C;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { proto } from '@hashgraph/proto';
|
|
2
|
+
import { Transaction } from '@hashgraph/sdk';
|
|
2
3
|
import { AccountAmount, TokenAmount, CryptoDeleteData, CryptoCreateAccountData, CryptoUpdateAccountData, CryptoApproveAllowanceData, CryptoDeleteAllowanceData } from '../transaction-parser-types';
|
|
3
4
|
export declare class CryptoParser {
|
|
4
5
|
static parseCryptoTransfers(cryptoTransfer: proto.ICryptoTransferTransactionBody, result: {
|
|
@@ -10,5 +11,41 @@ export declare class CryptoParser {
|
|
|
10
11
|
static parseCryptoUpdateAccount(body: proto.ICryptoUpdateTransactionBody): CryptoUpdateAccountData | undefined;
|
|
11
12
|
static parseCryptoApproveAllowance(body: proto.ICryptoApproveAllowanceTransactionBody): CryptoApproveAllowanceData | undefined;
|
|
12
13
|
static parseCryptoDeleteAllowance(body: proto.ICryptoDeleteAllowanceTransactionBody): CryptoDeleteAllowanceData | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Extract HBAR transfers from Transaction object
|
|
16
|
+
*/
|
|
17
|
+
static extractHbarTransfersFromTransaction(transaction: Transaction): Array<{
|
|
18
|
+
accountId: string;
|
|
19
|
+
amount: number;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Extract token transfers from Transaction object
|
|
23
|
+
*/
|
|
24
|
+
static extractTokenTransfersFromTransaction(transaction: Transaction): Array<{
|
|
25
|
+
tokenId: string;
|
|
26
|
+
transfers: Array<{
|
|
27
|
+
accountId: string;
|
|
28
|
+
amount: number;
|
|
29
|
+
}>;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Parse crypto transaction from Transaction object with comprehensive extraction
|
|
33
|
+
* This is the unified entry point that handles both protobuf and internal field extraction
|
|
34
|
+
*/
|
|
35
|
+
static parseFromTransactionObject(transaction: Transaction): {
|
|
36
|
+
type?: string;
|
|
37
|
+
humanReadableType?: string;
|
|
38
|
+
transfers?: Array<{
|
|
39
|
+
accountId: string;
|
|
40
|
+
amount: string;
|
|
41
|
+
isDecimal?: boolean;
|
|
42
|
+
}>;
|
|
43
|
+
tokenTransfers?: Array<{
|
|
44
|
+
tokenId: string;
|
|
45
|
+
accountId: string;
|
|
46
|
+
amount: number;
|
|
47
|
+
}>;
|
|
48
|
+
[key: string]: unknown;
|
|
49
|
+
};
|
|
13
50
|
}
|
|
14
51
|
//# sourceMappingURL=crypto-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/crypto-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"crypto-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/crypto-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAA4C,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EAE1B,MAAM,6BAA6B,CAAC;AAGrC,qBAAa,YAAY;IACvB,MAAM,CAAC,oBAAoB,CACzB,cAAc,EAAE,KAAK,CAAC,8BAA8B,EACpD,MAAM,EAAE;QAAE,SAAS,EAAE,aAAa,EAAE,CAAC;QAAC,cAAc,EAAE,WAAW,EAAE,CAAA;KAAE,GACpE,IAAI;IA0CP,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,KAAK,CAAC,4BAA4B,GACvC,gBAAgB,GAAG,SAAS;IAoB/B,MAAM,CAAC,wBAAwB,CAC7B,IAAI,EAAE,KAAK,CAAC,4BAA4B,GACvC,uBAAuB,GAAG,SAAS;IA2CtC,MAAM,CAAC,wBAAwB,CAC7B,IAAI,EAAE,KAAK,CAAC,4BAA4B,GACvC,uBAAuB,GAAG,SAAS;IAwDtC,MAAM,CAAC,2BAA2B,CAChC,IAAI,EAAE,KAAK,CAAC,sCAAsC,GACjD,0BAA0B,GAAG,SAAS;IA+EzC,MAAM,CAAC,0BAA0B,CAC/B,IAAI,EAAE,KAAK,CAAC,qCAAqC,GAChD,yBAAyB,GAAG,SAAS;IAuBxC;;OAEG;IACH,MAAM,CAAC,mCAAmC,CACxC,WAAW,EAAE,WAAW,GACvB,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B/C;;OAEG;IACH,MAAM,CAAC,oCAAoC,CACzC,WAAW,EAAE,WAAW,GACvB,KAAK,CAAC;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACzD,CAAC;IAqCF;;;OAGG;IACH,MAAM,CAAC,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG;QAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,SAAS,CAAC,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QAC9E,cAAc,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB;CA0CF"}
|
|
@@ -1,9 +1,55 @@
|
|
|
1
1
|
import { proto } from '@hashgraph/proto';
|
|
2
|
+
import { Transaction } from '@hashgraph/sdk';
|
|
2
3
|
import { FileCreateData, FileAppendData, FileUpdateData, FileDeleteData } from '../transaction-parser-types';
|
|
4
|
+
/**
|
|
5
|
+
* File Service Parser
|
|
6
|
+
*
|
|
7
|
+
* Handles parsing for all file-related transaction types including:
|
|
8
|
+
* - File creation, updates, append, and deletion
|
|
9
|
+
* - Proper dual-branch parsing (regular vs signed transactions)
|
|
10
|
+
* - Comprehensive protobuf extraction
|
|
11
|
+
* - Enhanced content handling with type detection
|
|
12
|
+
*/
|
|
3
13
|
export declare class FileParser {
|
|
14
|
+
/**
|
|
15
|
+
* Parse File Service transaction using unified dual-branch approach
|
|
16
|
+
* This handles both regular transactions and signed transaction variants
|
|
17
|
+
*/
|
|
18
|
+
static parseFileTransaction(transaction: Transaction, originalBytes?: Uint8Array): {
|
|
19
|
+
type?: string;
|
|
20
|
+
humanReadableType?: string;
|
|
21
|
+
fileCreate?: FileCreateData;
|
|
22
|
+
fileAppend?: FileAppendData;
|
|
23
|
+
fileUpdate?: FileUpdateData;
|
|
24
|
+
fileDelete?: FileDeleteData;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Parse file transaction from protobuf TransactionBody
|
|
29
|
+
* Handles all file operations from decoded protobuf data
|
|
30
|
+
*/
|
|
31
|
+
private static parseFromProtobufTxBody;
|
|
32
|
+
/**
|
|
33
|
+
* Extract file data from Transaction internal fields
|
|
34
|
+
* This handles cases where data is stored in Transaction object internals
|
|
35
|
+
*/
|
|
36
|
+
private static parseFromTransactionInternals;
|
|
37
|
+
/**
|
|
38
|
+
* Enhanced content analysis with type detection and metadata
|
|
39
|
+
*/
|
|
40
|
+
private static analyzeContent;
|
|
4
41
|
static parseFileCreate(body: proto.IFileCreateTransactionBody): FileCreateData | undefined;
|
|
5
42
|
static parseFileAppend(body: proto.IFileAppendTransactionBody): FileAppendData | undefined;
|
|
6
43
|
static parseFileUpdate(body: proto.IFileUpdateTransactionBody): FileUpdateData | undefined;
|
|
7
44
|
static parseFileDelete(body: proto.IFileDeleteTransactionBody): FileDeleteData | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Parse File Service transaction from Transaction object
|
|
47
|
+
* This is the unified entry point that delegates to the comprehensive parsing logic
|
|
48
|
+
*/
|
|
49
|
+
static parseFromTransactionObject(transaction: Transaction): {
|
|
50
|
+
type?: string;
|
|
51
|
+
humanReadableType?: string;
|
|
52
|
+
[key: string]: unknown;
|
|
53
|
+
};
|
|
8
54
|
}
|
|
9
55
|
//# sourceMappingURL=file-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/file-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/file-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAQ,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACf,MAAM,6BAA6B,CAAC;AAKrC;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACrB;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CACzB,WAAW,EAAE,WAAW,EACxB,aAAa,CAAC,EAAE,UAAU,GACzB;QACD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,UAAU,CAAC,EAAE,cAAc,CAAC;QAC5B,UAAU,CAAC,EAAE,cAAc,CAAC;QAC5B,UAAU,CAAC,EAAE,cAAc,CAAC;QAC5B,UAAU,CAAC,EAAE,cAAc,CAAC;QAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB;IA2CD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IA0DtC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IA8H5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAgF7B,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,KAAK,CAAC,0BAA0B,GACrC,cAAc,GAAG,SAAS;IAoB7B,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,KAAK,CAAC,0BAA0B,GACrC,cAAc,GAAG,SAAS;IAc7B,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,KAAK,CAAC,0BAA0B,GACrC,cAAc,GAAG,SAAS;IAyB7B,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,KAAK,CAAC,0BAA0B,GACrC,cAAc,GAAG,SAAS;IAW7B;;;OAGG;IACH,MAAM,CAAC,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG;QAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB;CAGF"}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { proto } from '@hashgraph/proto';
|
|
2
|
+
import { Transaction } from '@hashgraph/sdk';
|
|
2
3
|
import { ConsensusCreateTopicData, ConsensusSubmitMessageData, ConsensusUpdateTopicData, ConsensusDeleteTopicData } from '../transaction-parser-types';
|
|
3
4
|
export declare class HCSParser {
|
|
4
5
|
static parseConsensusCreateTopic(body: proto.IConsensusCreateTopicTransactionBody): ConsensusCreateTopicData | undefined;
|
|
5
6
|
static parseConsensusSubmitMessage(body: proto.IConsensusSubmitMessageTransactionBody): ConsensusSubmitMessageData | undefined;
|
|
6
7
|
static parseConsensusUpdateTopic(body: proto.IConsensusUpdateTopicTransactionBody): ConsensusUpdateTopicData | undefined;
|
|
7
8
|
static parseConsensusDeleteTopic(body: proto.IConsensusDeleteTopicTransactionBody): ConsensusDeleteTopicData | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Parse HCS transaction from Transaction object with comprehensive extraction
|
|
11
|
+
* This is the unified entry point that handles both protobuf and internal field extraction
|
|
12
|
+
*/
|
|
13
|
+
static parseFromTransactionObject(transaction: Transaction): {
|
|
14
|
+
type?: string;
|
|
15
|
+
humanReadableType?: string;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
};
|
|
8
18
|
}
|
|
9
19
|
//# sourceMappingURL=hcs-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hcs-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/hcs-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"hcs-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/hcs-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAmB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,6BAA6B,CAAC;AAIrC,qBAAa,SAAS;IACpB,MAAM,CAAC,yBAAyB,CAC9B,IAAI,EAAE,KAAK,CAAC,oCAAoC,GAC/C,wBAAwB,GAAG,SAAS;IAuBvC,MAAM,CAAC,2BAA2B,CAChC,IAAI,EAAE,KAAK,CAAC,sCAAsC,GACjD,0BAA0B,GAAG,SAAS;IAgDzC,MAAM,CAAC,yBAAyB,CAC9B,IAAI,EAAE,KAAK,CAAC,oCAAoC,GAC/C,wBAAwB,GAAG,SAAS;IAwCvC,MAAM,CAAC,yBAAyB,CAC9B,IAAI,EAAE,KAAK,CAAC,oCAAoC,GAC/C,wBAAwB,GAAG,SAAS;IAWvC;;;OAGG;IACH,MAAM,CAAC,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG;QAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB;CAyDF"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { proto } from '@hashgraph/proto';
|
|
2
|
-
import { TokenCreationData, TokenMintData, TokenBurnData, TokenUpdateData, TokenFeeScheduleUpdateData, TokenFreezeData, TokenUnfreezeData, TokenGrantKycData, TokenRevokeKycData, TokenPauseData, TokenUnpauseData, TokenWipeAccountData, TokenDeleteData, TokenAssociateData, TokenDissociateData, TokenAirdropData } from '../transaction-parser-types';
|
|
2
|
+
import { TokenCreationData, TokenMintData, TokenBurnData, TokenUpdateData, TokenFeeScheduleUpdateData, TokenFreezeData, TokenUnfreezeData, TokenGrantKycData, TokenRevokeKycData, TokenPauseData, TokenUnpauseData, TokenWipeAccountData, TokenDeleteData, TokenAssociateData, TokenDissociateData, TokenAirdropData, ParsedTransaction } from '../transaction-parser-types';
|
|
3
3
|
import { Transaction } from '@hashgraph/sdk';
|
|
4
4
|
export declare class HTSParser {
|
|
5
5
|
/**
|
|
6
6
|
* Main entry point for parsing HTS transactions from a Transaction object
|
|
7
7
|
* This method bridges between the Transaction object and the protobuf parsers
|
|
8
8
|
*/
|
|
9
|
-
static parseHTSTransaction(transaction: Transaction): Partial<
|
|
10
|
-
type: string;
|
|
11
|
-
humanReadableType: string;
|
|
12
|
-
}>;
|
|
9
|
+
static parseHTSTransaction(transaction: Transaction): Partial<ParsedTransaction>;
|
|
13
10
|
static parseTokenCreate(body: proto.ITokenCreateTransactionBody): TokenCreationData | undefined;
|
|
14
11
|
static parseTokenMint(body: proto.ITokenMintTransactionBody): TokenMintData | undefined;
|
|
15
12
|
static parseTokenBurn(body: proto.ITokenBurnTransactionBody): TokenBurnData | undefined;
|
|
@@ -34,5 +31,26 @@ export declare class HTSParser {
|
|
|
34
31
|
* Parse token airdrop from protobuf data for scheduled transactions
|
|
35
32
|
*/
|
|
36
33
|
static parseTokenAirdropFromProto(airdrop: any): TokenAirdropData;
|
|
34
|
+
/**
|
|
35
|
+
* Extract token creation data from Transaction object internal fields
|
|
36
|
+
* This handles the case where token creation data is stored in Transaction internals
|
|
37
|
+
*/
|
|
38
|
+
static extractTokenCreationFromTransaction(transaction: Transaction): TokenCreationData | null;
|
|
39
|
+
/**
|
|
40
|
+
* Extract token airdrop data from Transaction object internal fields
|
|
41
|
+
* This handles the case where airdrop data is stored in Transaction internals
|
|
42
|
+
*/
|
|
43
|
+
static extractTokenAirdropFromTransaction(transaction: Transaction): TokenAirdropData | null;
|
|
44
|
+
/**
|
|
45
|
+
* Parse HTS transaction from Transaction object with comprehensive extraction
|
|
46
|
+
* This is the unified entry point that handles both protobuf and internal field extraction
|
|
47
|
+
*/
|
|
48
|
+
static parseFromTransactionObject(transaction: Transaction): {
|
|
49
|
+
type?: string;
|
|
50
|
+
humanReadableType?: string;
|
|
51
|
+
tokenCreation?: TokenCreationData;
|
|
52
|
+
tokenAirdrop?: TokenAirdropData;
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
};
|
|
37
55
|
}
|
|
38
56
|
//# sourceMappingURL=hts-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hts-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/hts-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAKjB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"hts-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/hts-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
1
|
import { proto } from '@hashgraph/proto';
|
|
2
|
+
import { Transaction } from '@hashgraph/sdk';
|
|
2
3
|
export declare function parseKey(key: proto.IKey | null | undefined): string | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* Extract TransactionBody from Transaction object using protobuf parsing
|
|
6
|
+
* This replaces fragile constructor name checking with reliable protobuf data
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractTransactionBody(transaction: Transaction): proto.ITransactionBody | null;
|
|
9
|
+
/**
|
|
10
|
+
* Check if transaction has specific transaction type using protobuf data
|
|
11
|
+
* This replaces constructor name checking with reliable protobuf field detection
|
|
12
|
+
*/
|
|
13
|
+
export declare function hasTransactionType(transaction: Transaction, transactionField: keyof proto.ITransactionBody): boolean;
|
|
3
14
|
//# sourceMappingURL=parser-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/parser-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"parser-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/parsers/parser-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAc,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGzD,wBAAgB,QAAQ,CACtB,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,SAAS,GACjC,MAAM,GAAG,SAAS,CA4CpB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,WAAW,GACvB,KAAK,CAAC,gBAAgB,GAAG,IAAI,CA+B/B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,MAAM,KAAK,CAAC,gBAAgB,GAC7C,OAAO,CAGT"}
|