@hashgraphonline/standards-sdk 0.1.168 → 0.1.169

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 (276) hide show
  1. package/README.md +1 -0
  2. package/dist/browser/hcs-11/client.d.ts.map +1 -1
  3. package/dist/browser/hcs-21/sdk.d.ts.map +1 -1
  4. package/dist/browser/hcs-27/base-client.d.ts +41 -0
  5. package/dist/browser/hcs-27/base-client.d.ts.map +1 -0
  6. package/dist/browser/hcs-27/index.d.ts +6 -0
  7. package/dist/browser/hcs-27/index.d.ts.map +1 -0
  8. package/dist/browser/hcs-27/memos.d.ts +5 -0
  9. package/dist/browser/hcs-27/memos.d.ts.map +1 -0
  10. package/dist/browser/hcs-27/merkle.d.ts +23 -0
  11. package/dist/browser/hcs-27/merkle.d.ts.map +1 -0
  12. package/dist/browser/hcs-27/sdk.d.ts +23 -0
  13. package/dist/browser/hcs-27/sdk.d.ts.map +1 -0
  14. package/dist/browser/hcs-27/types.d.ts +1611 -0
  15. package/dist/browser/hcs-27/types.d.ts.map +1 -0
  16. package/dist/browser/index.d.ts +1 -0
  17. package/dist/browser/index.d.ts.map +1 -1
  18. package/dist/browser/standards-sdk.browser.js +29 -5
  19. package/dist/browser/standards-sdk.browser.js.map +1 -1
  20. package/dist/browser/utils/key-type-detector.d.ts.map +1 -1
  21. package/dist/cjs/hcs-11/client.d.ts.map +1 -1
  22. package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
  23. package/dist/cjs/hcs-27/base-client.d.ts +41 -0
  24. package/dist/cjs/hcs-27/base-client.d.ts.map +1 -0
  25. package/dist/cjs/hcs-27/index.d.ts +6 -0
  26. package/dist/cjs/hcs-27/index.d.ts.map +1 -0
  27. package/dist/cjs/hcs-27/memos.d.ts +5 -0
  28. package/dist/cjs/hcs-27/memos.d.ts.map +1 -0
  29. package/dist/cjs/hcs-27/merkle.d.ts +23 -0
  30. package/dist/cjs/hcs-27/merkle.d.ts.map +1 -0
  31. package/dist/cjs/hcs-27/sdk.d.ts +23 -0
  32. package/dist/cjs/hcs-27/sdk.d.ts.map +1 -0
  33. package/dist/cjs/hcs-27/types.d.ts +1611 -0
  34. package/dist/cjs/hcs-27/types.d.ts.map +1 -0
  35. package/dist/cjs/index.d.ts +1 -0
  36. package/dist/cjs/index.d.ts.map +1 -1
  37. package/dist/cjs/standards-sdk.cjs +2 -2
  38. package/dist/cjs/standards-sdk.cjs.map +1 -1
  39. package/dist/cjs/utils/key-type-detector.d.ts.map +1 -1
  40. package/dist/es/hcs-11/client.d.ts.map +1 -1
  41. package/dist/es/hcs-21/sdk.d.ts.map +1 -1
  42. package/dist/es/hcs-27/base-client.d.ts +41 -0
  43. package/dist/es/hcs-27/base-client.d.ts.map +1 -0
  44. package/dist/es/hcs-27/index.d.ts +6 -0
  45. package/dist/es/hcs-27/index.d.ts.map +1 -0
  46. package/dist/es/hcs-27/memos.d.ts +5 -0
  47. package/dist/es/hcs-27/memos.d.ts.map +1 -0
  48. package/dist/es/hcs-27/merkle.d.ts +23 -0
  49. package/dist/es/hcs-27/merkle.d.ts.map +1 -0
  50. package/dist/es/hcs-27/sdk.d.ts +23 -0
  51. package/dist/es/hcs-27/sdk.d.ts.map +1 -0
  52. package/dist/es/hcs-27/types.d.ts +1611 -0
  53. package/dist/es/hcs-27/types.d.ts.map +1 -0
  54. package/dist/es/index.d.ts +1 -0
  55. package/dist/es/index.d.ts.map +1 -1
  56. package/dist/es/standards-sdk.es.js +67 -38
  57. package/dist/es/standards-sdk.es.js.map +1 -1
  58. package/dist/es/standards-sdk.es101.js +2 -2
  59. package/dist/es/standards-sdk.es103.js +2 -2
  60. package/dist/es/standards-sdk.es104.js +1 -1
  61. package/dist/es/standards-sdk.es106.js +1 -1
  62. package/dist/es/standards-sdk.es108.js +2 -2
  63. package/dist/es/standards-sdk.es11.js +1 -1
  64. package/dist/es/standards-sdk.es110.js +1 -1
  65. package/dist/es/standards-sdk.es111.js +2 -2
  66. package/dist/es/standards-sdk.es112.js +151 -234
  67. package/dist/es/standards-sdk.es112.js.map +1 -1
  68. package/dist/es/standards-sdk.es113.js +20 -471
  69. package/dist/es/standards-sdk.es113.js.map +1 -1
  70. package/dist/es/standards-sdk.es114.js +263 -104
  71. package/dist/es/standards-sdk.es114.js.map +1 -1
  72. package/dist/es/standards-sdk.es115.js +167 -138
  73. package/dist/es/standards-sdk.es115.js.map +1 -1
  74. package/dist/es/standards-sdk.es116.js +315 -29
  75. package/dist/es/standards-sdk.es116.js.map +1 -1
  76. package/dist/es/standards-sdk.es117.js +250 -10
  77. package/dist/es/standards-sdk.es117.js.map +1 -1
  78. package/dist/es/standards-sdk.es118.js +448 -152
  79. package/dist/es/standards-sdk.es118.js.map +1 -1
  80. package/dist/es/standards-sdk.es119.js +101 -25
  81. package/dist/es/standards-sdk.es119.js.map +1 -1
  82. package/dist/es/standards-sdk.es12.js +1 -1
  83. package/dist/es/standards-sdk.es120.js +155 -17
  84. package/dist/es/standards-sdk.es120.js.map +1 -1
  85. package/dist/es/standards-sdk.es121.js +29 -155
  86. package/dist/es/standards-sdk.es121.js.map +1 -1
  87. package/dist/es/standards-sdk.es122.js +9 -200
  88. package/dist/es/standards-sdk.es122.js.map +1 -1
  89. package/dist/es/standards-sdk.es123.js +146 -754
  90. package/dist/es/standards-sdk.es123.js.map +1 -1
  91. package/dist/es/standards-sdk.es124.js +27 -11
  92. package/dist/es/standards-sdk.es124.js.map +1 -1
  93. package/dist/es/standards-sdk.es125.js +19 -564
  94. package/dist/es/standards-sdk.es125.js.map +1 -1
  95. package/dist/es/standards-sdk.es126.js +140 -582
  96. package/dist/es/standards-sdk.es126.js.map +1 -1
  97. package/dist/es/standards-sdk.es127.js +202 -12
  98. package/dist/es/standards-sdk.es127.js.map +1 -1
  99. package/dist/es/standards-sdk.es128.js +790 -2
  100. package/dist/es/standards-sdk.es128.js.map +1 -1
  101. package/dist/es/standards-sdk.es129.js +10 -84
  102. package/dist/es/standards-sdk.es129.js.map +1 -1
  103. package/dist/es/standards-sdk.es13.js +1 -1
  104. package/dist/es/standards-sdk.es130.js +567 -40
  105. package/dist/es/standards-sdk.es130.js.map +1 -1
  106. package/dist/es/standards-sdk.es131.js +626 -2
  107. package/dist/es/standards-sdk.es131.js.map +1 -1
  108. package/dist/es/standards-sdk.es132.js +12 -234
  109. package/dist/es/standards-sdk.es132.js.map +1 -1
  110. package/dist/es/standards-sdk.es133.js +2 -1140
  111. package/dist/es/standards-sdk.es133.js.map +1 -1
  112. package/dist/es/standards-sdk.es134.js +73 -292
  113. package/dist/es/standards-sdk.es134.js.map +1 -1
  114. package/dist/es/standards-sdk.es135.js +36 -418
  115. package/dist/es/standards-sdk.es135.js.map +1 -1
  116. package/dist/es/standards-sdk.es136.js +2 -355
  117. package/dist/es/standards-sdk.es136.js.map +1 -1
  118. package/dist/es/standards-sdk.es137.js +198 -1079
  119. package/dist/es/standards-sdk.es137.js.map +1 -1
  120. package/dist/es/standards-sdk.es138.js +1107 -175
  121. package/dist/es/standards-sdk.es138.js.map +1 -1
  122. package/dist/es/standards-sdk.es139.js +218 -1479
  123. package/dist/es/standards-sdk.es139.js.map +1 -1
  124. package/dist/es/standards-sdk.es14.js +1 -1
  125. package/dist/es/standards-sdk.es140.js +422 -1500
  126. package/dist/es/standards-sdk.es140.js.map +1 -1
  127. package/dist/es/standards-sdk.es141.js +351 -13
  128. package/dist/es/standards-sdk.es141.js.map +1 -1
  129. package/dist/es/standards-sdk.es142.js +1102 -73
  130. package/dist/es/standards-sdk.es142.js.map +1 -1
  131. package/dist/es/standards-sdk.es143.js +203 -76
  132. package/dist/es/standards-sdk.es143.js.map +1 -1
  133. package/dist/es/standards-sdk.es144.js +1459 -830
  134. package/dist/es/standards-sdk.es144.js.map +1 -1
  135. package/dist/es/standards-sdk.es145.js +1499 -59
  136. package/dist/es/standards-sdk.es145.js.map +1 -1
  137. package/dist/es/standards-sdk.es146.js +14 -156
  138. package/dist/es/standards-sdk.es146.js.map +1 -1
  139. package/dist/es/standards-sdk.es147.js +87 -7
  140. package/dist/es/standards-sdk.es147.js.map +1 -1
  141. package/dist/es/standards-sdk.es148.js +74 -79
  142. package/dist/es/standards-sdk.es148.js.map +1 -1
  143. package/dist/es/standards-sdk.es149.js +934 -61
  144. package/dist/es/standards-sdk.es149.js.map +1 -1
  145. package/dist/es/standards-sdk.es15.js +1 -1
  146. package/dist/es/standards-sdk.es150.js +60 -30
  147. package/dist/es/standards-sdk.es150.js.map +1 -1
  148. package/dist/es/standards-sdk.es151.js +159 -34
  149. package/dist/es/standards-sdk.es151.js.map +1 -1
  150. package/dist/es/standards-sdk.es152.js +7 -48
  151. package/dist/es/standards-sdk.es152.js.map +1 -1
  152. package/dist/es/standards-sdk.es153.js +70 -122
  153. package/dist/es/standards-sdk.es153.js.map +1 -1
  154. package/dist/es/standards-sdk.es154.js +58 -35
  155. package/dist/es/standards-sdk.es154.js.map +1 -1
  156. package/dist/es/standards-sdk.es155.js +30 -56
  157. package/dist/es/standards-sdk.es155.js.map +1 -1
  158. package/dist/es/standards-sdk.es156.js +34 -84
  159. package/dist/es/standards-sdk.es156.js.map +1 -1
  160. package/dist/es/standards-sdk.es157.js +48 -81
  161. package/dist/es/standards-sdk.es157.js.map +1 -1
  162. package/dist/es/standards-sdk.es158.js +124 -186
  163. package/dist/es/standards-sdk.es158.js.map +1 -1
  164. package/dist/es/standards-sdk.es159.js +34 -12474
  165. package/dist/es/standards-sdk.es159.js.map +1 -1
  166. package/dist/es/standards-sdk.es16.js +5 -5
  167. package/dist/es/standards-sdk.es160.js +12477 -12
  168. package/dist/es/standards-sdk.es160.js.map +1 -1
  169. package/dist/es/standards-sdk.es161.js +15 -71
  170. package/dist/es/standards-sdk.es161.js.map +1 -1
  171. package/dist/es/standards-sdk.es162.js +48 -542
  172. package/dist/es/standards-sdk.es162.js.map +1 -1
  173. package/dist/es/standards-sdk.es163.js +72 -160
  174. package/dist/es/standards-sdk.es163.js.map +1 -1
  175. package/dist/es/standards-sdk.es164.js +71 -312
  176. package/dist/es/standards-sdk.es164.js.map +1 -1
  177. package/dist/es/standards-sdk.es165.js +187 -333
  178. package/dist/es/standards-sdk.es165.js.map +1 -1
  179. package/dist/es/standards-sdk.es166.js +538 -441
  180. package/dist/es/standards-sdk.es166.js.map +1 -1
  181. package/dist/es/standards-sdk.es167.js +65 -323
  182. package/dist/es/standards-sdk.es167.js.map +1 -1
  183. package/dist/es/standards-sdk.es168.js +162 -66
  184. package/dist/es/standards-sdk.es168.js.map +1 -1
  185. package/dist/es/standards-sdk.es169.js +310 -160
  186. package/dist/es/standards-sdk.es169.js.map +1 -1
  187. package/dist/es/standards-sdk.es170.js +336 -212
  188. package/dist/es/standards-sdk.es170.js.map +1 -1
  189. package/dist/es/standards-sdk.es171.js +437 -223
  190. package/dist/es/standards-sdk.es171.js.map +1 -1
  191. package/dist/es/standards-sdk.es172.js +324 -112
  192. package/dist/es/standards-sdk.es172.js.map +1 -1
  193. package/dist/es/standards-sdk.es173.js +65 -115
  194. package/dist/es/standards-sdk.es173.js.map +1 -1
  195. package/dist/es/standards-sdk.es174.js +151 -140
  196. package/dist/es/standards-sdk.es174.js.map +1 -1
  197. package/dist/es/standards-sdk.es175.js +193 -156
  198. package/dist/es/standards-sdk.es175.js.map +1 -1
  199. package/dist/es/standards-sdk.es176.js +221 -121
  200. package/dist/es/standards-sdk.es176.js.map +1 -1
  201. package/dist/es/standards-sdk.es177.js +81 -293
  202. package/dist/es/standards-sdk.es177.js.map +1 -1
  203. package/dist/es/standards-sdk.es178.js +114 -247
  204. package/dist/es/standards-sdk.es178.js.map +1 -1
  205. package/dist/es/standards-sdk.es179.js +119 -110
  206. package/dist/es/standards-sdk.es179.js.map +1 -1
  207. package/dist/es/standards-sdk.es18.js +12 -12
  208. package/dist/es/standards-sdk.es180.js +188 -0
  209. package/dist/es/standards-sdk.es180.js.map +1 -0
  210. package/dist/es/standards-sdk.es181.js +142 -0
  211. package/dist/es/standards-sdk.es181.js.map +1 -0
  212. package/dist/es/standards-sdk.es182.js +334 -0
  213. package/dist/es/standards-sdk.es182.js.map +1 -0
  214. package/dist/es/standards-sdk.es183.js +262 -0
  215. package/dist/es/standards-sdk.es183.js.map +1 -0
  216. package/dist/es/standards-sdk.es184.js +155 -0
  217. package/dist/es/standards-sdk.es184.js.map +1 -0
  218. package/dist/es/standards-sdk.es19.js +9 -9
  219. package/dist/es/standards-sdk.es2.js +2 -2
  220. package/dist/es/standards-sdk.es20.js +1 -1
  221. package/dist/es/standards-sdk.es21.js +1 -1
  222. package/dist/es/standards-sdk.es22.js +1 -1
  223. package/dist/es/standards-sdk.es23.js +1 -1
  224. package/dist/es/standards-sdk.es24.js +1 -1
  225. package/dist/es/standards-sdk.es25.js +1 -1
  226. package/dist/es/standards-sdk.es26.js +1 -1
  227. package/dist/es/standards-sdk.es27.js +12 -12
  228. package/dist/es/standards-sdk.es27.js.map +1 -1
  229. package/dist/es/standards-sdk.es30.js +2 -2
  230. package/dist/es/standards-sdk.es31.js +4 -4
  231. package/dist/es/standards-sdk.es32.js +1 -1
  232. package/dist/es/standards-sdk.es35.js +6 -6
  233. package/dist/es/standards-sdk.es36.js +4 -4
  234. package/dist/es/standards-sdk.es37.js +2 -2
  235. package/dist/es/standards-sdk.es38.js +2 -2
  236. package/dist/es/standards-sdk.es39.js +1 -1
  237. package/dist/es/standards-sdk.es4.js +2 -2
  238. package/dist/es/standards-sdk.es40.js +1 -1
  239. package/dist/es/standards-sdk.es41.js +2 -2
  240. package/dist/es/standards-sdk.es46.js +1 -1
  241. package/dist/es/standards-sdk.es5.js +2 -2
  242. package/dist/es/standards-sdk.es51.js +1 -1
  243. package/dist/es/standards-sdk.es53.js +1 -1
  244. package/dist/es/standards-sdk.es56.js +2 -2
  245. package/dist/es/standards-sdk.es59.js +1 -1
  246. package/dist/es/standards-sdk.es6.js +2 -2
  247. package/dist/es/standards-sdk.es60.js +1 -1
  248. package/dist/es/standards-sdk.es62.js +1 -1
  249. package/dist/es/standards-sdk.es63.js +2 -2
  250. package/dist/es/standards-sdk.es64.js +1 -1
  251. package/dist/es/standards-sdk.es65.js +1 -1
  252. package/dist/es/standards-sdk.es66.js +1 -1
  253. package/dist/es/standards-sdk.es67.js +7 -7
  254. package/dist/es/standards-sdk.es69.js +1 -1
  255. package/dist/es/standards-sdk.es7.js +1 -1
  256. package/dist/es/standards-sdk.es71.js +2 -2
  257. package/dist/es/standards-sdk.es72.js +3 -3
  258. package/dist/es/standards-sdk.es75.js +5 -5
  259. package/dist/es/standards-sdk.es76.js +3 -3
  260. package/dist/es/standards-sdk.es77.js +2 -2
  261. package/dist/es/standards-sdk.es78.js +1 -1
  262. package/dist/es/standards-sdk.es81.js +2 -2
  263. package/dist/es/standards-sdk.es83.js +2 -2
  264. package/dist/es/standards-sdk.es84.js +4 -4
  265. package/dist/es/standards-sdk.es85.js +1 -1
  266. package/dist/es/standards-sdk.es88.js +1 -1
  267. package/dist/es/standards-sdk.es89.js +2 -2
  268. package/dist/es/standards-sdk.es9.js +2 -2
  269. package/dist/es/standards-sdk.es90.js +4 -4
  270. package/dist/es/standards-sdk.es90.js.map +1 -1
  271. package/dist/es/standards-sdk.es94.js +3 -3
  272. package/dist/es/standards-sdk.es96.js +2 -2
  273. package/dist/es/standards-sdk.es98.js +1 -1
  274. package/dist/es/standards-sdk.es99.js +3 -3
  275. package/dist/es/utils/key-type-detector.d.ts.map +1 -1
  276. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es164.js","sources":["../../src/utils/parsers/file-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { Long, Transaction } from '@hashgraph/sdk';\nimport {\n FileCreateData,\n FileAppendData,\n FileUpdateData,\n FileDeleteData,\n} from '../transaction-parser-types';\nimport {\n parseKey,\n extractTransactionBody,\n hasTransactionType,\n} from './parser-utils';\nimport { Buffer } from 'buffer';\nimport { FileId } from '@hashgraph/sdk';\n\n/**\n * File Service Parser\n *\n * Handles parsing for all file-related transaction types including:\n * - File creation, updates, append, and deletion\n * - Proper dual-branch parsing (regular vs signed transactions)\n * - Comprehensive protobuf extraction\n * - Enhanced content handling with type detection\n */\nexport class FileParser {\n /**\n * Parse File Service transaction using unified dual-branch approach\n * This handles both regular transactions and signed transaction variants\n */\n static parseFileTransaction(\n transaction: Transaction,\n originalBytes?: Uint8Array,\n ): {\n type?: string;\n humanReadableType?: string;\n fileCreate?: FileCreateData;\n fileAppend?: FileAppendData;\n fileUpdate?: FileUpdateData;\n fileDelete?: FileDeleteData;\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 { type: 'UNKNOWN', humanReadableType: 'Unknown File Transaction' };\n }\n }\n\n /**\n * Parse file transaction from protobuf TransactionBody\n * Handles all file 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.fileCreate) {\n const fileCreate = this.parseFileCreate(txBody.fileCreate);\n if (fileCreate) {\n return {\n type: 'FILECREATE',\n humanReadableType: 'File Create',\n fileCreate,\n };\n }\n }\n\n if (txBody.fileAppend) {\n const fileAppend = this.parseFileAppend(txBody.fileAppend);\n if (fileAppend) {\n return {\n type: 'FILEAPPEND',\n humanReadableType: 'File Append',\n fileAppend,\n };\n }\n }\n\n if (txBody.fileUpdate) {\n const fileUpdate = this.parseFileUpdate(txBody.fileUpdate);\n if (fileUpdate) {\n return {\n type: 'FILEUPDATE',\n humanReadableType: 'File Update',\n fileUpdate,\n };\n }\n }\n\n if (txBody.fileDelete) {\n const fileDelete = this.parseFileDelete(txBody.fileDelete);\n if (fileDelete) {\n return {\n type: 'FILEDELETE',\n humanReadableType: 'File Delete',\n fileDelete,\n };\n }\n }\n\n return {};\n }\n\n /**\n * Extract file 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 _fileId?: { toString(): string };\n _contents?: Uint8Array;\n _keys?: unknown[];\n _expirationTime?: { toString(): string };\n _memo?: string;\n constructor?: { name?: string };\n };\n\n if (hasTransactionType(transaction, 'fileCreate')) {\n const fileCreate: FileCreateData = {};\n\n if (tx._contents) {\n const contentInfo = this.analyzeContent(tx._contents);\n fileCreate.contents = contentInfo.encoded;\n if (contentInfo.contentType) {\n fileCreate.contentType = contentInfo.contentType;\n }\n if (contentInfo.size) {\n fileCreate.contentSize = contentInfo.size;\n }\n }\n\n if (tx._keys && tx._keys.length > 0) {\n const keyList: proto.IKeyList = {\n keys: tx._keys as unknown as proto.IKey[],\n };\n fileCreate.keys = parseKey({ keyList });\n }\n\n if (tx._expirationTime) {\n fileCreate.expirationTime = tx._expirationTime.toString();\n }\n\n if (tx._memo) {\n fileCreate.memo = tx._memo;\n }\n\n return {\n type: 'FILECREATE',\n humanReadableType: 'File Create',\n fileCreate,\n };\n }\n\n if (hasTransactionType(transaction, 'fileAppend')) {\n const fileAppend: FileAppendData = {\n fileId: tx._fileId.toString(),\n };\n\n if (tx._contents) {\n const contentInfo = this.analyzeContent(tx._contents);\n fileAppend.contents = contentInfo.encoded;\n if (contentInfo.size) {\n fileAppend.contentSize = contentInfo.size;\n }\n }\n\n return {\n type: 'FILEAPPEND',\n humanReadableType: 'File Append',\n fileAppend,\n };\n }\n\n if (hasTransactionType(transaction, 'fileUpdate')) {\n const fileUpdate: FileUpdateData = {\n fileId: tx._fileId.toString(),\n };\n\n if (tx._contents) {\n const contentInfo = this.analyzeContent(tx._contents);\n fileUpdate.contents = contentInfo.encoded;\n if (contentInfo.size) {\n fileUpdate.contentSize = contentInfo.size;\n }\n }\n\n if (tx._keys && tx._keys.length > 0) {\n const keyList: proto.IKeyList = {\n keys: tx._keys as unknown as proto.IKey[],\n };\n fileUpdate.keys = parseKey({ keyList });\n }\n\n if (tx._expirationTime) {\n fileUpdate.expirationTime = tx._expirationTime.toString();\n }\n\n if (tx._memo) {\n fileUpdate.memo = tx._memo;\n }\n\n return {\n type: 'FILEUPDATE',\n humanReadableType: 'File Update',\n fileUpdate,\n };\n }\n\n if (hasTransactionType(transaction, 'fileDelete')) {\n const fileDelete: FileDeleteData = {\n fileId: tx._fileId.toString(),\n };\n\n return {\n type: 'FILEDELETE',\n humanReadableType: 'File Delete',\n fileDelete,\n };\n }\n\n return {};\n } catch (error) {\n return {};\n }\n }\n\n /**\n * Enhanced content analysis with type detection and metadata\n */\n private static analyzeContent(contents: Uint8Array): {\n encoded: string;\n contentType?: string;\n size: number;\n } {\n const size = contents.length;\n const contentBuffer = Buffer.from(contents);\n\n let contentType: string | undefined;\n\n if (size >= 4) {\n const header = contentBuffer.subarray(0, 4);\n const headerHex = header.toString('hex');\n\n const signatures: Record<string, string> = {\n '89504e47': 'image/png',\n ffd8ffe0: 'image/jpeg',\n ffd8ffe1: 'image/jpeg',\n '47494638': 'image/gif',\n '25504446': 'application/pdf',\n '504b0304': 'application/zip',\n '7f454c46': 'application/x-executable',\n d0cf11e0: 'application/msoffice',\n };\n\n contentType = signatures[headerHex.toLowerCase()];\n }\n\n if (!contentType) {\n try {\n const textContent = contentBuffer.toString('utf8');\n const hasControlChars = /[\\x00-\\x08\\x0B\\x0E-\\x1F\\x7F]/.test(\n textContent,\n );\n const hasReplacementChars = textContent.includes('\\uFFFD');\n\n if (!hasControlChars && !hasReplacementChars) {\n if (\n textContent.trim().startsWith('{') &&\n textContent.trim().endsWith('}')\n ) {\n contentType = 'application/json';\n } else if (\n textContent.includes('<?xml') ||\n textContent.includes('<html')\n ) {\n contentType = 'text/xml';\n } else if (textContent.includes('<!DOCTYPE html')) {\n contentType = 'text/html';\n } else {\n contentType = 'text/plain';\n }\n } else {\n contentType = 'application/octet-stream';\n }\n } catch {\n contentType = 'application/octet-stream';\n }\n }\n\n let encoded: string;\n if (\n contentType?.startsWith('text/') ||\n contentType === 'application/json'\n ) {\n try {\n encoded = contentBuffer.toString('utf8');\n if (\n encoded.includes('\\uFFFD') ||\n /[\\x00-\\x08\\x0B\\x0E-\\x1F\\x7F]/.test(encoded)\n ) {\n encoded = contentBuffer.toString('base64');\n }\n } catch {\n encoded = contentBuffer.toString('base64');\n }\n } else {\n encoded = contentBuffer.toString('base64');\n }\n\n return {\n encoded,\n contentType,\n size,\n };\n }\n static parseFileCreate(\n body: proto.IFileCreateTransactionBody,\n ): FileCreateData | undefined {\n if (!body) return undefined;\n const data: FileCreateData = {};\n if (body.expirationTime?.seconds) {\n data.expirationTime = `${Long.fromValue(\n body.expirationTime.seconds,\n ).toString()}.${body.expirationTime.nanos}`;\n }\n if (body.keys) {\n data.keys = parseKey({ keyList: body.keys });\n }\n if (body.contents) {\n data.contents = Buffer.from(body.contents).toString('base64');\n }\n if (body.memo) {\n data.memo = body.memo;\n }\n return data;\n }\n\n static parseFileAppend(\n body: proto.IFileAppendTransactionBody,\n ): FileAppendData | undefined {\n if (!body) return undefined;\n const data: FileAppendData = {};\n if (body.fileID) {\n data.fileId = `${body.fileID.shardNum ?? 0}.${\n body.fileID.realmNum ?? 0\n }.${body.fileID.fileNum ?? 0}`;\n }\n if (body.contents) {\n data.contents = Buffer.from(body.contents).toString('base64');\n }\n return data;\n }\n\n static parseFileUpdate(\n body: proto.IFileUpdateTransactionBody,\n ): FileUpdateData | undefined {\n if (!body) return undefined;\n const data: FileUpdateData = {};\n if (body.fileID) {\n data.fileId = `${body.fileID.shardNum ?? 0}.${\n body.fileID.realmNum ?? 0\n }.${body.fileID.fileNum ?? 0}`;\n }\n if (body.expirationTime?.seconds) {\n data.expirationTime = `${Long.fromValue(\n body.expirationTime.seconds,\n ).toString()}.${body.expirationTime.nanos}`;\n }\n if (body.keys) {\n data.keys = parseKey({ keyList: body.keys });\n }\n if (body.contents) {\n data.contents = Buffer.from(body.contents).toString('base64');\n }\n if (body.memo?.value !== undefined) {\n data.memo = body.memo.value;\n }\n return data;\n }\n\n static parseFileDelete(\n body: proto.IFileDeleteTransactionBody,\n ): FileDeleteData | undefined {\n if (!body) return undefined;\n const data: FileDeleteData = {};\n if (body.fileID) {\n data.fileId = `${body.fileID.shardNum ?? 0}.${\n body.fileID.realmNum ?? 0\n }.${body.fileID.fileNum ?? 0}`;\n }\n return data;\n }\n\n /**\n * Parse File 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.parseFileTransaction(transaction);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es164.js","sources":["../../src/hcs-14/resolvers/profile-utils.ts"],"sourcesContent":["import type { ParsedHcs14Did } from '../types';\n\nconst orderedParamKeys = [\n 'uid',\n 'registry',\n 'proto',\n 'nativeId',\n 'domain',\n 'src',\n] as const;\n\nconst fqdnLabelRegex = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i;\n\nexport function uaidTargetFromParsed(parsed: ParsedHcs14Did): 'aid' | 'did' {\n return parsed.method === 'aid' ? 'aid' : 'did';\n}\n\nexport function normalizeDomain(value: string): string {\n return value.trim().replace(/\\.$/, '').toLowerCase();\n}\n\nexport function isFqdn(value: string): boolean {\n const normalized = normalizeDomain(value);\n if (!normalized || normalized.length > 253 || !normalized.includes('.')) {\n return false;\n }\n const labels = normalized.split('.');\n for (const label of labels) {\n if (!label || label.length > 63 || !fqdnLabelRegex.test(label)) {\n return false;\n }\n }\n return true;\n}\n\nexport function normalizeTxtValue(value: string): string {\n const trimmed = value.trim();\n if (trimmed.length >= 2 && trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n return trimmed.slice(1, -1);\n }\n const markdownLinkMatch = trimmed.match(/^\\[(.+)\\]\\((.+)\\)$/);\n if (markdownLinkMatch) {\n return markdownLinkMatch[2].trim();\n }\n return trimmed;\n}\n\nexport function parseSemicolonFields(input: string): Record<string, string> {\n const fields: Record<string, string> = {};\n for (const part of input.split(';')) {\n const trimmed = part.trim();\n if (!trimmed) {\n continue;\n }\n const equalsIndex = trimmed.indexOf('=');\n if (equalsIndex <= 0) {\n continue;\n }\n const key = trimmed.slice(0, equalsIndex).trim();\n const value = normalizeTxtValue(trimmed.slice(equalsIndex + 1));\n if (!key || !value) {\n continue;\n }\n fields[key] = value;\n }\n return fields;\n}\n\nexport function buildCanonicalUaid(\n target: 'aid' | 'did',\n id: string,\n params: Record<string, string>,\n): string {\n const entries: string[] = [];\n const usedKeys = new Set<string>();\n\n for (const key of orderedParamKeys) {\n const value = params[key];\n if (value) {\n entries.push(`${key}=${value}`);\n usedKeys.add(key);\n }\n }\n\n const extraKeys = Object.keys(params)\n .filter(key => !usedKeys.has(key) && params[key])\n .sort((a, b) => a.localeCompare(b));\n\n for (const key of extraKeys) {\n entries.push(`${key}=${params[key]}`);\n }\n\n return entries.length > 0\n ? `uaid:${target}:${id};${entries.join(';')}`\n : `uaid:${target}:${id}`;\n}\n\nexport function canonicalizeUaidFromParsed(parsed: ParsedHcs14Did): string {\n return buildCanonicalUaid(\n uaidTargetFromParsed(parsed),\n parsed.id,\n parsed.params,\n );\n}\n"],"names":[],"mappings":"AAEA,MAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,iBAAiB;AAEhB,SAAS,qBAAqB,QAAuC;AAC1E,SAAO,OAAO,WAAW,QAAQ,QAAQ;AAC3C;AAEO,SAAS,gBAAgB,OAAuB;AACrD,SAAO,MAAM,OAAO,QAAQ,OAAO,EAAE,EAAE,YAAA;AACzC;AAEO,SAAS,OAAO,OAAwB;AAC7C,QAAM,aAAa,gBAAgB,KAAK;AACxC,MAAI,CAAC,cAAc,WAAW,SAAS,OAAO,CAAC,WAAW,SAAS,GAAG,GAAG;AACvE,WAAO;AAAA,EACT;AACA,QAAM,SAAS,WAAW,MAAM,GAAG;AACnC,aAAW,SAAS,QAAQ;AAC1B,QAAI,CAAC,SAAS,MAAM,SAAS,MAAM,CAAC,eAAe,KAAK,KAAK,GAAG;AAC9D,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,OAAuB;AACvD,QAAM,UAAU,MAAM,KAAA;AACtB,MAAI,QAAQ,UAAU,KAAK,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;AAC3E,WAAO,QAAQ,MAAM,GAAG,EAAE;AAAA,EAC5B;AACA,QAAM,oBAAoB,QAAQ,MAAM,oBAAoB;AAC5D,MAAI,mBAAmB;AACrB,WAAO,kBAAkB,CAAC,EAAE,KAAA;AAAA,EAC9B;AACA,SAAO;AACT;AAEO,SAAS,qBAAqB,OAAuC;AAC1E,QAAM,SAAiC,CAAA;AACvC,aAAW,QAAQ,MAAM,MAAM,GAAG,GAAG;AACnC,UAAM,UAAU,KAAK,KAAA;AACrB,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,UAAM,cAAc,QAAQ,QAAQ,GAAG;AACvC,QAAI,eAAe,GAAG;AACpB;AAAA,IACF;AACA,UAAM,MAAM,QAAQ,MAAM,GAAG,WAAW,EAAE,KAAA;AAC1C,UAAM,QAAQ,kBAAkB,QAAQ,MAAM,cAAc,CAAC,CAAC;AAC9D,QAAI,CAAC,OAAO,CAAC,OAAO;AAClB;AAAA,IACF;AACA,WAAO,GAAG,IAAI;AAAA,EAChB;AACA,SAAO;AACT;AAEO,SAAS,mBACd,QACA,IACA,QACQ;AACR,QAAM,UAAoB,CAAA;AAC1B,QAAM,+BAAe,IAAA;AAErB,aAAW,OAAO,kBAAkB;AAClC,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,OAAO;AACT,cAAQ,KAAK,GAAG,GAAG,IAAI,KAAK,EAAE;AAC9B,eAAS,IAAI,GAAG;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,YAAY,OAAO,KAAK,MAAM,EACjC,OAAO,CAAA,QAAO,CAAC,SAAS,IAAI,GAAG,KAAK,OAAO,GAAG,CAAC,EAC/C,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAEpC,aAAW,OAAO,WAAW;AAC3B,YAAQ,KAAK,GAAG,GAAG,IAAI,OAAO,GAAG,CAAC,EAAE;AAAA,EACtC;AAEA,SAAO,QAAQ,SAAS,IACpB,QAAQ,MAAM,IAAI,EAAE,IAAI,QAAQ,KAAK,GAAG,CAAC,KACzC,QAAQ,MAAM,IAAI,EAAE;AAC1B;"}
@@ -1,349 +1,203 @@
1
- import { AccountId, Hbar, Long, HbarUnit, TokenId } from "@hashgraph/sdk";
2
- import { parseKey } from "./standards-sdk.es168.js";
3
- class CryptoParser {
4
- static parseCryptoTransfers(cryptoTransfer, result) {
5
- if (cryptoTransfer.transfers?.accountAmounts) {
6
- result.transfers = cryptoTransfer.transfers.accountAmounts.map((aa) => {
7
- const accountId = new AccountId(
8
- aa.accountID.shardNum ?? 0,
9
- aa.accountID.realmNum ?? 0,
10
- aa.accountID.accountNum ?? 0
11
- );
12
- const hbarAmount = Hbar.fromTinybars(Long.fromValue(aa.amount));
13
- return {
14
- accountId: accountId.toString(),
15
- amount: hbarAmount.toString(HbarUnit.Hbar),
16
- isDecimal: true
17
- };
18
- });
19
- }
20
- if (cryptoTransfer.tokenTransfers) {
21
- for (const tokenTransferList of cryptoTransfer.tokenTransfers) {
22
- const tokenId = new TokenId(
23
- tokenTransferList.token.shardNum ?? 0,
24
- tokenTransferList.token.realmNum ?? 0,
25
- tokenTransferList.token.tokenNum ?? 0
26
- );
27
- if (tokenTransferList.transfers) {
28
- for (const transfer of tokenTransferList.transfers) {
29
- const accountId = new AccountId(
30
- transfer.accountID.shardNum ?? 0,
31
- transfer.accountID.realmNum ?? 0,
32
- transfer.accountID.accountNum ?? 0
33
- );
34
- const tokenAmount = Long.fromValue(transfer.amount).toNumber();
35
- result.tokenTransfers.push({
36
- tokenId: tokenId.toString(),
37
- accountId: accountId.toString(),
38
- amount: tokenAmount
39
- });
40
- }
41
- }
42
- }
43
- }
1
+ import { parseSemicolonFields } from "./standards-sdk.es164.js";
2
+ const ANS_HCS27_REGISTRY = "ans";
3
+ function isObjectRecord(value) {
4
+ return typeof value === "object" && value !== null;
5
+ }
6
+ function asString(value) {
7
+ if (typeof value !== "string") {
8
+ return null;
44
9
  }
45
- static parseCryptoDelete(body) {
46
- if (!body) return void 0;
47
- const data = {};
48
- if (body.deleteAccountID) {
49
- data.deleteAccountId = new AccountId(
50
- body.deleteAccountID.shardNum ?? 0,
51
- body.deleteAccountID.realmNum ?? 0,
52
- body.deleteAccountID.accountNum ?? 0
53
- ).toString();
54
- }
55
- if (body.transferAccountID) {
56
- data.transferAccountId = new AccountId(
57
- body.transferAccountID.shardNum ?? 0,
58
- body.transferAccountID.realmNum ?? 0,
59
- body.transferAccountID.accountNum ?? 0
60
- ).toString();
61
- }
62
- return data;
10
+ const trimmed = value.trim();
11
+ if (!trimmed) {
12
+ return null;
63
13
  }
64
- static parseCryptoCreateAccount(body) {
65
- if (!body) return void 0;
66
- const data = {};
67
- if (body.initialBalance) {
68
- data.initialBalance = Hbar.fromTinybars(
69
- Long.fromValue(body.initialBalance)
70
- ).toString(HbarUnit.Hbar);
71
- }
72
- if (body.key) {
73
- data.key = parseKey(body.key);
74
- }
75
- if (body.receiverSigRequired !== void 0) {
76
- data.receiverSigRequired = body.receiverSigRequired;
77
- }
78
- if (body.autoRenewPeriod?.seconds) {
79
- data.autoRenewPeriod = Long.fromValue(
80
- body.autoRenewPeriod.seconds
81
- ).toString();
82
- }
83
- if (body.memo) {
84
- data.memo = body.memo;
85
- }
86
- if (body.maxAutomaticTokenAssociations !== void 0) {
87
- data.maxAutomaticTokenAssociations = body.maxAutomaticTokenAssociations;
88
- }
89
- if (body.stakedAccountId) {
90
- data.stakedAccountId = new AccountId(
91
- body.stakedAccountId.shardNum ?? 0,
92
- body.stakedAccountId.realmNum ?? 0,
93
- body.stakedAccountId.accountNum ?? 0
94
- ).toString();
95
- } else if (body.stakedNodeId !== null && body.stakedNodeId !== void 0) {
96
- data.stakedNodeId = Long.fromValue(body.stakedNodeId).toString();
97
- }
98
- if (body.declineReward !== void 0) {
99
- data.declineReward = body.declineReward;
100
- }
101
- if (body.alias && body.alias.length > 0) {
102
- data.alias = Buffer.from(body.alias).toString("hex");
103
- }
104
- return data;
14
+ return trimmed;
15
+ }
16
+ function isSemver(value) {
17
+ return /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.test(
18
+ value
19
+ );
20
+ }
21
+ function normalizeAnsVersion(value) {
22
+ const trimmed = value.trim();
23
+ if (!trimmed) {
24
+ return null;
105
25
  }
106
- static parseCryptoUpdateAccount(body) {
107
- if (!body) return void 0;
108
- const data = {};
109
- if (body.accountIDToUpdate) {
110
- data.accountIdToUpdate = new AccountId(
111
- body.accountIDToUpdate.shardNum ?? 0,
112
- body.accountIDToUpdate.realmNum ?? 0,
113
- body.accountIDToUpdate.accountNum ?? 0
114
- ).toString();
115
- }
116
- if (body.key) {
117
- data.key = parseKey(body.key);
118
- }
119
- if (body.expirationTime?.seconds) {
120
- data.expirationTime = `${Long.fromValue(
121
- body.expirationTime.seconds
122
- ).toString()}.${body.expirationTime.nanos}`;
123
- }
124
- if (body.receiverSigRequired !== null && body.receiverSigRequired !== void 0) {
125
- data.receiverSigRequired = Boolean(body.receiverSigRequired);
126
- }
127
- if (body.autoRenewPeriod?.seconds) {
128
- data.autoRenewPeriod = Long.fromValue(
129
- body.autoRenewPeriod.seconds
130
- ).toString();
131
- }
132
- if (body.memo?.value !== void 0) {
133
- data.memo = body.memo.value;
134
- }
135
- if (body.maxAutomaticTokenAssociations?.value !== void 0) {
136
- data.maxAutomaticTokenAssociations = body.maxAutomaticTokenAssociations.value;
137
- }
138
- if (body.stakedAccountId) {
139
- data.stakedAccountId = new AccountId(
140
- body.stakedAccountId.shardNum ?? 0,
141
- body.stakedAccountId.realmNum ?? 0,
142
- body.stakedAccountId.accountNum ?? 0
143
- ).toString();
144
- data.stakedNodeId = void 0;
145
- } else if (body.stakedNodeId !== null && body.stakedNodeId !== void 0) {
146
- data.stakedNodeId = Long.fromValue(body.stakedNodeId).toString();
147
- data.stakedAccountId = void 0;
148
- } else {
149
- data.stakedAccountId = void 0;
150
- data.stakedNodeId = void 0;
151
- }
152
- if (body.declineReward !== null && body.declineReward !== void 0) {
153
- data.declineReward = Boolean(body.declineReward);
154
- }
155
- return data;
26
+ const withoutPrefix = trimmed.startsWith("v") || trimmed.startsWith("V") ? trimmed.slice(1) : trimmed;
27
+ if (!isSemver(withoutPrefix)) {
28
+ return null;
29
+ }
30
+ return withoutPrefix;
31
+ }
32
+ function parseAnsDnsTxtRecord(rawRecord) {
33
+ const fields = parseSemicolonFields(rawRecord);
34
+ const version = fields["v"];
35
+ const urlValue = fields["url"];
36
+ if (!version || !urlValue || version.toLowerCase() !== "ans1") {
37
+ return null;
38
+ }
39
+ let parsedUrl;
40
+ try {
41
+ parsedUrl = new URL(urlValue);
42
+ } catch {
43
+ return null;
156
44
  }
157
- static parseCryptoApproveAllowance(body) {
158
- if (!body) return void 0;
159
- const data = {};
160
- if (body.cryptoAllowances && body.cryptoAllowances.length > 0) {
161
- data.hbarAllowances = body.cryptoAllowances.map((a) => ({
162
- ownerAccountId: new AccountId(
163
- a.owner.shardNum ?? 0,
164
- a.owner.realmNum ?? 0,
165
- a.owner.accountNum ?? 0
166
- ).toString(),
167
- spenderAccountId: new AccountId(
168
- a.spender.shardNum ?? 0,
169
- a.spender.realmNum ?? 0,
170
- a.spender.accountNum ?? 0
171
- ).toString(),
172
- amount: Hbar.fromTinybars(Long.fromValue(a.amount)).toString(
173
- HbarUnit.Hbar
174
- )
175
- }));
45
+ if (parsedUrl.protocol.toLowerCase() !== "https:") {
46
+ return null;
47
+ }
48
+ const rawAnsVersion = fields["version"];
49
+ let normalizedAnsVersion;
50
+ if (rawAnsVersion !== void 0) {
51
+ const parsedVersion = normalizeAnsVersion(rawAnsVersion);
52
+ if (!parsedVersion) {
53
+ return null;
54
+ }
55
+ normalizedAnsVersion = parsedVersion;
56
+ }
57
+ return {
58
+ version: normalizedAnsVersion,
59
+ url: parsedUrl.toString()
60
+ };
61
+ }
62
+ function isValidAnsProfileVersion(value) {
63
+ return !!value && normalizeAnsVersion(value) !== null;
64
+ }
65
+ function hasProtocolPathSegment(pathname, protocol) {
66
+ const normalizedProtocol = protocol.trim().toLowerCase();
67
+ if (!normalizedProtocol) {
68
+ return false;
69
+ }
70
+ const pathSegments = pathname.split("/").map((segment) => segment.trim()).filter((segment) => segment.length > 0);
71
+ for (const segment of pathSegments) {
72
+ if (segment.toLowerCase() === normalizedProtocol) {
73
+ return true;
176
74
  }
177
- if (body.tokenAllowances && body.tokenAllowances.length > 0) {
178
- data.tokenAllowances = body.tokenAllowances.map((a) => ({
179
- tokenId: new TokenId(
180
- a.tokenId.shardNum ?? 0,
181
- a.tokenId.realmNum ?? 0,
182
- a.tokenId.tokenNum ?? 0
183
- ).toString(),
184
- ownerAccountId: new AccountId(
185
- a.owner.shardNum ?? 0,
186
- a.owner.realmNum ?? 0,
187
- a.owner.accountNum ?? 0
188
- ).toString(),
189
- spenderAccountId: new AccountId(
190
- a.spender.shardNum ?? 0,
191
- a.spender.realmNum ?? 0,
192
- a.spender.accountNum ?? 0
193
- ).toString(),
194
- amount: Long.fromValue(a.amount).toString()
195
- }));
75
+ }
76
+ return false;
77
+ }
78
+ function extractEndpointCandidates(endpoints, supportedSchemes) {
79
+ const candidates = [];
80
+ for (const [key, value] of Object.entries(endpoints)) {
81
+ if (!isObjectRecord(value)) {
82
+ continue;
196
83
  }
197
- if (body.nftAllowances && body.nftAllowances.length > 0) {
198
- data.nftAllowances = body.nftAllowances.map((a) => {
199
- const allowance = {};
200
- if (a.tokenId)
201
- allowance.tokenId = new TokenId(
202
- a.tokenId.shardNum ?? 0,
203
- a.tokenId.realmNum ?? 0,
204
- a.tokenId.tokenNum ?? 0
205
- ).toString();
206
- if (a.owner)
207
- allowance.ownerAccountId = new AccountId(
208
- a.owner.shardNum ?? 0,
209
- a.owner.realmNum ?? 0,
210
- a.owner.accountNum ?? 0
211
- ).toString();
212
- if (a.spender)
213
- allowance.spenderAccountId = new AccountId(
214
- a.spender.shardNum ?? 0,
215
- a.spender.realmNum ?? 0,
216
- a.spender.accountNum ?? 0
217
- ).toString();
218
- if (a.serialNumbers && a.serialNumbers.length > 0)
219
- allowance.serialNumbers = a.serialNumbers.map(
220
- (sn) => Long.fromValue(sn).toString()
221
- );
222
- if (a.approvedForAll?.value !== void 0)
223
- allowance.approvedForAll = a.approvedForAll.value;
224
- if (a.delegatingSpender)
225
- allowance.delegatingSpender = new AccountId(
226
- a.delegatingSpender.shardNum ?? 0,
227
- a.delegatingSpender.realmNum ?? 0,
228
- a.delegatingSpender.accountNum ?? 0
229
- ).toString();
230
- return allowance;
231
- });
84
+ const endpoint = asString(value["url"]);
85
+ if (!endpoint) {
86
+ continue;
232
87
  }
233
- return data;
88
+ let parsedUrl;
89
+ try {
90
+ parsedUrl = new URL(endpoint);
91
+ } catch {
92
+ continue;
93
+ }
94
+ const scheme = parsedUrl.protocol.replace(/:$/, "").toLowerCase();
95
+ if (!supportedSchemes.has(scheme)) {
96
+ continue;
97
+ }
98
+ candidates.push({
99
+ key,
100
+ endpointUrl: parsedUrl.toString(),
101
+ parsedUrl
102
+ });
234
103
  }
235
- static parseCryptoDeleteAllowance(body) {
236
- if (!body) return void 0;
237
- const data = {};
238
- if (body.nftAllowances && body.nftAllowances.length > 0) {
239
- data.nftAllowancesToRemove = body.nftAllowances.map((a) => ({
240
- ownerAccountId: new AccountId(
241
- a.owner.shardNum ?? 0,
242
- a.owner.realmNum ?? 0,
243
- a.owner.accountNum ?? 0
244
- ).toString(),
245
- tokenId: new TokenId(
246
- a.tokenId.shardNum ?? 0,
247
- a.tokenId.realmNum ?? 0,
248
- a.tokenId.tokenNum ?? 0
249
- ).toString(),
250
- serialNumbers: a.serialNumbers ? a.serialNumbers.map((sn) => Long.fromValue(sn).toString()) : []
251
- }));
252
- }
253
- return data;
104
+ return candidates;
105
+ }
106
+ function validateAnsHcs27Hints(input) {
107
+ if (!isObjectRecord(input)) {
108
+ return void 0;
254
109
  }
255
- /**
256
- * Extract HBAR transfers from Transaction object
257
- */
258
- static extractHbarTransfersFromTransaction(transaction) {
259
- const transfers = [];
260
- try {
261
- const hbarTransfers = transaction._hbarTransfers;
262
- if (Array.isArray(hbarTransfers)) {
263
- hbarTransfers.forEach((transfer) => {
264
- if (transfer.accountId && transfer.amount) {
265
- const amountInTinybars = transfer.amount.toTinybars();
266
- const amountInHbar = Number(amountInTinybars) / 1e8;
267
- transfers.push({
268
- accountId: transfer.accountId.toString(),
269
- amount: amountInHbar
270
- });
271
- }
272
- });
273
- }
274
- } catch (error) {
275
- }
276
- return transfers;
110
+ const checkpointTopicId = asString(input["checkpoint_topic_id"]);
111
+ const registry = asString(input["registry"]);
112
+ const logId = asString(input["log_id"]);
113
+ if (!checkpointTopicId || !registry || !logId || registry !== ANS_HCS27_REGISTRY) {
114
+ return void 0;
277
115
  }
278
- /**
279
- * Extract token transfers from Transaction object
280
- */
281
- static extractTokenTransfersFromTransaction(transaction) {
282
- const tokenTransfers = [];
283
- try {
284
- const tokenTransfersList = transaction._tokenTransfers;
285
- if (Array.isArray(tokenTransfersList)) {
286
- tokenTransfersList.forEach((tokenTransfer) => {
287
- if (tokenTransfer.tokenId && Array.isArray(tokenTransfer.transfers)) {
288
- const transfers = tokenTransfer.transfers.map((transfer) => ({
289
- accountId: transfer.accountId?.toString() || "Unknown",
290
- amount: Number(transfer.amount || 0)
291
- }));
292
- tokenTransfers.push({
293
- tokenId: tokenTransfer.tokenId.toString(),
294
- transfers
295
- });
296
- }
297
- });
298
- }
299
- } catch (error) {
300
- }
301
- return tokenTransfers;
116
+ const checkpointUri = asString(input["checkpoint_uri"]) ?? void 0;
117
+ const viewerUri = asString(input["viewer_uri"]) ?? void 0;
118
+ return {
119
+ checkpointTopicId,
120
+ registry,
121
+ logId,
122
+ checkpointUri,
123
+ viewerUri
124
+ };
125
+ }
126
+ function validateHcs28Hints(input) {
127
+ if (!isObjectRecord(input)) {
128
+ return void 0;
302
129
  }
303
- /**
304
- * Parse crypto transaction from Transaction object with comprehensive extraction
305
- * This is the unified entry point that handles both protobuf and internal field extraction
306
- */
307
- static parseFromTransactionObject(transaction) {
308
- try {
309
- const hbarTransfers = this.extractHbarTransfersFromTransaction(transaction);
310
- const tokenTransfers = this.extractTokenTransfersFromTransaction(transaction);
311
- if (hbarTransfers.length > 0 || tokenTransfers.length > 0) {
312
- const convertedTransfers = hbarTransfers.map((transfer) => ({
313
- accountId: transfer.accountId,
314
- amount: transfer.amount.toString() + " ℏ",
315
- isDecimal: true
316
- }));
317
- const convertedTokenTransfers = tokenTransfers.flatMap(
318
- (tokenGroup) => tokenGroup.transfers.map((transfer) => ({
319
- tokenId: tokenGroup.tokenId,
320
- accountId: transfer.accountId,
321
- amount: transfer.amount
322
- }))
323
- );
324
- if (hbarTransfers.length > 0) {
325
- return {
326
- type: "CRYPTOTRANSFER",
327
- humanReadableType: "Crypto Transfer",
328
- transfers: convertedTransfers,
329
- tokenTransfers: convertedTokenTransfers
330
- };
331
- } else if (tokenTransfers.length > 0) {
332
- return {
333
- type: "TOKENTRANSFER",
334
- humanReadableType: "Token Transfer",
335
- transfers: convertedTransfers,
336
- tokenTransfers: convertedTokenTransfers
337
- };
338
- }
339
- }
340
- return {};
341
- } catch (error) {
342
- return {};
343
- }
130
+ const directoryTopicId = asString(input["directory_topic_id"]);
131
+ const tId = asString(input["t_id"]);
132
+ const agentId = asString(input["agent_id"]);
133
+ if (!directoryTopicId || !tId || !agentId) {
134
+ return void 0;
135
+ }
136
+ const proofProfile = asString(input["proof_profile"]) ?? void 0;
137
+ return {
138
+ directoryTopicId,
139
+ tId,
140
+ agentId,
141
+ proofProfile
142
+ };
143
+ }
144
+ function parseTransparencyHints(input) {
145
+ if (!isObjectRecord(input)) {
146
+ return void 0;
147
+ }
148
+ const hcs27 = validateAnsHcs27Hints(input["hcs27"]);
149
+ const hcs28 = validateHcs28Hints(input["hcs28"]);
150
+ if (!hcs27 && !hcs28) {
151
+ return void 0;
152
+ }
153
+ return {
154
+ hcs27,
155
+ hcs28
156
+ };
157
+ }
158
+ function parseAnsAgentCard(input) {
159
+ if (!isObjectRecord(input)) {
160
+ return null;
161
+ }
162
+ const ansName = asString(input["ansName"]);
163
+ const endpoints = input["endpoints"];
164
+ if (!ansName || !isObjectRecord(endpoints)) {
165
+ return null;
166
+ }
167
+ return {
168
+ ansName,
169
+ endpoints,
170
+ transparencyHints: parseTransparencyHints(input["transparency"])
171
+ };
172
+ }
173
+ function selectPreferredEndpoint(candidates, protocol) {
174
+ if (candidates.length === 0) {
175
+ return null;
176
+ }
177
+ const sortedCandidates = [...candidates].sort(
178
+ (a, b) => a.key.localeCompare(b.key)
179
+ );
180
+ const protocolMatches = sortedCandidates.filter(
181
+ (candidate) => hasProtocolPathSegment(candidate.parsedUrl.pathname, protocol)
182
+ );
183
+ if (protocolMatches.length > 0) {
184
+ return protocolMatches[0];
185
+ }
186
+ return sortedCandidates[0];
187
+ }
188
+ function toErrorMessage(error) {
189
+ if (error instanceof Error && error.message) {
190
+ return error.message;
344
191
  }
192
+ return null;
345
193
  }
346
194
  export {
347
- CryptoParser
195
+ extractEndpointCandidates,
196
+ isValidAnsProfileVersion,
197
+ normalizeAnsVersion,
198
+ parseAnsAgentCard,
199
+ parseAnsDnsTxtRecord,
200
+ selectPreferredEndpoint,
201
+ toErrorMessage
348
202
  };
349
203
  //# sourceMappingURL=standards-sdk.es165.js.map