@hashgraphonline/standards-sdk 0.1.141-canary.30 → 0.1.141-canary.31

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 (70) hide show
  1. package/dist/cjs/hcs-21/sdk.d.ts +17 -0
  2. package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
  3. package/dist/cjs/hcs-21/types.d.ts.map +1 -1
  4. package/dist/cjs/standards-sdk.cjs +1 -1
  5. package/dist/cjs/standards-sdk.cjs.map +1 -1
  6. package/dist/es/hcs-21/sdk.d.ts +17 -0
  7. package/dist/es/hcs-21/sdk.d.ts.map +1 -1
  8. package/dist/es/hcs-21/types.d.ts.map +1 -1
  9. package/dist/es/standards-sdk.es100.js +1 -1
  10. package/dist/es/standards-sdk.es104.js +1 -1
  11. package/dist/es/standards-sdk.es110.js +1 -1
  12. package/dist/es/standards-sdk.es111.js +5 -5
  13. package/dist/es/standards-sdk.es121.js +1 -1
  14. package/dist/es/standards-sdk.es122.js +1 -1
  15. package/dist/es/standards-sdk.es123.js +5 -5
  16. package/dist/es/standards-sdk.es125.js +1 -1
  17. package/dist/es/standards-sdk.es126.js +1 -1
  18. package/dist/es/standards-sdk.es128.js +1 -1
  19. package/dist/es/standards-sdk.es13.js +1 -1
  20. package/dist/es/standards-sdk.es138.js +766 -42
  21. package/dist/es/standards-sdk.es138.js.map +1 -1
  22. package/dist/es/standards-sdk.es139.js +42 -766
  23. package/dist/es/standards-sdk.es139.js.map +1 -1
  24. package/dist/es/standards-sdk.es140.js +12 -12269
  25. package/dist/es/standards-sdk.es140.js.map +1 -1
  26. package/dist/es/standards-sdk.es141.js +168 -13
  27. package/dist/es/standards-sdk.es141.js.map +1 -1
  28. package/dist/es/standards-sdk.es142.js +321 -55
  29. package/dist/es/standards-sdk.es142.js.map +1 -1
  30. package/dist/es/standards-sdk.es143.js +294 -120
  31. package/dist/es/standards-sdk.es143.js.map +1 -1
  32. package/dist/es/standards-sdk.es144.js +322 -191
  33. package/dist/es/standards-sdk.es144.js.map +1 -1
  34. package/dist/es/standards-sdk.es145.js +279 -294
  35. package/dist/es/standards-sdk.es145.js.map +1 -1
  36. package/dist/es/standards-sdk.es146.js +63 -440
  37. package/dist/es/standards-sdk.es146.js.map +1 -1
  38. package/dist/es/standards-sdk.es147.js +12210 -267
  39. package/dist/es/standards-sdk.es147.js.map +1 -1
  40. package/dist/es/standards-sdk.es148.js +49 -69
  41. package/dist/es/standards-sdk.es148.js.map +1 -1
  42. package/dist/es/standards-sdk.es17.js +1 -1
  43. package/dist/es/standards-sdk.es19.js +3 -3
  44. package/dist/es/standards-sdk.es20.js +2 -2
  45. package/dist/es/standards-sdk.es23.js +1 -1
  46. package/dist/es/standards-sdk.es28.js +2 -2
  47. package/dist/es/standards-sdk.es31.js +1 -1
  48. package/dist/es/standards-sdk.es32.js +1 -1
  49. package/dist/es/standards-sdk.es36.js +2 -2
  50. package/dist/es/standards-sdk.es37.js +2 -2
  51. package/dist/es/standards-sdk.es38.js +1 -1
  52. package/dist/es/standards-sdk.es54.js +1 -1
  53. package/dist/es/standards-sdk.es57.js +1 -1
  54. package/dist/es/standards-sdk.es59.js +1 -1
  55. package/dist/es/standards-sdk.es61.js +1 -1
  56. package/dist/es/standards-sdk.es65.js +1 -1
  57. package/dist/es/standards-sdk.es66.js +1 -1
  58. package/dist/es/standards-sdk.es69.js +1 -1
  59. package/dist/es/standards-sdk.es70.js +1 -1
  60. package/dist/es/standards-sdk.es72.js +1 -1
  61. package/dist/es/standards-sdk.es78.js +1 -1
  62. package/dist/es/standards-sdk.es79.js +1 -1
  63. package/dist/es/standards-sdk.es8.js +1 -1
  64. package/dist/es/standards-sdk.es80.js +2 -2
  65. package/dist/es/standards-sdk.es80.js.map +1 -1
  66. package/dist/es/standards-sdk.es82.js +1 -1
  67. package/dist/es/standards-sdk.es84.js +55 -0
  68. package/dist/es/standards-sdk.es84.js.map +1 -1
  69. package/dist/es/standards-sdk.es92.js +1 -1
  70. package/package.json +61 -63
@@ -1,165 +1,339 @@
1
- import { Long, AccountId } from "@hashgraph/sdk";
2
- import { parseKey } from "./standards-sdk.es148.js";
3
- import { Buffer } from "buffer";
4
- class HCSParser {
5
- static parseConsensusCreateTopic(body) {
1
+ import { AccountId, Hbar, Long, HbarUnit, TokenId } from "@hashgraph/sdk";
2
+ import { parseKey } from "./standards-sdk.es146.js";
3
+ class CryptoParser {
4
+ static parseCryptoTransfers(cryptoTransfer, result) {
5
+ if (cryptoTransfer.transfers?.accountAmounts) {
6
+ result.transfers = cryptoTransfer.transfers.accountAmounts.map((aa) => {
7
+ const accountId = new AccountId(
8
+ aa.accountID.shardNum ?? 0,
9
+ aa.accountID.realmNum ?? 0,
10
+ aa.accountID.accountNum ?? 0
11
+ );
12
+ const hbarAmount = Hbar.fromTinybars(Long.fromValue(aa.amount));
13
+ return {
14
+ accountId: accountId.toString(),
15
+ amount: hbarAmount.toString(HbarUnit.Hbar),
16
+ isDecimal: true
17
+ };
18
+ });
19
+ }
20
+ if (cryptoTransfer.tokenTransfers) {
21
+ for (const tokenTransferList of cryptoTransfer.tokenTransfers) {
22
+ const tokenId = new TokenId(
23
+ tokenTransferList.token.shardNum ?? 0,
24
+ tokenTransferList.token.realmNum ?? 0,
25
+ tokenTransferList.token.tokenNum ?? 0
26
+ );
27
+ if (tokenTransferList.transfers) {
28
+ for (const transfer of tokenTransferList.transfers) {
29
+ const accountId = new AccountId(
30
+ transfer.accountID.shardNum ?? 0,
31
+ transfer.accountID.realmNum ?? 0,
32
+ transfer.accountID.accountNum ?? 0
33
+ );
34
+ const tokenAmount = Long.fromValue(transfer.amount).toNumber();
35
+ result.tokenTransfers.push({
36
+ tokenId: tokenId.toString(),
37
+ accountId: accountId.toString(),
38
+ amount: tokenAmount
39
+ });
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+ static parseCryptoDelete(body) {
6
46
  if (!body) return void 0;
7
47
  const data = {};
8
- if (body.memo) {
9
- data.memo = body.memo;
10
- }
11
- data.adminKey = parseKey(body.adminKey);
12
- data.submitKey = parseKey(body.submitKey);
13
- if (body.autoRenewPeriod?.seconds) {
14
- data.autoRenewPeriod = Long.fromValue(
15
- body.autoRenewPeriod.seconds
48
+ if (body.deleteAccountID) {
49
+ data.deleteAccountId = new AccountId(
50
+ body.deleteAccountID.shardNum ?? 0,
51
+ body.deleteAccountID.realmNum ?? 0,
52
+ body.deleteAccountID.accountNum ?? 0
16
53
  ).toString();
17
54
  }
18
- if (body.autoRenewAccount) {
19
- data.autoRenewAccountId = new AccountId(
20
- body.autoRenewAccount.shardNum ?? 0,
21
- body.autoRenewAccount.realmNum ?? 0,
22
- body.autoRenewAccount.accountNum ?? 0
55
+ if (body.transferAccountID) {
56
+ data.transferAccountId = new AccountId(
57
+ body.transferAccountID.shardNum ?? 0,
58
+ body.transferAccountID.realmNum ?? 0,
59
+ body.transferAccountID.accountNum ?? 0
23
60
  ).toString();
24
61
  }
25
62
  return data;
26
63
  }
27
- static parseConsensusSubmitMessage(body) {
64
+ static parseCryptoCreateAccount(body) {
28
65
  if (!body) return void 0;
29
66
  const data = {};
30
- if (body.topicID) {
31
- data.topicId = `${body.topicID.shardNum ?? 0}.${body.topicID.realmNum ?? 0}.${body.topicID.topicNum ?? 0}`;
32
- }
33
- if (body.message?.length > 0) {
34
- const messageBuffer = Buffer.from(body.message);
35
- const utf8String = messageBuffer.toString("utf8");
36
- if (/[\x00-\x08\x0B\x0E-\x1F\x7F]/.test(utf8String) || utf8String.includes("�")) {
37
- data.message = messageBuffer.toString("base64");
38
- data.messageEncoding = "base64";
39
- } else {
40
- data.message = utf8String;
41
- data.messageEncoding = "utf8";
42
- }
67
+ if (body.initialBalance) {
68
+ data.initialBalance = Hbar.fromTinybars(
69
+ Long.fromValue(body.initialBalance)
70
+ ).toString(HbarUnit.Hbar);
43
71
  }
44
- if (body.chunkInfo) {
45
- if (body.chunkInfo.initialTransactionID) {
46
- const txId = body.chunkInfo.initialTransactionID.accountID;
47
- const taValidStart = body.chunkInfo.initialTransactionID.transactionValidStart;
48
- if (txId && taValidStart) {
49
- data.chunkInfoInitialTransactionID = `${txId.shardNum ?? 0}.${txId.realmNum ?? 0}.${txId.accountNum ?? 0}@${taValidStart.seconds ?? 0}.${taValidStart.nanos ?? 0}`;
50
- }
51
- }
52
- if (body.chunkInfo.number !== void 0 && body.chunkInfo.number !== null) {
53
- data.chunkInfoNumber = body.chunkInfo.number;
54
- }
55
- if (body.chunkInfo.total !== void 0 && body.chunkInfo.total !== null) {
56
- data.chunkInfoTotal = body.chunkInfo.total;
57
- }
72
+ if (body.key) {
73
+ data.key = parseKey(body.key);
74
+ }
75
+ if (body.receiverSigRequired !== void 0) {
76
+ data.receiverSigRequired = body.receiverSigRequired;
77
+ }
78
+ if (body.autoRenewPeriod?.seconds) {
79
+ data.autoRenewPeriod = Long.fromValue(
80
+ body.autoRenewPeriod.seconds
81
+ ).toString();
82
+ }
83
+ if (body.memo) {
84
+ data.memo = body.memo;
85
+ }
86
+ if (body.maxAutomaticTokenAssociations !== void 0) {
87
+ data.maxAutomaticTokenAssociations = body.maxAutomaticTokenAssociations;
88
+ }
89
+ if (body.stakedAccountId) {
90
+ data.stakedAccountId = new AccountId(
91
+ body.stakedAccountId.shardNum ?? 0,
92
+ body.stakedAccountId.realmNum ?? 0,
93
+ body.stakedAccountId.accountNum ?? 0
94
+ ).toString();
95
+ } else if (body.stakedNodeId !== null && body.stakedNodeId !== void 0) {
96
+ data.stakedNodeId = Long.fromValue(body.stakedNodeId).toString();
97
+ }
98
+ if (body.declineReward !== void 0) {
99
+ data.declineReward = body.declineReward;
100
+ }
101
+ if (body.alias && body.alias.length > 0) {
102
+ data.alias = Buffer.from(body.alias).toString("hex");
58
103
  }
59
104
  return data;
60
105
  }
61
- static parseConsensusUpdateTopic(body) {
106
+ static parseCryptoUpdateAccount(body) {
62
107
  if (!body) return void 0;
63
108
  const data = {};
64
- if (body.topicID) {
65
- data.topicId = `${body.topicID.shardNum}.${body.topicID.realmNum}.${body.topicID.topicNum}`;
109
+ if (body.accountIDToUpdate) {
110
+ data.accountIdToUpdate = new AccountId(
111
+ body.accountIDToUpdate.shardNum ?? 0,
112
+ body.accountIDToUpdate.realmNum ?? 0,
113
+ body.accountIDToUpdate.accountNum ?? 0
114
+ ).toString();
66
115
  }
67
- if (body.memo?.value !== void 0) {
68
- data.memo = body.memo.value;
116
+ if (body.key) {
117
+ data.key = parseKey(body.key);
69
118
  }
70
- if (body.adminKey === null) {
71
- data.clearAdminKey = true;
72
- data.adminKey = void 0;
73
- } else if (body.adminKey) {
74
- data.adminKey = parseKey(body.adminKey);
75
- } else {
76
- data.adminKey = void 0;
119
+ if (body.expirationTime?.seconds) {
120
+ data.expirationTime = `${Long.fromValue(
121
+ body.expirationTime.seconds
122
+ ).toString()}.${body.expirationTime.nanos}`;
77
123
  }
78
- if (body.submitKey === null) {
79
- data.clearSubmitKey = true;
80
- data.submitKey = void 0;
81
- } else if (body.submitKey) {
82
- data.submitKey = parseKey(body.submitKey);
83
- } else {
84
- data.submitKey = void 0;
124
+ if (body.receiverSigRequired !== null && body.receiverSigRequired !== void 0) {
125
+ data.receiverSigRequired = Boolean(body.receiverSigRequired);
85
126
  }
86
127
  if (body.autoRenewPeriod?.seconds) {
87
128
  data.autoRenewPeriod = Long.fromValue(
88
129
  body.autoRenewPeriod.seconds
89
130
  ).toString();
90
131
  }
91
- if (body.autoRenewAccount) {
92
- data.autoRenewAccountId = new AccountId(
93
- body.autoRenewAccount.shardNum ?? 0,
94
- body.autoRenewAccount.realmNum ?? 0,
95
- body.autoRenewAccount.accountNum ?? 0
132
+ if (body.memo?.value !== void 0) {
133
+ data.memo = body.memo.value;
134
+ }
135
+ if (body.maxAutomaticTokenAssociations?.value !== void 0) {
136
+ data.maxAutomaticTokenAssociations = body.maxAutomaticTokenAssociations.value;
137
+ }
138
+ if (body.stakedAccountId) {
139
+ data.stakedAccountId = new AccountId(
140
+ body.stakedAccountId.shardNum ?? 0,
141
+ body.stakedAccountId.realmNum ?? 0,
142
+ body.stakedAccountId.accountNum ?? 0
96
143
  ).toString();
144
+ data.stakedNodeId = void 0;
145
+ } else if (body.stakedNodeId !== null && body.stakedNodeId !== void 0) {
146
+ data.stakedNodeId = Long.fromValue(body.stakedNodeId).toString();
147
+ data.stakedAccountId = void 0;
148
+ } else {
149
+ data.stakedAccountId = void 0;
150
+ data.stakedNodeId = void 0;
151
+ }
152
+ if (body.declineReward !== null && body.declineReward !== void 0) {
153
+ data.declineReward = Boolean(body.declineReward);
154
+ }
155
+ return data;
156
+ }
157
+ static parseCryptoApproveAllowance(body) {
158
+ if (!body) return void 0;
159
+ const data = {};
160
+ if (body.cryptoAllowances && body.cryptoAllowances.length > 0) {
161
+ data.hbarAllowances = body.cryptoAllowances.map((a) => ({
162
+ ownerAccountId: new AccountId(
163
+ a.owner.shardNum ?? 0,
164
+ a.owner.realmNum ?? 0,
165
+ a.owner.accountNum ?? 0
166
+ ).toString(),
167
+ spenderAccountId: new AccountId(
168
+ a.spender.shardNum ?? 0,
169
+ a.spender.realmNum ?? 0,
170
+ a.spender.accountNum ?? 0
171
+ ).toString(),
172
+ amount: Hbar.fromTinybars(Long.fromValue(a.amount)).toString(
173
+ HbarUnit.Hbar
174
+ )
175
+ }));
176
+ }
177
+ if (body.tokenAllowances && body.tokenAllowances.length > 0) {
178
+ data.tokenAllowances = body.tokenAllowances.map((a) => ({
179
+ tokenId: new TokenId(
180
+ a.tokenId.shardNum ?? 0,
181
+ a.tokenId.realmNum ?? 0,
182
+ a.tokenId.tokenNum ?? 0
183
+ ).toString(),
184
+ ownerAccountId: new AccountId(
185
+ a.owner.shardNum ?? 0,
186
+ a.owner.realmNum ?? 0,
187
+ a.owner.accountNum ?? 0
188
+ ).toString(),
189
+ spenderAccountId: new AccountId(
190
+ a.spender.shardNum ?? 0,
191
+ a.spender.realmNum ?? 0,
192
+ a.spender.accountNum ?? 0
193
+ ).toString(),
194
+ amount: Long.fromValue(a.amount).toString()
195
+ }));
196
+ }
197
+ if (body.nftAllowances && body.nftAllowances.length > 0) {
198
+ data.nftAllowances = body.nftAllowances.map((a) => {
199
+ const allowance = {};
200
+ if (a.tokenId)
201
+ allowance.tokenId = new TokenId(
202
+ a.tokenId.shardNum ?? 0,
203
+ a.tokenId.realmNum ?? 0,
204
+ a.tokenId.tokenNum ?? 0
205
+ ).toString();
206
+ if (a.owner)
207
+ allowance.ownerAccountId = new AccountId(
208
+ a.owner.shardNum ?? 0,
209
+ a.owner.realmNum ?? 0,
210
+ a.owner.accountNum ?? 0
211
+ ).toString();
212
+ if (a.spender)
213
+ allowance.spenderAccountId = new AccountId(
214
+ a.spender.shardNum ?? 0,
215
+ a.spender.realmNum ?? 0,
216
+ a.spender.accountNum ?? 0
217
+ ).toString();
218
+ if (a.serialNumbers && a.serialNumbers.length > 0)
219
+ allowance.serialNumbers = a.serialNumbers.map(
220
+ (sn) => Long.fromValue(sn).toString()
221
+ );
222
+ if (a.approvedForAll?.value !== void 0)
223
+ allowance.approvedForAll = a.approvedForAll.value;
224
+ if (a.delegatingSpender)
225
+ allowance.delegatingSpender = new AccountId(
226
+ a.delegatingSpender.shardNum ?? 0,
227
+ a.delegatingSpender.realmNum ?? 0,
228
+ a.delegatingSpender.accountNum ?? 0
229
+ ).toString();
230
+ return allowance;
231
+ });
97
232
  }
98
233
  return data;
99
234
  }
100
- static parseConsensusDeleteTopic(body) {
235
+ static parseCryptoDeleteAllowance(body) {
101
236
  if (!body) return void 0;
102
237
  const data = {};
103
- if (body.topicID) {
104
- data.topicId = `${body.topicID.shardNum}.${body.topicID.realmNum ?? 0}.${body.topicID.topicNum ?? 0}`;
238
+ if (body.nftAllowances && body.nftAllowances.length > 0) {
239
+ data.nftAllowancesToRemove = body.nftAllowances.map((a) => ({
240
+ ownerAccountId: new AccountId(
241
+ a.owner.shardNum ?? 0,
242
+ a.owner.realmNum ?? 0,
243
+ a.owner.accountNum ?? 0
244
+ ).toString(),
245
+ tokenId: new TokenId(
246
+ a.tokenId.shardNum ?? 0,
247
+ a.tokenId.realmNum ?? 0,
248
+ a.tokenId.tokenNum ?? 0
249
+ ).toString(),
250
+ serialNumbers: a.serialNumbers ? a.serialNumbers.map((sn) => Long.fromValue(sn).toString()) : []
251
+ }));
105
252
  }
106
253
  return data;
107
254
  }
108
255
  /**
109
- * Parse HCS transaction from Transaction object with comprehensive extraction
110
- * This is the unified entry point that handles both protobuf and internal field extraction
256
+ * Extract HBAR transfers from Transaction object
111
257
  */
112
- static parseFromTransactionObject(transaction) {
258
+ static extractHbarTransfersFromTransaction(transaction) {
259
+ const transfers = [];
113
260
  try {
114
- const transactionBody = transaction._transactionBody;
115
- if (!transactionBody) {
116
- return {};
117
- }
118
- if (transactionBody.consensusCreateTopic) {
119
- const consensusCreateTopic = this.parseConsensusCreateTopic(
120
- transactionBody.consensusCreateTopic
121
- );
122
- if (consensusCreateTopic) {
123
- return {
124
- type: "TOPICCREATE",
125
- humanReadableType: "Topic Create",
126
- consensusCreateTopic
127
- };
128
- }
261
+ const hbarTransfers = transaction._hbarTransfers;
262
+ if (Array.isArray(hbarTransfers)) {
263
+ hbarTransfers.forEach((transfer) => {
264
+ if (transfer.accountId && transfer.amount) {
265
+ const amountInTinybars = transfer.amount.toTinybars();
266
+ const amountInHbar = Number(amountInTinybars) / 1e8;
267
+ transfers.push({
268
+ accountId: transfer.accountId.toString(),
269
+ amount: amountInHbar
270
+ });
271
+ }
272
+ });
129
273
  }
130
- if (transactionBody.consensusSubmitMessage) {
131
- const consensusSubmitMessage = this.parseConsensusSubmitMessage(
132
- transactionBody.consensusSubmitMessage
133
- );
134
- if (consensusSubmitMessage) {
135
- return {
136
- type: "CONSENSUSSUBMITMESSAGE",
137
- humanReadableType: "Submit Message",
138
- consensusSubmitMessage
139
- };
140
- }
274
+ } catch (error) {
275
+ }
276
+ return transfers;
277
+ }
278
+ /**
279
+ * Extract token transfers from Transaction object
280
+ */
281
+ static extractTokenTransfersFromTransaction(transaction) {
282
+ const tokenTransfers = [];
283
+ try {
284
+ const tokenTransfersList = transaction._tokenTransfers;
285
+ if (Array.isArray(tokenTransfersList)) {
286
+ tokenTransfersList.forEach((tokenTransfer) => {
287
+ if (tokenTransfer.tokenId && Array.isArray(tokenTransfer.transfers)) {
288
+ const transfers = tokenTransfer.transfers.map((transfer) => ({
289
+ accountId: transfer.accountId?.toString() || "Unknown",
290
+ amount: Number(transfer.amount || 0)
291
+ }));
292
+ tokenTransfers.push({
293
+ tokenId: tokenTransfer.tokenId.toString(),
294
+ transfers
295
+ });
296
+ }
297
+ });
141
298
  }
142
- if (transactionBody.consensusUpdateTopic) {
143
- const consensusUpdateTopic = this.parseConsensusUpdateTopic(
144
- transactionBody.consensusUpdateTopic
299
+ } catch (error) {
300
+ }
301
+ return tokenTransfers;
302
+ }
303
+ /**
304
+ * Parse crypto transaction from Transaction object with comprehensive extraction
305
+ * This is the unified entry point that handles both protobuf and internal field extraction
306
+ */
307
+ static parseFromTransactionObject(transaction) {
308
+ try {
309
+ const hbarTransfers = this.extractHbarTransfersFromTransaction(transaction);
310
+ const tokenTransfers = this.extractTokenTransfersFromTransaction(transaction);
311
+ if (hbarTransfers.length > 0 || tokenTransfers.length > 0) {
312
+ const convertedTransfers = hbarTransfers.map((transfer) => ({
313
+ accountId: transfer.accountId,
314
+ amount: transfer.amount.toString() + " ℏ",
315
+ isDecimal: true
316
+ }));
317
+ const convertedTokenTransfers = tokenTransfers.flatMap(
318
+ (tokenGroup) => tokenGroup.transfers.map((transfer) => ({
319
+ tokenId: tokenGroup.tokenId,
320
+ accountId: transfer.accountId,
321
+ amount: transfer.amount
322
+ }))
145
323
  );
146
- if (consensusUpdateTopic) {
324
+ if (hbarTransfers.length > 0) {
147
325
  return {
148
- type: "TOPICUPDATE",
149
- humanReadableType: "Topic Update",
150
- consensusUpdateTopic
326
+ type: "CRYPTOTRANSFER",
327
+ humanReadableType: "Crypto Transfer",
328
+ transfers: convertedTransfers,
329
+ tokenTransfers: convertedTokenTransfers
151
330
  };
152
- }
153
- }
154
- if (transactionBody.consensusDeleteTopic) {
155
- const consensusDeleteTopic = this.parseConsensusDeleteTopic(
156
- transactionBody.consensusDeleteTopic
157
- );
158
- if (consensusDeleteTopic) {
331
+ } else if (tokenTransfers.length > 0) {
159
332
  return {
160
- type: "TOPICDELETE",
161
- humanReadableType: "Topic Delete",
162
- consensusDeleteTopic
333
+ type: "TOKENTRANSFER",
334
+ humanReadableType: "Token Transfer",
335
+ transfers: convertedTransfers,
336
+ tokenTransfers: convertedTokenTransfers
163
337
  };
164
338
  }
165
339
  }
@@ -170,6 +344,6 @@ class HCSParser {
170
344
  }
171
345
  }
172
346
  export {
173
- HCSParser
347
+ CryptoParser
174
348
  };
175
349
  //# sourceMappingURL=standards-sdk.es143.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es143.js","sources":["../../src/utils/parsers/hcs-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { AccountId, Long, Transaction } from '@hashgraph/sdk';\nimport {\n ConsensusCreateTopicData,\n ConsensusSubmitMessageData,\n ConsensusUpdateTopicData,\n ConsensusDeleteTopicData,\n} from '../transaction-parser-types';\nimport { parseKey } from './parser-utils';\nimport { Buffer } from 'buffer';\n\nexport class HCSParser {\n static parseConsensusCreateTopic(\n body: proto.IConsensusCreateTopicTransactionBody,\n ): ConsensusCreateTopicData | undefined {\n if (!body) return undefined;\n const data: ConsensusCreateTopicData = {};\n if (body.memo) {\n data.memo = body.memo;\n }\n data.adminKey = parseKey(body.adminKey);\n data.submitKey = parseKey(body.submitKey);\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n if (body.autoRenewAccount) {\n data.autoRenewAccountId = new AccountId(\n body.autoRenewAccount.shardNum ?? 0,\n body.autoRenewAccount.realmNum ?? 0,\n body.autoRenewAccount.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseConsensusSubmitMessage(\n body: proto.IConsensusSubmitMessageTransactionBody,\n ): ConsensusSubmitMessageData | undefined {\n if (!body) return undefined;\n const data: ConsensusSubmitMessageData = {};\n if (body.topicID) {\n data.topicId = `${body.topicID.shardNum ?? 0}.${\n body.topicID.realmNum ?? 0\n }.${body.topicID.topicNum ?? 0}`;\n }\n if (body.message?.length > 0) {\n const messageBuffer = Buffer.from(body.message);\n const utf8String = messageBuffer.toString('utf8');\n if (\n /[\\x00-\\x08\\x0B\\x0E-\\x1F\\x7F]/.test(utf8String) ||\n utf8String.includes('\\uFFFD')\n ) {\n data.message = messageBuffer.toString('base64');\n data.messageEncoding = 'base64';\n } else {\n data.message = utf8String;\n data.messageEncoding = 'utf8';\n }\n }\n if (body.chunkInfo) {\n if (body.chunkInfo.initialTransactionID) {\n const txId = body.chunkInfo.initialTransactionID.accountID;\n const taValidStart =\n body.chunkInfo.initialTransactionID.transactionValidStart;\n if (txId && taValidStart) {\n data.chunkInfoInitialTransactionID = `${txId.shardNum ?? 0}.${\n txId.realmNum ?? 0\n }.${txId.accountNum ?? 0}@${taValidStart.seconds ?? 0}.${\n taValidStart.nanos ?? 0\n }`;\n }\n }\n if (\n body.chunkInfo.number !== undefined &&\n body.chunkInfo.number !== null\n ) {\n data.chunkInfoNumber = body.chunkInfo.number;\n }\n if (body.chunkInfo.total !== undefined && body.chunkInfo.total !== null) {\n data.chunkInfoTotal = body.chunkInfo.total;\n }\n }\n return data;\n }\n\n static parseConsensusUpdateTopic(\n body: proto.IConsensusUpdateTopicTransactionBody,\n ): ConsensusUpdateTopicData | undefined {\n if (!body) return undefined;\n const data: ConsensusUpdateTopicData = {};\n if (body.topicID) {\n data.topicId = `${body.topicID.shardNum}.${body.topicID.realmNum}.${body.topicID.topicNum}`;\n }\n if (body.memo?.value !== undefined) {\n data.memo = body.memo.value;\n }\n if (body.adminKey === null) {\n data.clearAdminKey = true;\n data.adminKey = undefined;\n } else if (body.adminKey) {\n data.adminKey = parseKey(body.adminKey);\n } else {\n data.adminKey = undefined;\n }\n if (body.submitKey === null) {\n data.clearSubmitKey = true;\n data.submitKey = undefined;\n } else if (body.submitKey) {\n data.submitKey = parseKey(body.submitKey);\n } else {\n data.submitKey = undefined;\n }\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n if (body.autoRenewAccount) {\n data.autoRenewAccountId = new AccountId(\n body.autoRenewAccount.shardNum ?? 0,\n body.autoRenewAccount.realmNum ?? 0,\n body.autoRenewAccount.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseConsensusDeleteTopic(\n body: proto.IConsensusDeleteTopicTransactionBody,\n ): ConsensusDeleteTopicData | undefined {\n if (!body) return undefined;\n const data: ConsensusDeleteTopicData = {};\n if (body.topicID) {\n data.topicId = `${body.topicID.shardNum}.${body.topicID.realmNum ?? 0}.${\n body.topicID.topicNum ?? 0\n }`;\n }\n return data;\n }\n\n /**\n * Parse HCS transaction from Transaction object with comprehensive extraction\n * This is the unified entry point that handles both protobuf and internal field extraction\n */\n static parseFromTransactionObject(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n try {\n const transactionBody = (\n transaction as unknown as { _transactionBody?: unknown }\n )._transactionBody as proto.ITransactionBody | undefined;\n\n if (!transactionBody) {\n return {};\n }\n\n if (transactionBody.consensusCreateTopic) {\n const consensusCreateTopic = this.parseConsensusCreateTopic(\n transactionBody.consensusCreateTopic,\n );\n if (consensusCreateTopic) {\n return {\n type: 'TOPICCREATE',\n humanReadableType: 'Topic Create',\n consensusCreateTopic,\n };\n }\n }\n\n if (transactionBody.consensusSubmitMessage) {\n const consensusSubmitMessage = this.parseConsensusSubmitMessage(\n transactionBody.consensusSubmitMessage,\n );\n if (consensusSubmitMessage) {\n return {\n type: 'CONSENSUSSUBMITMESSAGE',\n humanReadableType: 'Submit Message',\n consensusSubmitMessage,\n };\n }\n }\n\n if (transactionBody.consensusUpdateTopic) {\n const consensusUpdateTopic = this.parseConsensusUpdateTopic(\n transactionBody.consensusUpdateTopic,\n );\n if (consensusUpdateTopic) {\n return {\n type: 'TOPICUPDATE',\n humanReadableType: 'Topic Update',\n consensusUpdateTopic,\n };\n }\n }\n\n if (transactionBody.consensusDeleteTopic) {\n const consensusDeleteTopic = this.parseConsensusDeleteTopic(\n transactionBody.consensusDeleteTopic,\n );\n if (consensusDeleteTopic) {\n return {\n type: 'TOPICDELETE',\n humanReadableType: 'Topic Delete',\n consensusDeleteTopic,\n };\n }\n }\n\n return {};\n } catch (error) {\n return {};\n }\n }\n}\n"],"names":[],"mappings":";;;AAWO,MAAM,UAAU;AAAA,EACrB,OAAO,0BACL,MACsC;AACtC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAiC,CAAA;AACvC,QAAI,KAAK,MAAM;AACb,WAAK,OAAO,KAAK;AAAA,IACnB;AACA,SAAK,WAAW,SAAS,KAAK,QAAQ;AACtC,SAAK,YAAY,SAAS,KAAK,SAAS;AACxC,QAAI,KAAK,iBAAiB,SAAS;AACjC,WAAK,kBAAkB,KAAK;AAAA,QAC1B,KAAK,gBAAgB;AAAA,MAAA,EACrB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,kBAAkB;AACzB,WAAK,qBAAqB,IAAI;AAAA,QAC5B,KAAK,iBAAiB,YAAY;AAAA,QAClC,KAAK,iBAAiB,YAAY;AAAA,QAClC,KAAK,iBAAiB,cAAc;AAAA,MAAA,EACpC,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,4BACL,MACwC;AACxC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAmC,CAAA;AACzC,QAAI,KAAK,SAAS;AAChB,WAAK,UAAU,GAAG,KAAK,QAAQ,YAAY,CAAC,IAC1C,KAAK,QAAQ,YAAY,CAC3B,IAAI,KAAK,QAAQ,YAAY,CAAC;AAAA,IAChC;AACA,QAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,YAAM,gBAAgB,OAAO,KAAK,KAAK,OAAO;AAC9C,YAAM,aAAa,cAAc,SAAS,MAAM;AAChD,UACE,+BAA+B,KAAK,UAAU,KAC9C,WAAW,SAAS,GAAQ,GAC5B;AACA,aAAK,UAAU,cAAc,SAAS,QAAQ;AAC9C,aAAK,kBAAkB;AAAA,MACzB,OAAO;AACL,aAAK,UAAU;AACf,aAAK,kBAAkB;AAAA,MACzB;AAAA,IACF;AACA,QAAI,KAAK,WAAW;AAClB,UAAI,KAAK,UAAU,sBAAsB;AACvC,cAAM,OAAO,KAAK,UAAU,qBAAqB;AACjD,cAAM,eACJ,KAAK,UAAU,qBAAqB;AACtC,YAAI,QAAQ,cAAc;AACxB,eAAK,gCAAgC,GAAG,KAAK,YAAY,CAAC,IACxD,KAAK,YAAY,CACnB,IAAI,KAAK,cAAc,CAAC,IAAI,aAAa,WAAW,CAAC,IACnD,aAAa,SAAS,CACxB;AAAA,QACF;AAAA,MACF;AACA,UACE,KAAK,UAAU,WAAW,UAC1B,KAAK,UAAU,WAAW,MAC1B;AACA,aAAK,kBAAkB,KAAK,UAAU;AAAA,MACxC;AACA,UAAI,KAAK,UAAU,UAAU,UAAa,KAAK,UAAU,UAAU,MAAM;AACvE,aAAK,iBAAiB,KAAK,UAAU;AAAA,MACvC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,0BACL,MACsC;AACtC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAiC,CAAA;AACvC,QAAI,KAAK,SAAS;AAChB,WAAK,UAAU,GAAG,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ,QAAQ;AAAA,IAC3F;AACA,QAAI,KAAK,MAAM,UAAU,QAAW;AAClC,WAAK,OAAO,KAAK,KAAK;AAAA,IACxB;AACA,QAAI,KAAK,aAAa,MAAM;AAC1B,WAAK,gBAAgB;AACrB,WAAK,WAAW;AAAA,IAClB,WAAW,KAAK,UAAU;AACxB,WAAK,WAAW,SAAS,KAAK,QAAQ;AAAA,IACxC,OAAO;AACL,WAAK,WAAW;AAAA,IAClB;AACA,QAAI,KAAK,cAAc,MAAM;AAC3B,WAAK,iBAAiB;AACtB,WAAK,YAAY;AAAA,IACnB,WAAW,KAAK,WAAW;AACzB,WAAK,YAAY,SAAS,KAAK,SAAS;AAAA,IAC1C,OAAO;AACL,WAAK,YAAY;AAAA,IACnB;AACA,QAAI,KAAK,iBAAiB,SAAS;AACjC,WAAK,kBAAkB,KAAK;AAAA,QAC1B,KAAK,gBAAgB;AAAA,MAAA,EACrB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,kBAAkB;AACzB,WAAK,qBAAqB,IAAI;AAAA,QAC5B,KAAK,iBAAiB,YAAY;AAAA,QAClC,KAAK,iBAAiB,YAAY;AAAA,QAClC,KAAK,iBAAiB,cAAc;AAAA,MAAA,EACpC,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,0BACL,MACsC;AACtC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAiC,CAAA;AACvC,QAAI,KAAK,SAAS;AAChB,WAAK,UAAU,GAAG,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ,YAAY,CAAC,IACnE,KAAK,QAAQ,YAAY,CAC3B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,2BAA2B,aAIhC;AACA,QAAI;AACF,YAAM,kBACJ,YACA;AAEF,UAAI,CAAC,iBAAiB;AACpB,eAAO,CAAA;AAAA,MACT;AAEA,UAAI,gBAAgB,sBAAsB;AACxC,cAAM,uBAAuB,KAAK;AAAA,UAChC,gBAAgB;AAAA,QAAA;AAElB,YAAI,sBAAsB;AACxB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,wBAAwB;AAC1C,cAAM,yBAAyB,KAAK;AAAA,UAClC,gBAAgB;AAAA,QAAA;AAElB,YAAI,wBAAwB;AAC1B,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,sBAAsB;AACxC,cAAM,uBAAuB,KAAK;AAAA,UAChC,gBAAgB;AAAA,QAAA;AAElB,YAAI,sBAAsB;AACxB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,sBAAsB;AACxC,cAAM,uBAAuB,KAAK;AAAA,UAChC,gBAAgB;AAAA,QAAA;AAElB,YAAI,sBAAsB;AACxB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,aAAO,CAAA;AAAA,IACT,SAAS,OAAO;AACd,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es143.js","sources":["../../src/utils/parsers/crypto-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport {\n AccountId,\n TokenId,\n Hbar,\n HbarUnit,\n Long,\n Transaction,\n} from '@hashgraph/sdk';\nimport {\n AccountAmount,\n TokenAmount,\n CryptoDeleteData,\n CryptoCreateAccountData,\n CryptoUpdateAccountData,\n CryptoApproveAllowanceData,\n CryptoDeleteAllowanceData,\n NftAllowance,\n} from '../transaction-parser-types';\nimport { parseKey } from './parser-utils';\n\nexport class CryptoParser {\n static parseCryptoTransfers(\n cryptoTransfer: proto.ICryptoTransferTransactionBody,\n result: { transfers: AccountAmount[]; tokenTransfers: TokenAmount[] },\n ): void {\n if (cryptoTransfer.transfers?.accountAmounts) {\n result.transfers = cryptoTransfer.transfers.accountAmounts.map(aa => {\n const accountId = new AccountId(\n aa.accountID!.shardNum ?? 0,\n aa.accountID!.realmNum ?? 0,\n aa.accountID!.accountNum ?? 0,\n );\n const hbarAmount = Hbar.fromTinybars(Long.fromValue(aa.amount!));\n return {\n accountId: accountId.toString(),\n amount: hbarAmount.toString(HbarUnit.Hbar),\n isDecimal: true,\n };\n });\n }\n if (cryptoTransfer.tokenTransfers) {\n for (const tokenTransferList of cryptoTransfer.tokenTransfers) {\n const tokenId = new TokenId(\n tokenTransferList.token!.shardNum ?? 0,\n tokenTransferList.token!.realmNum ?? 0,\n tokenTransferList.token!.tokenNum ?? 0,\n );\n if (tokenTransferList.transfers) {\n for (const transfer of tokenTransferList.transfers) {\n const accountId = new AccountId(\n transfer.accountID!.shardNum ?? 0,\n transfer.accountID!.realmNum ?? 0,\n transfer.accountID!.accountNum ?? 0,\n );\n const tokenAmount = Long.fromValue(transfer.amount!).toNumber();\n result.tokenTransfers.push({\n tokenId: tokenId.toString(),\n accountId: accountId.toString(),\n amount: tokenAmount,\n });\n }\n }\n }\n }\n }\n\n static parseCryptoDelete(\n body: proto.ICryptoDeleteTransactionBody,\n ): CryptoDeleteData | undefined {\n if (!body) return undefined;\n const data: CryptoDeleteData = {};\n if (body.deleteAccountID) {\n data.deleteAccountId = new AccountId(\n body.deleteAccountID.shardNum ?? 0,\n body.deleteAccountID.realmNum ?? 0,\n body.deleteAccountID.accountNum ?? 0,\n ).toString();\n }\n if (body.transferAccountID) {\n data.transferAccountId = new AccountId(\n body.transferAccountID.shardNum ?? 0,\n body.transferAccountID.realmNum ?? 0,\n body.transferAccountID.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseCryptoCreateAccount(\n body: proto.ICryptoCreateTransactionBody,\n ): CryptoCreateAccountData | undefined {\n if (!body) return undefined;\n const data: CryptoCreateAccountData = {};\n if (body.initialBalance) {\n data.initialBalance = Hbar.fromTinybars(\n Long.fromValue(body.initialBalance),\n ).toString(HbarUnit.Hbar);\n }\n if (body.key) {\n data.key = parseKey(body.key);\n }\n if (body.receiverSigRequired !== undefined) {\n data.receiverSigRequired = body.receiverSigRequired;\n }\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n if (body.memo) {\n data.memo = body.memo;\n }\n if (body.maxAutomaticTokenAssociations !== undefined) {\n data.maxAutomaticTokenAssociations = body.maxAutomaticTokenAssociations;\n }\n if (body.stakedAccountId) {\n data.stakedAccountId = new AccountId(\n body.stakedAccountId.shardNum ?? 0,\n body.stakedAccountId.realmNum ?? 0,\n body.stakedAccountId.accountNum ?? 0,\n ).toString();\n } else if (body.stakedNodeId !== null && body.stakedNodeId !== undefined) {\n data.stakedNodeId = Long.fromValue(body.stakedNodeId).toString();\n }\n if (body.declineReward !== undefined) {\n data.declineReward = body.declineReward;\n }\n if (body.alias && body.alias.length > 0) {\n data.alias = Buffer.from(body.alias).toString('hex');\n }\n return data;\n }\n\n static parseCryptoUpdateAccount(\n body: proto.ICryptoUpdateTransactionBody,\n ): CryptoUpdateAccountData | undefined {\n if (!body) return undefined;\n const data: CryptoUpdateAccountData = {};\n if (body.accountIDToUpdate) {\n data.accountIdToUpdate = new AccountId(\n body.accountIDToUpdate.shardNum ?? 0,\n body.accountIDToUpdate.realmNum ?? 0,\n body.accountIDToUpdate.accountNum ?? 0,\n ).toString();\n }\n if (body.key) {\n data.key = parseKey(body.key);\n }\n if (body.expirationTime?.seconds) {\n data.expirationTime = `${Long.fromValue(\n body.expirationTime.seconds,\n ).toString()}.${body.expirationTime.nanos}`;\n }\n if (\n body.receiverSigRequired !== null &&\n body.receiverSigRequired !== undefined\n ) {\n data.receiverSigRequired = Boolean(body.receiverSigRequired);\n }\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n if (body.memo?.value !== undefined) {\n data.memo = body.memo.value;\n }\n if (body.maxAutomaticTokenAssociations?.value !== undefined) {\n data.maxAutomaticTokenAssociations =\n body.maxAutomaticTokenAssociations.value;\n }\n if (body.stakedAccountId) {\n data.stakedAccountId = new AccountId(\n body.stakedAccountId.shardNum ?? 0,\n body.stakedAccountId.realmNum ?? 0,\n body.stakedAccountId.accountNum ?? 0,\n ).toString();\n data.stakedNodeId = undefined;\n } else if (body.stakedNodeId !== null && body.stakedNodeId !== undefined) {\n data.stakedNodeId = Long.fromValue(body.stakedNodeId).toString();\n data.stakedAccountId = undefined;\n } else {\n data.stakedAccountId = undefined;\n data.stakedNodeId = undefined;\n }\n if (body.declineReward !== null && body.declineReward !== undefined) {\n data.declineReward = Boolean(body.declineReward);\n }\n return data;\n }\n\n static parseCryptoApproveAllowance(\n body: proto.ICryptoApproveAllowanceTransactionBody,\n ): CryptoApproveAllowanceData | undefined {\n if (!body) return undefined;\n const data: CryptoApproveAllowanceData = {};\n if (body.cryptoAllowances && body.cryptoAllowances.length > 0) {\n data.hbarAllowances = body.cryptoAllowances.map(a => ({\n ownerAccountId: new AccountId(\n a.owner!.shardNum ?? 0,\n a.owner!.realmNum ?? 0,\n a.owner!.accountNum ?? 0,\n ).toString(),\n spenderAccountId: new AccountId(\n a.spender!.shardNum ?? 0,\n a.spender!.realmNum ?? 0,\n a.spender!.accountNum ?? 0,\n ).toString(),\n amount: Hbar.fromTinybars(Long.fromValue(a.amount!)).toString(\n HbarUnit.Hbar,\n ),\n }));\n }\n if (body.tokenAllowances && body.tokenAllowances.length > 0) {\n data.tokenAllowances = body.tokenAllowances.map(a => ({\n tokenId: new TokenId(\n a.tokenId!.shardNum ?? 0,\n a.tokenId!.realmNum ?? 0,\n a.tokenId!.tokenNum ?? 0,\n ).toString(),\n ownerAccountId: new AccountId(\n a.owner!.shardNum ?? 0,\n a.owner!.realmNum ?? 0,\n a.owner!.accountNum ?? 0,\n ).toString(),\n spenderAccountId: new AccountId(\n a.spender!.shardNum ?? 0,\n a.spender!.realmNum ?? 0,\n a.spender!.accountNum ?? 0,\n ).toString(),\n amount: Long.fromValue(a.amount!).toString(),\n }));\n }\n if (body.nftAllowances && body.nftAllowances.length > 0) {\n data.nftAllowances = body.nftAllowances.map(a => {\n const allowance: NftAllowance = {};\n if (a.tokenId)\n allowance.tokenId = new TokenId(\n a.tokenId.shardNum ?? 0,\n a.tokenId.realmNum ?? 0,\n a.tokenId.tokenNum ?? 0,\n ).toString();\n if (a.owner)\n allowance.ownerAccountId = new AccountId(\n a.owner.shardNum ?? 0,\n a.owner.realmNum ?? 0,\n a.owner.accountNum ?? 0,\n ).toString();\n if (a.spender)\n allowance.spenderAccountId = new AccountId(\n a.spender.shardNum ?? 0,\n a.spender.realmNum ?? 0,\n a.spender.accountNum ?? 0,\n ).toString();\n if (a.serialNumbers && a.serialNumbers.length > 0)\n allowance.serialNumbers = a.serialNumbers.map(sn =>\n Long.fromValue(sn).toString(),\n );\n if (a.approvedForAll?.value !== undefined)\n allowance.approvedForAll = a.approvedForAll.value;\n if (a.delegatingSpender)\n allowance.delegatingSpender = new AccountId(\n a.delegatingSpender.shardNum ?? 0,\n a.delegatingSpender.realmNum ?? 0,\n a.delegatingSpender.accountNum ?? 0,\n ).toString();\n return allowance;\n });\n }\n return data;\n }\n\n static parseCryptoDeleteAllowance(\n body: proto.ICryptoDeleteAllowanceTransactionBody,\n ): CryptoDeleteAllowanceData | undefined {\n if (!body) return undefined;\n const data: CryptoDeleteAllowanceData = {};\n if (body.nftAllowances && body.nftAllowances.length > 0) {\n data.nftAllowancesToRemove = body.nftAllowances.map(a => ({\n ownerAccountId: new AccountId(\n a.owner!.shardNum ?? 0,\n a.owner!.realmNum ?? 0,\n a.owner!.accountNum ?? 0,\n ).toString(),\n tokenId: new TokenId(\n a.tokenId!.shardNum ?? 0,\n a.tokenId!.realmNum ?? 0,\n a.tokenId!.tokenNum ?? 0,\n ).toString(),\n serialNumbers: a.serialNumbers\n ? a.serialNumbers.map(sn => Long.fromValue(sn).toString())\n : [],\n }));\n }\n return data;\n }\n\n /**\n * Extract HBAR transfers from Transaction object\n */\n static extractHbarTransfersFromTransaction(\n transaction: Transaction,\n ): Array<{ accountId: string; amount: number }> {\n const transfers: Array<{ accountId: string; amount: number }> = [];\n\n try {\n const hbarTransfers = (\n transaction as unknown as {\n _hbarTransfers?: Array<{\n accountId?: AccountId;\n amount?: Hbar;\n }>;\n }\n )._hbarTransfers;\n\n if (Array.isArray(hbarTransfers)) {\n hbarTransfers.forEach(transfer => {\n if (transfer.accountId && transfer.amount) {\n const amountInTinybars = transfer.amount.toTinybars();\n const amountInHbar = Number(amountInTinybars) / 100000000;\n\n transfers.push({\n accountId: transfer.accountId.toString(),\n amount: amountInHbar,\n });\n }\n });\n }\n } catch (error) {}\n\n return transfers;\n }\n\n /**\n * Extract token transfers from Transaction object\n */\n static extractTokenTransfersFromTransaction(transaction: Transaction): Array<{\n tokenId: string;\n transfers: Array<{ accountId: string; amount: number }>;\n }> {\n const tokenTransfers: Array<{\n tokenId: string;\n transfers: Array<{ accountId: string; amount: number }>;\n }> = [];\n\n try {\n const tokenTransfersList = (\n transaction as unknown as {\n _tokenTransfers?: Array<{\n tokenId?: { toString(): string };\n transfers?: Array<{\n accountId?: AccountId;\n amount?: number | Long;\n }>;\n }>;\n }\n )._tokenTransfers;\n\n if (Array.isArray(tokenTransfersList)) {\n tokenTransfersList.forEach(tokenTransfer => {\n if (tokenTransfer.tokenId && Array.isArray(tokenTransfer.transfers)) {\n const transfers = tokenTransfer.transfers.map(transfer => ({\n accountId: transfer.accountId?.toString() || 'Unknown',\n amount: Number(transfer.amount || 0),\n }));\n\n tokenTransfers.push({\n tokenId: tokenTransfer.tokenId.toString(),\n transfers: transfers,\n });\n }\n });\n }\n } catch (error) {}\n\n return tokenTransfers;\n }\n\n /**\n * Parse crypto transaction from Transaction object with comprehensive extraction\n * This is the unified entry point that handles both protobuf and internal field extraction\n */\n static parseFromTransactionObject(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n transfers?: Array<{\n accountId: string;\n amount: string;\n isDecimal?: boolean;\n }>;\n tokenTransfers?: Array<{\n tokenId: string;\n accountId: string;\n amount: number;\n }>;\n [key: string]: unknown;\n } {\n try {\n const hbarTransfers =\n this.extractHbarTransfersFromTransaction(transaction);\n const tokenTransfers =\n this.extractTokenTransfersFromTransaction(transaction);\n\n if (hbarTransfers.length > 0 || tokenTransfers.length > 0) {\n const convertedTransfers = hbarTransfers.map(transfer => ({\n accountId: transfer.accountId,\n amount: transfer.amount.toString() + ' ℏ',\n isDecimal: true,\n }));\n\n const convertedTokenTransfers = tokenTransfers.flatMap(tokenGroup =>\n tokenGroup.transfers.map(transfer => ({\n tokenId: tokenGroup.tokenId,\n accountId: transfer.accountId,\n amount: transfer.amount,\n })),\n );\n\n if (hbarTransfers.length > 0) {\n return {\n type: 'CRYPTOTRANSFER',\n humanReadableType: 'Crypto Transfer',\n transfers: convertedTransfers,\n tokenTransfers: convertedTokenTransfers,\n };\n } else if (tokenTransfers.length > 0) {\n return {\n type: 'TOKENTRANSFER',\n humanReadableType: 'Token Transfer',\n transfers: convertedTransfers,\n tokenTransfers: convertedTokenTransfers,\n };\n }\n }\n\n return {};\n } catch (error) {\n return {};\n }\n }\n}\n"],"names":[],"mappings":"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"}