@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.
Files changed (93) hide show
  1. package/dist/cjs/{index-xQfUfn20.cjs → index-DBI7RYzm.cjs} +19 -19
  2. package/dist/cjs/{index-xQfUfn20.cjs.map → index-DBI7RYzm.cjs.map} +1 -1
  3. package/dist/cjs/{index-DNOBUKZd-g0uNa1rQ.cjs → index-DNOBUKZd-PuaZE8zI.cjs} +2 -2
  4. package/dist/cjs/{index-DNOBUKZd-g0uNa1rQ.cjs.map → index-DNOBUKZd-PuaZE8zI.cjs.map} +1 -1
  5. package/dist/cjs/standards-sdk.cjs +1 -1
  6. package/dist/cjs/{standards-sdk.es47-LpJXpYet-fj1bqMZs.cjs → standards-sdk.es47-LpJXpYet-Dn0a_M7H.cjs} +2 -2
  7. package/dist/cjs/{standards-sdk.es47-LpJXpYet-fj1bqMZs.cjs.map → standards-sdk.es47-LpJXpYet-Dn0a_M7H.cjs.map} +1 -1
  8. package/dist/cjs/{standards-sdk.es48-PT6ZHlCU-vkSluOOc.cjs → standards-sdk.es48-PT6ZHlCU-CpnblkfW.cjs} +2 -2
  9. package/dist/cjs/{standards-sdk.es48-PT6ZHlCU-vkSluOOc.cjs.map → standards-sdk.es48-PT6ZHlCU-CpnblkfW.cjs.map} +1 -1
  10. package/dist/cjs/{standards-sdk.es49-BoFc-ELK-DC0zfqT0.cjs → standards-sdk.es49-BoFc-ELK-AFqdqMBQ.cjs} +2 -2
  11. package/dist/cjs/{standards-sdk.es49-BoFc-ELK-DC0zfqT0.cjs.map → standards-sdk.es49-BoFc-ELK-AFqdqMBQ.cjs.map} +1 -1
  12. package/dist/cjs/{standards-sdk.es50-miBtNmtl-B2MpsQnf.cjs → standards-sdk.es50-miBtNmtl-BXhMfUtd.cjs} +2 -2
  13. package/dist/cjs/{standards-sdk.es50-miBtNmtl-B2MpsQnf.cjs.map → standards-sdk.es50-miBtNmtl-BXhMfUtd.cjs.map} +1 -1
  14. package/dist/cjs/{standards-sdk.es51-rS2UvvV5-CRkd1bF-.cjs → standards-sdk.es51-rS2UvvV5-Bh2x7xrp.cjs} +2 -2
  15. package/dist/cjs/{standards-sdk.es51-rS2UvvV5-CRkd1bF-.cjs.map → standards-sdk.es51-rS2UvvV5-Bh2x7xrp.cjs.map} +1 -1
  16. package/dist/cjs/{standards-sdk.es52-D-lvSMBY-DdUJIqZX.cjs → standards-sdk.es52-D-lvSMBY-DvI5ClIb.cjs} +2 -2
  17. package/dist/cjs/{standards-sdk.es52-D-lvSMBY-DdUJIqZX.cjs.map → standards-sdk.es52-D-lvSMBY-DvI5ClIb.cjs.map} +1 -1
  18. package/dist/cjs/utils/parsers/crypto-parser.d.ts +37 -0
  19. package/dist/cjs/utils/parsers/crypto-parser.d.ts.map +1 -1
  20. package/dist/cjs/utils/parsers/file-parser.d.ts +46 -0
  21. package/dist/cjs/utils/parsers/file-parser.d.ts.map +1 -1
  22. package/dist/cjs/utils/parsers/hcs-parser.d.ts +10 -0
  23. package/dist/cjs/utils/parsers/hcs-parser.d.ts.map +1 -1
  24. package/dist/cjs/utils/parsers/hts-parser.d.ts +23 -5
  25. package/dist/cjs/utils/parsers/hts-parser.d.ts.map +1 -1
  26. package/dist/cjs/utils/parsers/parser-utils.d.ts +11 -0
  27. package/dist/cjs/utils/parsers/parser-utils.d.ts.map +1 -1
  28. package/dist/cjs/utils/parsers/schedule-parser.d.ts +56 -11
  29. package/dist/cjs/utils/parsers/schedule-parser.d.ts.map +1 -1
  30. package/dist/cjs/utils/parsers/scs-parser.d.ts +51 -0
  31. package/dist/cjs/utils/parsers/scs-parser.d.ts.map +1 -1
  32. package/dist/cjs/utils/parsers/util-parser.d.ts +72 -1
  33. package/dist/cjs/utils/parsers/util-parser.d.ts.map +1 -1
  34. package/dist/cjs/utils/transaction-parser-types.d.ts +60 -0
  35. package/dist/cjs/utils/transaction-parser-types.d.ts.map +1 -1
  36. package/dist/cjs/utils/transaction-parser.d.ts +16 -14
  37. package/dist/cjs/utils/transaction-parser.d.ts.map +1 -1
  38. package/dist/es/standards-sdk.es35.js +388 -387
  39. package/dist/es/standards-sdk.es35.js.map +1 -1
  40. package/dist/es/standards-sdk.es36.js.map +1 -1
  41. package/dist/es/standards-sdk.es39.js +385 -18
  42. package/dist/es/standards-sdk.es39.js.map +1 -1
  43. package/dist/es/standards-sdk.es40.js +209 -86
  44. package/dist/es/standards-sdk.es40.js.map +1 -1
  45. package/dist/es/standards-sdk.es50.js +55 -0
  46. package/dist/es/standards-sdk.es50.js.map +1 -1
  47. package/dist/es/standards-sdk.es51.js +249 -1
  48. package/dist/es/standards-sdk.es51.js.map +1 -1
  49. package/dist/es/standards-sdk.es52.js +90 -0
  50. package/dist/es/standards-sdk.es52.js.map +1 -1
  51. package/dist/es/standards-sdk.es53.js +268 -9
  52. package/dist/es/standards-sdk.es53.js.map +1 -1
  53. package/dist/es/standards-sdk.es54.js +306 -0
  54. package/dist/es/standards-sdk.es54.js.map +1 -1
  55. package/dist/es/standards-sdk.es55.js +32 -0
  56. package/dist/es/standards-sdk.es55.js.map +1 -1
  57. package/dist/es/utils/parsers/crypto-parser.d.ts +37 -0
  58. package/dist/es/utils/parsers/crypto-parser.d.ts.map +1 -1
  59. package/dist/es/utils/parsers/file-parser.d.ts +46 -0
  60. package/dist/es/utils/parsers/file-parser.d.ts.map +1 -1
  61. package/dist/es/utils/parsers/hcs-parser.d.ts +10 -0
  62. package/dist/es/utils/parsers/hcs-parser.d.ts.map +1 -1
  63. package/dist/es/utils/parsers/hts-parser.d.ts +23 -5
  64. package/dist/es/utils/parsers/hts-parser.d.ts.map +1 -1
  65. package/dist/es/utils/parsers/parser-utils.d.ts +11 -0
  66. package/dist/es/utils/parsers/parser-utils.d.ts.map +1 -1
  67. package/dist/es/utils/parsers/schedule-parser.d.ts +56 -11
  68. package/dist/es/utils/parsers/schedule-parser.d.ts.map +1 -1
  69. package/dist/es/utils/parsers/scs-parser.d.ts +51 -0
  70. package/dist/es/utils/parsers/scs-parser.d.ts.map +1 -1
  71. package/dist/es/utils/parsers/util-parser.d.ts +72 -1
  72. package/dist/es/utils/parsers/util-parser.d.ts.map +1 -1
  73. package/dist/es/utils/transaction-parser-types.d.ts +60 -0
  74. package/dist/es/utils/transaction-parser-types.d.ts.map +1 -1
  75. package/dist/es/utils/transaction-parser.d.ts +16 -14
  76. package/dist/es/utils/transaction-parser.d.ts.map +1 -1
  77. package/package.json +1 -1
  78. package/dist/cjs/utils/__tests__/hts-parser.test.d.ts +0 -2
  79. package/dist/cjs/utils/__tests__/hts-parser.test.d.ts.map +0 -1
  80. package/dist/cjs/utils/__tests__/schedule-parser.test.d.ts +0 -2
  81. package/dist/cjs/utils/__tests__/schedule-parser.test.d.ts.map +0 -1
  82. package/dist/cjs/utils/__tests__/token-create-parsing.test.d.ts +0 -2
  83. package/dist/cjs/utils/__tests__/token-create-parsing.test.d.ts.map +0 -1
  84. package/dist/cjs/utils/__tests__/transaction-parser.test.d.ts +0 -2
  85. package/dist/cjs/utils/__tests__/transaction-parser.test.d.ts.map +0 -1
  86. package/dist/es/utils/__tests__/hts-parser.test.d.ts +0 -2
  87. package/dist/es/utils/__tests__/hts-parser.test.d.ts.map +0 -1
  88. package/dist/es/utils/__tests__/schedule-parser.test.d.ts +0 -2
  89. package/dist/es/utils/__tests__/schedule-parser.test.d.ts.map +0 -1
  90. package/dist/es/utils/__tests__/token-create-parsing.test.d.ts +0 -2
  91. package/dist/es/utils/__tests__/token-create-parsing.test.d.ts.map +0 -1
  92. package/dist/es/utils/__tests__/transaction-parser.test.d.ts +0 -2
  93. 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":";;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;"}
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;AAEzC,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;CAsBzC"}
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;AAEzC,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACf,MAAM,6BAA6B,CAAC;AAIrC,qBAAa,UAAU;IACrB,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;CAU9B"}
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;AAEzC,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;CAUxC"}
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;AAIrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,SAAS;IACpB;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CACxB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAiNvD,MAAM,CAAC,gBAAgB,CACrB,IAAI,EAAE,KAAK,CAAC,2BAA2B,GACtC,iBAAiB,GAAG,SAAS;IAiJhC,MAAM,CAAC,cAAc,CACnB,IAAI,EAAE,KAAK,CAAC,yBAAyB,GACpC,aAAa,GAAG,SAAS;IAyB5B,MAAM,CAAC,cAAc,CACnB,IAAI,EAAE,KAAK,CAAC,yBAAyB,GACpC,aAAa,GAAG,SAAS;IAyB5B,MAAM,CAAC,gBAAgB,CACrB,IAAI,EAAE,KAAK,CAAC,2BAA2B,GACtC,eAAe,GAAG,SAAS;IAqD9B,MAAM,CAAC,2BAA2B,CAChC,IAAI,EAAE,KAAK,CAAC,sCAAsC,GACjD,0BAA0B,GAAG,SAAS;IAsGzC,MAAM,CAAC,gBAAgB,CACrB,IAAI,EAAE,KAAK,CAAC,kCAAkC,GAC7C,eAAe,GAAG,SAAS;IAoB9B,MAAM,CAAC,kBAAkB,CACvB,IAAI,EAAE,KAAK,CAAC,oCAAoC,GAC/C,iBAAiB,GAAG,SAAS;IAoBhC,MAAM,CAAC,kBAAkB,CACvB,IAAI,EAAE,KAAK,CAAC,6BAA6B,GACxC,iBAAiB,GAAG,SAAS;IAoBhC,MAAM,CAAC,mBAAmB,CACxB,IAAI,EAAE,KAAK,CAAC,8BAA8B,GACzC,kBAAkB,GAAG,SAAS;IAoBjC,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,KAAK,CAAC,0BAA0B,GACrC,cAAc,GAAG,SAAS;IAa7B,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,KAAK,CAAC,4BAA4B,GACvC,gBAAgB,GAAG,SAAS;IAa/B,MAAM,CAAC,qBAAqB,CAC1B,IAAI,EAAE,KAAK,CAAC,gCAAgC,GAC3C,oBAAoB,GAAG,SAAS;IA4BnC,MAAM,CAAC,gBAAgB,CACrB,IAAI,EAAE,KAAK,CAAC,2BAA2B,GACtC,eAAe,GAAG,SAAS;IAa9B,MAAM,CAAC,mBAAmB,CACxB,IAAI,EAAE,KAAK,CAAC,8BAA8B,GACzC,kBAAkB,GAAG,SAAS;IAsBjC,MAAM,CAAC,oBAAoB,CACzB,IAAI,EAAE,KAAK,CAAC,+BAA+B,GAC1C,mBAAmB,GAAG,SAAS;IAsBlC;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,GAAG,IAAI;IAiD3E;;OAEG;IACH,MAAM,CAAC,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,gBAAgB;CAqClE"}
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;AAIzC,wBAAgB,QAAQ,CACtB,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,SAAS,GACjC,MAAM,GAAG,SAAS,CA4CpB"}
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"}