@hashgraphonline/standards-sdk 0.1.146 → 0.1.148

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 (180) hide show
  1. package/dist/cjs/hcs-3/src/types.d.ts +64 -0
  2. package/dist/cjs/hcs-3/src/types.d.ts.map +1 -0
  3. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  4. package/dist/cjs/services/registry-broker/client/adapters.d.ts +15 -18
  5. package/dist/cjs/services/registry-broker/client/adapters.d.ts.map +1 -1
  6. package/dist/cjs/services/registry-broker/client/agents.d.ts +11 -14
  7. package/dist/cjs/services/registry-broker/client/agents.d.ts.map +1 -1
  8. package/dist/cjs/services/registry-broker/client/base-client.d.ts +100 -1
  9. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  10. package/dist/cjs/services/registry-broker/client/chat-history.d.ts +8 -12
  11. package/dist/cjs/services/registry-broker/client/chat-history.d.ts.map +1 -1
  12. package/dist/cjs/services/registry-broker/client/chat.d.ts +29 -30
  13. package/dist/cjs/services/registry-broker/client/chat.d.ts.map +1 -1
  14. package/dist/cjs/services/registry-broker/client/credits.d.ts +14 -18
  15. package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -1
  16. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts +0 -5
  17. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
  18. package/dist/cjs/services/registry-broker/client/encryption.d.ts +32 -30
  19. package/dist/cjs/services/registry-broker/client/encryption.d.ts.map +1 -1
  20. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts +5 -8
  21. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
  22. package/dist/cjs/services/registry-broker/client/search.d.ts +14 -17
  23. package/dist/cjs/services/registry-broker/client/search.d.ts.map +1 -1
  24. package/dist/cjs/services/registry-broker/schemas.d.ts +9 -9
  25. package/dist/cjs/services/registry-broker/types.d.ts +1 -0
  26. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  27. package/dist/cjs/standards-sdk.cjs +3 -3
  28. package/dist/cjs/standards-sdk.cjs.map +1 -1
  29. package/dist/es/hcs-3/src/types.d.ts +64 -0
  30. package/dist/es/hcs-3/src/types.d.ts.map +1 -0
  31. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  32. package/dist/es/services/registry-broker/client/adapters.d.ts +15 -18
  33. package/dist/es/services/registry-broker/client/adapters.d.ts.map +1 -1
  34. package/dist/es/services/registry-broker/client/agents.d.ts +11 -14
  35. package/dist/es/services/registry-broker/client/agents.d.ts.map +1 -1
  36. package/dist/es/services/registry-broker/client/base-client.d.ts +100 -1
  37. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  38. package/dist/es/services/registry-broker/client/chat-history.d.ts +8 -12
  39. package/dist/es/services/registry-broker/client/chat-history.d.ts.map +1 -1
  40. package/dist/es/services/registry-broker/client/chat.d.ts +29 -30
  41. package/dist/es/services/registry-broker/client/chat.d.ts.map +1 -1
  42. package/dist/es/services/registry-broker/client/credits.d.ts +14 -18
  43. package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -1
  44. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts +0 -5
  45. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
  46. package/dist/es/services/registry-broker/client/encryption.d.ts +32 -30
  47. package/dist/es/services/registry-broker/client/encryption.d.ts.map +1 -1
  48. package/dist/es/services/registry-broker/client/ledger-auth.d.ts +5 -8
  49. package/dist/es/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
  50. package/dist/es/services/registry-broker/client/search.d.ts +14 -17
  51. package/dist/es/services/registry-broker/client/search.d.ts.map +1 -1
  52. package/dist/es/services/registry-broker/schemas.d.ts +9 -9
  53. package/dist/es/services/registry-broker/types.d.ts +1 -0
  54. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  55. package/dist/es/standards-sdk.es.js +13 -16
  56. package/dist/es/standards-sdk.es.js.map +1 -1
  57. package/dist/es/standards-sdk.es101.js +1 -1
  58. package/dist/es/standards-sdk.es103.js +1 -1
  59. package/dist/es/standards-sdk.es109.js +3 -10
  60. package/dist/es/standards-sdk.es109.js.map +1 -1
  61. package/dist/es/standards-sdk.es11.js +1 -1
  62. package/dist/es/standards-sdk.es110.js +5 -5
  63. package/dist/es/standards-sdk.es12.js +1 -1
  64. package/dist/es/standards-sdk.es120.js +1 -1
  65. package/dist/es/standards-sdk.es121.js +1 -1
  66. package/dist/es/standards-sdk.es122.js +5 -5
  67. package/dist/es/standards-sdk.es124.js +20 -1
  68. package/dist/es/standards-sdk.es124.js.map +1 -1
  69. package/dist/es/standards-sdk.es125.js +1 -1
  70. package/dist/es/standards-sdk.es127.js +960 -178
  71. package/dist/es/standards-sdk.es127.js.map +1 -1
  72. package/dist/es/standards-sdk.es128.js +15 -205
  73. package/dist/es/standards-sdk.es128.js.map +1 -1
  74. package/dist/es/standards-sdk.es129.js +79 -96
  75. package/dist/es/standards-sdk.es129.js.map +1 -1
  76. package/dist/es/standards-sdk.es130.js +72 -112
  77. package/dist/es/standards-sdk.es130.js.map +1 -1
  78. package/dist/es/standards-sdk.es131.js +760 -213
  79. package/dist/es/standards-sdk.es131.js.map +1 -1
  80. package/dist/es/standards-sdk.es132.js +53 -173
  81. package/dist/es/standards-sdk.es132.js.map +1 -1
  82. package/dist/es/standards-sdk.es133.js +156 -119
  83. package/dist/es/standards-sdk.es133.js.map +1 -1
  84. package/dist/es/standards-sdk.es134.js +8 -327
  85. package/dist/es/standards-sdk.es134.js.map +1 -1
  86. package/dist/es/standards-sdk.es135.js +74 -452
  87. package/dist/es/standards-sdk.es135.js.map +1 -1
  88. package/dist/es/standards-sdk.es136.js +61 -13
  89. package/dist/es/standards-sdk.es136.js.map +1 -1
  90. package/dist/es/standards-sdk.es137.js +30 -81
  91. package/dist/es/standards-sdk.es137.js.map +1 -1
  92. package/dist/es/standards-sdk.es138.js +34 -87
  93. package/dist/es/standards-sdk.es138.js.map +1 -1
  94. package/dist/es/standards-sdk.es139.js +28 -60
  95. package/dist/es/standards-sdk.es139.js.map +1 -1
  96. package/dist/es/standards-sdk.es140.js +12263 -133
  97. package/dist/es/standards-sdk.es140.js.map +1 -1
  98. package/dist/es/standards-sdk.es141.js +138 -7
  99. package/dist/es/standards-sdk.es141.js.map +1 -1
  100. package/dist/es/standards-sdk.es142.js +12 -81
  101. package/dist/es/standards-sdk.es142.js.map +1 -1
  102. package/dist/es/standards-sdk.es143.js +35 -58
  103. package/dist/es/standards-sdk.es143.js.map +1 -1
  104. package/dist/es/standards-sdk.es144.js +172 -30
  105. package/dist/es/standards-sdk.es144.js.map +1 -1
  106. package/dist/es/standards-sdk.es145.js +322 -34
  107. package/dist/es/standards-sdk.es145.js.map +1 -1
  108. package/dist/es/standards-sdk.es146.js +346 -28
  109. package/dist/es/standards-sdk.es146.js.map +1 -1
  110. package/dist/es/standards-sdk.es147.js +453 -959
  111. package/dist/es/standards-sdk.es147.js.map +1 -1
  112. package/dist/es/standards-sdk.es148.js +267 -12225
  113. package/dist/es/standards-sdk.es148.js.map +1 -1
  114. package/dist/es/standards-sdk.es149.js +66 -128
  115. package/dist/es/standards-sdk.es149.js.map +1 -1
  116. package/dist/es/standards-sdk.es150.js +50 -36
  117. package/dist/es/standards-sdk.es150.js.map +1 -1
  118. package/dist/es/standards-sdk.es151.js +76 -48
  119. package/dist/es/standards-sdk.es151.js.map +1 -1
  120. package/dist/es/standards-sdk.es152.js +153 -65
  121. package/dist/es/standards-sdk.es152.js.map +1 -1
  122. package/dist/es/standards-sdk.es153.js +219 -14
  123. package/dist/es/standards-sdk.es153.js.map +1 -1
  124. package/dist/es/standards-sdk.es154.js +223 -156
  125. package/dist/es/standards-sdk.es154.js.map +1 -1
  126. package/dist/es/standards-sdk.es155.js +112 -315
  127. package/dist/es/standards-sdk.es155.js.map +1 -1
  128. package/dist/es/standards-sdk.es156.js +116 -336
  129. package/dist/es/standards-sdk.es156.js.map +1 -1
  130. package/dist/es/standards-sdk.es157.js +151 -443
  131. package/dist/es/standards-sdk.es157.js.map +1 -1
  132. package/dist/es/standards-sdk.es158.js +170 -316
  133. package/dist/es/standards-sdk.es158.js.map +1 -1
  134. package/dist/es/standards-sdk.es159.js +132 -69
  135. package/dist/es/standards-sdk.es159.js.map +1 -1
  136. package/dist/es/standards-sdk.es16.js +3 -10
  137. package/dist/es/standards-sdk.es16.js.map +1 -1
  138. package/dist/es/standards-sdk.es160.js +300 -208
  139. package/dist/es/standards-sdk.es160.js.map +1 -1
  140. package/dist/es/standards-sdk.es161.js +16 -1
  141. package/dist/es/standards-sdk.es161.js.map +1 -1
  142. package/dist/es/standards-sdk.es18.js +6 -13
  143. package/dist/es/standards-sdk.es18.js.map +1 -1
  144. package/dist/es/standards-sdk.es19.js +4 -11
  145. package/dist/es/standards-sdk.es19.js.map +1 -1
  146. package/dist/es/standards-sdk.es22.js +1 -1
  147. package/dist/es/standards-sdk.es27.js +6 -13
  148. package/dist/es/standards-sdk.es27.js.map +1 -1
  149. package/dist/es/standards-sdk.es30.js +1 -1
  150. package/dist/es/standards-sdk.es31.js +1 -1
  151. package/dist/es/standards-sdk.es35.js +5 -11
  152. package/dist/es/standards-sdk.es35.js.map +1 -1
  153. package/dist/es/standards-sdk.es36.js +3 -3
  154. package/dist/es/standards-sdk.es37.js +1 -1
  155. package/dist/es/standards-sdk.es4.js +1 -1
  156. package/dist/es/standards-sdk.es53.js +1 -1
  157. package/dist/es/standards-sdk.es56.js +1 -1
  158. package/dist/es/standards-sdk.es58.js +1 -1
  159. package/dist/es/standards-sdk.es59.js +1 -1
  160. package/dist/es/standards-sdk.es60.js +4 -11
  161. package/dist/es/standards-sdk.es60.js.map +1 -1
  162. package/dist/es/standards-sdk.es62.js +1 -1
  163. package/dist/es/standards-sdk.es64.js +1 -1
  164. package/dist/es/standards-sdk.es65.js +2 -2
  165. package/dist/es/standards-sdk.es68.js +2 -2
  166. package/dist/es/standards-sdk.es69.js +1 -1
  167. package/dist/es/standards-sdk.es7.js +1 -1
  168. package/dist/es/standards-sdk.es71.js +1 -1
  169. package/dist/es/standards-sdk.es76.js +1 -1
  170. package/dist/es/standards-sdk.es77.js +3 -10
  171. package/dist/es/standards-sdk.es77.js.map +1 -1
  172. package/dist/es/standards-sdk.es78.js +1 -1
  173. package/dist/es/standards-sdk.es81.js +1 -1
  174. package/dist/es/standards-sdk.es83.js +1 -1
  175. package/dist/es/standards-sdk.es87.js +3 -3
  176. package/dist/es/standards-sdk.es91.js +1 -1
  177. package/dist/es/standards-sdk.es92.js +1 -1
  178. package/dist/es/standards-sdk.es97.js +1 -1
  179. package/dist/es/standards-sdk.es99.js +1 -1
  180. package/package.json +63 -73
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es157.js","sources":["../../src/utils/parsers/scs-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { ContractId, Hbar, HbarUnit, Long, Transaction } from '@hashgraph/sdk';\nimport {\n ContractCallData,\n ContractCreateData,\n ContractUpdateData,\n ContractDeleteData,\n} from '../transaction-parser-types';\nimport { Buffer } from 'buffer';\nimport {\n parseKey,\n extractTransactionBody,\n hasTransactionType,\n} from './parser-utils';\nimport { AccountId, FileId } from '@hashgraph/sdk';\n\n/**\n * Smart Contract Service (SCS) Parser\n *\n * Handles parsing for all contract-related transaction types including:\n * - Contract calls (including EthereumTransaction)\n * - Contract creation, updates, and deletion\n * - Proper dual-branch parsing (regular vs signed transactions)\n * - Comprehensive protobuf extraction\n */\nexport class SCSParser {\n /**\n * Parse Smart Contract Service transaction using unified dual-branch approach\n * This handles both regular transactions and signed transaction variants\n */\n static parseSCSTransaction(\n transaction: Transaction,\n originalBytes?: Uint8Array,\n ): {\n type?: string;\n humanReadableType?: string;\n contractCall?: ContractCallData;\n contractCreate?: ContractCreateData;\n contractUpdate?: ContractUpdateData;\n contractDelete?: ContractDeleteData;\n [key: string]: unknown;\n } {\n try {\n if (originalBytes || transaction.toBytes) {\n try {\n const bytesToParse = originalBytes || transaction.toBytes();\n const decoded = proto.TransactionList.decode(bytesToParse);\n\n if (decoded.transactionList && decoded.transactionList.length > 0) {\n const tx = decoded.transactionList[0];\n let txBody: proto.ITransactionBody | null = null;\n\n 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 const protoResult = this.parseFromProtobufTxBody(txBody);\n if (protoResult.type && protoResult.type !== 'UNKNOWN') {\n return protoResult;\n }\n }\n }\n } catch (protoError) {}\n }\n\n return this.parseFromTransactionInternals(transaction);\n } catch (error) {\n return {\n type: 'UNKNOWN',\n humanReadableType: 'Unknown Contract Transaction',\n };\n }\n }\n\n /**\n * Parse contract transaction from protobuf TransactionBody\n * Handles all contract operations from decoded protobuf data\n */\n private static parseFromProtobufTxBody(txBody: proto.ITransactionBody): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n if (txBody.contractCall) {\n const contractCall = this.parseContractCall(txBody.contractCall);\n if (contractCall) {\n return {\n type: 'CONTRACTCALL',\n humanReadableType: 'Contract Call',\n contractCall,\n };\n }\n }\n\n if (txBody.contractCreateInstance) {\n const contractCreate = this.parseContractCreate(\n txBody.contractCreateInstance,\n );\n if (contractCreate) {\n return {\n type: 'CONTRACTCREATE',\n humanReadableType: 'Contract Create',\n contractCreate,\n };\n }\n }\n\n if (txBody.contractUpdateInstance) {\n const contractUpdate = this.parseContractUpdate(\n txBody.contractUpdateInstance,\n );\n if (contractUpdate) {\n return {\n type: 'CONTRACTUPDATE',\n humanReadableType: 'Contract Update',\n contractUpdate,\n };\n }\n }\n\n if (txBody.contractDeleteInstance) {\n const contractDelete = this.parseContractDelete(\n txBody.contractDeleteInstance,\n );\n if (contractDelete) {\n return {\n type: 'CONTRACTDELETE',\n humanReadableType: 'Contract Delete',\n contractDelete,\n };\n }\n }\n\n if (txBody.ethereumTransaction) {\n const ethereumCall = this.parseEthereumTransaction(\n txBody.ethereumTransaction,\n );\n if (ethereumCall) {\n return {\n type: 'ETHEREUMTRANSACTION',\n humanReadableType: 'Ethereum Transaction',\n ethereumTransaction: ethereumCall,\n };\n }\n }\n\n return {};\n }\n\n /**\n * Extract contract data from Transaction internal fields\n * This handles cases where data is stored in Transaction object internals\n */\n private static parseFromTransactionInternals(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n try {\n const tx = transaction as unknown as {\n _contractId?: { toString(): string };\n _gas?: number | Long;\n _amount?: { toString(): string };\n _functionParameters?: Uint8Array;\n _initialBalance?: { toString(): string };\n _adminKey?: unknown;\n _memo?: string;\n _fileId?: { toString(): string };\n _bytecode?: Uint8Array;\n _constructorParameters?: Uint8Array;\n _maxAutomaticTokenAssociations?: number;\n _stakedAccountId?: { toString(): string };\n _stakedNodeId?: number | Long;\n _declineReward?: boolean;\n _autoRenewPeriod?: { toString(): string };\n _transferAccountId?: { toString(): string };\n _transferContractId?: { toString(): string };\n constructor?: { name?: string };\n };\n\n if (tx._contractId && tx._gas) {\n const contractCall: ContractCallData = {\n contractId: tx._contractId.toString(),\n gas:\n typeof tx._gas === 'number'\n ? tx._gas\n : Long.fromValue(tx._gas).toNumber(),\n amount: tx._amount ? parseFloat(tx._amount.toString()) : 0,\n };\n\n if (tx._functionParameters) {\n const funcParams = Buffer.from(tx._functionParameters).toString(\n 'hex',\n );\n contractCall.functionParameters = funcParams;\n contractCall.functionName = this.extractFunctionName(funcParams);\n }\n\n return {\n type: 'CONTRACTCALL',\n humanReadableType: 'Contract Call',\n contractCall,\n };\n }\n\n if (hasTransactionType(transaction, 'contractCreateInstance')) {\n const contractCreate: ContractCreateData = {\n gas: tx._gas.toString(),\n initialBalance: tx._initialBalance?.toString() || '0',\n };\n\n if (tx._fileId) {\n contractCreate.initcodeSource = 'fileID';\n contractCreate.initcode = tx._fileId.toString();\n } else if (tx._bytecode) {\n contractCreate.initcodeSource = 'bytes';\n contractCreate.initcode = Buffer.from(tx._bytecode).toString('hex');\n }\n\n if (tx._constructorParameters) {\n contractCreate.constructorParameters = Buffer.from(\n tx._constructorParameters,\n ).toString('hex');\n }\n\n if (tx._memo) contractCreate.memo = tx._memo;\n if (tx._adminKey) contractCreate.adminKey = parseKey(tx._adminKey);\n if (tx._maxAutomaticTokenAssociations !== undefined) {\n contractCreate.maxAutomaticTokenAssociations =\n tx._maxAutomaticTokenAssociations;\n }\n if (tx._stakedAccountId) {\n contractCreate.stakedAccountId = tx._stakedAccountId.toString();\n } else if (\n tx._stakedNodeId !== null &&\n tx._stakedNodeId !== undefined\n ) {\n contractCreate.stakedNodeId = Long.fromValue(\n tx._stakedNodeId,\n ).toString();\n }\n if (tx._declineReward !== undefined)\n contractCreate.declineReward = tx._declineReward;\n if (tx._autoRenewPeriod)\n contractCreate.autoRenewPeriod = tx._autoRenewPeriod.toString();\n\n return {\n type: 'CONTRACTCREATE',\n humanReadableType: 'Contract Create',\n contractCreate,\n };\n }\n\n if (hasTransactionType(transaction, 'contractUpdateInstance')) {\n const contractUpdate: ContractUpdateData = {\n contractIdToUpdate: tx._contractId.toString(),\n };\n\n if (tx._memo) contractUpdate.memo = tx._memo;\n if (tx._adminKey) contractUpdate.adminKey = parseKey(tx._adminKey);\n if (tx._maxAutomaticTokenAssociations !== undefined) {\n contractUpdate.maxAutomaticTokenAssociations =\n tx._maxAutomaticTokenAssociations;\n }\n if (tx._stakedAccountId) {\n contractUpdate.stakedAccountId = tx._stakedAccountId.toString();\n } else if (\n tx._stakedNodeId !== null &&\n tx._stakedNodeId !== undefined\n ) {\n contractUpdate.stakedNodeId = Long.fromValue(\n tx._stakedNodeId,\n ).toString();\n }\n if (tx._declineReward !== undefined)\n contractUpdate.declineReward = tx._declineReward;\n if (tx._autoRenewPeriod)\n contractUpdate.autoRenewPeriod = tx._autoRenewPeriod.toString();\n\n return {\n type: 'CONTRACTUPDATE',\n humanReadableType: 'Contract Update',\n contractUpdate,\n };\n }\n\n if (hasTransactionType(transaction, 'contractDeleteInstance')) {\n const contractDelete: ContractDeleteData = {\n contractIdToDelete: tx._contractId.toString(),\n };\n\n if (tx._transferAccountId) {\n contractDelete.transferAccountId = tx._transferAccountId.toString();\n } else if (tx._transferContractId) {\n contractDelete.transferContractId = tx._transferContractId.toString();\n }\n\n return {\n type: 'CONTRACTDELETE',\n humanReadableType: 'Contract Delete',\n contractDelete,\n };\n }\n\n return {};\n } catch (error) {\n return {};\n }\n }\n\n /**\n * Enhanced function name extraction from contract call parameters\n * Attempts to decode function selector and map to known function names\n */\n private static extractFunctionName(functionParameters: string): string {\n if (functionParameters.length < 8) return 'unknown';\n\n const selector = functionParameters.substring(0, 8);\n\n const commonSelectors: Record<string, string> = {\n a9059cbb: 'transfer',\n '095ea7b3': 'approve',\n '23b872dd': 'transferFrom',\n '70a08231': 'balanceOf',\n dd62ed3e: 'allowance',\n '18160ddd': 'totalSupply',\n '06fdde03': 'name',\n '95d89b41': 'symbol',\n '313ce567': 'decimals',\n '42842e0e': 'safeTransferFrom',\n b88d4fde: 'safeTransferFrom',\n e985e9c5: 'isApprovedForAll',\n a22cb465: 'setApprovalForAll',\n '6352211e': 'ownerOf',\n c87b56dd: 'tokenURI',\n '01ffc9a7': 'supportsInterface',\n '40c10f19': 'mint',\n '42966c68': 'burn',\n f2fde38b: 'transferOwnership',\n '715018a6': 'renounceOwnership',\n '8da5cb5b': 'owner',\n };\n\n return commonSelectors[selector] || selector;\n }\n\n /**\n * Parse Ethereum Transaction (was completely missing from original parser)\n */\n static parseEthereumTransaction(\n body: proto.IEthereumTransactionBody,\n ): ContractCallData | undefined {\n if (!body) return undefined;\n\n const data: ContractCallData = {\n contractId: 'EVM',\n gas: body.maxGasAllowance\n ? Long.fromValue(body.maxGasAllowance).toNumber()\n : 0,\n amount: 0,\n };\n\n if (body.ethereumData && body.ethereumData.length > 0) {\n const ethData = Buffer.from(body.ethereumData).toString('hex');\n data.functionParameters = ethData;\n\n if (ethData.length >= 8) {\n data.functionName = this.extractFunctionName(ethData);\n }\n }\n\n return data;\n }\n\n static parseContractCall(\n body: proto.IContractCallTransactionBody,\n ): ContractCallData | undefined {\n if (!body) return undefined;\n const hbarAmount = Hbar.fromTinybars(Long.fromValue(body.amount ?? 0));\n const data: ContractCallData = {\n contractId: new ContractId(\n body.contractID!.shardNum ?? 0,\n body.contractID!.realmNum ?? 0,\n body.contractID!.contractNum ?? 0,\n ).toString(),\n gas: Long.fromValue(body.gas ?? 0).toNumber(),\n amount: parseFloat(hbarAmount.toString(HbarUnit.Hbar)),\n };\n if (body.functionParameters) {\n data.functionParameters = Buffer.from(body.functionParameters).toString(\n 'hex',\n );\n if (data.functionParameters.length >= 8) {\n data.functionName = this.extractFunctionName(data.functionParameters);\n }\n }\n return data;\n }\n\n static parseContractCreate(\n body: proto.IContractCreateTransactionBody,\n ): ContractCreateData | undefined {\n if (!body) return undefined;\n const data: ContractCreateData = {};\n if (body.initialBalance) {\n data.initialBalance = Hbar.fromTinybars(\n Long.fromValue(body.initialBalance),\n ).toString(HbarUnit.Hbar);\n }\n if (body.gas) {\n data.gas = Long.fromValue(body.gas).toString();\n }\n if (body.adminKey) {\n data.adminKey = parseKey(body.adminKey);\n }\n if (body.constructorParameters) {\n data.constructorParameters = Buffer.from(\n body.constructorParameters,\n ).toString('hex');\n }\n if (body.memo) {\n data.memo = body.memo;\n }\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n if (body.stakedAccountId) {\n data.stakedAccountId = new AccountId(\n body.stakedAccountId.shardNum ?? 0,\n body.stakedAccountId.realmNum ?? 0,\n body.stakedAccountId.accountNum ?? 0,\n ).toString();\n } else if (body.stakedNodeId !== null && body.stakedNodeId !== undefined) {\n data.stakedNodeId = Long.fromValue(body.stakedNodeId).toString();\n }\n if (body.declineReward !== undefined) {\n data.declineReward = body.declineReward;\n }\n if (body.maxAutomaticTokenAssociations !== undefined) {\n data.maxAutomaticTokenAssociations = body.maxAutomaticTokenAssociations;\n }\n if (body.fileID) {\n data.initcodeSource = 'fileID';\n data.initcode = new FileId(\n body.fileID.shardNum ?? 0,\n body.fileID.realmNum ?? 0,\n body.fileID.fileNum ?? 0,\n ).toString();\n } else if (body.initcode && body.initcode.length > 0) {\n data.initcodeSource = 'bytes';\n data.initcode = Buffer.from(body.initcode).toString('hex');\n }\n return data;\n }\n\n static parseContractUpdate(\n body: proto.IContractUpdateTransactionBody,\n ): ContractUpdateData | undefined {\n if (!body) return undefined;\n const data: ContractUpdateData = {};\n if (body.contractID) {\n data.contractIdToUpdate = new ContractId(\n body.contractID.shardNum ?? 0,\n body.contractID.realmNum ?? 0,\n body.contractID.contractNum ?? 0,\n ).toString();\n }\n if (body.adminKey) {\n data.adminKey = parseKey(body.adminKey);\n }\n if (body.expirationTime?.seconds) {\n data.expirationTime = `${Long.fromValue(\n body.expirationTime.seconds,\n ).toString()}.${body.expirationTime.nanos}`;\n }\n if (body.autoRenewPeriod?.seconds) {\n data.autoRenewPeriod = Long.fromValue(\n body.autoRenewPeriod.seconds,\n ).toString();\n }\n\n if (body.memo) {\n const memoUnion = body.memo as unknown;\n if (\n memoUnion &&\n typeof memoUnion === 'object' &&\n Object.prototype.hasOwnProperty.call(memoUnion, 'value')\n ) {\n const value = (memoUnion as { value: unknown }).value;\n if (value === null || value === undefined) {\n data.memo = undefined;\n } else {\n data.memo = String(value);\n }\n } else if (typeof memoUnion === 'string') {\n data.memo = memoUnion;\n } else {\n data.memo = undefined;\n }\n } else {\n data.memo = undefined;\n }\n\n if (body.stakedAccountId) {\n data.stakedAccountId = new AccountId(\n body.stakedAccountId.shardNum ?? 0,\n body.stakedAccountId.realmNum ?? 0,\n body.stakedAccountId.accountNum ?? 0,\n ).toString();\n data.stakedNodeId = undefined;\n } else if (\n body.stakedNodeId !== null &&\n body.stakedNodeId !== undefined &&\n Long.fromValue(body.stakedNodeId).notEquals(-1)\n ) {\n data.stakedNodeId = Long.fromValue(body.stakedNodeId).toString();\n data.stakedAccountId = undefined;\n } else {\n data.stakedNodeId = undefined;\n data.stakedAccountId = undefined;\n }\n if (body.declineReward?.value !== undefined) {\n data.declineReward = body.declineReward.value;\n }\n if (body.maxAutomaticTokenAssociations?.value !== undefined) {\n data.maxAutomaticTokenAssociations =\n body.maxAutomaticTokenAssociations.value;\n }\n if (body.autoRenewAccountId) {\n data.autoRenewAccountId = new AccountId(\n body.autoRenewAccountId.shardNum ?? 0,\n body.autoRenewAccountId.realmNum ?? 0,\n body.autoRenewAccountId.accountNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n static parseContractDelete(\n body: proto.IContractDeleteTransactionBody,\n ): ContractDeleteData | undefined {\n if (!body) return undefined;\n const data: ContractDeleteData = {};\n if (body.contractID) {\n data.contractIdToDelete = new ContractId(\n body.contractID.shardNum ?? 0,\n body.contractID.realmNum ?? 0,\n body.contractID.contractNum ?? 0,\n ).toString();\n }\n if (body.transferAccountID) {\n data.transferAccountId = new AccountId(\n body.transferAccountID.shardNum ?? 0,\n body.transferAccountID.realmNum ?? 0,\n body.transferAccountID.accountNum ?? 0,\n ).toString();\n } else if (body.transferContractID) {\n data.transferContractId = new ContractId(\n body.transferContractID.shardNum ?? 0,\n body.transferContractID.realmNum ?? 0,\n body.transferContractID.contractNum ?? 0,\n ).toString();\n }\n return data;\n }\n\n /**\n * Parse SCS (Smart Contract Service) transaction from Transaction object\n * This is the unified entry point that delegates to the comprehensive parsing logic\n */\n static parseFromTransactionObject(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n return this.parseSCSTransaction(transaction);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es157.js","sources":["../../src/services/registry-broker/client/agents.ts"],"sourcesContent":["import type {\n AgentRegistrationRequest,\n DashboardStatsResponse,\n JsonValue,\n RegisterAgentOptions,\n RegisterAgentQuoteResponse,\n RegisterAgentResponse,\n RegistrationProgressRecord,\n RegistrationProgressWaitOptions,\n ResolvedAgentResponse,\n UaidConnectionStatus,\n UaidValidationResponse,\n} from '../types';\nimport {\n dashboardStatsResponseSchema,\n registerAgentResponseSchema,\n registrationProgressResponseSchema,\n registrationQuoteResponseSchema,\n resolveResponseSchema,\n uaidConnectionStatusSchema,\n uaidValidationResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\nimport { purchaseCreditsWithHbar } from './credits';\nimport {\n createAbortError,\n DEFAULT_PROGRESS_INTERVAL_MS,\n DEFAULT_PROGRESS_TIMEOUT_MS,\n MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS,\n serialiseAgentRegistrationRequest,\n} from './utils';\nimport { RegistryBrokerError } from './errors';\n\nasync function performRegisterAgent(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentResponse> {\n const raw = await client.requestJson<JsonValue>('/register', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'register agent response',\n );\n}\n\nfunction calculateHbarAmount(\n creditsToPurchase: number,\n creditsPerHbar: number,\n): number {\n if (creditsPerHbar <= 0) {\n throw new Error('creditsPerHbar must be positive');\n }\n if (creditsToPurchase <= 0) {\n throw new Error('creditsToPurchase must be positive');\n }\n const rawHbar = creditsToPurchase / creditsPerHbar;\n const tinybars = Math.ceil(rawHbar * 1e8);\n return tinybars / 1e8;\n}\n\nfunction resolveCreditsToPurchase(shortfallCredits: number): number {\n if (!Number.isFinite(shortfallCredits) || shortfallCredits <= 0) {\n return 0;\n }\n return Math.max(\n Math.ceil(shortfallCredits),\n MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS,\n );\n}\n\nasync function ensureCreditsForRegistration(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n autoTopUp: RegisterAgentOptions['autoTopUp'],\n): Promise<void> {\n const details = autoTopUp ?? null;\n if (!details) {\n return;\n }\n\n if (!details.accountId || !details.accountId.trim()) {\n throw new Error('autoTopUp.accountId is required');\n }\n\n if (!details.privateKey || !details.privateKey.trim()) {\n throw new Error('autoTopUp.privateKey is required');\n }\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n const quote = await getRegistrationQuote(client, payload);\n const shortfall = quote.shortfallCredits ?? 0;\n if (shortfall <= 0) {\n return;\n }\n const creditsToPurchase = resolveCreditsToPurchase(shortfall);\n if (creditsToPurchase <= 0) {\n return;\n }\n\n const creditsPerHbar = quote.creditsPerHbar ?? null;\n if (!creditsPerHbar || creditsPerHbar <= 0) {\n throw new Error('Unable to determine credits per HBAR for auto top-up');\n }\n\n const hbarAmount = calculateHbarAmount(creditsToPurchase, creditsPerHbar);\n\n await purchaseCreditsWithHbar(client, {\n accountId: details.accountId.trim(),\n privateKey: details.privateKey.trim(),\n hbarAmount,\n memo: details.memo ?? 'Registry Broker auto top-up',\n metadata: {\n shortfallCredits: shortfall,\n requiredCredits: quote.requiredCredits,\n purchasedCredits: creditsToPurchase,\n },\n });\n }\n\n const finalQuote = await getRegistrationQuote(client, payload);\n if ((finalQuote.shortfallCredits ?? 0) > 0) {\n throw new Error('Unable to purchase sufficient credits for registration');\n }\n}\n\nexport async function resolveUaid(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<ResolvedAgentResponse> {\n const raw = await client.requestJson<JsonValue>(\n `/resolve/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n resolveResponseSchema,\n 'resolve UAID response',\n );\n}\n\nexport async function registerAgent(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n options?: RegisterAgentOptions,\n): Promise<RegisterAgentResponse> {\n const autoTopUp = options?.autoTopUp ?? client.registrationAutoTopUp;\n\n if (!autoTopUp) {\n return performRegisterAgent(client, payload);\n }\n\n await ensureCreditsForRegistration(client, payload, autoTopUp);\n\n let retried = false;\n while (true) {\n try {\n return await performRegisterAgent(client, payload);\n } catch (error) {\n const shortfall = client.extractInsufficientCreditsDetails(error);\n if (shortfall && !retried) {\n await ensureCreditsForRegistration(client, payload, autoTopUp);\n retried = true;\n continue;\n }\n throw error;\n }\n }\n}\n\nexport async function getRegistrationQuote(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentQuoteResponse> {\n const raw = await client.requestJson<JsonValue>('/register/quote', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n\n return client.parseWithSchema(\n raw,\n registrationQuoteResponseSchema,\n 'registration quote response',\n );\n}\n\nexport async function updateAgent(\n client: RegistryBrokerClient,\n uaid: string,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentResponse> {\n const raw = await client.requestJson<JsonValue>(\n `/register/${encodeURIComponent(uaid)}`,\n {\n method: 'PUT',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n },\n );\n\n return client.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'update agent response',\n );\n}\n\nexport async function getRegistrationProgress(\n client: RegistryBrokerClient,\n attemptId: string,\n): Promise<RegistrationProgressRecord | null> {\n const normalisedAttemptId = attemptId.trim();\n if (!normalisedAttemptId) {\n throw new Error('attemptId is required');\n }\n\n try {\n const raw = await client.requestJson<JsonValue>(\n `/register/progress/${encodeURIComponent(normalisedAttemptId)}`,\n { method: 'GET' },\n );\n\n const parsed = client.parseWithSchema(\n raw,\n registrationProgressResponseSchema,\n 'registration progress response',\n );\n\n return parsed.progress;\n } catch (error) {\n if (error instanceof RegistryBrokerError && error.status === 404) {\n return null;\n }\n throw error;\n }\n}\n\nexport async function waitForRegistrationCompletion(\n client: RegistryBrokerClient,\n attemptId: string,\n options: RegistrationProgressWaitOptions = {},\n): Promise<RegistrationProgressRecord> {\n const normalisedAttemptId = attemptId.trim();\n if (!normalisedAttemptId) {\n throw new Error('attemptId is required');\n }\n\n const interval = Math.max(\n 250,\n options.intervalMs ?? DEFAULT_PROGRESS_INTERVAL_MS,\n );\n const timeoutMs = options.timeoutMs ?? DEFAULT_PROGRESS_TIMEOUT_MS;\n const throwOnFailure = options.throwOnFailure ?? true;\n const signal = options.signal;\n const startedAt = Date.now();\n\n while (true) {\n if (signal?.aborted) {\n throw createAbortError();\n }\n\n const progress = await client.getRegistrationProgress(normalisedAttemptId);\n\n if (progress) {\n options.onProgress?.(progress);\n\n if (progress.status === 'completed') {\n return progress;\n }\n\n if (progress.status === 'partial' || progress.status === 'failed') {\n if (throwOnFailure) {\n throw new RegistryBrokerError(\n 'Registration did not complete successfully',\n {\n status: 409,\n statusText: progress.status,\n body: progress,\n },\n );\n }\n return progress;\n }\n }\n\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(\n `Registration progress polling timed out after ${timeoutMs}ms`,\n );\n }\n\n await client.delay(interval, signal);\n }\n}\n\nexport async function validateUaid(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidValidationResponse> {\n const raw = await client.requestJson<JsonValue>(\n `/uaids/validate/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n uaidValidationResponseSchema,\n 'UAID validation response',\n );\n}\n\nexport async function getUaidConnectionStatus(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidConnectionStatus> {\n const raw = await client.requestJson<JsonValue>(\n `/uaids/connections/${encodeURIComponent(uaid)}/status`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n uaidConnectionStatusSchema,\n 'UAID connection status',\n );\n}\n\nexport async function closeUaidConnection(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<void> {\n await client.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {\n method: 'DELETE',\n });\n}\n\nexport async function dashboardStats(\n client: RegistryBrokerClient,\n): Promise<DashboardStatsResponse> {\n const raw = await client.requestJson<JsonValue>('/dashboard/stats', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n dashboardStatsResponseSchema,\n 'dashboard stats response',\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,334 +1,188 @@
1
- import { proto } from "@hashgraph/proto";
2
- import { Long, FileId, ContractId } from "@hashgraph/sdk";
3
- import { hasTransactionType } from "./standards-sdk.es159.js";
4
- class UtilParser {
5
- /**
6
- * Parse Utility/System Service transaction using unified dual-branch approach
7
- * This handles both regular transactions and signed transaction variants
8
- */
9
- static parseUtilTransaction(transaction, originalBytes) {
10
- try {
11
- if (originalBytes || transaction.toBytes) {
12
- try {
13
- const bytesToParse = originalBytes || transaction.toBytes();
14
- const decoded = proto.TransactionList.decode(bytesToParse);
15
- if (decoded.transactionList && decoded.transactionList.length > 0) {
16
- const tx = decoded.transactionList[0];
17
- let txBody = null;
18
- if (tx.bodyBytes && tx.bodyBytes.length > 0) {
19
- txBody = proto.TransactionBody.decode(tx.bodyBytes);
20
- } else if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
21
- const signedTx = proto.SignedTransaction.decode(
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 Utility Transaction"
43
- };
44
- }
1
+ import { Buffer } from "buffer";
2
+ import { ledgerChallengeResponseSchema, ledgerVerifyResponseSchema } from "./standards-sdk.es127.js";
3
+ import { canonicalizeLedgerNetwork } from "./standards-sdk.es129.js";
4
+ import { createPrivateKeySignerAsync } from "./standards-sdk.es130.js";
5
+ async function loadViemAccount(privateKey) {
6
+ try {
7
+ const viem = await import("viem/accounts");
8
+ return viem.privateKeyToAccount(privateKey);
9
+ } catch (error) {
10
+ const err = new Error(
11
+ 'EVM ledger authentication requires the optional dependency "viem". Install it to use evmPrivateKey flows.'
12
+ );
13
+ err.cause = error;
14
+ throw err;
45
15
  }
46
- /**
47
- * Parse utility transaction from protobuf TransactionBody
48
- * Handles all utility operations from decoded protobuf data
49
- */
50
- static parseFromProtobufTxBody(txBody) {
51
- if (txBody.utilPrng) {
52
- const utilPrng = this.parseUtilPrng(txBody.utilPrng);
53
- if (utilPrng) {
54
- return {
55
- type: "PRNG",
56
- humanReadableType: "Pseudo Random Number",
57
- utilPrng
58
- };
59
- }
60
- }
61
- if (txBody.freeze) {
62
- const networkFreeze = this.parseNetworkFreezeFromProto(txBody.freeze);
63
- if (networkFreeze) {
64
- return {
65
- type: "FREEZE",
66
- humanReadableType: "Network Freeze",
67
- freeze: networkFreeze
68
- };
69
- }
70
- }
71
- if (txBody.systemDelete) {
72
- const systemDelete = this.parseSystemDeleteFromProto(txBody.systemDelete);
73
- if (systemDelete) {
74
- return {
75
- type: "SYSTEMDELETE",
76
- humanReadableType: "System Delete",
77
- systemDelete
78
- };
79
- }
80
- }
81
- if (txBody.systemUndelete) {
82
- const systemUndelete = this.parseSystemUndeleteFromProto(
83
- txBody.systemUndelete
84
- );
85
- if (systemUndelete) {
86
- return {
87
- type: "SYSTEMUNDELETE",
88
- humanReadableType: "System Undelete",
89
- systemUndelete
90
- };
91
- }
92
- }
93
- if (txBody.nodeCreate) {
94
- const nodeCreate = this.parseNodeCreateFromProto(txBody.nodeCreate);
95
- if (nodeCreate) {
96
- return {
97
- type: "NODECREATE",
98
- humanReadableType: "Node Create",
99
- nodeCreate
100
- };
101
- }
102
- }
103
- if (txBody.nodeUpdate) {
104
- const nodeUpdate = this.parseNodeUpdateFromProto(txBody.nodeUpdate);
105
- if (nodeUpdate) {
106
- return {
107
- type: "NODEUPDATE",
108
- humanReadableType: "Node Update",
109
- nodeUpdate
110
- };
111
- }
112
- }
113
- if (txBody.nodeDelete) {
114
- const nodeDelete = this.parseNodeDeleteFromProto(txBody.nodeDelete);
115
- if (nodeDelete) {
116
- return {
117
- type: "NODEDELETE",
118
- humanReadableType: "Node Delete",
119
- nodeDelete
120
- };
121
- }
16
+ }
17
+ async function resolveLedgerAuthSignature(message, options) {
18
+ if (typeof options.sign === "function") {
19
+ const result = await options.sign(message);
20
+ if (!result || typeof result.signature !== "string" || result.signature.length === 0) {
21
+ throw new Error("Custom ledger signer failed to produce a signature.");
122
22
  }
123
- return {};
23
+ return result;
124
24
  }
125
- /**
126
- * Extract utility data from Transaction internal fields
127
- * This handles cases where data is stored in Transaction object internals
128
- */
129
- static parseFromTransactionInternals(transaction) {
130
- try {
131
- const tx = transaction;
132
- if (hasTransactionType(transaction, "utilPrng")) {
133
- const utilPrng = {};
134
- if (tx._range && tx._range !== 0) {
135
- utilPrng.range = tx._range;
136
- }
137
- return {
138
- type: "PRNG",
139
- humanReadableType: "Pseudo Random Number",
140
- utilPrng
141
- };
142
- }
143
- if (hasTransactionType(transaction, "freeze")) {
144
- const networkFreeze = {};
145
- if (tx._startTime) {
146
- networkFreeze.startTime = tx._startTime.toString();
147
- }
148
- if (tx._endTime) {
149
- networkFreeze.endTime = tx._endTime.toString();
150
- }
151
- if (tx._updateFile) {
152
- networkFreeze.updateFile = tx._updateFile.toString();
153
- }
154
- if (tx._fileHash) {
155
- networkFreeze.fileHash = Buffer.from(tx._fileHash).toString("hex");
156
- }
157
- if (tx._freezeType) {
158
- networkFreeze.freezeType = tx._freezeType;
159
- }
160
- return {
161
- type: "FREEZE",
162
- humanReadableType: "Network Freeze",
163
- freeze: networkFreeze
164
- };
165
- }
166
- if (hasTransactionType(transaction, "systemDelete")) {
167
- const systemDelete = {};
168
- if (tx._fileId) {
169
- systemDelete.fileId = tx._fileId.toString();
170
- } else if (tx._contractId) {
171
- systemDelete.contractId = tx._contractId.toString();
172
- }
173
- if (tx._expirationTime) {
174
- systemDelete.expirationTime = tx._expirationTime.toString();
175
- }
176
- return {
177
- type: "SYSTEMDELETE",
178
- humanReadableType: "System Delete",
179
- systemDelete
180
- };
181
- }
182
- if (hasTransactionType(transaction, "systemUndelete")) {
183
- const systemUndelete = {};
184
- if (tx._fileId) {
185
- systemUndelete.fileId = tx._fileId.toString();
186
- } else if (tx._contractId) {
187
- systemUndelete.contractId = tx._contractId.toString();
188
- }
189
- return {
190
- type: "SYSTEMUNDELETE",
191
- humanReadableType: "System Undelete",
192
- systemUndelete
193
- };
194
- }
195
- return {};
196
- } catch (error) {
197
- return {};
198
- }
25
+ if (!options.signer || typeof options.signer.sign !== "function") {
26
+ throw new Error(
27
+ "Ledger authentication requires a Hedera Signer or custom sign function."
28
+ );
199
29
  }
200
- /**
201
- * Parse Network Freeze from protobuf data
202
- */
203
- static parseNetworkFreezeFromProto(body) {
204
- if (!body) return void 0;
205
- const data = {};
206
- if (body.startTime?.seconds) {
207
- data.startTime = `${Long.fromValue(
208
- body.startTime.seconds
209
- ).toString()}.${body.startTime.nanos ?? 0}`;
210
- }
211
- if (body.updateFile) {
212
- data.updateFile = new FileId(
213
- body.updateFile.shardNum ?? 0,
214
- body.updateFile.realmNum ?? 0,
215
- body.updateFile.fileNum ?? 0
216
- ).toString();
217
- }
218
- if (body.fileHash && body.fileHash.length > 0) {
219
- data.fileHash = Buffer.from(body.fileHash).toString("hex");
220
- }
221
- if (body.freezeType !== void 0) {
222
- const freezeTypes = [
223
- "FREEZE_ONLY",
224
- "PREPARE_UPGRADE",
225
- "FREEZE_UPGRADE",
226
- "FREEZE_ABORT"
227
- ];
228
- data.freezeType = freezeTypes[body.freezeType] || "FREEZE_ONLY";
229
- }
230
- return data;
30
+ const payload = Buffer.from(message, "utf8");
31
+ const signatures = await options.signer.sign([payload]);
32
+ const signatureEntry = signatures?.[0];
33
+ if (!signatureEntry) {
34
+ throw new Error("Signer did not return any signatures.");
231
35
  }
232
- /**
233
- * Parse System Delete from protobuf data
234
- */
235
- static parseSystemDeleteFromProto(body) {
236
- if (!body) return void 0;
237
- const data = {};
238
- if (body.fileID) {
239
- data.fileId = new FileId(
240
- body.fileID.shardNum ?? 0,
241
- body.fileID.realmNum ?? 0,
242
- body.fileID.fileNum ?? 0
243
- ).toString();
244
- } else if (body.contractID) {
245
- data.contractId = new ContractId(
246
- body.contractID.shardNum ?? 0,
247
- body.contractID.realmNum ?? 0,
248
- body.contractID.contractNum ?? 0
249
- ).toString();
250
- }
251
- if (body.expirationTime?.seconds) {
252
- data.expirationTime = Long.fromValue(
253
- body.expirationTime.seconds
254
- ).toString();
36
+ let derivedPublicKey;
37
+ if (signatureEntry.publicKey) {
38
+ derivedPublicKey = signatureEntry.publicKey.toString();
39
+ } else if (typeof options.signer.getAccountKey === "function") {
40
+ const accountKey = await options.signer.getAccountKey();
41
+ if (accountKey && typeof accountKey.toString === "function") {
42
+ derivedPublicKey = accountKey.toString();
255
43
  }
256
- return data;
257
44
  }
258
- /**
259
- * Parse System Undelete from protobuf data
260
- */
261
- static parseSystemUndeleteFromProto(body) {
262
- if (!body) return void 0;
263
- const data = {};
264
- if (body.fileID) {
265
- data.fileId = new FileId(
266
- body.fileID.shardNum ?? 0,
267
- body.fileID.realmNum ?? 0,
268
- body.fileID.fileNum ?? 0
269
- ).toString();
270
- } else if (body.contractID) {
271
- data.contractId = new ContractId(
272
- body.contractID.shardNum ?? 0,
273
- body.contractID.realmNum ?? 0,
274
- body.contractID.contractNum ?? 0
275
- ).toString();
276
- }
277
- return data;
45
+ return {
46
+ signature: Buffer.from(signatureEntry.signature).toString("base64"),
47
+ signatureKind: "raw",
48
+ publicKey: derivedPublicKey
49
+ };
50
+ }
51
+ async function createLedgerChallenge(client, payload) {
52
+ const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
53
+ const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
54
+ const raw = await client.requestJson("/auth/ledger/challenge", {
55
+ method: "POST",
56
+ headers: { "content-type": "application/json" },
57
+ body: {
58
+ accountId: payload.accountId,
59
+ network
60
+ }
61
+ });
62
+ return client.parseWithSchema(
63
+ raw,
64
+ ledgerChallengeResponseSchema,
65
+ "ledger challenge response"
66
+ );
67
+ }
68
+ async function verifyLedgerChallenge(client, payload) {
69
+ const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
70
+ const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
71
+ const body = {
72
+ challengeId: payload.challengeId,
73
+ accountId: payload.accountId,
74
+ network,
75
+ signature: payload.signature
76
+ };
77
+ if (payload.signatureKind) {
78
+ body.signatureKind = payload.signatureKind;
278
79
  }
279
- /**
280
- * Parse Node Create from protobuf data
281
- */
282
- static parseNodeCreateFromProto(body) {
283
- if (!body) return void 0;
284
- const data = {};
285
- if (body.nodeId !== void 0) {
286
- data.nodeId = Long.fromValue(body.nodeId).toNumber();
287
- }
288
- return data;
80
+ if (payload.publicKey) {
81
+ body.publicKey = payload.publicKey;
289
82
  }
290
- /**
291
- * Parse Node Update from protobuf data
292
- */
293
- static parseNodeUpdateFromProto(body) {
294
- if (!body) return void 0;
295
- const data = {};
296
- if (body.nodeId !== void 0) {
297
- data.nodeId = Long.fromValue(body.nodeId).toNumber();
298
- }
299
- return data;
83
+ if (typeof payload.expiresInMinutes === "number") {
84
+ body.expiresInMinutes = payload.expiresInMinutes;
300
85
  }
301
- /**
302
- * Parse Node Delete from protobuf data
303
- */
304
- static parseNodeDeleteFromProto(body) {
305
- if (!body) return void 0;
306
- const data = {};
307
- if (body.nodeId !== void 0) {
308
- data.nodeId = Long.fromValue(body.nodeId).toNumber();
86
+ const raw = await client.requestJson("/auth/ledger/verify", {
87
+ method: "POST",
88
+ headers: { "content-type": "application/json" },
89
+ body
90
+ });
91
+ const result = client.parseWithSchema(
92
+ raw,
93
+ ledgerVerifyResponseSchema,
94
+ "ledger verification response"
95
+ );
96
+ client.setLedgerApiKey(result.key);
97
+ return result;
98
+ }
99
+ async function authenticateWithLedger(client, options) {
100
+ const challenge = await client.createLedgerChallenge({
101
+ accountId: options.accountId,
102
+ network: options.network
103
+ });
104
+ const signed = await resolveLedgerAuthSignature(challenge.message, options);
105
+ const verification = await client.verifyLedgerChallenge({
106
+ challengeId: challenge.challengeId,
107
+ accountId: options.accountId,
108
+ network: options.network,
109
+ signature: signed.signature,
110
+ signatureKind: signed.signatureKind,
111
+ publicKey: signed.publicKey,
112
+ expiresInMinutes: options.expiresInMinutes
113
+ });
114
+ return verification;
115
+ }
116
+ async function authenticateWithLedgerCredentials(client, options) {
117
+ const {
118
+ accountId,
119
+ network,
120
+ signer,
121
+ sign,
122
+ hederaPrivateKey,
123
+ evmPrivateKey,
124
+ expiresInMinutes,
125
+ setAccountHeader = true,
126
+ label,
127
+ logger
128
+ } = options;
129
+ const resolvedNetwork = canonicalizeLedgerNetwork(network);
130
+ const labelSuffix = label ? ` for ${label}` : "";
131
+ const networkPayload = resolvedNetwork.canonical;
132
+ const authOptions = {
133
+ accountId,
134
+ network: networkPayload,
135
+ expiresInMinutes
136
+ };
137
+ if (sign) {
138
+ authOptions.sign = sign;
139
+ } else if (signer) {
140
+ authOptions.signer = signer;
141
+ } else if (hederaPrivateKey) {
142
+ if (resolvedNetwork.kind !== "hedera" || !resolvedNetwork.hederaNetwork) {
143
+ throw new Error(
144
+ "hederaPrivateKey can only be used with hedera:mainnet or hedera:testnet networks."
145
+ );
309
146
  }
310
- return data;
311
- }
312
- static parseUtilPrng(body) {
313
- if (!body) return void 0;
314
- const data = {};
315
- if (body.range && body.range !== 0) {
316
- data.range = body.range;
147
+ authOptions.signer = await createPrivateKeySignerAsync({
148
+ accountId,
149
+ privateKey: hederaPrivateKey,
150
+ network: resolvedNetwork.hederaNetwork
151
+ });
152
+ } else if (evmPrivateKey) {
153
+ if (resolvedNetwork.kind !== "evm") {
154
+ throw new Error(
155
+ "evmPrivateKey can only be used with CAIP-2 EVM networks (eip155:<chainId>)."
156
+ );
317
157
  }
318
- return data;
319
- }
320
- static parseFreeze(body) {
321
- return this.parseNetworkFreezeFromProto(body);
158
+ const formattedKey = evmPrivateKey.startsWith("0x") ? evmPrivateKey : `0x${evmPrivateKey}`;
159
+ const account = await loadViemAccount(formattedKey);
160
+ authOptions.sign = async (message) => ({
161
+ signature: await account.signMessage({ message }),
162
+ signatureKind: "evm",
163
+ publicKey: account.publicKey
164
+ });
165
+ } else {
166
+ throw new Error(
167
+ "Provide a signer, sign function, hederaPrivateKey, or evmPrivateKey to authenticate with the ledger."
168
+ );
322
169
  }
323
- /**
324
- * Parse Utility/System Service transaction from Transaction object
325
- * This is the unified entry point that delegates to the comprehensive parsing logic
326
- */
327
- static parseFromTransactionObject(transaction) {
328
- return this.parseUtilTransaction(transaction);
170
+ logger?.info?.(
171
+ `Authenticating ledger account ${accountId} (${resolvedNetwork.canonical})${labelSuffix}...`
172
+ );
173
+ const verification = await client.authenticateWithLedger(authOptions);
174
+ if (setAccountHeader) {
175
+ client.setDefaultHeader("x-account-id", verification.accountId);
329
176
  }
177
+ logger?.info?.(
178
+ `Ledger authentication complete${labelSuffix}. Issued key prefix: ${verification.apiKey.prefix}…${verification.apiKey.lastFour}`
179
+ );
180
+ return verification;
330
181
  }
331
182
  export {
332
- UtilParser
183
+ authenticateWithLedger,
184
+ authenticateWithLedgerCredentials,
185
+ createLedgerChallenge,
186
+ verifyLedgerChallenge
333
187
  };
334
188
  //# sourceMappingURL=standards-sdk.es158.js.map