@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 +1 @@
1
- {"version":3,"file":"standards-sdk.es39.js","sources":["../../src/utils/parsers/hts-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { AccountId, TokenId, Long } from '@hashgraph/sdk';\nimport {\n TokenCreationData,\n TokenMintData,\n TokenBurnData,\n TokenUpdateData,\n TokenFeeScheduleUpdateData,\n TokenFreezeData,\n TokenUnfreezeData,\n TokenGrantKycData,\n TokenRevokeKycData,\n TokenPauseData,\n TokenUnpauseData,\n TokenWipeAccountData,\n TokenDeleteData,\n TokenAssociateData,\n TokenDissociateData,\n TokenAirdropData,\n CustomFeeData,\n FixedFeeData,\n FractionalFeeData,\n RoyaltyFeeData,\n} from '../transaction-parser-types';\nimport { parseKey } from './parser-utils';\nimport { Buffer } from 'buffer';\n\nimport { Transaction } from '@hashgraph/sdk';\n\nexport class HTSParser {\n /**\n * Main entry point for parsing HTS transactions from a Transaction object\n * This method bridges between the Transaction object and the protobuf parsers\n */\n static parseHTSTransaction(\n transaction: Transaction,\n ): Partial<{ type: string; humanReadableType: string }> {\n try {\n const transactionBody = (transaction as any)._transactionBody;\n\n if (!transactionBody) {\n return {};\n }\n\n if (transactionBody.tokenCreation) {\n const tokenCreation = this.parseTokenCreate(\n transactionBody.tokenCreation,\n );\n if (tokenCreation) {\n return {\n type: 'TOKENCREATE',\n humanReadableType: 'Token Creation',\n tokenCreation,\n } as any;\n }\n }\n\n if (transactionBody.tokenMint) {\n const tokenMint = this.parseTokenMint(transactionBody.tokenMint);\n if (tokenMint) {\n return {\n type: 'TOKENMINT',\n humanReadableType: 'Token Mint',\n tokenMint,\n } as any;\n }\n }\n\n if (transactionBody.tokenBurn) {\n const tokenBurn = this.parseTokenBurn(transactionBody.tokenBurn);\n if (tokenBurn) {\n return {\n type: 'TOKENBURN',\n humanReadableType: 'Token Burn',\n tokenBurn,\n } as any;\n }\n }\n\n if (transactionBody.tokenUpdate) {\n const tokenUpdate = this.parseTokenUpdate(transactionBody.tokenUpdate);\n if (tokenUpdate) {\n return {\n type: 'TOKENUPDATE',\n humanReadableType: 'Token Update',\n tokenUpdate,\n } as any;\n }\n }\n\n if (transactionBody.tokenFreeze) {\n const tokenFreeze = this.parseTokenFreeze(transactionBody.tokenFreeze);\n if (tokenFreeze) {\n return {\n type: 'TOKENFREEZE',\n humanReadableType: 'Token Freeze',\n tokenFreeze,\n } as any;\n }\n }\n\n if (transactionBody.tokenUnfreeze) {\n const tokenUnfreeze = this.parseTokenUnfreeze(\n transactionBody.tokenUnfreeze,\n );\n if (tokenUnfreeze) {\n return {\n type: 'TOKENUNFREEZE',\n humanReadableType: 'Token Unfreeze',\n tokenUnfreeze,\n } as any;\n }\n }\n\n if (transactionBody.tokenGrantKyc) {\n const tokenGrantKyc = this.parseTokenGrantKyc(\n transactionBody.tokenGrantKyc,\n );\n if (tokenGrantKyc) {\n return {\n type: 'TOKENGRANTKYC',\n humanReadableType: 'Token Grant KYC',\n tokenGrantKyc,\n } as any;\n }\n }\n\n if (transactionBody.tokenRevokeKyc) {\n const tokenRevokeKyc = this.parseTokenRevokeKyc(\n transactionBody.tokenRevokeKyc,\n );\n if (tokenRevokeKyc) {\n return {\n type: 'TOKENREVOKEKYC',\n humanReadableType: 'Token Revoke KYC',\n tokenRevokeKyc,\n } as any;\n }\n }\n\n if (transactionBody.tokenPause) {\n const tokenPause = this.parseTokenPause(transactionBody.tokenPause);\n if (tokenPause) {\n return {\n type: 'TOKENPAUSE',\n humanReadableType: 'Token Pause',\n tokenPause,\n } as any;\n }\n }\n\n if (transactionBody.tokenUnpause) {\n const tokenUnpause = this.parseTokenUnpause(\n transactionBody.tokenUnpause,\n );\n if (tokenUnpause) {\n return {\n type: 'TOKENUNPAUSE',\n humanReadableType: 'Token Unpause',\n tokenUnpause,\n } as any;\n }\n }\n\n if (transactionBody.tokenWipe) {\n const tokenWipeAccount = this.parseTokenWipeAccount(\n transactionBody.tokenWipe,\n );\n if (tokenWipeAccount) {\n return {\n type: 'TOKENWIPEACCOUNT',\n humanReadableType: 'Token Wipe Account',\n tokenWipeAccount,\n } as any;\n }\n }\n\n if (transactionBody.tokenDeletion) {\n const tokenDelete = this.parseTokenDelete(\n transactionBody.tokenDeletion,\n );\n if (tokenDelete) {\n return {\n type: 'TOKENDELETE',\n humanReadableType: 'Token Delete',\n tokenDelete,\n } as any;\n }\n }\n\n if (transactionBody.tokenAssociate) {\n const tokenAssociate = this.parseTokenAssociate(\n transactionBody.tokenAssociate,\n );\n if (tokenAssociate) {\n return {\n type: 'TOKENASSOCIATE',\n humanReadableType: 'Token Associate',\n tokenAssociate,\n } as any;\n }\n }\n\n if (transactionBody.tokenDissociate) {\n const tokenDissociate = this.parseTokenDissociate(\n transactionBody.tokenDissociate,\n );\n if (tokenDissociate) {\n return {\n type: 'TOKENDISSOCIATE',\n humanReadableType: 'Token Dissociate',\n tokenDissociate,\n } as any;\n }\n }\n\n if (transactionBody.tokenFeeScheduleUpdate) {\n const tokenFeeScheduleUpdate = this.parseTokenFeeScheduleUpdate(\n transactionBody.tokenFeeScheduleUpdate,\n );\n if (tokenFeeScheduleUpdate) {\n return {\n type: 'TOKENFEESCHEDULEUPDATE',\n humanReadableType: 'Token Fee Schedule Update',\n tokenFeeScheduleUpdate,\n } as any;\n }\n }\n\n const airdrop = this.parseTokenAirdrop(transaction);\n if (airdrop) {\n return {\n type: 'TOKENAIRDROP',\n humanReadableType: 'Token Airdrop',\n tokenAirdrop: airdrop,\n } as any;\n }\n\n return {};\n } catch (error) {\n console.warn('[HTSParser] Failed to parse HTS transaction:', error);\n return {};\n }\n }\n\n static parseTokenCreate(\n body: proto.ITokenCreateTransactionBody,\n ): TokenCreationData | undefined {\n if (!body) return undefined;\n const data: TokenCreationData = {};\n if (body.name) {\n data.tokenName = body.name;\n }\n if (body.symbol) {\n data.tokenSymbol = body.symbol;\n }\n if (body.treasury) {\n data.treasuryAccountId = new AccountId(\n body.treasury.shardNum ?? 0,\n body.treasury.realmNum ?? 0,\n body.treasury.accountNum ?? 0,\n ).toString();\n }\n if (body.initialSupply) {\n data.initialSupply = Long.fromValue(body.initialSupply).toString();\n }\n if (body.decimals !== undefined && body.decimals !== null) {\n data.decimals = Long.fromValue(body.decimals).toNumber();\n }\n if (body.maxSupply) {\n data.maxSupply = Long.fromValue(body.maxSupply).toString();\n }\n if (body.memo) {\n data.memo = body.memo;\n }\n if (body.tokenType !== null && body.tokenType !== undefined) {\n data.tokenType = proto.TokenType[body.tokenType];\n }\n if (body.supplyType !== null && body.supplyType !== undefined) {\n data.supplyType = proto.TokenSupplyType[body.supplyType];\n }\n data.adminKey = parseKey(body.adminKey);\n data.kycKey = parseKey(body.kycKey);\n data.freezeKey = parseKey(body.freezeKey);\n data.wipeKey = parseKey(body.wipeKey);\n data.supplyKey = parseKey(body.supplyKey);\n data.feeScheduleKey = parseKey(body.feeScheduleKey);\n data.pauseKey = parseKey(body.pauseKey);\n if (body.autoRenewAccount) {\n data.autoRenewAccount = new AccountId(\n body.autoRenewAccount.shardNum ?? 0,\n body.autoRenewAccount.realmNum ?? 0,\n body.autoRenewAccount.accountNum ?? 0,\n ).toString();\n }\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n if (body.customFees && body.customFees.length > 0) {\n data.customFees = body.customFees.map(fee => {\n const feeCollectorAccountId = fee.feeCollectorAccountId\n ? new AccountId(\n fee.feeCollectorAccountId.shardNum ?? 0,\n fee.feeCollectorAccountId.realmNum ?? 0,\n fee.feeCollectorAccountId.accountNum ?? 0,\n ).toString()\n : 'Not Set';\n const commonFeeData = {\n feeCollectorAccountId,\n allCollectorsAreExempt: fee.allCollectorsAreExempt || false,\n };\n if (fee.fixedFee) {\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: {\n amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),\n denominatingTokenId: fee.fixedFee.denominatingTokenId\n ? new TokenId(\n fee.fixedFee.denominatingTokenId.shardNum ?? 0,\n fee.fixedFee.denominatingTokenId.realmNum ?? 0,\n fee.fixedFee.denominatingTokenId.tokenNum ?? 0,\n ).toString()\n : undefined,\n },\n };\n } else if (fee.fractionalFee) {\n return {\n ...commonFeeData,\n feeType: 'FRACTIONAL_FEE',\n fractionalFee: {\n numerator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.denominator || 1,\n ).toString(),\n minimumAmount: Long.fromValue(\n fee.fractionalFee.minimumAmount || 0,\n ).toString(),\n maximumAmount: Long.fromValue(\n fee.fractionalFee.maximumAmount || 0,\n ).toString(),\n netOfTransfers: fee.fractionalFee.netOfTransfers || false,\n },\n };\n } else if (fee.royaltyFee) {\n let fallbackFeeData: FixedFeeData | undefined = undefined;\n if (fee.royaltyFee.fallbackFee) {\n fallbackFeeData = {\n amount: Long.fromValue(\n fee.royaltyFee.fallbackFee.amount || 0,\n ).toString(),\n denominatingTokenId: fee.royaltyFee.fallbackFee\n .denominatingTokenId\n ? new TokenId(\n fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ??\n 0,\n ).toString()\n : undefined,\n };\n }\n return {\n ...commonFeeData,\n feeType: 'ROYALTY_FEE',\n royaltyFee: {\n numerator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.denominator || 1,\n ).toString(),\n fallbackFee: fallbackFeeData,\n },\n };\n }\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: { amount: '0' },\n } as CustomFeeData;\n });\n }\n return data;\n }\n\n static parseTokenMint(\n body: proto.ITokenMintTransactionBody,\n ): TokenMintData | undefined {\n if (\n !body ||\n !body.token ||\n body.amount === null ||\n body.amount === undefined\n ) {\n return undefined;\n }\n const data: TokenMintData = {\n tokenId: new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString(),\n amount: Long.fromValue(body.amount).toNumber(),\n };\n if (body.metadata && body.metadata.length > 0) {\n data.metadata = body.metadata.map(meta =>\n Buffer.from(meta).toString('base64'),\n );\n }\n return data;\n }\n\n static parseTokenBurn(\n body: proto.ITokenBurnTransactionBody,\n ): TokenBurnData | undefined {\n if (\n !body ||\n !body.token ||\n body.amount === null ||\n body.amount === undefined\n ) {\n return undefined;\n }\n const data: TokenBurnData = {\n tokenId: new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString(),\n amount: Long.fromValue(body.amount).toNumber(),\n };\n if (body.serialNumbers && body.serialNumbers.length > 0) {\n data.serialNumbers = body.serialNumbers.map(sn =>\n Long.fromValue(sn).toNumber(),\n );\n }\n return data;\n }\n\n static parseTokenUpdate(\n body: proto.ITokenUpdateTransactionBody,\n ): TokenUpdateData | undefined {\n if (!body) return undefined;\n const data: TokenUpdateData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.name) {\n data.name = body.name;\n }\n if (body.symbol) {\n data.symbol = body.symbol;\n }\n if (body.treasury) {\n data.treasuryAccountId = new AccountId(\n body.treasury.shardNum ?? 0,\n body.treasury.realmNum ?? 0,\n body.treasury.accountNum ?? 0,\n ).toString();\n }\n data.adminKey = parseKey(body.adminKey);\n data.kycKey = parseKey(body.kycKey);\n data.freezeKey = parseKey(body.freezeKey);\n data.wipeKey = parseKey(body.wipeKey);\n data.supplyKey = parseKey(body.supplyKey);\n data.feeScheduleKey = parseKey(body.feeScheduleKey);\n data.pauseKey = parseKey(body.pauseKey);\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 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.expiry?.seconds) {\n data.expiry = `${Long.fromValue(body.expiry.seconds).toString()}.${\n body.expiry.nanos\n }`;\n }\n return data;\n }\n\n static parseTokenFeeScheduleUpdate(\n body: proto.ITokenFeeScheduleUpdateTransactionBody,\n ): TokenFeeScheduleUpdateData | undefined {\n if (!body) return undefined;\n const data: TokenFeeScheduleUpdateData = {};\n if (body.tokenId) {\n data.tokenId = new TokenId(\n body.tokenId.shardNum ?? 0,\n body.tokenId.realmNum ?? 0,\n body.tokenId.tokenNum ?? 0,\n ).toString();\n }\n if (body.customFees && body.customFees.length > 0) {\n data.customFees = body.customFees.map(fee => {\n const feeCollectorAccountId = fee.feeCollectorAccountId\n ? new AccountId(\n fee.feeCollectorAccountId.shardNum ?? 0,\n fee.feeCollectorAccountId.realmNum ?? 0,\n fee.feeCollectorAccountId.accountNum ?? 0,\n ).toString()\n : 'Not Set';\n const commonFeeData = {\n feeCollectorAccountId,\n allCollectorsAreExempt: fee.allCollectorsAreExempt || false,\n };\n if (fee.fixedFee) {\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: {\n amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),\n denominatingTokenId: fee.fixedFee.denominatingTokenId\n ? new TokenId(\n fee.fixedFee.denominatingTokenId.shardNum ?? 0,\n fee.fixedFee.denominatingTokenId.realmNum ?? 0,\n fee.fixedFee.denominatingTokenId.tokenNum ?? 0,\n ).toString()\n : undefined,\n },\n };\n } else if (fee.fractionalFee) {\n return {\n ...commonFeeData,\n feeType: 'FRACTIONAL_FEE',\n fractionalFee: {\n numerator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.denominator || 1,\n ).toString(),\n minimumAmount: Long.fromValue(\n fee.fractionalFee.minimumAmount || 0,\n ).toString(),\n maximumAmount: Long.fromValue(\n fee.fractionalFee.maximumAmount || 0,\n ).toString(),\n netOfTransfers: fee.fractionalFee.netOfTransfers || false,\n },\n };\n } else if (fee.royaltyFee) {\n let fallbackFeeData: FixedFeeData | undefined = undefined;\n if (fee.royaltyFee.fallbackFee) {\n fallbackFeeData = {\n amount: Long.fromValue(\n fee.royaltyFee.fallbackFee.amount || 0,\n ).toString(),\n denominatingTokenId: fee.royaltyFee.fallbackFee\n .denominatingTokenId\n ? new TokenId(\n fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ??\n 0,\n ).toString()\n : undefined,\n };\n }\n return {\n ...commonFeeData,\n feeType: 'ROYALTY_FEE',\n royaltyFee: {\n numerator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.denominator || 1,\n ).toString(),\n fallbackFee: fallbackFeeData,\n },\n };\n }\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: { amount: '0' },\n } as CustomFeeData;\n });\n }\n return data;\n }\n\n static parseTokenFreeze(\n body: proto.ITokenFreezeAccountTransactionBody,\n ): TokenFreezeData | undefined {\n if (!body) return undefined;\n const data: TokenFreezeData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenUnfreeze(\n body: proto.ITokenUnfreezeAccountTransactionBody,\n ): TokenUnfreezeData | undefined {\n if (!body) return undefined;\n const data: TokenUnfreezeData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenGrantKyc(\n body: proto.ITokenGrantKycTransactionBody,\n ): TokenGrantKycData | undefined {\n if (!body) return undefined;\n const data: TokenGrantKycData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenRevokeKyc(\n body: proto.ITokenRevokeKycTransactionBody,\n ): TokenRevokeKycData | undefined {\n if (!body) return undefined;\n const data: TokenRevokeKycData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenPause(\n body: proto.ITokenPauseTransactionBody,\n ): TokenPauseData | undefined {\n if (!body) return undefined;\n const data: TokenPauseData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenUnpause(\n body: proto.ITokenUnpauseTransactionBody,\n ): TokenUnpauseData | undefined {\n if (!body) return undefined;\n const data: TokenUnpauseData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenWipeAccount(\n body: proto.ITokenWipeAccountTransactionBody,\n ): TokenWipeAccountData | undefined {\n if (!body) return undefined;\n const data: TokenWipeAccountData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n if (body.serialNumbers && body.serialNumbers.length > 0) {\n data.serialNumbers = body.serialNumbers.map(sn =>\n Long.fromValue(sn).toString(),\n );\n }\n if (body.amount) {\n data.amount = Long.fromValue(body.amount).toString();\n }\n return data;\n }\n\n static parseTokenDelete(\n body: proto.ITokenDeleteTransactionBody,\n ): TokenDeleteData | undefined {\n if (!body) return undefined;\n const data: TokenDeleteData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenAssociate(\n body: proto.ITokenAssociateTransactionBody,\n ): TokenAssociateData | undefined {\n if (!body) return undefined;\n const data: TokenAssociateData = {};\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n if (body.tokens && body.tokens.length > 0) {\n data.tokenIds = body.tokens.map(t =>\n new TokenId(\n t.shardNum ?? 0,\n t.realmNum ?? 0,\n t.tokenNum ?? 0,\n ).toString(),\n );\n }\n return data;\n }\n\n static parseTokenDissociate(\n body: proto.ITokenDissociateTransactionBody,\n ): TokenDissociateData | undefined {\n if (!body) return undefined;\n const data: TokenDissociateData = {};\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n if (body.tokens && body.tokens.length > 0) {\n data.tokenIds = body.tokens.map(t =>\n new TokenId(\n t.shardNum ?? 0,\n t.realmNum ?? 0,\n t.tokenNum ?? 0,\n ).toString(),\n );\n }\n return data;\n }\n\n /**\n * Parse token airdrop transaction for both fungible tokens and NFTs\n * Extracts airdrop transfers from transaction protobuf data\n */\n static parseTokenAirdrop(transaction: Transaction): TokenAirdropData | null {\n try {\n const transactionBody = (transaction as any)._transactionBody;\n\n if (transactionBody?.tokenAirdrop) {\n const airdrop = transactionBody.tokenAirdrop;\n\n return {\n tokenTransfers: (airdrop.tokenTransfers || []).map(\n (transfer: any) => ({\n tokenId: transfer.token?.toString() || 'Unknown',\n transfers: (transfer.transfers || []).map((t: any) => ({\n accountId: t.accountID?.toString() || 'Unknown',\n amount: t.amount?.toString() || '0',\n serialNumbers: t.serialNumbers?.map((sn: any) => sn.toString()),\n })),\n }),\n ),\n };\n }\n\n const isAirdropTx =\n (transaction as any).constructor.name === 'TokenAirdropTransaction';\n\n if (isAirdropTx) {\n const tx = transaction as any;\n const tokenTransfersList = tx._tokenTransfers || [];\n\n if (tokenTransfersList.length > 0) {\n return {\n tokenTransfers: tokenTransfersList.map((transfer: any) => ({\n tokenId: transfer.tokenId?.toString() || 'Unknown',\n transfers: (transfer.transfers || []).map((t: any) => ({\n accountId: t.accountId?.toString() || 'Unknown',\n amount: t.amount?.toString() || '0',\n serialNumbers: t.serialNumbers?.map((sn: any) => sn.toString()),\n })),\n })),\n };\n }\n }\n\n return null;\n } catch (error) {\n console.warn('[HTSParser] Failed to parse token airdrop:', error);\n return null;\n }\n }\n\n /**\n * Parse token airdrop from protobuf data for scheduled transactions\n */\n static parseTokenAirdropFromProto(airdrop: any): TokenAirdropData {\n const tokenTransfers = [];\n\n if (airdrop.tokenTransfers) {\n for (const tokenTransfer of airdrop.tokenTransfers) {\n const token = tokenTransfer.token\n ? TokenId.fromBytes(tokenTransfer.token)\n : null;\n const transfers = [];\n\n if (tokenTransfer.transfers) {\n for (const transfer of tokenTransfer.transfers) {\n const accountId = transfer.accountID\n ? AccountId.fromBytes(transfer.accountID)\n : null;\n\n transfers.push({\n accountId: accountId?.toString() || 'Unknown',\n amount: transfer.amount\n ? Long.fromValue(transfer.amount).toString()\n : '0',\n serialNumbers: transfer.serialNumbers?.map((sn: any) =>\n Long.fromValue(sn).toString(),\n ),\n });\n }\n }\n\n tokenTransfers.push({\n tokenId: token?.toString() || 'Unknown',\n transfers,\n });\n }\n }\n\n return { tokenTransfers };\n }\n}\n"],"names":[],"mappings":";;;;AA6BO,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrB,OAAO,oBACL,aACsD;AACtD,QAAI;AACF,YAAM,kBAAmB,YAAoB;AAE7C,UAAI,CAAC,iBAAiB;AACpB,eAAO,CAAA;AAAA,MACT;AAEA,UAAI,gBAAgB,eAAe;AACjC,cAAM,gBAAgB,KAAK;AAAA,UACzB,gBAAgB;AAAA,QAAA;AAElB,YAAI,eAAe;AACjB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,WAAW;AAC7B,cAAM,YAAY,KAAK,eAAe,gBAAgB,SAAS;AAC/D,YAAI,WAAW;AACb,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,WAAW;AAC7B,cAAM,YAAY,KAAK,eAAe,gBAAgB,SAAS;AAC/D,YAAI,WAAW;AACb,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,aAAa;AAC/B,cAAM,cAAc,KAAK,iBAAiB,gBAAgB,WAAW;AACrE,YAAI,aAAa;AACf,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,aAAa;AAC/B,cAAM,cAAc,KAAK,iBAAiB,gBAAgB,WAAW;AACrE,YAAI,aAAa;AACf,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,eAAe;AACjC,cAAM,gBAAgB,KAAK;AAAA,UACzB,gBAAgB;AAAA,QAAA;AAElB,YAAI,eAAe;AACjB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,eAAe;AACjC,cAAM,gBAAgB,KAAK;AAAA,UACzB,gBAAgB;AAAA,QAAA;AAElB,YAAI,eAAe;AACjB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,gBAAgB;AAClC,cAAM,iBAAiB,KAAK;AAAA,UAC1B,gBAAgB;AAAA,QAAA;AAElB,YAAI,gBAAgB;AAClB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,YAAY;AAC9B,cAAM,aAAa,KAAK,gBAAgB,gBAAgB,UAAU;AAClE,YAAI,YAAY;AACd,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,cAAc;AAChC,cAAM,eAAe,KAAK;AAAA,UACxB,gBAAgB;AAAA,QAAA;AAElB,YAAI,cAAc;AAChB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,WAAW;AAC7B,cAAM,mBAAmB,KAAK;AAAA,UAC5B,gBAAgB;AAAA,QAAA;AAElB,YAAI,kBAAkB;AACpB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,eAAe;AACjC,cAAM,cAAc,KAAK;AAAA,UACvB,gBAAgB;AAAA,QAAA;AAElB,YAAI,aAAa;AACf,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,gBAAgB;AAClC,cAAM,iBAAiB,KAAK;AAAA,UAC1B,gBAAgB;AAAA,QAAA;AAElB,YAAI,gBAAgB;AAClB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,iBAAiB;AACnC,cAAM,kBAAkB,KAAK;AAAA,UAC3B,gBAAgB;AAAA,QAAA;AAElB,YAAI,iBAAiB;AACnB,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,YAAM,UAAU,KAAK,kBAAkB,WAAW;AAClD,UAAI,SAAS;AACX,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB,cAAc;AAAA,QAAA;AAAA,MAElB;AAEA,aAAO,CAAA;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,gDAAgD,KAAK;AAClE,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,iBACL,MAC+B;AAC/B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA0B,CAAA;AAChC,QAAI,KAAK,MAAM;AACb,WAAK,YAAY,KAAK;AAAA,IACxB;AACA,QAAI,KAAK,QAAQ;AACf,WAAK,cAAc,KAAK;AAAA,IAC1B;AACA,QAAI,KAAK,UAAU;AACjB,WAAK,oBAAoB,IAAI;AAAA,QAC3B,KAAK,SAAS,YAAY;AAAA,QAC1B,KAAK,SAAS,YAAY;AAAA,QAC1B,KAAK,SAAS,cAAc;AAAA,MAAA,EAC5B,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,eAAe;AACtB,WAAK,gBAAgB,KAAK,UAAU,KAAK,aAAa,EAAE,SAAA;AAAA,IAC1D;AACA,QAAI,KAAK,aAAa,UAAa,KAAK,aAAa,MAAM;AACzD,WAAK,WAAW,KAAK,UAAU,KAAK,QAAQ,EAAE,SAAA;AAAA,IAChD;AACA,QAAI,KAAK,WAAW;AAClB,WAAK,YAAY,KAAK,UAAU,KAAK,SAAS,EAAE,SAAA;AAAA,IAClD;AACA,QAAI,KAAK,MAAM;AACb,WAAK,OAAO,KAAK;AAAA,IACnB;AACA,QAAI,KAAK,cAAc,QAAQ,KAAK,cAAc,QAAW;AAC3D,WAAK,YAAY,MAAM,UAAU,KAAK,SAAS;AAAA,IACjD;AACA,QAAI,KAAK,eAAe,QAAQ,KAAK,eAAe,QAAW;AAC7D,WAAK,aAAa,MAAM,gBAAgB,KAAK,UAAU;AAAA,IACzD;AACA,SAAK,WAAW,SAAS,KAAK,QAAQ;AACtC,SAAK,SAAS,SAAS,KAAK,MAAM;AAClC,SAAK,YAAY,SAAS,KAAK,SAAS;AACxC,SAAK,UAAU,SAAS,KAAK,OAAO;AACpC,SAAK,YAAY,SAAS,KAAK,SAAS;AACxC,SAAK,iBAAiB,SAAS,KAAK,cAAc;AAClD,SAAK,WAAW,SAAS,KAAK,QAAQ;AACtC,QAAI,KAAK,kBAAkB;AACzB,WAAK,mBAAmB,IAAI;AAAA,QAC1B,KAAK,iBAAiB,YAAY;AAAA,QAClC,KAAK,iBAAiB,YAAY;AAAA,QAClC,KAAK,iBAAiB,cAAc;AAAA,MAAA,EACpC,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,iBAAiB,SAAS;AACjC,WAAK,kBAAkB,KAAK;AAAA,QAC1B,KAAK,gBAAgB;AAAA,MAAA,EACrB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,cAAc,KAAK,WAAW,SAAS,GAAG;AACjD,WAAK,aAAa,KAAK,WAAW,IAAI,CAAA,QAAO;AAC3C,cAAM,wBAAwB,IAAI,wBAC9B,IAAI;AAAA,UACF,IAAI,sBAAsB,YAAY;AAAA,UACtC,IAAI,sBAAsB,YAAY;AAAA,UACtC,IAAI,sBAAsB,cAAc;AAAA,QAAA,EACxC,aACF;AACJ,cAAM,gBAAgB;AAAA,UACpB;AAAA,UACA,wBAAwB,IAAI,0BAA0B;AAAA,QAAA;AAExD,YAAI,IAAI,UAAU;AAChB,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,UAAU;AAAA,cACR,QAAQ,KAAK,UAAU,IAAI,SAAS,UAAU,CAAC,EAAE,SAAA;AAAA,cACjD,qBAAqB,IAAI,SAAS,sBAC9B,IAAI;AAAA,gBACF,IAAI,SAAS,oBAAoB,YAAY;AAAA,gBAC7C,IAAI,SAAS,oBAAoB,YAAY;AAAA,gBAC7C,IAAI,SAAS,oBAAoB,YAAY;AAAA,cAAA,EAC7C,aACF;AAAA,YAAA;AAAA,UACN;AAAA,QAEJ,WAAW,IAAI,eAAe;AAC5B,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,eAAe;AAAA,cACb,WAAW,KAAK;AAAA,gBACd,IAAI,cAAc,kBAAkB,aAAa;AAAA,cAAA,EACjD,SAAA;AAAA,cACF,aAAa,KAAK;AAAA,gBAChB,IAAI,cAAc,kBAAkB,eAAe;AAAA,cAAA,EACnD,SAAA;AAAA,cACF,eAAe,KAAK;AAAA,gBAClB,IAAI,cAAc,iBAAiB;AAAA,cAAA,EACnC,SAAA;AAAA,cACF,eAAe,KAAK;AAAA,gBAClB,IAAI,cAAc,iBAAiB;AAAA,cAAA,EACnC,SAAA;AAAA,cACF,gBAAgB,IAAI,cAAc,kBAAkB;AAAA,YAAA;AAAA,UACtD;AAAA,QAEJ,WAAW,IAAI,YAAY;AACzB,cAAI,kBAA4C;AAChD,cAAI,IAAI,WAAW,aAAa;AAC9B,8BAAkB;AAAA,cAChB,QAAQ,KAAK;AAAA,gBACX,IAAI,WAAW,YAAY,UAAU;AAAA,cAAA,EACrC,SAAA;AAAA,cACF,qBAAqB,IAAI,WAAW,YACjC,sBACC,IAAI;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,cAAA,EACF,aACF;AAAA,YAAA;AAAA,UAER;AACA,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,YAAY;AAAA,cACV,WAAW,KAAK;AAAA,gBACd,IAAI,WAAW,uBAAuB,aAAa;AAAA,cAAA,EACnD,SAAA;AAAA,cACF,aAAa,KAAK;AAAA,gBAChB,IAAI,WAAW,uBAAuB,eAAe;AAAA,cAAA,EACrD,SAAA;AAAA,cACF,aAAa;AAAA,YAAA;AAAA,UACf;AAAA,QAEJ;AACA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS;AAAA,UACT,UAAU,EAAE,QAAQ,IAAA;AAAA,QAAI;AAAA,MAE5B,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,eACL,MAC2B;AAC3B,QACE,CAAC,QACD,CAAC,KAAK,SACN,KAAK,WAAW,QAChB,KAAK,WAAW,QAChB;AACA,aAAO;AAAA,IACT;AACA,UAAM,OAAsB;AAAA,MAC1B,SAAS,IAAI;AAAA,QACX,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,MACF,QAAQ,KAAK,UAAU,KAAK,MAAM,EAAE,SAAA;AAAA,IAAS;AAE/C,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,WAAK,WAAW,KAAK,SAAS;AAAA,QAAI,UAChC,OAAO,KAAK,IAAI,EAAE,SAAS,QAAQ;AAAA,MAAA;AAAA,IAEvC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,eACL,MAC2B;AAC3B,QACE,CAAC,QACD,CAAC,KAAK,SACN,KAAK,WAAW,QAChB,KAAK,WAAW,QAChB;AACA,aAAO;AAAA,IACT;AACA,UAAM,OAAsB;AAAA,MAC1B,SAAS,IAAI;AAAA,QACX,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,MACF,QAAQ,KAAK,UAAU,KAAK,MAAM,EAAE,SAAA;AAAA,IAAS;AAE/C,QAAI,KAAK,iBAAiB,KAAK,cAAc,SAAS,GAAG;AACvD,WAAK,gBAAgB,KAAK,cAAc;AAAA,QAAI,CAAA,OAC1C,KAAK,UAAU,EAAE,EAAE,SAAA;AAAA,MAAS;AAAA,IAEhC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,iBACL,MAC6B;AAC7B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAwB,CAAA;AAC9B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,MAAM;AACb,WAAK,OAAO,KAAK;AAAA,IACnB;AACA,QAAI,KAAK,QAAQ;AACf,WAAK,SAAS,KAAK;AAAA,IACrB;AACA,QAAI,KAAK,UAAU;AACjB,WAAK,oBAAoB,IAAI;AAAA,QAC3B,KAAK,SAAS,YAAY;AAAA,QAC1B,KAAK,SAAS,YAAY;AAAA,QAC1B,KAAK,SAAS,cAAc;AAAA,MAAA,EAC5B,SAAA;AAAA,IACJ;AACA,SAAK,WAAW,SAAS,KAAK,QAAQ;AACtC,SAAK,SAAS,SAAS,KAAK,MAAM;AAClC,SAAK,YAAY,SAAS,KAAK,SAAS;AACxC,SAAK,UAAU,SAAS,KAAK,OAAO;AACpC,SAAK,YAAY,SAAS,KAAK,SAAS;AACxC,SAAK,iBAAiB,SAAS,KAAK,cAAc;AAClD,SAAK,WAAW,SAAS,KAAK,QAAQ;AACtC,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,QAAI,KAAK,iBAAiB,SAAS;AACjC,WAAK,kBAAkB,KAAK;AAAA,QAC1B,KAAK,gBAAgB;AAAA,MAAA,EACrB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,MAAM,UAAU,QAAW;AAClC,WAAK,OAAO,KAAK,KAAK;AAAA,IACxB;AACA,QAAI,KAAK,QAAQ,SAAS;AACxB,WAAK,SAAS,GAAG,KAAK,UAAU,KAAK,OAAO,OAAO,EAAE,SAAA,CAAU,IAC7D,KAAK,OAAO,KACd;AAAA,IACF;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,IAAI;AAAA,QACjB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,MAAA,EACzB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,cAAc,KAAK,WAAW,SAAS,GAAG;AACjD,WAAK,aAAa,KAAK,WAAW,IAAI,CAAA,QAAO;AAC3C,cAAM,wBAAwB,IAAI,wBAC9B,IAAI;AAAA,UACF,IAAI,sBAAsB,YAAY;AAAA,UACtC,IAAI,sBAAsB,YAAY;AAAA,UACtC,IAAI,sBAAsB,cAAc;AAAA,QAAA,EACxC,aACF;AACJ,cAAM,gBAAgB;AAAA,UACpB;AAAA,UACA,wBAAwB,IAAI,0BAA0B;AAAA,QAAA;AAExD,YAAI,IAAI,UAAU;AAChB,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,UAAU;AAAA,cACR,QAAQ,KAAK,UAAU,IAAI,SAAS,UAAU,CAAC,EAAE,SAAA;AAAA,cACjD,qBAAqB,IAAI,SAAS,sBAC9B,IAAI;AAAA,gBACF,IAAI,SAAS,oBAAoB,YAAY;AAAA,gBAC7C,IAAI,SAAS,oBAAoB,YAAY;AAAA,gBAC7C,IAAI,SAAS,oBAAoB,YAAY;AAAA,cAAA,EAC7C,aACF;AAAA,YAAA;AAAA,UACN;AAAA,QAEJ,WAAW,IAAI,eAAe;AAC5B,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,eAAe;AAAA,cACb,WAAW,KAAK;AAAA,gBACd,IAAI,cAAc,kBAAkB,aAAa;AAAA,cAAA,EACjD,SAAA;AAAA,cACF,aAAa,KAAK;AAAA,gBAChB,IAAI,cAAc,kBAAkB,eAAe;AAAA,cAAA,EACnD,SAAA;AAAA,cACF,eAAe,KAAK;AAAA,gBAClB,IAAI,cAAc,iBAAiB;AAAA,cAAA,EACnC,SAAA;AAAA,cACF,eAAe,KAAK;AAAA,gBAClB,IAAI,cAAc,iBAAiB;AAAA,cAAA,EACnC,SAAA;AAAA,cACF,gBAAgB,IAAI,cAAc,kBAAkB;AAAA,YAAA;AAAA,UACtD;AAAA,QAEJ,WAAW,IAAI,YAAY;AACzB,cAAI,kBAA4C;AAChD,cAAI,IAAI,WAAW,aAAa;AAC9B,8BAAkB;AAAA,cAChB,QAAQ,KAAK;AAAA,gBACX,IAAI,WAAW,YAAY,UAAU;AAAA,cAAA,EACrC,SAAA;AAAA,cACF,qBAAqB,IAAI,WAAW,YACjC,sBACC,IAAI;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,cAAA,EACF,aACF;AAAA,YAAA;AAAA,UAER;AACA,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,YAAY;AAAA,cACV,WAAW,KAAK;AAAA,gBACd,IAAI,WAAW,uBAAuB,aAAa;AAAA,cAAA,EACnD,SAAA;AAAA,cACF,aAAa,KAAK;AAAA,gBAChB,IAAI,WAAW,uBAAuB,eAAe;AAAA,cAAA,EACrD,SAAA;AAAA,cACF,aAAa;AAAA,YAAA;AAAA,UACf;AAAA,QAEJ;AACA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS;AAAA,UACT,UAAU,EAAE,QAAQ,IAAA;AAAA,QAAI;AAAA,MAE5B,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,iBACL,MAC6B;AAC7B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAwB,CAAA;AAC9B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,mBACL,MAC+B;AAC/B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA0B,CAAA;AAChC,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,mBACL,MAC+B;AAC/B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA0B,CAAA;AAChC,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,oBACL,MACgC;AAChC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA2B,CAAA;AACjC,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,gBACL,MAC4B;AAC5B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAuB,CAAA;AAC7B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,kBACL,MAC8B;AAC9B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAyB,CAAA;AAC/B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,sBACL,MACkC;AAClC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA6B,CAAA;AACnC,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,iBAAiB,KAAK,cAAc,SAAS,GAAG;AACvD,WAAK,gBAAgB,KAAK,cAAc;AAAA,QAAI,CAAA,OAC1C,KAAK,UAAU,EAAE,EAAE,SAAA;AAAA,MAAS;AAAA,IAEhC;AACA,QAAI,KAAK,QAAQ;AACf,WAAK,SAAS,KAAK,UAAU,KAAK,MAAM,EAAE,SAAA;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,iBACL,MAC6B;AAC7B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAwB,CAAA;AAC9B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,oBACL,MACgC;AAChC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA2B,CAAA;AACjC,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,UAAU,KAAK,OAAO,SAAS,GAAG;AACzC,WAAK,WAAW,KAAK,OAAO;AAAA,QAAI,OAC9B,IAAI;AAAA,UACF,EAAE,YAAY;AAAA,UACd,EAAE,YAAY;AAAA,UACd,EAAE,YAAY;AAAA,QAAA,EACd,SAAA;AAAA,MAAS;AAAA,IAEf;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,qBACL,MACiC;AACjC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA4B,CAAA;AAClC,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,UAAU,KAAK,OAAO,SAAS,GAAG;AACzC,WAAK,WAAW,KAAK,OAAO;AAAA,QAAI,OAC9B,IAAI;AAAA,UACF,EAAE,YAAY;AAAA,UACd,EAAE,YAAY;AAAA,UACd,EAAE,YAAY;AAAA,QAAA,EACd,SAAA;AAAA,MAAS;AAAA,IAEf;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,kBAAkB,aAAmD;AAC1E,QAAI;AACF,YAAM,kBAAmB,YAAoB;AAE7C,UAAI,iBAAiB,cAAc;AACjC,cAAM,UAAU,gBAAgB;AAEhC,eAAO;AAAA,UACL,iBAAiB,QAAQ,kBAAkB,CAAA,GAAI;AAAA,YAC7C,CAAC,cAAmB;AAAA,cAClB,SAAS,SAAS,OAAO,SAAA,KAAc;AAAA,cACvC,YAAY,SAAS,aAAa,CAAA,GAAI,IAAI,CAAC,OAAY;AAAA,gBACrD,WAAW,EAAE,WAAW,SAAA,KAAc;AAAA,gBACtC,QAAQ,EAAE,QAAQ,SAAA,KAAc;AAAA,gBAChC,eAAe,EAAE,eAAe,IAAI,CAAC,OAAY,GAAG,UAAU;AAAA,cAAA,EAC9D;AAAA,YAAA;AAAA,UACJ;AAAA,QACF;AAAA,MAEJ;AAEA,YAAM,cACH,YAAoB,YAAY,SAAS;AAE5C,UAAI,aAAa;AACf,cAAM,KAAK;AACX,cAAM,qBAAqB,GAAG,mBAAmB,CAAA;AAEjD,YAAI,mBAAmB,SAAS,GAAG;AACjC,iBAAO;AAAA,YACL,gBAAgB,mBAAmB,IAAI,CAAC,cAAmB;AAAA,cACzD,SAAS,SAAS,SAAS,SAAA,KAAc;AAAA,cACzC,YAAY,SAAS,aAAa,CAAA,GAAI,IAAI,CAAC,OAAY;AAAA,gBACrD,WAAW,EAAE,WAAW,SAAA,KAAc;AAAA,gBACtC,QAAQ,EAAE,QAAQ,SAAA,KAAc;AAAA,gBAChC,eAAe,EAAE,eAAe,IAAI,CAAC,OAAY,GAAG,UAAU;AAAA,cAAA,EAC9D;AAAA,YAAA,EACF;AAAA,UAAA;AAAA,QAEN;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,8CAA8C,KAAK;AAChE,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,2BAA2B,SAAgC;AAChE,UAAM,iBAAiB,CAAA;AAEvB,QAAI,QAAQ,gBAAgB;AAC1B,iBAAW,iBAAiB,QAAQ,gBAAgB;AAClD,cAAM,QAAQ,cAAc,QACxB,QAAQ,UAAU,cAAc,KAAK,IACrC;AACJ,cAAM,YAAY,CAAA;AAElB,YAAI,cAAc,WAAW;AAC3B,qBAAW,YAAY,cAAc,WAAW;AAC9C,kBAAM,YAAY,SAAS,YACvB,UAAU,UAAU,SAAS,SAAS,IACtC;AAEJ,sBAAU,KAAK;AAAA,cACb,WAAW,WAAW,SAAA,KAAc;AAAA,cACpC,QAAQ,SAAS,SACb,KAAK,UAAU,SAAS,MAAM,EAAE,SAAA,IAChC;AAAA,cACJ,eAAe,SAAS,eAAe;AAAA,gBAAI,CAAC,OAC1C,KAAK,UAAU,EAAE,EAAE,SAAA;AAAA,cAAS;AAAA,YAC9B,CACD;AAAA,UACH;AAAA,QACF;AAEA,uBAAe,KAAK;AAAA,UAClB,SAAS,OAAO,SAAA,KAAc;AAAA,UAC9B;AAAA,QAAA,CACD;AAAA,MACH;AAAA,IACF;AAEA,WAAO,EAAE,eAAA;AAAA,EACX;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es39.js","sources":["../../src/utils/parsers/hts-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { AccountId, TokenId, Long } from '@hashgraph/sdk';\nimport {\n TokenCreationData,\n TokenMintData,\n TokenBurnData,\n TokenUpdateData,\n TokenFeeScheduleUpdateData,\n TokenFreezeData,\n TokenUnfreezeData,\n TokenGrantKycData,\n TokenRevokeKycData,\n TokenPauseData,\n TokenUnpauseData,\n TokenWipeAccountData,\n TokenDeleteData,\n TokenAssociateData,\n TokenDissociateData,\n TokenAirdropData,\n CustomFeeData,\n FixedFeeData,\n FractionalFeeData,\n RoyaltyFeeData,\n} from '../transaction-parser-types';\nimport { ParsedTransaction } from '../transaction-parser-types';\nimport { parseKey, extractTransactionBody, hasTransactionType } from './parser-utils';\nimport { Buffer } from 'buffer';\n\nimport { Transaction } from '@hashgraph/sdk';\n\nexport class HTSParser {\n /**\n * Main entry point for parsing HTS transactions from a Transaction object\n * This method bridges between the Transaction object and the protobuf parsers\n */\n static parseHTSTransaction(\n transaction: Transaction,\n ): Partial<ParsedTransaction> {\n try {\n const transactionBody = (\n transaction as unknown as { _transactionBody?: proto.ITransactionBody }\n )._transactionBody as proto.ITransactionBody | undefined;\n\n if (!transactionBody) {\n return {};\n }\n\n if (transactionBody.tokenCreation) {\n const tokenCreation = this.parseTokenCreate(\n transactionBody.tokenCreation,\n );\n if (tokenCreation) {\n return {\n type: 'TOKENCREATE',\n humanReadableType: 'Token Creation',\n tokenCreation,\n };\n }\n }\n\n if (transactionBody.tokenMint) {\n const tokenMint = this.parseTokenMint(transactionBody.tokenMint);\n if (tokenMint) {\n return {\n type: 'TOKENMINT',\n humanReadableType: 'Token Mint',\n tokenMint,\n };\n }\n }\n\n if (transactionBody.tokenBurn) {\n const tokenBurn = this.parseTokenBurn(transactionBody.tokenBurn);\n if (tokenBurn) {\n return {\n type: 'TOKENBURN',\n humanReadableType: 'Token Burn',\n tokenBurn,\n };\n }\n }\n\n if (transactionBody.tokenUpdate) {\n const tokenUpdate = this.parseTokenUpdate(transactionBody.tokenUpdate);\n if (tokenUpdate) {\n return {\n type: 'TOKENUPDATE',\n humanReadableType: 'Token Update',\n tokenUpdate,\n };\n }\n }\n\n if (transactionBody.tokenFreeze) {\n const tokenFreeze = this.parseTokenFreeze(transactionBody.tokenFreeze);\n if (tokenFreeze) {\n return {\n type: 'TOKENFREEZE',\n humanReadableType: 'Token Freeze',\n tokenFreeze,\n };\n }\n }\n\n if (transactionBody.tokenUnfreeze) {\n const tokenUnfreeze = this.parseTokenUnfreeze(\n transactionBody.tokenUnfreeze,\n );\n if (tokenUnfreeze) {\n return {\n type: 'TOKENUNFREEZE',\n humanReadableType: 'Token Unfreeze',\n tokenUnfreeze,\n };\n }\n }\n\n if (transactionBody.tokenGrantKyc) {\n const tokenGrantKyc = this.parseTokenGrantKyc(\n transactionBody.tokenGrantKyc,\n );\n if (tokenGrantKyc) {\n return {\n type: 'TOKENGRANTKYC',\n humanReadableType: 'Token Grant KYC',\n tokenGrantKyc,\n };\n }\n }\n\n if (transactionBody.tokenRevokeKyc) {\n const tokenRevokeKyc = this.parseTokenRevokeKyc(\n transactionBody.tokenRevokeKyc,\n );\n if (tokenRevokeKyc) {\n return {\n type: 'TOKENREVOKEKYC',\n humanReadableType: 'Token Revoke KYC',\n tokenRevokeKyc,\n };\n }\n }\n\n if (transactionBody.tokenPause) {\n const tokenPause = this.parseTokenPause(transactionBody.tokenPause);\n if (tokenPause) {\n return {\n type: 'TOKENPAUSE',\n humanReadableType: 'Token Pause',\n tokenPause,\n };\n }\n }\n\n if (transactionBody.tokenUnpause) {\n const tokenUnpause = this.parseTokenUnpause(\n transactionBody.tokenUnpause,\n );\n if (tokenUnpause) {\n return {\n type: 'TOKENUNPAUSE',\n humanReadableType: 'Token Unpause',\n tokenUnpause,\n };\n }\n }\n\n if (transactionBody.tokenWipe) {\n const tokenWipeAccount = this.parseTokenWipeAccount(\n transactionBody.tokenWipe,\n );\n if (tokenWipeAccount) {\n return {\n type: 'TOKENWIPEACCOUNT',\n humanReadableType: 'Token Wipe Account',\n tokenWipeAccount,\n };\n }\n }\n\n if (transactionBody.tokenDeletion) {\n const tokenDelete = this.parseTokenDelete(\n transactionBody.tokenDeletion,\n );\n if (tokenDelete) {\n return {\n type: 'TOKENDELETE',\n humanReadableType: 'Token Delete',\n tokenDelete,\n };\n }\n }\n\n if (transactionBody.tokenAssociate) {\n const tokenAssociate = this.parseTokenAssociate(\n transactionBody.tokenAssociate,\n );\n if (tokenAssociate) {\n return {\n type: 'TOKENASSOCIATE',\n humanReadableType: 'Token Associate',\n tokenAssociate,\n };\n }\n }\n\n if (transactionBody.tokenDissociate) {\n const tokenDissociate = this.parseTokenDissociate(\n transactionBody.tokenDissociate,\n );\n if (tokenDissociate) {\n return {\n type: 'TOKENDISSOCIATE',\n humanReadableType: 'Token Dissociate',\n tokenDissociate,\n };\n }\n }\n\n if (transactionBody.tokenFeeScheduleUpdate) {\n const tokenFeeScheduleUpdate = this.parseTokenFeeScheduleUpdate(\n transactionBody.tokenFeeScheduleUpdate,\n );\n if (tokenFeeScheduleUpdate) {\n return {\n type: 'TOKENFEESCHEDULEUPDATE',\n humanReadableType: 'Token Fee Schedule Update',\n tokenFeeScheduleUpdate,\n };\n }\n }\n\n const airdrop = this.parseTokenAirdrop(transaction);\n if (airdrop) {\n return {\n type: 'TOKENAIRDROP',\n humanReadableType: 'Token Airdrop',\n tokenAirdrop: airdrop,\n };\n }\n\n return {};\n } catch (error) {\n console.warn('[HTSParser] Failed to parse HTS transaction:', error);\n return {};\n }\n }\n\n static parseTokenCreate(\n body: proto.ITokenCreateTransactionBody,\n ): TokenCreationData | undefined {\n if (!body) return undefined;\n const data: TokenCreationData = {};\n if (body.name) {\n data.tokenName = body.name;\n }\n if (body.symbol) {\n data.tokenSymbol = body.symbol;\n }\n if (body.treasury) {\n data.treasuryAccountId = new AccountId(\n body.treasury.shardNum ?? 0,\n body.treasury.realmNum ?? 0,\n body.treasury.accountNum ?? 0,\n ).toString();\n }\n if (body.initialSupply) {\n data.initialSupply = Long.fromValue(body.initialSupply).toString();\n }\n if (body.decimals !== undefined && body.decimals !== null) {\n data.decimals = Long.fromValue(body.decimals).toNumber();\n }\n if (body.maxSupply) {\n data.maxSupply = Long.fromValue(body.maxSupply).toString();\n }\n if (body.memo) {\n data.memo = body.memo;\n }\n if (body.tokenType !== null && body.tokenType !== undefined) {\n data.tokenType = proto.TokenType[body.tokenType];\n }\n if (body.supplyType !== null && body.supplyType !== undefined) {\n data.supplyType = proto.TokenSupplyType[body.supplyType];\n }\n data.adminKey = parseKey(body.adminKey);\n data.kycKey = parseKey(body.kycKey);\n data.freezeKey = parseKey(body.freezeKey);\n data.wipeKey = parseKey(body.wipeKey);\n data.supplyKey = parseKey(body.supplyKey);\n data.feeScheduleKey = parseKey(body.feeScheduleKey);\n data.pauseKey = parseKey(body.pauseKey);\n if (body.autoRenewAccount) {\n data.autoRenewAccount = new AccountId(\n body.autoRenewAccount.shardNum ?? 0,\n body.autoRenewAccount.realmNum ?? 0,\n body.autoRenewAccount.accountNum ?? 0,\n ).toString();\n }\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n if (body.customFees && body.customFees.length > 0) {\n data.customFees = body.customFees.map(fee => {\n const feeCollectorAccountId = fee.feeCollectorAccountId\n ? new AccountId(\n fee.feeCollectorAccountId.shardNum ?? 0,\n fee.feeCollectorAccountId.realmNum ?? 0,\n fee.feeCollectorAccountId.accountNum ?? 0,\n ).toString()\n : 'Not Set';\n const commonFeeData = {\n feeCollectorAccountId,\n allCollectorsAreExempt: fee.allCollectorsAreExempt || false,\n };\n if (fee.fixedFee) {\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: {\n amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),\n denominatingTokenId: fee.fixedFee.denominatingTokenId\n ? new TokenId(\n fee.fixedFee.denominatingTokenId.shardNum ?? 0,\n fee.fixedFee.denominatingTokenId.realmNum ?? 0,\n fee.fixedFee.denominatingTokenId.tokenNum ?? 0,\n ).toString()\n : undefined,\n },\n };\n } else if (fee.fractionalFee) {\n return {\n ...commonFeeData,\n feeType: 'FRACTIONAL_FEE',\n fractionalFee: {\n numerator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.denominator || 1,\n ).toString(),\n minimumAmount: Long.fromValue(\n fee.fractionalFee.minimumAmount || 0,\n ).toString(),\n maximumAmount: Long.fromValue(\n fee.fractionalFee.maximumAmount || 0,\n ).toString(),\n netOfTransfers: fee.fractionalFee.netOfTransfers || false,\n },\n };\n } else if (fee.royaltyFee) {\n let fallbackFeeData: FixedFeeData | undefined = undefined;\n if (fee.royaltyFee.fallbackFee) {\n fallbackFeeData = {\n amount: Long.fromValue(\n fee.royaltyFee.fallbackFee.amount || 0,\n ).toString(),\n denominatingTokenId: fee.royaltyFee.fallbackFee\n .denominatingTokenId\n ? new TokenId(\n fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ??\n 0,\n ).toString()\n : undefined,\n };\n }\n return {\n ...commonFeeData,\n feeType: 'ROYALTY_FEE',\n royaltyFee: {\n numerator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.denominator || 1,\n ).toString(),\n fallbackFee: fallbackFeeData,\n },\n };\n }\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: { amount: '0' },\n } as CustomFeeData;\n });\n }\n return data;\n }\n\n static parseTokenMint(\n body: proto.ITokenMintTransactionBody,\n ): TokenMintData | undefined {\n if (\n !body ||\n !body.token ||\n body.amount === null ||\n body.amount === undefined\n ) {\n return undefined;\n }\n const data: TokenMintData = {\n tokenId: new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString(),\n amount: Long.fromValue(body.amount).toNumber(),\n };\n if (body.metadata && body.metadata.length > 0) {\n data.metadata = body.metadata.map(meta =>\n Buffer.from(meta).toString('base64'),\n );\n }\n return data;\n }\n\n static parseTokenBurn(\n body: proto.ITokenBurnTransactionBody,\n ): TokenBurnData | undefined {\n if (\n !body ||\n !body.token ||\n body.amount === null ||\n body.amount === undefined\n ) {\n return undefined;\n }\n const data: TokenBurnData = {\n tokenId: new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString(),\n amount: Long.fromValue(body.amount).toNumber(),\n };\n if (body.serialNumbers && body.serialNumbers.length > 0) {\n data.serialNumbers = body.serialNumbers.map(sn =>\n Long.fromValue(sn).toNumber(),\n );\n }\n return data;\n }\n\n static parseTokenUpdate(\n body: proto.ITokenUpdateTransactionBody,\n ): TokenUpdateData | undefined {\n if (!body) return undefined;\n const data: TokenUpdateData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.name) {\n data.name = body.name;\n }\n if (body.symbol) {\n data.symbol = body.symbol;\n }\n if (body.treasury) {\n data.treasuryAccountId = new AccountId(\n body.treasury.shardNum ?? 0,\n body.treasury.realmNum ?? 0,\n body.treasury.accountNum ?? 0,\n ).toString();\n }\n data.adminKey = parseKey(body.adminKey);\n data.kycKey = parseKey(body.kycKey);\n data.freezeKey = parseKey(body.freezeKey);\n data.wipeKey = parseKey(body.wipeKey);\n data.supplyKey = parseKey(body.supplyKey);\n data.feeScheduleKey = parseKey(body.feeScheduleKey);\n data.pauseKey = parseKey(body.pauseKey);\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 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.expiry?.seconds) {\n data.expiry = `${Long.fromValue(body.expiry.seconds).toString()}.${\n body.expiry.nanos\n }`;\n }\n return data;\n }\n\n static parseTokenFeeScheduleUpdate(\n body: proto.ITokenFeeScheduleUpdateTransactionBody,\n ): TokenFeeScheduleUpdateData | undefined {\n if (!body) return undefined;\n const data: TokenFeeScheduleUpdateData = {};\n if (body.tokenId) {\n data.tokenId = new TokenId(\n body.tokenId.shardNum ?? 0,\n body.tokenId.realmNum ?? 0,\n body.tokenId.tokenNum ?? 0,\n ).toString();\n }\n if (body.customFees && body.customFees.length > 0) {\n data.customFees = body.customFees.map(fee => {\n const feeCollectorAccountId = fee.feeCollectorAccountId\n ? new AccountId(\n fee.feeCollectorAccountId.shardNum ?? 0,\n fee.feeCollectorAccountId.realmNum ?? 0,\n fee.feeCollectorAccountId.accountNum ?? 0,\n ).toString()\n : 'Not Set';\n const commonFeeData = {\n feeCollectorAccountId,\n allCollectorsAreExempt: fee.allCollectorsAreExempt || false,\n };\n if (fee.fixedFee) {\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: {\n amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),\n denominatingTokenId: fee.fixedFee.denominatingTokenId\n ? new TokenId(\n fee.fixedFee.denominatingTokenId.shardNum ?? 0,\n fee.fixedFee.denominatingTokenId.realmNum ?? 0,\n fee.fixedFee.denominatingTokenId.tokenNum ?? 0,\n ).toString()\n : undefined,\n },\n };\n } else if (fee.fractionalFee) {\n return {\n ...commonFeeData,\n feeType: 'FRACTIONAL_FEE',\n fractionalFee: {\n numerator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.fractionalFee.fractionalAmount?.denominator || 1,\n ).toString(),\n minimumAmount: Long.fromValue(\n fee.fractionalFee.minimumAmount || 0,\n ).toString(),\n maximumAmount: Long.fromValue(\n fee.fractionalFee.maximumAmount || 0,\n ).toString(),\n netOfTransfers: fee.fractionalFee.netOfTransfers || false,\n },\n };\n } else if (fee.royaltyFee) {\n let fallbackFeeData: FixedFeeData | undefined = undefined;\n if (fee.royaltyFee.fallbackFee) {\n fallbackFeeData = {\n amount: Long.fromValue(\n fee.royaltyFee.fallbackFee.amount || 0,\n ).toString(),\n denominatingTokenId: fee.royaltyFee.fallbackFee\n .denominatingTokenId\n ? new TokenId(\n fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ??\n 0,\n fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ??\n 0,\n ).toString()\n : undefined,\n };\n }\n return {\n ...commonFeeData,\n feeType: 'ROYALTY_FEE',\n royaltyFee: {\n numerator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.numerator || 0,\n ).toString(),\n denominator: Long.fromValue(\n fee.royaltyFee.exchangeValueFraction?.denominator || 1,\n ).toString(),\n fallbackFee: fallbackFeeData,\n },\n };\n }\n return {\n ...commonFeeData,\n feeType: 'FIXED_FEE',\n fixedFee: { amount: '0' },\n } as CustomFeeData;\n });\n }\n return data;\n }\n\n static parseTokenFreeze(\n body: proto.ITokenFreezeAccountTransactionBody,\n ): TokenFreezeData | undefined {\n if (!body) return undefined;\n const data: TokenFreezeData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenUnfreeze(\n body: proto.ITokenUnfreezeAccountTransactionBody,\n ): TokenUnfreezeData | undefined {\n if (!body) return undefined;\n const data: TokenUnfreezeData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenGrantKyc(\n body: proto.ITokenGrantKycTransactionBody,\n ): TokenGrantKycData | undefined {\n if (!body) return undefined;\n const data: TokenGrantKycData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenRevokeKyc(\n body: proto.ITokenRevokeKycTransactionBody,\n ): TokenRevokeKycData | undefined {\n if (!body) return undefined;\n const data: TokenRevokeKycData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenPause(\n body: proto.ITokenPauseTransactionBody,\n ): TokenPauseData | undefined {\n if (!body) return undefined;\n const data: TokenPauseData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenUnpause(\n body: proto.ITokenUnpauseTransactionBody,\n ): TokenUnpauseData | undefined {\n if (!body) return undefined;\n const data: TokenUnpauseData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenWipeAccount(\n body: proto.ITokenWipeAccountTransactionBody,\n ): TokenWipeAccountData | undefined {\n if (!body) return undefined;\n const data: TokenWipeAccountData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n if (body.serialNumbers && body.serialNumbers.length > 0) {\n data.serialNumbers = body.serialNumbers.map(sn =>\n Long.fromValue(sn).toString(),\n );\n }\n if (body.amount) {\n data.amount = Long.fromValue(body.amount).toString();\n }\n return data;\n }\n\n static parseTokenDelete(\n body: proto.ITokenDeleteTransactionBody,\n ): TokenDeleteData | undefined {\n if (!body) return undefined;\n const data: TokenDeleteData = {};\n if (body.token) {\n data.tokenId = new TokenId(\n body.token.shardNum ?? 0,\n body.token.realmNum ?? 0,\n body.token.tokenNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseTokenAssociate(\n body: proto.ITokenAssociateTransactionBody,\n ): TokenAssociateData | undefined {\n if (!body) return undefined;\n const data: TokenAssociateData = {};\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n if (body.tokens && body.tokens.length > 0) {\n data.tokenIds = body.tokens.map(t =>\n new TokenId(\n t.shardNum ?? 0,\n t.realmNum ?? 0,\n t.tokenNum ?? 0,\n ).toString(),\n );\n }\n return data;\n }\n\n static parseTokenDissociate(\n body: proto.ITokenDissociateTransactionBody,\n ): TokenDissociateData | undefined {\n if (!body) return undefined;\n const data: TokenDissociateData = {};\n if (body.account) {\n data.accountId = new AccountId(\n body.account.shardNum ?? 0,\n body.account.realmNum ?? 0,\n body.account.accountNum ?? 0,\n ).toString();\n }\n if (body.tokens && body.tokens.length > 0) {\n data.tokenIds = body.tokens.map(t =>\n new TokenId(\n t.shardNum ?? 0,\n t.realmNum ?? 0,\n t.tokenNum ?? 0,\n ).toString(),\n );\n }\n return data;\n }\n\n /**\n * Parse token airdrop transaction for both fungible tokens and NFTs\n * Extracts airdrop transfers from transaction protobuf data\n */\n static parseTokenAirdrop(transaction: Transaction): TokenAirdropData | null {\n try {\n const transactionBody = (\n transaction as unknown as { _transactionBody?: proto.ITransactionBody }\n )._transactionBody as proto.ITransactionBody | undefined;\n\n if (transactionBody?.tokenAirdrop) {\n const airdrop = transactionBody.tokenAirdrop;\n\n return {\n tokenTransfers: (airdrop.tokenTransfers || []).map(\n (transfer: any) => ({\n tokenId: transfer.token?.toString() || 'Unknown',\n transfers: (transfer.transfers || []).map((t: any) => ({\n accountId: t.accountID?.toString() || 'Unknown',\n amount: t.amount?.toString() || '0',\n serialNumbers: t.serialNumbers?.map((sn: any) => sn.toString()),\n })),\n }),\n ),\n };\n }\n\n // Check for token airdrop transaction using protobuf data\n if (hasTransactionType(transaction, 'tokenAirdrop')) {\n const txBody = extractTransactionBody(transaction);\n if (txBody?.tokenAirdrop) {\n return this.parseTokenAirdropFromProto(txBody.tokenAirdrop);\n }\n }\n\n // Fallback: check internal transaction fields for airdrop data\n const tx = transaction as unknown as {\n _tokenTransfers?: Array<{\n tokenId?: { toString(): string } | string;\n transfers?: Array<{\n accountId?: { toString(): string } | string;\n amount?: { toString(): string } | string | number | Long;\n serialNumbers?: Array<{ toString(): string } | string | number | Long>;\n }>;\n }>;\n };\n const tokenTransfersList = tx._tokenTransfers || [];\n\n if (tokenTransfersList.length > 0) {\n return {\n tokenTransfers: tokenTransfersList.map((transfer: any) => ({\n tokenId: transfer.tokenId?.toString() || 'Unknown',\n transfers: (transfer.transfers || []).map((t: any) => ({\n accountId: t.accountId?.toString() || 'Unknown',\n amount: t.amount?.toString() || '0',\n serialNumbers: t.serialNumbers?.map((sn: any) => sn.toString()),\n })),\n })),\n };\n }\n\n return null;\n } catch (error) {\n console.warn('[HTSParser] Failed to parse token airdrop:', error);\n return null;\n }\n }\n\n /**\n * Parse token airdrop from protobuf data for scheduled transactions\n */\n static parseTokenAirdropFromProto(airdrop: any): TokenAirdropData {\n const tokenTransfers = [];\n\n if (airdrop.tokenTransfers) {\n for (const tokenTransfer of airdrop.tokenTransfers) {\n const token = tokenTransfer.token\n ? new TokenId(\n tokenTransfer.token.shardNum ?? 0,\n tokenTransfer.token.realmNum ?? 0,\n tokenTransfer.token.tokenNum ?? 0,\n )\n : null;\n const transfers = [];\n\n if (tokenTransfer.transfers) {\n for (const transfer of tokenTransfer.transfers) {\n const accountId = transfer.accountID\n ? new AccountId(\n transfer.accountID.shardNum ?? 0,\n transfer.accountID.realmNum ?? 0,\n transfer.accountID.accountNum ?? 0,\n )\n : null;\n\n transfers.push({\n accountId: accountId?.toString() || 'Unknown',\n amount: transfer.amount\n ? Long.fromValue(transfer.amount).toString()\n : '0',\n serialNumbers: transfer.serialNumbers?.map((sn: any) =>\n Long.fromValue(sn).toString(),\n ),\n });\n }\n }\n\n tokenTransfers.push({\n tokenId: token?.toString() || 'Unknown',\n transfers,\n });\n }\n }\n\n return { tokenTransfers };\n }\n\n /**\n * Extract token creation data from Transaction object internal fields\n * This handles the case where token creation data is stored in Transaction internals\n */\n static extractTokenCreationFromTransaction(\n transaction: Transaction,\n ): TokenCreationData | null {\n try {\n const tx = transaction as unknown as {\n _tokenName?: string;\n _tokenSymbol?: string;\n _initialSupply?: number | Long;\n _decimals?: number | Long;\n _treasuryAccountId?: AccountId;\n _maxSupply?: number | Long;\n _tokenType?: unknown;\n _supplyType?: unknown;\n _tokenMemo?: string;\n _adminKey?: unknown;\n _kycKey?: unknown;\n _freezeKey?: unknown;\n _wipeKey?: unknown;\n _supplyKey?: unknown;\n _feeScheduleKey?: unknown;\n _pauseKey?: unknown;\n _metadataKey?: unknown;\n _autoRenewAccountId?: AccountId;\n _autoRenewPeriod?: { seconds?: Long; toString(): string };\n _expirationTime?: { seconds?: Long; toString(): string };\n _customFees?: unknown[];\n };\n\n if (tx._tokenName || tx._tokenSymbol) {\n const result: TokenCreationData = {\n tokenName: tx._tokenName || 'Unknown Token',\n tokenSymbol: tx._tokenSymbol || 'UNKNOWN',\n initialSupply: tx._initialSupply?.toString() || '0',\n decimals: Number(tx._decimals || 0),\n treasuryAccountId: tx._treasuryAccountId?.toString() || 'Unknown',\n };\n\n if (tx._maxSupply) {\n result.maxSupply = tx._maxSupply.toString();\n }\n\n if (tx._tokenType) {\n result.tokenType = tx._tokenType.toString\n ? tx._tokenType.toString()\n : String(tx._tokenType);\n }\n\n if (tx._supplyType) {\n result.supplyType = tx._supplyType.toString\n ? tx._supplyType.toString()\n : String(tx._supplyType);\n }\n\n if (tx._tokenMemo) {\n result.memo = tx._tokenMemo;\n }\n\n if (tx._adminKey) {\n result.adminKey = tx._adminKey.toString();\n }\n\n if (tx._kycKey) {\n result.kycKey = tx._kycKey.toString();\n }\n\n if (tx._freezeKey) {\n result.freezeKey = tx._freezeKey.toString();\n }\n\n if (tx._wipeKey) {\n result.wipeKey = tx._wipeKey.toString();\n }\n\n if (tx._supplyKey) {\n result.supplyKey = tx._supplyKey.toString();\n }\n\n if (tx._feeScheduleKey) {\n result.feeScheduleKey = tx._feeScheduleKey.toString();\n }\n\n if (tx._pauseKey) {\n result.pauseKey = tx._pauseKey.toString();\n }\n\n if (tx._metadataKey) {\n result.metadataKey = tx._metadataKey.toString();\n }\n\n if (tx._autoRenewAccountId) {\n result.autoRenewAccount = tx._autoRenewAccountId.toString();\n }\n\n if (tx._autoRenewPeriod) {\n result.autoRenewPeriod =\n tx._autoRenewPeriod.seconds?.toString() ||\n tx._autoRenewPeriod.toString();\n }\n\n if (tx._expirationTime) {\n result.expiry =\n tx._expirationTime.seconds?.toString() ||\n tx._expirationTime.toString();\n }\n\n if (\n tx._customFees &&\n Array.isArray(tx._customFees) &&\n tx._customFees.length > 0\n ) {\n result.customFees = tx._customFees.map((fee: any) => {\n const customFee: CustomFeeData = {\n feeCollectorAccountId:\n fee.feeCollectorAccountId?.toString() || '',\n feeType: 'FIXED_FEE',\n };\n\n if (fee.fixedFee) {\n customFee.feeType = 'FIXED_FEE';\n customFee.fixedFee = {\n amount: fee.fixedFee.amount?.toString() || '0',\n denominatingTokenId:\n fee.fixedFee.denominatingTokenId?.toString(),\n };\n } else if (fee.fractionalFee) {\n customFee.feeType = 'FRACTIONAL_FEE';\n customFee.fractionalFee = {\n numerator: fee.fractionalFee.numerator?.toString() || '0',\n denominator: fee.fractionalFee.denominator?.toString() || '1',\n minimumAmount:\n fee.fractionalFee.minimumAmount?.toString() || '0',\n maximumAmount:\n fee.fractionalFee.maximumAmount?.toString() || '0',\n netOfTransfers: fee.fractionalFee.netOfTransfers || false,\n };\n } else if (fee.royaltyFee) {\n customFee.feeType = 'ROYALTY_FEE';\n customFee.royaltyFee = {\n numerator: fee.royaltyFee.numerator?.toString() || '0',\n denominator: fee.royaltyFee.denominator?.toString() || '1',\n fallbackFee: fee.royaltyFee.fallbackFee\n ? {\n amount:\n fee.royaltyFee.fallbackFee.amount?.toString() || '0',\n denominatingTokenId:\n fee.royaltyFee.fallbackFee.denominatingTokenId?.toString(),\n }\n : undefined,\n };\n }\n\n customFee.allCollectorsAreExempt =\n fee.allCollectorsAreExempt || false;\n return customFee;\n });\n }\n\n return result;\n }\n\n return null;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Extract token airdrop data from Transaction object internal fields\n * This handles the case where airdrop data is stored in Transaction internals\n */\n static extractTokenAirdropFromTransaction(\n transaction: Transaction,\n ): TokenAirdropData | null {\n try {\n const tx = transaction as unknown as {\n _tokenAirdrops?: Array<{\n tokenId?: { toString(): string };\n transfers?: Array<{\n accountId?: { toString(): string };\n amount?: { toString(): string };\n serialNumbers?: Array<{ toString(): string }>;\n }>;\n }>;\n };\n\n if (tx._tokenAirdrops && Array.isArray(tx._tokenAirdrops)) {\n const tokenTransfers = tx._tokenAirdrops.map(airdrop => ({\n tokenId: airdrop.tokenId?.toString() || 'Unknown',\n transfers: (airdrop.transfers || []).map(transfer => ({\n accountId: transfer.accountId?.toString() || 'Unknown',\n amount: transfer.amount?.toString() || '0',\n serialNumbers: transfer.serialNumbers?.map(s => s.toString()) || [],\n })),\n }));\n\n return { tokenTransfers };\n }\n\n return null;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Parse HTS 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 tokenCreation?: TokenCreationData;\n tokenAirdrop?: TokenAirdropData;\n [key: string]: unknown;\n } {\n try {\n try {\n const bytes = transaction.toBytes ? transaction.toBytes() : undefined;\n if (bytes) {\n const decoded = proto.TransactionList.decode(bytes);\n if (decoded.transactionList && decoded.transactionList.length > 0) {\n const tx = decoded.transactionList[0];\n let txBody: proto.TransactionBody | null = null;\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n txBody = proto.TransactionBody.decode(tx.bodyBytes);\n } else if (\n tx.signedTransactionBytes &&\n tx.signedTransactionBytes.length > 0\n ) {\n const signedTx = proto.SignedTransaction.decode(\n tx.signedTransactionBytes,\n );\n if (signedTx.bodyBytes) {\n txBody = proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n if (txBody) {\n if (txBody.tokenCreation) {\n const tokenCreation = this.parseTokenCreate(txBody.tokenCreation);\n if (tokenCreation) {\n return {\n type: 'TOKENCREATE',\n humanReadableType: 'Token Creation',\n tokenCreation,\n };\n }\n }\n if (txBody.tokenMint) {\n const tokenMint = this.parseTokenMint(txBody.tokenMint);\n if (tokenMint) {\n return {\n type: 'TOKENMINT',\n humanReadableType: 'Token Mint',\n tokenMint,\n };\n }\n }\n if (txBody.tokenBurn) {\n const tokenBurn = this.parseTokenBurn(txBody.tokenBurn);\n if (tokenBurn) {\n return {\n type: 'TOKENBURN',\n humanReadableType: 'Token Burn',\n tokenBurn,\n };\n }\n }\n if (txBody.tokenUpdate) {\n const tokenUpdate = this.parseTokenUpdate(txBody.tokenUpdate);\n if (tokenUpdate) {\n return {\n type: 'TOKENUPDATE',\n humanReadableType: 'Token Update',\n tokenUpdate,\n };\n }\n }\n if (txBody.tokenFreeze) {\n const tokenFreeze = this.parseTokenFreeze(txBody.tokenFreeze);\n if (tokenFreeze) {\n return {\n type: 'TOKENFREEZE',\n humanReadableType: 'Token Freeze',\n tokenFreeze,\n };\n }\n }\n if (txBody.tokenUnfreeze) {\n const tokenUnfreeze = this.parseTokenUnfreeze(\n txBody.tokenUnfreeze,\n );\n if (tokenUnfreeze) {\n return {\n type: 'TOKENUNFREEZE',\n humanReadableType: 'Token Unfreeze',\n tokenUnfreeze,\n };\n }\n }\n if (txBody.tokenGrantKyc) {\n const tokenGrantKyc = this.parseTokenGrantKyc(\n txBody.tokenGrantKyc,\n );\n if (tokenGrantKyc) {\n return {\n type: 'TOKENGRANTKYC',\n humanReadableType: 'Token Grant KYC',\n tokenGrantKyc,\n };\n }\n }\n if (txBody.tokenRevokeKyc) {\n const tokenRevokeKyc = this.parseTokenRevokeKyc(\n txBody.tokenRevokeKyc,\n );\n if (tokenRevokeKyc) {\n return {\n type: 'TOKENREVOKEKYC',\n humanReadableType: 'Token Revoke KYC',\n tokenRevokeKyc,\n };\n }\n }\n if (txBody.tokenPause) {\n const tokenPause = this.parseTokenPause(txBody.tokenPause);\n if (tokenPause) {\n return {\n type: 'TOKENPAUSE',\n humanReadableType: 'Token Pause',\n tokenPause,\n };\n }\n }\n if (txBody.tokenUnpause) {\n const tokenUnpause = this.parseTokenUnpause(txBody.tokenUnpause);\n if (tokenUnpause) {\n return {\n type: 'TOKENUNPAUSE',\n humanReadableType: 'Token Unpause',\n tokenUnpause,\n };\n }\n }\n if (txBody.tokenWipe) {\n const tokenWipeAccount = this.parseTokenWipeAccount(\n txBody.tokenWipe,\n );\n if (tokenWipeAccount) {\n return {\n type: 'TOKENWIPEACCOUNT',\n humanReadableType: 'Token Wipe Account',\n tokenWipeAccount,\n } as {\n type?: string;\n humanReadableType?: string;\n tokenWipeAccount?: TokenWipeAccountData;\n };\n }\n }\n if (txBody.tokenDeletion) {\n const tokenDelete = this.parseTokenDelete(txBody.tokenDeletion);\n if (tokenDelete) {\n return {\n type: 'TOKENDELETE',\n humanReadableType: 'Token Delete',\n tokenDelete,\n };\n }\n }\n if (txBody.tokenAssociate) {\n const tokenAssociate = this.parseTokenAssociate(\n txBody.tokenAssociate,\n );\n if (tokenAssociate) {\n return {\n type: 'TOKENASSOCIATE',\n humanReadableType: 'Token Associate',\n tokenAssociate,\n };\n }\n }\n if (txBody.tokenDissociate) {\n const tokenDissociate = this.parseTokenDissociate(\n txBody.tokenDissociate,\n );\n if (tokenDissociate) {\n return {\n type: 'TOKENDISSOCIATE',\n humanReadableType: 'Token Dissociate',\n tokenDissociate,\n };\n }\n }\n if (txBody.tokenFeeScheduleUpdate) {\n const tokenFeeScheduleUpdate = this.parseTokenFeeScheduleUpdate(\n txBody.tokenFeeScheduleUpdate,\n );\n if (tokenFeeScheduleUpdate) {\n return {\n type: 'TOKENFEESCHEDULEUPDATE',\n humanReadableType: 'Token Fee Schedule Update',\n tokenFeeScheduleUpdate,\n };\n }\n }\n if (txBody.tokenAirdrop) {\n const tokenAirdrop = this.parseTokenAirdropFromProto(\n txBody.tokenAirdrop,\n );\n if (tokenAirdrop) {\n return {\n type: 'TOKENAIRDROP',\n humanReadableType: 'Token Airdrop',\n tokenAirdrop,\n };\n }\n }\n }\n }\n }\n } catch (e) {}\n\n const protoResult = this.parseHTSTransaction(transaction);\n if (protoResult.type) {\n return protoResult;\n }\n\n const tokenCreation = this.extractTokenCreationFromTransaction(transaction);\n const tokenAirdrop = this.extractTokenAirdropFromTransaction(transaction);\n if (tokenCreation) {\n return {\n type: 'TOKENCREATE',\n humanReadableType: 'Token Creation',\n tokenCreation,\n };\n }\n if (tokenAirdrop) {\n return {\n type: 'TOKENAIRDROP',\n humanReadableType: 'Token Airdrop',\n tokenAirdrop,\n };\n }\n\n return {};\n } catch (error) {\n return {};\n }\n }\n}\n"],"names":["tokenCreation","tokenAirdrop"],"mappings":";;;;AA8BO,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrB,OAAO,oBACL,aAC4B;AAC5B,QAAI;AACF,YAAM,kBACJ,YACA;AAEF,UAAI,CAAC,iBAAiB;AACpB,eAAO,CAAA;AAAA,MACT;AAEA,UAAI,gBAAgB,eAAe;AACjC,cAAM,gBAAgB,KAAK;AAAA,UACzB,gBAAgB;AAAA,QAAA;AAElB,YAAI,eAAe;AACjB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,WAAW;AAC7B,cAAM,YAAY,KAAK,eAAe,gBAAgB,SAAS;AAC/D,YAAI,WAAW;AACb,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,WAAW;AAC7B,cAAM,YAAY,KAAK,eAAe,gBAAgB,SAAS;AAC/D,YAAI,WAAW;AACb,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,aAAa;AAC/B,cAAM,cAAc,KAAK,iBAAiB,gBAAgB,WAAW;AACrE,YAAI,aAAa;AACf,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,aAAa;AAC/B,cAAM,cAAc,KAAK,iBAAiB,gBAAgB,WAAW;AACrE,YAAI,aAAa;AACf,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,eAAe;AACjC,cAAM,gBAAgB,KAAK;AAAA,UACzB,gBAAgB;AAAA,QAAA;AAElB,YAAI,eAAe;AACjB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,eAAe;AACjC,cAAM,gBAAgB,KAAK;AAAA,UACzB,gBAAgB;AAAA,QAAA;AAElB,YAAI,eAAe;AACjB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,gBAAgB;AAClC,cAAM,iBAAiB,KAAK;AAAA,UAC1B,gBAAgB;AAAA,QAAA;AAElB,YAAI,gBAAgB;AAClB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,YAAY;AAC9B,cAAM,aAAa,KAAK,gBAAgB,gBAAgB,UAAU;AAClE,YAAI,YAAY;AACd,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,cAAc;AAChC,cAAM,eAAe,KAAK;AAAA,UACxB,gBAAgB;AAAA,QAAA;AAElB,YAAI,cAAc;AAChB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,WAAW;AAC7B,cAAM,mBAAmB,KAAK;AAAA,UAC5B,gBAAgB;AAAA,QAAA;AAElB,YAAI,kBAAkB;AACpB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,eAAe;AACjC,cAAM,cAAc,KAAK;AAAA,UACvB,gBAAgB;AAAA,QAAA;AAElB,YAAI,aAAa;AACf,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,gBAAgB;AAClC,cAAM,iBAAiB,KAAK;AAAA,UAC1B,gBAAgB;AAAA,QAAA;AAElB,YAAI,gBAAgB;AAClB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,UAAI,gBAAgB,iBAAiB;AACnC,cAAM,kBAAkB,KAAK;AAAA,UAC3B,gBAAgB;AAAA,QAAA;AAElB,YAAI,iBAAiB;AACnB,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,YAAM,UAAU,KAAK,kBAAkB,WAAW;AAClD,UAAI,SAAS;AACX,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB,cAAc;AAAA,QAAA;AAAA,MAElB;AAEA,aAAO,CAAA;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,gDAAgD,KAAK;AAClE,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,iBACL,MAC+B;AAC/B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA0B,CAAA;AAChC,QAAI,KAAK,MAAM;AACb,WAAK,YAAY,KAAK;AAAA,IACxB;AACA,QAAI,KAAK,QAAQ;AACf,WAAK,cAAc,KAAK;AAAA,IAC1B;AACA,QAAI,KAAK,UAAU;AACjB,WAAK,oBAAoB,IAAI;AAAA,QAC3B,KAAK,SAAS,YAAY;AAAA,QAC1B,KAAK,SAAS,YAAY;AAAA,QAC1B,KAAK,SAAS,cAAc;AAAA,MAAA,EAC5B,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,eAAe;AACtB,WAAK,gBAAgB,KAAK,UAAU,KAAK,aAAa,EAAE,SAAA;AAAA,IAC1D;AACA,QAAI,KAAK,aAAa,UAAa,KAAK,aAAa,MAAM;AACzD,WAAK,WAAW,KAAK,UAAU,KAAK,QAAQ,EAAE,SAAA;AAAA,IAChD;AACA,QAAI,KAAK,WAAW;AAClB,WAAK,YAAY,KAAK,UAAU,KAAK,SAAS,EAAE,SAAA;AAAA,IAClD;AACA,QAAI,KAAK,MAAM;AACb,WAAK,OAAO,KAAK;AAAA,IACnB;AACA,QAAI,KAAK,cAAc,QAAQ,KAAK,cAAc,QAAW;AAC3D,WAAK,YAAY,MAAM,UAAU,KAAK,SAAS;AAAA,IACjD;AACA,QAAI,KAAK,eAAe,QAAQ,KAAK,eAAe,QAAW;AAC7D,WAAK,aAAa,MAAM,gBAAgB,KAAK,UAAU;AAAA,IACzD;AACA,SAAK,WAAW,SAAS,KAAK,QAAQ;AACtC,SAAK,SAAS,SAAS,KAAK,MAAM;AAClC,SAAK,YAAY,SAAS,KAAK,SAAS;AACxC,SAAK,UAAU,SAAS,KAAK,OAAO;AACpC,SAAK,YAAY,SAAS,KAAK,SAAS;AACxC,SAAK,iBAAiB,SAAS,KAAK,cAAc;AAClD,SAAK,WAAW,SAAS,KAAK,QAAQ;AACtC,QAAI,KAAK,kBAAkB;AACzB,WAAK,mBAAmB,IAAI;AAAA,QAC1B,KAAK,iBAAiB,YAAY;AAAA,QAClC,KAAK,iBAAiB,YAAY;AAAA,QAClC,KAAK,iBAAiB,cAAc;AAAA,MAAA,EACpC,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,iBAAiB,SAAS;AACjC,WAAK,kBAAkB,KAAK;AAAA,QAC1B,KAAK,gBAAgB;AAAA,MAAA,EACrB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,cAAc,KAAK,WAAW,SAAS,GAAG;AACjD,WAAK,aAAa,KAAK,WAAW,IAAI,CAAA,QAAO;AAC3C,cAAM,wBAAwB,IAAI,wBAC9B,IAAI;AAAA,UACF,IAAI,sBAAsB,YAAY;AAAA,UACtC,IAAI,sBAAsB,YAAY;AAAA,UACtC,IAAI,sBAAsB,cAAc;AAAA,QAAA,EACxC,aACF;AACJ,cAAM,gBAAgB;AAAA,UACpB;AAAA,UACA,wBAAwB,IAAI,0BAA0B;AAAA,QAAA;AAExD,YAAI,IAAI,UAAU;AAChB,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,UAAU;AAAA,cACR,QAAQ,KAAK,UAAU,IAAI,SAAS,UAAU,CAAC,EAAE,SAAA;AAAA,cACjD,qBAAqB,IAAI,SAAS,sBAC9B,IAAI;AAAA,gBACF,IAAI,SAAS,oBAAoB,YAAY;AAAA,gBAC7C,IAAI,SAAS,oBAAoB,YAAY;AAAA,gBAC7C,IAAI,SAAS,oBAAoB,YAAY;AAAA,cAAA,EAC7C,aACF;AAAA,YAAA;AAAA,UACN;AAAA,QAEJ,WAAW,IAAI,eAAe;AAC5B,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,eAAe;AAAA,cACb,WAAW,KAAK;AAAA,gBACd,IAAI,cAAc,kBAAkB,aAAa;AAAA,cAAA,EACjD,SAAA;AAAA,cACF,aAAa,KAAK;AAAA,gBAChB,IAAI,cAAc,kBAAkB,eAAe;AAAA,cAAA,EACnD,SAAA;AAAA,cACF,eAAe,KAAK;AAAA,gBAClB,IAAI,cAAc,iBAAiB;AAAA,cAAA,EACnC,SAAA;AAAA,cACF,eAAe,KAAK;AAAA,gBAClB,IAAI,cAAc,iBAAiB;AAAA,cAAA,EACnC,SAAA;AAAA,cACF,gBAAgB,IAAI,cAAc,kBAAkB;AAAA,YAAA;AAAA,UACtD;AAAA,QAEJ,WAAW,IAAI,YAAY;AACzB,cAAI,kBAA4C;AAChD,cAAI,IAAI,WAAW,aAAa;AAC9B,8BAAkB;AAAA,cAChB,QAAQ,KAAK;AAAA,gBACX,IAAI,WAAW,YAAY,UAAU;AAAA,cAAA,EACrC,SAAA;AAAA,cACF,qBAAqB,IAAI,WAAW,YACjC,sBACC,IAAI;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,cAAA,EACF,aACF;AAAA,YAAA;AAAA,UAER;AACA,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,YAAY;AAAA,cACV,WAAW,KAAK;AAAA,gBACd,IAAI,WAAW,uBAAuB,aAAa;AAAA,cAAA,EACnD,SAAA;AAAA,cACF,aAAa,KAAK;AAAA,gBAChB,IAAI,WAAW,uBAAuB,eAAe;AAAA,cAAA,EACrD,SAAA;AAAA,cACF,aAAa;AAAA,YAAA;AAAA,UACf;AAAA,QAEJ;AACA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS;AAAA,UACT,UAAU,EAAE,QAAQ,IAAA;AAAA,QAAI;AAAA,MAE5B,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,eACL,MAC2B;AAC3B,QACE,CAAC,QACD,CAAC,KAAK,SACN,KAAK,WAAW,QAChB,KAAK,WAAW,QAChB;AACA,aAAO;AAAA,IACT;AACA,UAAM,OAAsB;AAAA,MAC1B,SAAS,IAAI;AAAA,QACX,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,MACF,QAAQ,KAAK,UAAU,KAAK,MAAM,EAAE,SAAA;AAAA,IAAS;AAE/C,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,WAAK,WAAW,KAAK,SAAS;AAAA,QAAI,UAChC,OAAO,KAAK,IAAI,EAAE,SAAS,QAAQ;AAAA,MAAA;AAAA,IAEvC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,eACL,MAC2B;AAC3B,QACE,CAAC,QACD,CAAC,KAAK,SACN,KAAK,WAAW,QAChB,KAAK,WAAW,QAChB;AACA,aAAO;AAAA,IACT;AACA,UAAM,OAAsB;AAAA,MAC1B,SAAS,IAAI;AAAA,QACX,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,MACF,QAAQ,KAAK,UAAU,KAAK,MAAM,EAAE,SAAA;AAAA,IAAS;AAE/C,QAAI,KAAK,iBAAiB,KAAK,cAAc,SAAS,GAAG;AACvD,WAAK,gBAAgB,KAAK,cAAc;AAAA,QAAI,CAAA,OAC1C,KAAK,UAAU,EAAE,EAAE,SAAA;AAAA,MAAS;AAAA,IAEhC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,iBACL,MAC6B;AAC7B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAwB,CAAA;AAC9B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,MAAM;AACb,WAAK,OAAO,KAAK;AAAA,IACnB;AACA,QAAI,KAAK,QAAQ;AACf,WAAK,SAAS,KAAK;AAAA,IACrB;AACA,QAAI,KAAK,UAAU;AACjB,WAAK,oBAAoB,IAAI;AAAA,QAC3B,KAAK,SAAS,YAAY;AAAA,QAC1B,KAAK,SAAS,YAAY;AAAA,QAC1B,KAAK,SAAS,cAAc;AAAA,MAAA,EAC5B,SAAA;AAAA,IACJ;AACA,SAAK,WAAW,SAAS,KAAK,QAAQ;AACtC,SAAK,SAAS,SAAS,KAAK,MAAM;AAClC,SAAK,YAAY,SAAS,KAAK,SAAS;AACxC,SAAK,UAAU,SAAS,KAAK,OAAO;AACpC,SAAK,YAAY,SAAS,KAAK,SAAS;AACxC,SAAK,iBAAiB,SAAS,KAAK,cAAc;AAClD,SAAK,WAAW,SAAS,KAAK,QAAQ;AACtC,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,QAAI,KAAK,iBAAiB,SAAS;AACjC,WAAK,kBAAkB,KAAK;AAAA,QAC1B,KAAK,gBAAgB;AAAA,MAAA,EACrB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,MAAM,UAAU,QAAW;AAClC,WAAK,OAAO,KAAK,KAAK;AAAA,IACxB;AACA,QAAI,KAAK,QAAQ,SAAS;AACxB,WAAK,SAAS,GAAG,KAAK,UAAU,KAAK,OAAO,OAAO,EAAE,SAAA,CAAU,IAC7D,KAAK,OAAO,KACd;AAAA,IACF;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,IAAI;AAAA,QACjB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,MAAA,EACzB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,cAAc,KAAK,WAAW,SAAS,GAAG;AACjD,WAAK,aAAa,KAAK,WAAW,IAAI,CAAA,QAAO;AAC3C,cAAM,wBAAwB,IAAI,wBAC9B,IAAI;AAAA,UACF,IAAI,sBAAsB,YAAY;AAAA,UACtC,IAAI,sBAAsB,YAAY;AAAA,UACtC,IAAI,sBAAsB,cAAc;AAAA,QAAA,EACxC,aACF;AACJ,cAAM,gBAAgB;AAAA,UACpB;AAAA,UACA,wBAAwB,IAAI,0BAA0B;AAAA,QAAA;AAExD,YAAI,IAAI,UAAU;AAChB,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,UAAU;AAAA,cACR,QAAQ,KAAK,UAAU,IAAI,SAAS,UAAU,CAAC,EAAE,SAAA;AAAA,cACjD,qBAAqB,IAAI,SAAS,sBAC9B,IAAI;AAAA,gBACF,IAAI,SAAS,oBAAoB,YAAY;AAAA,gBAC7C,IAAI,SAAS,oBAAoB,YAAY;AAAA,gBAC7C,IAAI,SAAS,oBAAoB,YAAY;AAAA,cAAA,EAC7C,aACF;AAAA,YAAA;AAAA,UACN;AAAA,QAEJ,WAAW,IAAI,eAAe;AAC5B,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,eAAe;AAAA,cACb,WAAW,KAAK;AAAA,gBACd,IAAI,cAAc,kBAAkB,aAAa;AAAA,cAAA,EACjD,SAAA;AAAA,cACF,aAAa,KAAK;AAAA,gBAChB,IAAI,cAAc,kBAAkB,eAAe;AAAA,cAAA,EACnD,SAAA;AAAA,cACF,eAAe,KAAK;AAAA,gBAClB,IAAI,cAAc,iBAAiB;AAAA,cAAA,EACnC,SAAA;AAAA,cACF,eAAe,KAAK;AAAA,gBAClB,IAAI,cAAc,iBAAiB;AAAA,cAAA,EACnC,SAAA;AAAA,cACF,gBAAgB,IAAI,cAAc,kBAAkB;AAAA,YAAA;AAAA,UACtD;AAAA,QAEJ,WAAW,IAAI,YAAY;AACzB,cAAI,kBAA4C;AAChD,cAAI,IAAI,WAAW,aAAa;AAC9B,8BAAkB;AAAA,cAChB,QAAQ,KAAK;AAAA,gBACX,IAAI,WAAW,YAAY,UAAU;AAAA,cAAA,EACrC,SAAA;AAAA,cACF,qBAAqB,IAAI,WAAW,YACjC,sBACC,IAAI;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,gBACF,IAAI,WAAW,YAAY,oBAAoB,YAC7C;AAAA,cAAA,EACF,aACF;AAAA,YAAA;AAAA,UAER;AACA,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS;AAAA,YACT,YAAY;AAAA,cACV,WAAW,KAAK;AAAA,gBACd,IAAI,WAAW,uBAAuB,aAAa;AAAA,cAAA,EACnD,SAAA;AAAA,cACF,aAAa,KAAK;AAAA,gBAChB,IAAI,WAAW,uBAAuB,eAAe;AAAA,cAAA,EACrD,SAAA;AAAA,cACF,aAAa;AAAA,YAAA;AAAA,UACf;AAAA,QAEJ;AACA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS;AAAA,UACT,UAAU,EAAE,QAAQ,IAAA;AAAA,QAAI;AAAA,MAE5B,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,iBACL,MAC6B;AAC7B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAwB,CAAA;AAC9B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,mBACL,MAC+B;AAC/B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA0B,CAAA;AAChC,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,mBACL,MAC+B;AAC/B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA0B,CAAA;AAChC,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,oBACL,MACgC;AAChC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA2B,CAAA;AACjC,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,gBACL,MAC4B;AAC5B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAuB,CAAA;AAC7B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,kBACL,MAC8B;AAC9B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAyB,CAAA;AAC/B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,sBACL,MACkC;AAClC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA6B,CAAA;AACnC,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,iBAAiB,KAAK,cAAc,SAAS,GAAG;AACvD,WAAK,gBAAgB,KAAK,cAAc;AAAA,QAAI,CAAA,OAC1C,KAAK,UAAU,EAAE,EAAE,SAAA;AAAA,MAAS;AAAA,IAEhC;AACA,QAAI,KAAK,QAAQ;AACf,WAAK,SAAS,KAAK,UAAU,KAAK,MAAM,EAAE,SAAA;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,iBACL,MAC6B;AAC7B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAwB,CAAA;AAC9B,QAAI,KAAK,OAAO;AACd,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,QACvB,KAAK,MAAM,YAAY;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,oBACL,MACgC;AAChC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA2B,CAAA;AACjC,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,UAAU,KAAK,OAAO,SAAS,GAAG;AACzC,WAAK,WAAW,KAAK,OAAO;AAAA,QAAI,OAC9B,IAAI;AAAA,UACF,EAAE,YAAY;AAAA,UACd,EAAE,YAAY;AAAA,UACd,EAAE,YAAY;AAAA,QAAA,EACd,SAAA;AAAA,MAAS;AAAA,IAEf;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,qBACL,MACiC;AACjC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAA4B,CAAA;AAClC,QAAI,KAAK,SAAS;AAChB,WAAK,YAAY,IAAI;AAAA,QACnB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,YAAY;AAAA,QACzB,KAAK,QAAQ,cAAc;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AACA,QAAI,KAAK,UAAU,KAAK,OAAO,SAAS,GAAG;AACzC,WAAK,WAAW,KAAK,OAAO;AAAA,QAAI,OAC9B,IAAI;AAAA,UACF,EAAE,YAAY;AAAA,UACd,EAAE,YAAY;AAAA,UACd,EAAE,YAAY;AAAA,QAAA,EACd,SAAA;AAAA,MAAS;AAAA,IAEf;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,kBAAkB,aAAmD;AAC1E,QAAI;AACF,YAAM,kBACJ,YACA;AAEF,UAAI,iBAAiB,cAAc;AACjC,cAAM,UAAU,gBAAgB;AAEhC,eAAO;AAAA,UACL,iBAAiB,QAAQ,kBAAkB,CAAA,GAAI;AAAA,YAC7C,CAAC,cAAmB;AAAA,cAClB,SAAS,SAAS,OAAO,SAAA,KAAc;AAAA,cACvC,YAAY,SAAS,aAAa,CAAA,GAAI,IAAI,CAAC,OAAY;AAAA,gBACrD,WAAW,EAAE,WAAW,SAAA,KAAc;AAAA,gBACtC,QAAQ,EAAE,QAAQ,SAAA,KAAc;AAAA,gBAChC,eAAe,EAAE,eAAe,IAAI,CAAC,OAAY,GAAG,UAAU;AAAA,cAAA,EAC9D;AAAA,YAAA;AAAA,UACJ;AAAA,QACF;AAAA,MAEJ;AAGA,UAAI,mBAAmB,aAAa,cAAc,GAAG;AACnD,cAAM,SAAS,uBAAuB,WAAW;AACjD,YAAI,QAAQ,cAAc;AACxB,iBAAO,KAAK,2BAA2B,OAAO,YAAY;AAAA,QAC5D;AAAA,MACF;AAGA,YAAM,KAAK;AAUX,YAAM,qBAAqB,GAAG,mBAAmB,CAAA;AAEjD,UAAI,mBAAmB,SAAS,GAAG;AACjC,eAAO;AAAA,UACL,gBAAgB,mBAAmB,IAAI,CAAC,cAAmB;AAAA,YACzD,SAAS,SAAS,SAAS,SAAA,KAAc;AAAA,YACzC,YAAY,SAAS,aAAa,CAAA,GAAI,IAAI,CAAC,OAAY;AAAA,cACrD,WAAW,EAAE,WAAW,SAAA,KAAc;AAAA,cACtC,QAAQ,EAAE,QAAQ,SAAA,KAAc;AAAA,cAChC,eAAe,EAAE,eAAe,IAAI,CAAC,OAAY,GAAG,UAAU;AAAA,YAAA,EAC9D;AAAA,UAAA,EACF;AAAA,QAAA;AAAA,MAEN;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,8CAA8C,KAAK;AAChE,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,2BAA2B,SAAgC;AAChE,UAAM,iBAAiB,CAAA;AAEvB,QAAI,QAAQ,gBAAgB;AAC1B,iBAAW,iBAAiB,QAAQ,gBAAgB;AAClD,cAAM,QAAQ,cAAc,QACxB,IAAI;AAAA,UACF,cAAc,MAAM,YAAY;AAAA,UAChC,cAAc,MAAM,YAAY;AAAA,UAChC,cAAc,MAAM,YAAY;AAAA,QAAA,IAElC;AACJ,cAAM,YAAY,CAAA;AAElB,YAAI,cAAc,WAAW;AAC3B,qBAAW,YAAY,cAAc,WAAW;AAC9C,kBAAM,YAAY,SAAS,YACvB,IAAI;AAAA,cACF,SAAS,UAAU,YAAY;AAAA,cAC/B,SAAS,UAAU,YAAY;AAAA,cAC/B,SAAS,UAAU,cAAc;AAAA,YAAA,IAEnC;AAEJ,sBAAU,KAAK;AAAA,cACb,WAAW,WAAW,SAAA,KAAc;AAAA,cACpC,QAAQ,SAAS,SACb,KAAK,UAAU,SAAS,MAAM,EAAE,SAAA,IAChC;AAAA,cACJ,eAAe,SAAS,eAAe;AAAA,gBAAI,CAAC,OAC1C,KAAK,UAAU,EAAE,EAAE,SAAA;AAAA,cAAS;AAAA,YAC9B,CACD;AAAA,UACH;AAAA,QACF;AAEA,uBAAe,KAAK;AAAA,UAClB,SAAS,OAAO,SAAA,KAAc;AAAA,UAC9B;AAAA,QAAA,CACD;AAAA,MACH;AAAA,IACF;AAEA,WAAO,EAAE,eAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,oCACL,aAC0B;AAC1B,QAAI;AACF,YAAM,KAAK;AAwBX,UAAI,GAAG,cAAc,GAAG,cAAc;AACpC,cAAM,SAA4B;AAAA,UAChC,WAAW,GAAG,cAAc;AAAA,UAC5B,aAAa,GAAG,gBAAgB;AAAA,UAChC,eAAe,GAAG,gBAAgB,SAAA,KAAc;AAAA,UAChD,UAAU,OAAO,GAAG,aAAa,CAAC;AAAA,UAClC,mBAAmB,GAAG,oBAAoB,cAAc;AAAA,QAAA;AAG1D,YAAI,GAAG,YAAY;AACjB,iBAAO,YAAY,GAAG,WAAW,SAAA;AAAA,QACnC;AAEA,YAAI,GAAG,YAAY;AACjB,iBAAO,YAAY,GAAG,WAAW,WAC7B,GAAG,WAAW,SAAA,IACd,OAAO,GAAG,UAAU;AAAA,QAC1B;AAEA,YAAI,GAAG,aAAa;AAClB,iBAAO,aAAa,GAAG,YAAY,WAC/B,GAAG,YAAY,SAAA,IACf,OAAO,GAAG,WAAW;AAAA,QAC3B;AAEA,YAAI,GAAG,YAAY;AACjB,iBAAO,OAAO,GAAG;AAAA,QACnB;AAEA,YAAI,GAAG,WAAW;AAChB,iBAAO,WAAW,GAAG,UAAU,SAAA;AAAA,QACjC;AAEA,YAAI,GAAG,SAAS;AACd,iBAAO,SAAS,GAAG,QAAQ,SAAA;AAAA,QAC7B;AAEA,YAAI,GAAG,YAAY;AACjB,iBAAO,YAAY,GAAG,WAAW,SAAA;AAAA,QACnC;AAEA,YAAI,GAAG,UAAU;AACf,iBAAO,UAAU,GAAG,SAAS,SAAA;AAAA,QAC/B;AAEA,YAAI,GAAG,YAAY;AACjB,iBAAO,YAAY,GAAG,WAAW,SAAA;AAAA,QACnC;AAEA,YAAI,GAAG,iBAAiB;AACtB,iBAAO,iBAAiB,GAAG,gBAAgB,SAAA;AAAA,QAC7C;AAEA,YAAI,GAAG,WAAW;AAChB,iBAAO,WAAW,GAAG,UAAU,SAAA;AAAA,QACjC;AAEA,YAAI,GAAG,cAAc;AACnB,iBAAO,cAAc,GAAG,aAAa,SAAA;AAAA,QACvC;AAEA,YAAI,GAAG,qBAAqB;AAC1B,iBAAO,mBAAmB,GAAG,oBAAoB,SAAA;AAAA,QACnD;AAEA,YAAI,GAAG,kBAAkB;AACvB,iBAAO,kBACL,GAAG,iBAAiB,SAAS,cAC7B,GAAG,iBAAiB,SAAA;AAAA,QACxB;AAEA,YAAI,GAAG,iBAAiB;AACtB,iBAAO,SACL,GAAG,gBAAgB,SAAS,cAC5B,GAAG,gBAAgB,SAAA;AAAA,QACvB;AAEA,YACE,GAAG,eACH,MAAM,QAAQ,GAAG,WAAW,KAC5B,GAAG,YAAY,SAAS,GACxB;AACA,iBAAO,aAAa,GAAG,YAAY,IAAI,CAAC,QAAa;AACnD,kBAAM,YAA2B;AAAA,cAC/B,uBACE,IAAI,uBAAuB,SAAA,KAAc;AAAA,cAC3C,SAAS;AAAA,YAAA;AAGX,gBAAI,IAAI,UAAU;AAChB,wBAAU,UAAU;AACpB,wBAAU,WAAW;AAAA,gBACnB,QAAQ,IAAI,SAAS,QAAQ,cAAc;AAAA,gBAC3C,qBACE,IAAI,SAAS,qBAAqB,SAAA;AAAA,cAAS;AAAA,YAEjD,WAAW,IAAI,eAAe;AAC5B,wBAAU,UAAU;AACpB,wBAAU,gBAAgB;AAAA,gBACxB,WAAW,IAAI,cAAc,WAAW,cAAc;AAAA,gBACtD,aAAa,IAAI,cAAc,aAAa,cAAc;AAAA,gBAC1D,eACE,IAAI,cAAc,eAAe,cAAc;AAAA,gBACjD,eACE,IAAI,cAAc,eAAe,cAAc;AAAA,gBACjD,gBAAgB,IAAI,cAAc,kBAAkB;AAAA,cAAA;AAAA,YAExD,WAAW,IAAI,YAAY;AACzB,wBAAU,UAAU;AACpB,wBAAU,aAAa;AAAA,gBACrB,WAAW,IAAI,WAAW,WAAW,cAAc;AAAA,gBACnD,aAAa,IAAI,WAAW,aAAa,cAAc;AAAA,gBACvD,aAAa,IAAI,WAAW,cACxB;AAAA,kBACE,QACE,IAAI,WAAW,YAAY,QAAQ,cAAc;AAAA,kBACnD,qBACE,IAAI,WAAW,YAAY,qBAAqB,SAAA;AAAA,gBAAS,IAE7D;AAAA,cAAA;AAAA,YAER;AAEA,sBAAU,yBACR,IAAI,0BAA0B;AAChC,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AAEA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,mCACL,aACyB;AACzB,QAAI;AACF,YAAM,KAAK;AAWX,UAAI,GAAG,kBAAkB,MAAM,QAAQ,GAAG,cAAc,GAAG;AACzD,cAAM,iBAAiB,GAAG,eAAe,IAAI,CAAA,aAAY;AAAA,UACvD,SAAS,QAAQ,SAAS,SAAA,KAAc;AAAA,UACxC,YAAY,QAAQ,aAAa,CAAA,GAAI,IAAI,CAAA,cAAa;AAAA,YACpD,WAAW,SAAS,WAAW,SAAA,KAAc;AAAA,YAC7C,QAAQ,SAAS,QAAQ,SAAA,KAAc;AAAA,YACvC,eAAe,SAAS,eAAe,IAAI,OAAK,EAAE,SAAA,CAAU,KAAK,CAAA;AAAA,UAAC,EAClE;AAAA,QAAA,EACF;AAEF,eAAO,EAAE,eAAA;AAAA,MACX;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,2BAA2B,aAMhC;AACA,QAAI;AACF,UAAI;AACF,cAAM,QAAQ,YAAY,UAAU,YAAY,YAAY;AAC5D,YAAI,OAAO;AACT,gBAAM,UAAU,MAAM,gBAAgB,OAAO,KAAK;AAClD,cAAI,QAAQ,mBAAmB,QAAQ,gBAAgB,SAAS,GAAG;AACjE,kBAAM,KAAK,QAAQ,gBAAgB,CAAC;AACpC,gBAAI,SAAuC;AAC3C,gBAAI,GAAG,aAAa,GAAG,UAAU,SAAS,GAAG;AAC3C,uBAAS,MAAM,gBAAgB,OAAO,GAAG,SAAS;AAAA,YACpD,WACE,GAAG,0BACH,GAAG,uBAAuB,SAAS,GACnC;AACA,oBAAM,WAAW,MAAM,kBAAkB;AAAA,gBACvC,GAAG;AAAA,cAAA;AAEL,kBAAI,SAAS,WAAW;AACtB,yBAAS,MAAM,gBAAgB,OAAO,SAAS,SAAS;AAAA,cAC1D;AAAA,YACF;AAEA,gBAAI,QAAQ;AACV,kBAAI,OAAO,eAAe;AACxB,sBAAMA,iBAAgB,KAAK,iBAAiB,OAAO,aAAa;AAChE,oBAAIA,gBAAe;AACjB,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB,eAAAA;AAAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,WAAW;AACpB,sBAAM,YAAY,KAAK,eAAe,OAAO,SAAS;AACtD,oBAAI,WAAW;AACb,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,WAAW;AACpB,sBAAM,YAAY,KAAK,eAAe,OAAO,SAAS;AACtD,oBAAI,WAAW;AACb,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,aAAa;AACtB,sBAAM,cAAc,KAAK,iBAAiB,OAAO,WAAW;AAC5D,oBAAI,aAAa;AACf,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,aAAa;AACtB,sBAAM,cAAc,KAAK,iBAAiB,OAAO,WAAW;AAC5D,oBAAI,aAAa;AACf,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,eAAe;AACxB,sBAAM,gBAAgB,KAAK;AAAA,kBACzB,OAAO;AAAA,gBAAA;AAET,oBAAI,eAAe;AACjB,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,eAAe;AACxB,sBAAM,gBAAgB,KAAK;AAAA,kBACzB,OAAO;AAAA,gBAAA;AAET,oBAAI,eAAe;AACjB,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,gBAAgB;AACzB,sBAAM,iBAAiB,KAAK;AAAA,kBAC1B,OAAO;AAAA,gBAAA;AAET,oBAAI,gBAAgB;AAClB,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,YAAY;AACrB,sBAAM,aAAa,KAAK,gBAAgB,OAAO,UAAU;AACzD,oBAAI,YAAY;AACd,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,cAAc;AACvB,sBAAM,eAAe,KAAK,kBAAkB,OAAO,YAAY;AAC/D,oBAAI,cAAc;AAChB,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,WAAW;AACpB,sBAAM,mBAAmB,KAAK;AAAA,kBAC5B,OAAO;AAAA,gBAAA;AAET,oBAAI,kBAAkB;AACpB,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAMJ;AAAA,cACF;AACA,kBAAI,OAAO,eAAe;AACxB,sBAAM,cAAc,KAAK,iBAAiB,OAAO,aAAa;AAC9D,oBAAI,aAAa;AACf,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,gBAAgB;AACzB,sBAAM,iBAAiB,KAAK;AAAA,kBAC1B,OAAO;AAAA,gBAAA;AAET,oBAAI,gBAAgB;AAClB,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,iBAAiB;AAC1B,sBAAM,kBAAkB,KAAK;AAAA,kBAC3B,OAAO;AAAA,gBAAA;AAET,oBAAI,iBAAiB;AACnB,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,wBAAwB;AACjC,sBAAM,yBAAyB,KAAK;AAAA,kBAClC,OAAO;AAAA,gBAAA;AAET,oBAAI,wBAAwB;AAC1B,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AACA,kBAAI,OAAO,cAAc;AACvB,sBAAMC,gBAAe,KAAK;AAAA,kBACxB,OAAO;AAAA,gBAAA;AAET,oBAAIA,eAAc;AAChB,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,mBAAmB;AAAA,oBACnB,cAAAA;AAAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,SAAS,GAAG;AAAA,MAAC;AAEb,YAAM,cAAc,KAAK,oBAAoB,WAAW;AACxD,UAAI,YAAY,MAAM;AACpB,eAAO;AAAA,MACT;AAEA,YAAM,gBAAgB,KAAK,oCAAoC,WAAW;AAC1E,YAAM,eAAe,KAAK,mCAAmC,WAAW;AACxE,UAAI,eAAe;AACjB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AACA,UAAI,cAAc;AAChB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAEA,aAAO,CAAA;AAAA,IACT,SAAS,OAAO;AACd,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AACF;"}
@@ -1,85 +1,237 @@
1
1
  import { proto } from "@hashgraph/proto";
2
+ import { hasTransactionType, parseKey } from "./standards-sdk.es55.js";
3
+ import { AccountId, Long, ScheduleId } from "@hashgraph/sdk";
2
4
  class ScheduleParser {
3
5
  /**
4
- * Parse schedule create transaction
6
+ * Parse Schedule Service transaction using unified dual-branch approach
7
+ * This handles both regular transactions and signed transaction variants
5
8
  */
6
- static parseScheduleCreate(transaction) {
9
+ static parseScheduleTransaction(transaction, originalBytes) {
7
10
  try {
8
- const transactionBody = transaction._transactionBody;
9
- if (transactionBody?.scheduleCreate) {
10
- const create = transactionBody.scheduleCreate;
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(
22
+ tx.signedTransactionBytes
23
+ );
24
+ if (signedTx.bodyBytes) {
25
+ txBody = proto.TransactionBody.decode(signedTx.bodyBytes);
26
+ }
27
+ }
28
+ if (txBody) {
29
+ const protoResult = this.parseFromProtobufTxBody(txBody);
30
+ if (protoResult.type && protoResult.type !== "UNKNOWN") {
31
+ return protoResult;
32
+ }
33
+ }
34
+ }
35
+ } catch (protoError) {
36
+ }
37
+ }
38
+ return this.parseFromTransactionInternals(transaction);
39
+ } catch (error) {
40
+ return {
41
+ type: "UNKNOWN",
42
+ humanReadableType: "Unknown Schedule Transaction"
43
+ };
44
+ }
45
+ }
46
+ /**
47
+ * Parse schedule transaction from protobuf TransactionBody
48
+ * Handles all schedule operations from decoded protobuf data
49
+ */
50
+ static parseFromProtobufTxBody(txBody) {
51
+ if (txBody.scheduleCreate) {
52
+ const scheduleCreate = this.parseScheduleCreateFromProto(
53
+ txBody.scheduleCreate
54
+ );
55
+ if (scheduleCreate) {
11
56
  return {
12
- scheduledTransactionBody: create.scheduledTransactionBody ? Buffer.from(create.scheduledTransactionBody).toString("base64") : void 0,
13
- memo: create.memo,
14
- adminKey: create.adminKey?.toString(),
15
- payerAccountId: create.payerAccountId?.toString(),
16
- expirationTime: create.expirationTime?.toString(),
17
- waitForExpiry: create.waitForExpiry || false
57
+ type: "SCHEDULECREATE",
58
+ humanReadableType: "Schedule Create",
59
+ scheduleCreate
18
60
  };
19
61
  }
20
- const isScheduleCreateTx = transaction.constructor.name === "ScheduleCreateTransaction";
21
- if (isScheduleCreateTx) {
22
- const tx = transaction;
62
+ }
63
+ if (txBody.scheduleSign) {
64
+ const scheduleSign = this.parseScheduleSignFromProto(txBody.scheduleSign);
65
+ if (scheduleSign) {
23
66
  return {
24
- scheduledTransactionBody: tx._scheduledTransaction ? Buffer.from(tx._scheduledTransaction).toString("base64") : void 0,
25
- memo: tx._scheduleMemo || tx.scheduleMemo,
26
- adminKey: (tx._adminKey || tx.adminKey)?.toString(),
27
- payerAccountId: (tx._payerAccountId || tx.payerAccountId)?.toString(),
28
- expirationTime: (tx._expirationTime || tx.expirationTime)?.toString(),
29
- waitForExpiry: tx._waitForExpiry || tx.waitForExpiry || false
67
+ type: "SCHEDULESIGN",
68
+ humanReadableType: "Schedule Sign",
69
+ scheduleSign
70
+ };
71
+ }
72
+ }
73
+ if (txBody.scheduleDelete) {
74
+ const scheduleDelete = this.parseScheduleDeleteFromProto(
75
+ txBody.scheduleDelete
76
+ );
77
+ if (scheduleDelete) {
78
+ return {
79
+ type: "SCHEDULEDELETE",
80
+ humanReadableType: "Schedule Delete",
81
+ scheduleDelete
30
82
  };
31
83
  }
32
- return null;
33
- } catch (error) {
34
- console.warn("[ScheduleParser] Failed to parse schedule create:", error);
35
- return null;
36
84
  }
85
+ return {};
37
86
  }
38
87
  /**
39
- * Parse schedule sign transaction
88
+ * Extract schedule data from Transaction internal fields
89
+ * This handles cases where data is stored in Transaction object internals
40
90
  */
41
- static parseScheduleSign(transaction) {
91
+ static parseFromTransactionInternals(transaction) {
42
92
  try {
43
- const transactionBody = transaction._transactionBody;
44
- if (transactionBody?.scheduleSign) {
45
- const sign = transactionBody.scheduleSign;
93
+ const tx = transaction;
94
+ if (hasTransactionType(transaction, "scheduleCreate")) {
95
+ const scheduleCreate = {
96
+ scheduledTransactionBody: Buffer.from(
97
+ tx._scheduledTransaction
98
+ ).toString("base64"),
99
+ memo: tx._scheduleMemo,
100
+ adminKey: tx._adminKey ? parseKey(tx._adminKey) : void 0,
101
+ payerAccountId: tx._payerAccountId?.toString(),
102
+ expirationTime: tx._expirationTime?.toString(),
103
+ waitForExpiry: tx._waitForExpiry || false
104
+ };
105
+ return {
106
+ type: "SCHEDULECREATE",
107
+ humanReadableType: "Schedule Create",
108
+ scheduleCreate
109
+ };
110
+ }
111
+ if (hasTransactionType(transaction, "scheduleSign")) {
112
+ const scheduleSign = {
113
+ scheduleId: tx._scheduleId.toString()
114
+ };
46
115
  return {
47
- scheduleId: sign.scheduleID?.toString()
116
+ type: "SCHEDULESIGN",
117
+ humanReadableType: "Schedule Sign",
118
+ scheduleSign
48
119
  };
49
120
  }
50
- const isScheduleSignTx = transaction.constructor.name === "ScheduleSignTransaction";
51
- if (isScheduleSignTx) {
52
- const tx = transaction;
121
+ if (hasTransactionType(transaction, "scheduleDelete")) {
122
+ const scheduleDelete = {
123
+ scheduleId: tx._scheduleId.toString()
124
+ };
53
125
  return {
54
- scheduleId: (tx._scheduleId || tx.scheduleId)?.toString()
126
+ type: "SCHEDULEDELETE",
127
+ humanReadableType: "Schedule Delete",
128
+ scheduleDelete
55
129
  };
56
130
  }
131
+ return {};
132
+ } catch (error) {
133
+ return {};
134
+ }
135
+ }
136
+ /**
137
+ * Parse Schedule Create from protobuf data
138
+ */
139
+ static parseScheduleCreateFromProto(body) {
140
+ if (!body) return void 0;
141
+ const data = {};
142
+ if (body.scheduledTransactionBody) {
143
+ const schedBytes = proto.SchedulableTransactionBody.encode(
144
+ proto.SchedulableTransactionBody.create(body.scheduledTransactionBody)
145
+ ).finish();
146
+ data.scheduledTransactionBody = Buffer.from(schedBytes).toString("base64");
147
+ }
148
+ if (body.memo) {
149
+ data.memo = body.memo;
150
+ }
151
+ if (body.adminKey) {
152
+ data.adminKey = parseKey(body.adminKey);
153
+ }
154
+ if (body.payerAccountID) {
155
+ data.payerAccountId = new AccountId(
156
+ body.payerAccountID.shardNum ?? 0,
157
+ body.payerAccountID.realmNum ?? 0,
158
+ body.payerAccountID.accountNum ?? 0
159
+ ).toString();
160
+ }
161
+ if (body.expirationTime?.seconds) {
162
+ data.expirationTime = `${Long.fromValue(
163
+ body.expirationTime.seconds
164
+ ).toString()}.${body.expirationTime.nanos ?? 0}`;
165
+ }
166
+ if (body.waitForExpiry !== void 0) {
167
+ data.waitForExpiry = body.waitForExpiry;
168
+ }
169
+ return data;
170
+ }
171
+ /**
172
+ * Parse Schedule Sign from protobuf data
173
+ */
174
+ static parseScheduleSignFromProto(body) {
175
+ if (!body) return void 0;
176
+ const data = {};
177
+ if (body.scheduleID) {
178
+ data.scheduleId = new ScheduleId(
179
+ body.scheduleID.shardNum ?? 0,
180
+ body.scheduleID.realmNum ?? 0,
181
+ body.scheduleID.scheduleNum ?? 0
182
+ ).toString();
183
+ }
184
+ return data;
185
+ }
186
+ /**
187
+ * Parse Schedule Delete from protobuf data
188
+ */
189
+ static parseScheduleDeleteFromProto(body) {
190
+ if (!body) return void 0;
191
+ const data = {};
192
+ if (body.scheduleID) {
193
+ data.scheduleId = new ScheduleId(
194
+ body.scheduleID.shardNum ?? 0,
195
+ body.scheduleID.realmNum ?? 0,
196
+ body.scheduleID.scheduleNum ?? 0
197
+ ).toString();
198
+ }
199
+ return data;
200
+ }
201
+ /**
202
+ * Legacy method: Parse schedule create transaction
203
+ * @deprecated Use parseScheduleTransaction instead
204
+ */
205
+ static parseScheduleCreate(transaction) {
206
+ try {
207
+ const result = this.parseScheduleTransaction(transaction);
208
+ return result.scheduleCreate || null;
209
+ } catch (error) {
210
+ console.warn("[ScheduleParser] Failed to parse schedule create:", error);
57
211
  return null;
212
+ }
213
+ }
214
+ /**
215
+ * Legacy method: Parse schedule sign transaction
216
+ * @deprecated Use parseScheduleTransaction instead
217
+ */
218
+ static parseScheduleSign(transaction) {
219
+ try {
220
+ const result = this.parseScheduleTransaction(transaction);
221
+ return result.scheduleSign || null;
58
222
  } catch (error) {
59
223
  console.warn("[ScheduleParser] Failed to parse schedule sign:", error);
60
224
  return null;
61
225
  }
62
226
  }
63
227
  /**
64
- * Parse schedule delete transaction
228
+ * Legacy method: Parse schedule delete transaction
229
+ * @deprecated Use parseScheduleTransaction instead
65
230
  */
66
231
  static parseScheduleDelete(transaction) {
67
232
  try {
68
- const transactionBody = transaction._transactionBody;
69
- if (transactionBody?.scheduleDelete) {
70
- const del = transactionBody.scheduleDelete;
71
- return {
72
- scheduleId: del.scheduleID?.toString()
73
- };
74
- }
75
- const isScheduleDeleteTx = transaction.constructor.name === "ScheduleDeleteTransaction";
76
- if (isScheduleDeleteTx) {
77
- const tx = transaction;
78
- return {
79
- scheduleId: (tx._scheduleId || tx.scheduleId)?.toString()
80
- };
81
- }
82
- return null;
233
+ const result = this.parseScheduleTransaction(transaction);
234
+ return result.scheduleDelete || null;
83
235
  } catch (error) {
84
236
  console.warn("[ScheduleParser] Failed to parse schedule delete:", error);
85
237
  return null;
@@ -109,42 +261,6 @@ class ScheduleParser {
109
261
  return { isScheduled: false };
110
262
  }
111
263
  }
112
- /**
113
- * Main entry point for parsing any schedule transaction
114
- */
115
- static parseScheduleTransaction(transaction) {
116
- const result = {};
117
- const scheduleCreate = this.parseScheduleCreate(transaction);
118
- if (scheduleCreate) {
119
- result.scheduleCreate = scheduleCreate;
120
- result.type = "SCHEDULECREATE";
121
- result.humanReadableType = "Schedule Create";
122
- return result;
123
- }
124
- const scheduleSign = this.parseScheduleSign(transaction);
125
- if (scheduleSign) {
126
- result.scheduleSign = scheduleSign;
127
- result.type = "SCHEDULESIGN";
128
- result.humanReadableType = "Schedule Sign";
129
- return result;
130
- }
131
- const scheduleDelete = this.parseScheduleDelete(transaction);
132
- if (scheduleDelete) {
133
- result.scheduleDelete = scheduleDelete;
134
- result.type = "SCHEDULEDELETE";
135
- result.humanReadableType = "Schedule Delete";
136
- return result;
137
- }
138
- const scheduleInfo = this.extractScheduleInfo(transaction);
139
- if (scheduleInfo.isScheduled) {
140
- result.details = {
141
- ...result.details,
142
- isScheduled: true,
143
- scheduleRef: scheduleInfo.scheduleRef
144
- };
145
- }
146
- return result;
147
- }
148
264
  /**
149
265
  * Parse a scheduled transaction body to extract the inner transaction
150
266
  * This is used when a schedule contains another transaction to be executed
@@ -179,6 +295,13 @@ class ScheduleParser {
179
295
  return null;
180
296
  }
181
297
  }
298
+ /**
299
+ * Parse Schedule Service transaction from Transaction object
300
+ * This is the unified entry point that delegates to the comprehensive parsing logic
301
+ */
302
+ static parseFromTransactionObject(transaction) {
303
+ return this.parseScheduleTransaction(transaction);
304
+ }
182
305
  }
183
306
  export {
184
307
  ScheduleParser