@hashgraphonline/standards-sdk 0.1.160 → 0.1.161

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 (293) hide show
  1. package/dist/cjs/hcs-14/resolvers/registry.d.ts +18 -1
  2. package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
  3. package/dist/cjs/hcs-14/resolvers/types.d.ts +17 -0
  4. package/dist/cjs/hcs-14/resolvers/types.d.ts.map +1 -1
  5. package/dist/cjs/hcs-14/sdk.d.ts +24 -13
  6. package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
  7. package/dist/cjs/standards-sdk.cjs +3 -3
  8. package/dist/cjs/standards-sdk.cjs.map +1 -1
  9. package/dist/es/hcs-14/resolvers/registry.d.ts +18 -1
  10. package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
  11. package/dist/es/hcs-14/resolvers/types.d.ts +17 -0
  12. package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
  13. package/dist/es/hcs-14/sdk.d.ts +24 -13
  14. package/dist/es/hcs-14/sdk.d.ts.map +1 -1
  15. package/dist/es/standards-sdk.es.js +94 -90
  16. package/dist/es/standards-sdk.es.js.map +1 -1
  17. package/dist/es/standards-sdk.es100.js +138 -42
  18. package/dist/es/standards-sdk.es100.js.map +1 -1
  19. package/dist/es/standards-sdk.es101.js +43 -259
  20. package/dist/es/standards-sdk.es101.js.map +1 -1
  21. package/dist/es/standards-sdk.es102.js +245 -82
  22. package/dist/es/standards-sdk.es102.js.map +1 -1
  23. package/dist/es/standards-sdk.es103.js +50 -49
  24. package/dist/es/standards-sdk.es103.js.map +1 -1
  25. package/dist/es/standards-sdk.es104.js +100 -29
  26. package/dist/es/standards-sdk.es104.js.map +1 -1
  27. package/dist/es/standards-sdk.es105.js +27 -229
  28. package/dist/es/standards-sdk.es105.js.map +1 -1
  29. package/dist/es/standards-sdk.es106.js +228 -109
  30. package/dist/es/standards-sdk.es106.js.map +1 -1
  31. package/dist/es/standards-sdk.es107.js +94 -15
  32. package/dist/es/standards-sdk.es107.js.map +1 -1
  33. package/dist/es/standards-sdk.es108.js +30 -80
  34. package/dist/es/standards-sdk.es108.js.map +1 -1
  35. package/dist/es/standards-sdk.es109.js +80 -27
  36. package/dist/es/standards-sdk.es109.js.map +1 -1
  37. package/dist/es/standards-sdk.es11.js +1 -1
  38. package/dist/es/standards-sdk.es110.js +27 -248
  39. package/dist/es/standards-sdk.es110.js.map +1 -1
  40. package/dist/es/standards-sdk.es111.js +246 -472
  41. package/dist/es/standards-sdk.es111.js.map +1 -1
  42. package/dist/es/standards-sdk.es112.js +458 -85
  43. package/dist/es/standards-sdk.es112.js.map +1 -1
  44. package/dist/es/standards-sdk.es113.js +96 -151
  45. package/dist/es/standards-sdk.es113.js.map +1 -1
  46. package/dist/es/standards-sdk.es114.js +155 -29
  47. package/dist/es/standards-sdk.es114.js.map +1 -1
  48. package/dist/es/standards-sdk.es115.js +26 -4
  49. package/dist/es/standards-sdk.es115.js.map +1 -1
  50. package/dist/es/standards-sdk.es116.js +10 -140
  51. package/dist/es/standards-sdk.es116.js.map +1 -1
  52. package/dist/es/standards-sdk.es117.js +140 -27
  53. package/dist/es/standards-sdk.es117.js.map +1 -1
  54. package/dist/es/standards-sdk.es118.js +27 -20
  55. package/dist/es/standards-sdk.es118.js.map +1 -1
  56. package/dist/es/standards-sdk.es119.js +18 -156
  57. package/dist/es/standards-sdk.es119.js.map +1 -1
  58. package/dist/es/standards-sdk.es12.js +1 -1
  59. package/dist/es/standards-sdk.es120.js +148 -191
  60. package/dist/es/standards-sdk.es120.js.map +1 -1
  61. package/dist/es/standards-sdk.es121.js +160 -747
  62. package/dist/es/standards-sdk.es121.js.map +1 -1
  63. package/dist/es/standards-sdk.es122.js +786 -9
  64. package/dist/es/standards-sdk.es122.js.map +1 -1
  65. package/dist/es/standards-sdk.es123.js +13 -567
  66. package/dist/es/standards-sdk.es123.js.map +1 -1
  67. package/dist/es/standards-sdk.es124.js +541 -576
  68. package/dist/es/standards-sdk.es124.js.map +1 -1
  69. package/dist/es/standards-sdk.es125.js +601 -12
  70. package/dist/es/standards-sdk.es125.js.map +1 -1
  71. package/dist/es/standards-sdk.es126.js +13 -2
  72. package/dist/es/standards-sdk.es126.js.map +1 -1
  73. package/dist/es/standards-sdk.es127.js +2 -87
  74. package/dist/es/standards-sdk.es127.js.map +1 -1
  75. package/dist/es/standards-sdk.es128.js +84 -37
  76. package/dist/es/standards-sdk.es128.js.map +1 -1
  77. package/dist/es/standards-sdk.es129.js +40 -2
  78. package/dist/es/standards-sdk.es129.js.map +1 -1
  79. package/dist/es/standards-sdk.es13.js +1 -1
  80. package/dist/es/standards-sdk.es130.js +2 -235
  81. package/dist/es/standards-sdk.es130.js.map +1 -1
  82. package/dist/es/standards-sdk.es131.js +204 -1109
  83. package/dist/es/standards-sdk.es131.js.map +1 -1
  84. package/dist/es/standards-sdk.es132.js +1059 -225
  85. package/dist/es/standards-sdk.es132.js.map +1 -1
  86. package/dist/es/standards-sdk.es133.js +303 -419
  87. package/dist/es/standards-sdk.es133.js.map +1 -1
  88. package/dist/es/standards-sdk.es134.js +418 -351
  89. package/dist/es/standards-sdk.es134.js.map +1 -1
  90. package/dist/es/standards-sdk.es135.js +347 -1108
  91. package/dist/es/standards-sdk.es135.js.map +1 -1
  92. package/dist/es/standards-sdk.es136.js +1088 -180
  93. package/dist/es/standards-sdk.es136.js.map +1 -1
  94. package/dist/es/standards-sdk.es137.js +153 -1512
  95. package/dist/es/standards-sdk.es137.js.map +1 -1
  96. package/dist/es/standards-sdk.es138.js +1567 -1255
  97. package/dist/es/standards-sdk.es138.js.map +1 -1
  98. package/dist/es/standards-sdk.es139.js +1255 -17
  99. package/dist/es/standards-sdk.es139.js.map +1 -1
  100. package/dist/es/standards-sdk.es14.js +1 -1
  101. package/dist/es/standards-sdk.es140.js +15 -85
  102. package/dist/es/standards-sdk.es140.js.map +1 -1
  103. package/dist/es/standards-sdk.es141.js +77 -71
  104. package/dist/es/standards-sdk.es141.js.map +1 -1
  105. package/dist/es/standards-sdk.es142.js +79 -891
  106. package/dist/es/standards-sdk.es142.js.map +1 -1
  107. package/dist/es/standards-sdk.es143.js +886 -53
  108. package/dist/es/standards-sdk.es143.js.map +1 -1
  109. package/dist/es/standards-sdk.es144.js +53 -152
  110. package/dist/es/standards-sdk.es144.js.map +1 -1
  111. package/dist/es/standards-sdk.es145.js +159 -7
  112. package/dist/es/standards-sdk.es145.js.map +1 -1
  113. package/dist/es/standards-sdk.es146.js +7 -86
  114. package/dist/es/standards-sdk.es146.js.map +1 -1
  115. package/dist/es/standards-sdk.es147.js +65 -44
  116. package/dist/es/standards-sdk.es147.js.map +1 -1
  117. package/dist/es/standards-sdk.es148.js +65 -30
  118. package/dist/es/standards-sdk.es148.js.map +1 -1
  119. package/dist/es/standards-sdk.es149.js +30 -34
  120. package/dist/es/standards-sdk.es149.js.map +1 -1
  121. package/dist/es/standards-sdk.es15.js +1 -1
  122. package/dist/es/standards-sdk.es150.js +34 -41
  123. package/dist/es/standards-sdk.es150.js.map +1 -1
  124. package/dist/es/standards-sdk.es151.js +45 -138
  125. package/dist/es/standards-sdk.es151.js.map +1 -1
  126. package/dist/es/standards-sdk.es152.js +133 -37
  127. package/dist/es/standards-sdk.es152.js.map +1 -1
  128. package/dist/es/standards-sdk.es153.js +34 -12474
  129. package/dist/es/standards-sdk.es153.js.map +1 -1
  130. package/dist/es/standards-sdk.es154.js +12444 -134
  131. package/dist/es/standards-sdk.es154.js.map +1 -1
  132. package/dist/es/standards-sdk.es155.js +13 -318
  133. package/dist/es/standards-sdk.es155.js.map +1 -1
  134. package/dist/es/standards-sdk.es156.js +55 -345
  135. package/dist/es/standards-sdk.es156.js.map +1 -1
  136. package/dist/es/standards-sdk.es157.js +68 -437
  137. package/dist/es/standards-sdk.es157.js.map +1 -1
  138. package/dist/es/standards-sdk.es158.js +71 -321
  139. package/dist/es/standards-sdk.es158.js.map +1 -1
  140. package/dist/es/standards-sdk.es159.js +63 -66
  141. package/dist/es/standards-sdk.es159.js.map +1 -1
  142. package/dist/es/standards-sdk.es16.js +5 -5
  143. package/dist/es/standards-sdk.es160.js +168 -13
  144. package/dist/es/standards-sdk.es160.js.map +1 -1
  145. package/dist/es/standards-sdk.es161.js +312 -232
  146. package/dist/es/standards-sdk.es161.js.map +1 -1
  147. package/dist/es/standards-sdk.es162.js +345 -55
  148. package/dist/es/standards-sdk.es162.js.map +1 -1
  149. package/dist/es/standards-sdk.es163.js +437 -68
  150. package/dist/es/standards-sdk.es163.js.map +1 -1
  151. package/dist/es/standards-sdk.es164.js +321 -71
  152. package/dist/es/standards-sdk.es164.js.map +1 -1
  153. package/dist/es/standards-sdk.es165.js +66 -63
  154. package/dist/es/standards-sdk.es165.js.map +1 -1
  155. package/dist/es/standards-sdk.es166.js +220 -150
  156. package/dist/es/standards-sdk.es166.js.map +1 -1
  157. package/dist/es/standards-sdk.es167.js +152 -202
  158. package/dist/es/standards-sdk.es167.js.map +1 -1
  159. package/dist/es/standards-sdk.es168.js +206 -223
  160. package/dist/es/standards-sdk.es168.js.map +1 -1
  161. package/dist/es/standards-sdk.es169.js +227 -107
  162. package/dist/es/standards-sdk.es169.js.map +1 -1
  163. package/dist/es/standards-sdk.es170.js +98 -105
  164. package/dist/es/standards-sdk.es170.js.map +1 -1
  165. package/dist/es/standards-sdk.es171.js +105 -140
  166. package/dist/es/standards-sdk.es171.js.map +1 -1
  167. package/dist/es/standards-sdk.es172.js +140 -164
  168. package/dist/es/standards-sdk.es172.js.map +1 -1
  169. package/dist/es/standards-sdk.es173.js +165 -119
  170. package/dist/es/standards-sdk.es173.js.map +1 -1
  171. package/dist/es/standards-sdk.es174.js +111 -303
  172. package/dist/es/standards-sdk.es174.js.map +1 -1
  173. package/dist/es/standards-sdk.es175.js +297 -225
  174. package/dist/es/standards-sdk.es175.js.map +1 -1
  175. package/dist/es/standards-sdk.es176.js +253 -110
  176. package/dist/es/standards-sdk.es176.js.map +1 -1
  177. package/dist/es/standards-sdk.es177.js +119 -0
  178. package/dist/es/standards-sdk.es177.js.map +1 -0
  179. package/dist/es/standards-sdk.es18.js +12 -12
  180. package/dist/es/standards-sdk.es19.js +9 -9
  181. package/dist/es/standards-sdk.es2.js +2 -2
  182. package/dist/es/standards-sdk.es20.js +1 -1
  183. package/dist/es/standards-sdk.es21.js +1 -1
  184. package/dist/es/standards-sdk.es22.js +1 -1
  185. package/dist/es/standards-sdk.es23.js +1 -1
  186. package/dist/es/standards-sdk.es24.js +1 -1
  187. package/dist/es/standards-sdk.es25.js +1 -1
  188. package/dist/es/standards-sdk.es26.js +1 -1
  189. package/dist/es/standards-sdk.es27.js +12 -12
  190. package/dist/es/standards-sdk.es30.js +2 -2
  191. package/dist/es/standards-sdk.es31.js +4 -4
  192. package/dist/es/standards-sdk.es32.js +1 -1
  193. package/dist/es/standards-sdk.es35.js +6 -6
  194. package/dist/es/standards-sdk.es36.js +4 -4
  195. package/dist/es/standards-sdk.es37.js +2 -2
  196. package/dist/es/standards-sdk.es38.js +2 -2
  197. package/dist/es/standards-sdk.es39.js +1 -1
  198. package/dist/es/standards-sdk.es4.js +2 -2
  199. package/dist/es/standards-sdk.es40.js +1 -1
  200. package/dist/es/standards-sdk.es41.js +2 -2
  201. package/dist/es/standards-sdk.es46.js +1 -1
  202. package/dist/es/standards-sdk.es5.js +2 -2
  203. package/dist/es/standards-sdk.es51.js +1 -1
  204. package/dist/es/standards-sdk.es53.js +1 -1
  205. package/dist/es/standards-sdk.es56.js +2 -2
  206. package/dist/es/standards-sdk.es58.js +11 -236
  207. package/dist/es/standards-sdk.es58.js.map +1 -1
  208. package/dist/es/standards-sdk.es59.js +321 -35
  209. package/dist/es/standards-sdk.es59.js.map +1 -1
  210. package/dist/es/standards-sdk.es6.js +2 -2
  211. package/dist/es/standards-sdk.es60.js +32 -101
  212. package/dist/es/standards-sdk.es60.js.map +1 -1
  213. package/dist/es/standards-sdk.es61.js +86 -156
  214. package/dist/es/standards-sdk.es61.js.map +1 -1
  215. package/dist/es/standards-sdk.es62.js +112 -153
  216. package/dist/es/standards-sdk.es62.js.map +1 -1
  217. package/dist/es/standards-sdk.es63.js +179 -87
  218. package/dist/es/standards-sdk.es63.js.map +1 -1
  219. package/dist/es/standards-sdk.es64.js +124 -40
  220. package/dist/es/standards-sdk.es64.js.map +1 -1
  221. package/dist/es/standards-sdk.es65.js +41 -251
  222. package/dist/es/standards-sdk.es65.js.map +1 -1
  223. package/dist/es/standards-sdk.es66.js +257 -24
  224. package/dist/es/standards-sdk.es66.js.map +1 -1
  225. package/dist/es/standards-sdk.es67.js +25 -87
  226. package/dist/es/standards-sdk.es67.js.map +1 -1
  227. package/dist/es/standards-sdk.es68.js +95 -3
  228. package/dist/es/standards-sdk.es68.js.map +1 -1
  229. package/dist/es/standards-sdk.es69.js +3 -100
  230. package/dist/es/standards-sdk.es69.js.map +1 -1
  231. package/dist/es/standards-sdk.es7.js +1 -1
  232. package/dist/es/standards-sdk.es70.js +62 -61
  233. package/dist/es/standards-sdk.es70.js.map +1 -1
  234. package/dist/es/standards-sdk.es71.js +98 -17
  235. package/dist/es/standards-sdk.es71.js.map +1 -1
  236. package/dist/es/standards-sdk.es72.js +19 -77
  237. package/dist/es/standards-sdk.es72.js.map +1 -1
  238. package/dist/es/standards-sdk.es73.js +77 -458
  239. package/dist/es/standards-sdk.es73.js.map +1 -1
  240. package/dist/es/standards-sdk.es74.js +240 -106
  241. package/dist/es/standards-sdk.es74.js.map +1 -1
  242. package/dist/es/standards-sdk.es75.js +286 -170
  243. package/dist/es/standards-sdk.es75.js.map +1 -1
  244. package/dist/es/standards-sdk.es76.js +207 -71
  245. package/dist/es/standards-sdk.es76.js.map +1 -1
  246. package/dist/es/standards-sdk.es77.js +72 -71
  247. package/dist/es/standards-sdk.es77.js.map +1 -1
  248. package/dist/es/standards-sdk.es78.js +71 -143
  249. package/dist/es/standards-sdk.es78.js.map +1 -1
  250. package/dist/es/standards-sdk.es79.js +136 -62
  251. package/dist/es/standards-sdk.es79.js.map +1 -1
  252. package/dist/es/standards-sdk.es80.js +45 -380
  253. package/dist/es/standards-sdk.es80.js.map +1 -1
  254. package/dist/es/standards-sdk.es81.js +130 -222
  255. package/dist/es/standards-sdk.es81.js.map +1 -1
  256. package/dist/es/standards-sdk.es82.js +444 -313
  257. package/dist/es/standards-sdk.es82.js.map +1 -1
  258. package/dist/es/standards-sdk.es83.js +364 -88
  259. package/dist/es/standards-sdk.es83.js.map +1 -1
  260. package/dist/es/standards-sdk.es84.js +89 -125
  261. package/dist/es/standards-sdk.es84.js.map +1 -1
  262. package/dist/es/standards-sdk.es85.js +125 -8
  263. package/dist/es/standards-sdk.es85.js.map +1 -1
  264. package/dist/es/standards-sdk.es86.js +6 -45
  265. package/dist/es/standards-sdk.es86.js.map +1 -1
  266. package/dist/es/standards-sdk.es87.js +44 -98
  267. package/dist/es/standards-sdk.es87.js.map +1 -1
  268. package/dist/es/standards-sdk.es88.js +84 -331
  269. package/dist/es/standards-sdk.es88.js.map +1 -1
  270. package/dist/es/standards-sdk.es89.js +160 -93
  271. package/dist/es/standards-sdk.es89.js.map +1 -1
  272. package/dist/es/standards-sdk.es9.js +2 -2
  273. package/dist/es/standards-sdk.es90.js +275 -55
  274. package/dist/es/standards-sdk.es90.js.map +1 -1
  275. package/dist/es/standards-sdk.es91.js +55 -43
  276. package/dist/es/standards-sdk.es91.js.map +1 -1
  277. package/dist/es/standards-sdk.es92.js +44 -145
  278. package/dist/es/standards-sdk.es92.js.map +1 -1
  279. package/dist/es/standards-sdk.es93.js +113 -30
  280. package/dist/es/standards-sdk.es93.js.map +1 -1
  281. package/dist/es/standards-sdk.es94.js +59 -22
  282. package/dist/es/standards-sdk.es94.js.map +1 -1
  283. package/dist/es/standards-sdk.es95.js +28 -23
  284. package/dist/es/standards-sdk.es95.js.map +1 -1
  285. package/dist/es/standards-sdk.es96.js +23 -238
  286. package/dist/es/standards-sdk.es96.js.map +1 -1
  287. package/dist/es/standards-sdk.es97.js +225 -267
  288. package/dist/es/standards-sdk.es97.js.map +1 -1
  289. package/dist/es/standards-sdk.es98.js +220 -95
  290. package/dist/es/standards-sdk.es98.js.map +1 -1
  291. package/dist/es/standards-sdk.es99.js +136 -124
  292. package/dist/es/standards-sdk.es99.js.map +1 -1
  293. package/package.json +4 -1
@@ -1,1143 +1,238 @@
1
- import { proto } from "@hashgraph/proto";
2
- import { AccountId, Long, TokenId } from "@hashgraph/sdk";
3
- import { parseKey, hasTransactionType, extractTransactionBody } from "./standards-sdk.es159.js";
4
- import { Buffer } from "buffer";
5
- class HTSParser {
6
- /**
7
- * Main entry point for parsing HTS transactions from a Transaction object
8
- * This method bridges between the Transaction object and the protobuf parsers
9
- */
10
- static parseHTSTransaction(transaction) {
11
- try {
12
- const transactionBody = transaction._transactionBody;
13
- if (!transactionBody) {
14
- return {};
15
- }
16
- if (transactionBody.tokenCreation) {
17
- const tokenCreation = this.parseTokenCreate(
18
- transactionBody.tokenCreation
19
- );
20
- if (tokenCreation) {
21
- return {
22
- type: "TOKENCREATE",
23
- humanReadableType: "Token Creation",
24
- tokenCreation
25
- };
26
- }
27
- }
28
- if (transactionBody.tokenMint) {
29
- const tokenMint = this.parseTokenMint(transactionBody.tokenMint);
30
- if (tokenMint) {
31
- return {
32
- type: "TOKENMINT",
33
- humanReadableType: "Token Mint",
34
- tokenMint
35
- };
36
- }
37
- }
38
- if (transactionBody.tokenBurn) {
39
- const tokenBurn = this.parseTokenBurn(transactionBody.tokenBurn);
40
- if (tokenBurn) {
41
- return {
42
- type: "TOKENBURN",
43
- humanReadableType: "Token Burn",
44
- tokenBurn
45
- };
46
- }
47
- }
48
- if (transactionBody.tokenUpdate) {
49
- const tokenUpdate = this.parseTokenUpdate(transactionBody.tokenUpdate);
50
- if (tokenUpdate) {
51
- return {
52
- type: "TOKENUPDATE",
53
- humanReadableType: "Token Update",
54
- tokenUpdate
55
- };
56
- }
57
- }
58
- if (transactionBody.tokenFreeze) {
59
- const tokenFreeze = this.parseTokenFreeze(transactionBody.tokenFreeze);
60
- if (tokenFreeze) {
61
- return {
62
- type: "TOKENFREEZE",
63
- humanReadableType: "Token Freeze",
64
- tokenFreeze
65
- };
66
- }
67
- }
68
- if (transactionBody.tokenUnfreeze) {
69
- const tokenUnfreeze = this.parseTokenUnfreeze(
70
- transactionBody.tokenUnfreeze
71
- );
72
- if (tokenUnfreeze) {
73
- return {
74
- type: "TOKENUNFREEZE",
75
- humanReadableType: "Token Unfreeze",
76
- tokenUnfreeze
77
- };
78
- }
79
- }
80
- if (transactionBody.tokenGrantKyc) {
81
- const tokenGrantKyc = this.parseTokenGrantKyc(
82
- transactionBody.tokenGrantKyc
83
- );
84
- if (tokenGrantKyc) {
85
- return {
86
- type: "TOKENGRANTKYC",
87
- humanReadableType: "Token Grant KYC",
88
- tokenGrantKyc
89
- };
90
- }
91
- }
92
- if (transactionBody.tokenRevokeKyc) {
93
- const tokenRevokeKyc = this.parseTokenRevokeKyc(
94
- transactionBody.tokenRevokeKyc
95
- );
96
- if (tokenRevokeKyc) {
97
- return {
98
- type: "TOKENREVOKEKYC",
99
- humanReadableType: "Token Revoke KYC",
100
- tokenRevokeKyc
101
- };
102
- }
103
- }
104
- if (transactionBody.tokenPause) {
105
- const tokenPause = this.parseTokenPause(transactionBody.tokenPause);
106
- if (tokenPause) {
107
- return {
108
- type: "TOKENPAUSE",
109
- humanReadableType: "Token Pause",
110
- tokenPause
111
- };
112
- }
113
- }
114
- if (transactionBody.tokenUnpause) {
115
- const tokenUnpause = this.parseTokenUnpause(
116
- transactionBody.tokenUnpause
117
- );
118
- if (tokenUnpause) {
119
- return {
120
- type: "TOKENUNPAUSE",
121
- humanReadableType: "Token Unpause",
122
- tokenUnpause
123
- };
124
- }
125
- }
126
- if (transactionBody.tokenWipe) {
127
- const tokenWipeAccount = this.parseTokenWipeAccount(
128
- transactionBody.tokenWipe
129
- );
130
- if (tokenWipeAccount) {
131
- return {
132
- type: "TOKENWIPEACCOUNT",
133
- humanReadableType: "Token Wipe Account",
134
- tokenWipeAccount
135
- };
136
- }
137
- }
138
- if (transactionBody.tokenDeletion) {
139
- const tokenDelete = this.parseTokenDelete(
140
- transactionBody.tokenDeletion
141
- );
142
- if (tokenDelete) {
143
- return {
144
- type: "TOKENDELETE",
145
- humanReadableType: "Token Delete",
146
- tokenDelete
147
- };
148
- }
149
- }
150
- if (transactionBody.tokenAssociate) {
151
- const tokenAssociate = this.parseTokenAssociate(
152
- transactionBody.tokenAssociate
153
- );
154
- if (tokenAssociate) {
155
- return {
156
- type: "TOKENASSOCIATE",
157
- humanReadableType: "Token Associate",
158
- tokenAssociate
159
- };
160
- }
161
- }
162
- if (transactionBody.tokenDissociate) {
163
- const tokenDissociate = this.parseTokenDissociate(
164
- transactionBody.tokenDissociate
165
- );
166
- if (tokenDissociate) {
167
- return {
168
- type: "TOKENDISSOCIATE",
169
- humanReadableType: "Token Dissociate",
170
- tokenDissociate
171
- };
172
- }
173
- }
174
- if (transactionBody.tokenFeeScheduleUpdate) {
175
- const tokenFeeScheduleUpdate = this.parseTokenFeeScheduleUpdate(
176
- transactionBody.tokenFeeScheduleUpdate
177
- );
178
- if (tokenFeeScheduleUpdate) {
179
- return {
180
- type: "TOKENFEESCHEDULEUPDATE",
181
- humanReadableType: "Token Fee Schedule Update",
182
- tokenFeeScheduleUpdate
183
- };
184
- }
185
- }
186
- const airdrop = this.parseTokenAirdrop(transaction);
187
- if (airdrop) {
188
- return {
189
- type: "TOKENAIRDROP",
190
- humanReadableType: "Token Airdrop",
191
- tokenAirdrop: airdrop
192
- };
193
- }
194
- return {};
195
- } catch (error) {
196
- console.warn("[HTSParser] Failed to parse HTS transaction:", error);
197
- return {};
198
- }
1
+ import { detectCryptoEnvironment } from "./standards-sdk.es129.js";
2
+ import { NodeHashAdapter, WebHashAdapter, FallbackHashAdapter } from "./standards-sdk.es128.js";
3
+ class NodeHmacAdapter {
4
+ constructor(nodeHmac) {
5
+ this.nodeHmac = nodeHmac;
199
6
  }
200
- static parseTokenCreate(body) {
201
- if (!body) return void 0;
202
- const data = {};
203
- if (body.name) {
204
- data.tokenName = body.name;
205
- }
206
- if (body.symbol) {
207
- data.tokenSymbol = body.symbol;
208
- }
209
- if (body.treasury) {
210
- data.treasuryAccountId = new AccountId(
211
- body.treasury.shardNum ?? 0,
212
- body.treasury.realmNum ?? 0,
213
- body.treasury.accountNum ?? 0
214
- ).toString();
215
- }
216
- if (body.initialSupply) {
217
- data.initialSupply = Long.fromValue(body.initialSupply).toString();
218
- }
219
- if (body.decimals !== void 0 && body.decimals !== null) {
220
- data.decimals = Long.fromValue(body.decimals).toNumber();
221
- }
222
- if (body.maxSupply) {
223
- data.maxSupply = Long.fromValue(body.maxSupply).toString();
224
- }
225
- if (body.memo) {
226
- data.memo = body.memo;
227
- }
228
- if (body.tokenType !== null && body.tokenType !== void 0) {
229
- data.tokenType = proto.TokenType[body.tokenType];
230
- }
231
- if (body.supplyType !== null && body.supplyType !== void 0) {
232
- data.supplyType = proto.TokenSupplyType[body.supplyType];
233
- }
234
- data.adminKey = parseKey(body.adminKey);
235
- data.kycKey = parseKey(body.kycKey);
236
- data.freezeKey = parseKey(body.freezeKey);
237
- data.wipeKey = parseKey(body.wipeKey);
238
- data.supplyKey = parseKey(body.supplyKey);
239
- data.feeScheduleKey = parseKey(body.feeScheduleKey);
240
- data.pauseKey = parseKey(body.pauseKey);
241
- if (body.autoRenewAccount) {
242
- data.autoRenewAccount = new AccountId(
243
- body.autoRenewAccount.shardNum ?? 0,
244
- body.autoRenewAccount.realmNum ?? 0,
245
- body.autoRenewAccount.accountNum ?? 0
246
- ).toString();
247
- }
248
- if (body.autoRenewPeriod?.seconds) {
249
- data.autoRenewPeriod = Long.fromValue(
250
- body.autoRenewPeriod.seconds
251
- ).toString();
252
- }
253
- if (body.customFees && body.customFees.length > 0) {
254
- data.customFees = body.customFees.map((fee) => {
255
- const feeCollectorAccountId = fee.feeCollectorAccountId ? new AccountId(
256
- fee.feeCollectorAccountId.shardNum ?? 0,
257
- fee.feeCollectorAccountId.realmNum ?? 0,
258
- fee.feeCollectorAccountId.accountNum ?? 0
259
- ).toString() : "Not Set";
260
- const commonFeeData = {
261
- feeCollectorAccountId,
262
- allCollectorsAreExempt: fee.allCollectorsAreExempt || false
263
- };
264
- if (fee.fixedFee) {
265
- return {
266
- ...commonFeeData,
267
- feeType: "FIXED_FEE",
268
- fixedFee: {
269
- amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),
270
- denominatingTokenId: fee.fixedFee.denominatingTokenId ? new TokenId(
271
- fee.fixedFee.denominatingTokenId.shardNum ?? 0,
272
- fee.fixedFee.denominatingTokenId.realmNum ?? 0,
273
- fee.fixedFee.denominatingTokenId.tokenNum ?? 0
274
- ).toString() : void 0
275
- }
276
- };
277
- } else if (fee.fractionalFee) {
278
- return {
279
- ...commonFeeData,
280
- feeType: "FRACTIONAL_FEE",
281
- fractionalFee: {
282
- numerator: Long.fromValue(
283
- fee.fractionalFee.fractionalAmount?.numerator || 0
284
- ).toString(),
285
- denominator: Long.fromValue(
286
- fee.fractionalFee.fractionalAmount?.denominator || 1
287
- ).toString(),
288
- minimumAmount: Long.fromValue(
289
- fee.fractionalFee.minimumAmount || 0
290
- ).toString(),
291
- maximumAmount: Long.fromValue(
292
- fee.fractionalFee.maximumAmount || 0
293
- ).toString(),
294
- netOfTransfers: fee.fractionalFee.netOfTransfers || false
295
- }
296
- };
297
- } else if (fee.royaltyFee) {
298
- let fallbackFeeData = void 0;
299
- if (fee.royaltyFee.fallbackFee) {
300
- fallbackFeeData = {
301
- amount: Long.fromValue(
302
- fee.royaltyFee.fallbackFee.amount || 0
303
- ).toString(),
304
- denominatingTokenId: fee.royaltyFee.fallbackFee.denominatingTokenId ? new TokenId(
305
- fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ?? 0,
306
- fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ?? 0,
307
- fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ?? 0
308
- ).toString() : void 0
309
- };
310
- }
311
- return {
312
- ...commonFeeData,
313
- feeType: "ROYALTY_FEE",
314
- royaltyFee: {
315
- numerator: Long.fromValue(
316
- fee.royaltyFee.exchangeValueFraction?.numerator || 0
317
- ).toString(),
318
- denominator: Long.fromValue(
319
- fee.royaltyFee.exchangeValueFraction?.denominator || 1
320
- ).toString(),
321
- fallbackFee: fallbackFeeData
322
- }
323
- };
324
- }
325
- return {
326
- ...commonFeeData,
327
- feeType: "FIXED_FEE",
328
- fixedFee: { amount: "0" }
329
- };
330
- });
331
- }
332
- return data;
7
+ update(data) {
8
+ this.nodeHmac.update(data);
9
+ return this;
333
10
  }
334
- static parseTokenMint(body) {
335
- if (!body || !body.token || body.amount === null || body.amount === void 0) {
336
- return void 0;
337
- }
338
- const data = {
339
- tokenId: new TokenId(
340
- body.token.shardNum ?? 0,
341
- body.token.realmNum ?? 0,
342
- body.token.tokenNum ?? 0
343
- ).toString(),
344
- amount: Long.fromValue(body.amount).toNumber()
345
- };
346
- if (body.metadata && body.metadata.length > 0) {
347
- data.metadata = body.metadata.map(
348
- (meta) => Buffer.from(meta).toString("base64")
349
- );
350
- }
351
- return data;
11
+ digest(encoding) {
12
+ return this.nodeHmac.digest(encoding);
352
13
  }
353
- static parseTokenBurn(body) {
354
- if (!body || !body.token || body.amount === null || body.amount === void 0) {
355
- return void 0;
356
- }
357
- const data = {
358
- tokenId: new TokenId(
359
- body.token.shardNum ?? 0,
360
- body.token.realmNum ?? 0,
361
- body.token.tokenNum ?? 0
362
- ).toString(),
363
- amount: Long.fromValue(body.amount).toNumber()
14
+ }
15
+ class WebHmacAdapter {
16
+ constructor(key, algorithm = "sha256") {
17
+ this.key = key;
18
+ this.algorithm = algorithm;
19
+ this.data = [];
20
+ }
21
+ update(data) {
22
+ this.data.push(data);
23
+ return this;
24
+ }
25
+ async digest(encoding) {
26
+ const combined = Buffer.concat(this.data);
27
+ const keyBytes = new Uint8Array(this.key);
28
+ const webCrypto = globalThis.crypto;
29
+ if (!webCrypto?.subtle) {
30
+ throw new Error("WebCrypto not available");
31
+ }
32
+ const keyBuffer = await webCrypto.subtle.importKey(
33
+ "raw",
34
+ keyBytes,
35
+ { name: "HMAC", hash: this.mapAlgorithm(this.algorithm) },
36
+ false,
37
+ ["sign"]
38
+ );
39
+ const signature = await webCrypto.subtle.sign(
40
+ "HMAC",
41
+ keyBuffer,
42
+ new Uint8Array(combined)
43
+ );
44
+ if (encoding === "hex") {
45
+ return Array.from(new Uint8Array(signature)).map((b) => b.toString(16).padStart(2, "0")).join("");
46
+ }
47
+ return Buffer.from(signature);
48
+ }
49
+ mapAlgorithm(algorithm) {
50
+ const algorithmMap = {
51
+ sha256: "SHA-256",
52
+ sha1: "SHA-1",
53
+ sha512: "SHA-512"
364
54
  };
365
- if (body.serialNumbers && body.serialNumbers.length > 0) {
366
- data.serialNumbers = body.serialNumbers.map(
367
- (sn) => Long.fromValue(sn).toNumber()
368
- );
369
- }
370
- return data;
371
- }
372
- static parseTokenUpdate(body) {
373
- if (!body) return void 0;
374
- const data = {};
375
- if (body.token) {
376
- data.tokenId = new TokenId(
377
- body.token.shardNum ?? 0,
378
- body.token.realmNum ?? 0,
379
- body.token.tokenNum ?? 0
380
- ).toString();
381
- }
382
- if (body.name) {
383
- data.name = body.name;
384
- }
385
- if (body.symbol) {
386
- data.symbol = body.symbol;
387
- }
388
- if (body.treasury) {
389
- data.treasuryAccountId = new AccountId(
390
- body.treasury.shardNum ?? 0,
391
- body.treasury.realmNum ?? 0,
392
- body.treasury.accountNum ?? 0
393
- ).toString();
394
- }
395
- data.adminKey = parseKey(body.adminKey);
396
- data.kycKey = parseKey(body.kycKey);
397
- data.freezeKey = parseKey(body.freezeKey);
398
- data.wipeKey = parseKey(body.wipeKey);
399
- data.supplyKey = parseKey(body.supplyKey);
400
- data.feeScheduleKey = parseKey(body.feeScheduleKey);
401
- data.pauseKey = parseKey(body.pauseKey);
402
- if (body.autoRenewAccount) {
403
- data.autoRenewAccountId = new AccountId(
404
- body.autoRenewAccount.shardNum ?? 0,
405
- body.autoRenewAccount.realmNum ?? 0,
406
- body.autoRenewAccount.accountNum ?? 0
407
- ).toString();
408
- }
409
- if (body.autoRenewPeriod?.seconds) {
410
- data.autoRenewPeriod = Long.fromValue(
411
- body.autoRenewPeriod.seconds
412
- ).toString();
413
- }
414
- if (body.memo?.value !== void 0) {
415
- data.memo = body.memo.value;
416
- }
417
- if (body.expiry?.seconds) {
418
- data.expiry = `${Long.fromValue(body.expiry.seconds).toString()}.${body.expiry.nanos}`;
419
- }
420
- return data;
55
+ return algorithmMap[algorithm.toLowerCase()] || "SHA-256";
421
56
  }
422
- static parseTokenFeeScheduleUpdate(body) {
423
- if (!body) return void 0;
424
- const data = {};
425
- if (body.tokenId) {
426
- data.tokenId = new TokenId(
427
- body.tokenId.shardNum ?? 0,
428
- body.tokenId.realmNum ?? 0,
429
- body.tokenId.tokenNum ?? 0
430
- ).toString();
431
- }
432
- if (body.customFees && body.customFees.length > 0) {
433
- data.customFees = body.customFees.map((fee) => {
434
- const feeCollectorAccountId = fee.feeCollectorAccountId ? new AccountId(
435
- fee.feeCollectorAccountId.shardNum ?? 0,
436
- fee.feeCollectorAccountId.realmNum ?? 0,
437
- fee.feeCollectorAccountId.accountNum ?? 0
438
- ).toString() : "Not Set";
439
- const commonFeeData = {
440
- feeCollectorAccountId,
441
- allCollectorsAreExempt: fee.allCollectorsAreExempt || false
442
- };
443
- if (fee.fixedFee) {
444
- return {
445
- ...commonFeeData,
446
- feeType: "FIXED_FEE",
447
- fixedFee: {
448
- amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),
449
- denominatingTokenId: fee.fixedFee.denominatingTokenId ? new TokenId(
450
- fee.fixedFee.denominatingTokenId.shardNum ?? 0,
451
- fee.fixedFee.denominatingTokenId.realmNum ?? 0,
452
- fee.fixedFee.denominatingTokenId.tokenNum ?? 0
453
- ).toString() : void 0
454
- }
455
- };
456
- } else if (fee.fractionalFee) {
457
- return {
458
- ...commonFeeData,
459
- feeType: "FRACTIONAL_FEE",
460
- fractionalFee: {
461
- numerator: Long.fromValue(
462
- fee.fractionalFee.fractionalAmount?.numerator || 0
463
- ).toString(),
464
- denominator: Long.fromValue(
465
- fee.fractionalFee.fractionalAmount?.denominator || 1
466
- ).toString(),
467
- minimumAmount: Long.fromValue(
468
- fee.fractionalFee.minimumAmount || 0
469
- ).toString(),
470
- maximumAmount: Long.fromValue(
471
- fee.fractionalFee.maximumAmount || 0
472
- ).toString(),
473
- netOfTransfers: fee.fractionalFee.netOfTransfers || false
474
- }
475
- };
476
- } else if (fee.royaltyFee) {
477
- let fallbackFeeData = void 0;
478
- if (fee.royaltyFee.fallbackFee) {
479
- fallbackFeeData = {
480
- amount: Long.fromValue(
481
- fee.royaltyFee.fallbackFee.amount || 0
482
- ).toString(),
483
- denominatingTokenId: fee.royaltyFee.fallbackFee.denominatingTokenId ? new TokenId(
484
- fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ?? 0,
485
- fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ?? 0,
486
- fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ?? 0
487
- ).toString() : void 0
488
- };
489
- }
490
- return {
491
- ...commonFeeData,
492
- feeType: "ROYALTY_FEE",
493
- royaltyFee: {
494
- numerator: Long.fromValue(
495
- fee.royaltyFee.exchangeValueFraction?.numerator || 0
496
- ).toString(),
497
- denominator: Long.fromValue(
498
- fee.royaltyFee.exchangeValueFraction?.denominator || 1
499
- ).toString(),
500
- fallbackFee: fallbackFeeData
501
- }
502
- };
503
- }
504
- return {
505
- ...commonFeeData,
506
- feeType: "FIXED_FEE",
507
- fixedFee: { amount: "0" }
508
- };
509
- });
510
- }
511
- return data;
57
+ }
58
+ class FallbackHmacAdapter {
59
+ constructor(key, algorithm = "sha256") {
60
+ this.key = key;
61
+ this.algorithm = algorithm;
62
+ this.data = [];
512
63
  }
513
- static parseTokenFreeze(body) {
514
- if (!body) return void 0;
515
- const data = {};
516
- if (body.token) {
517
- data.tokenId = new TokenId(
518
- body.token.shardNum ?? 0,
519
- body.token.realmNum ?? 0,
520
- body.token.tokenNum ?? 0
521
- ).toString();
522
- }
523
- if (body.account) {
524
- data.accountId = new AccountId(
525
- body.account.shardNum ?? 0,
526
- body.account.realmNum ?? 0,
527
- body.account.accountNum ?? 0
528
- ).toString();
529
- }
530
- return data;
64
+ update(data) {
65
+ this.data.push(data);
66
+ return this;
531
67
  }
532
- static parseTokenUnfreeze(body) {
533
- if (!body) return void 0;
534
- const data = {};
535
- if (body.token) {
536
- data.tokenId = new TokenId(
537
- body.token.shardNum ?? 0,
538
- body.token.realmNum ?? 0,
539
- body.token.tokenNum ?? 0
540
- ).toString();
541
- }
542
- if (body.account) {
543
- data.accountId = new AccountId(
544
- body.account.shardNum ?? 0,
545
- body.account.realmNum ?? 0,
546
- body.account.accountNum ?? 0
547
- ).toString();
68
+ digest(encoding) {
69
+ const combined = Buffer.concat(this.data);
70
+ const hash2 = this.simpleHmac(combined, this.key);
71
+ if (encoding === "hex") {
72
+ return hash2.toString(16).padStart(8, "0");
548
73
  }
549
- return data;
74
+ return hash2.toString();
550
75
  }
551
- static parseTokenGrantKyc(body) {
552
- if (!body) return void 0;
553
- const data = {};
554
- if (body.token) {
555
- data.tokenId = new TokenId(
556
- body.token.shardNum ?? 0,
557
- body.token.realmNum ?? 0,
558
- body.token.tokenNum ?? 0
559
- ).toString();
76
+ simpleHmac(data, key) {
77
+ let hash2 = 0;
78
+ for (let i = 0; i < data.length; i++) {
79
+ const keyByte = key[i % key.length];
80
+ hash2 = (hash2 << 5) - hash2 + data[i] + keyByte & 4294967295;
560
81
  }
561
- if (body.account) {
562
- data.accountId = new AccountId(
563
- body.account.shardNum ?? 0,
564
- body.account.realmNum ?? 0,
565
- body.account.accountNum ?? 0
566
- ).toString();
567
- }
568
- return data;
82
+ return Math.abs(hash2);
569
83
  }
570
- static parseTokenRevokeKyc(body) {
571
- if (!body) return void 0;
572
- const data = {};
573
- if (body.token) {
574
- data.tokenId = new TokenId(
575
- body.token.shardNum ?? 0,
576
- body.token.realmNum ?? 0,
577
- body.token.tokenNum ?? 0
578
- ).toString();
579
- }
580
- if (body.account) {
581
- data.accountId = new AccountId(
582
- body.account.shardNum ?? 0,
583
- body.account.realmNum ?? 0,
584
- body.account.accountNum ?? 0
585
- ).toString();
84
+ }
85
+ class NodeCryptoAdapter {
86
+ constructor() {
87
+ try {
88
+ const moduleName = "crypto";
89
+ this.crypto = require(moduleName);
90
+ } catch (error) {
91
+ throw new Error("Node.js crypto module not available");
586
92
  }
587
- return data;
588
93
  }
589
- static parseTokenPause(body) {
590
- if (!body) return void 0;
591
- const data = {};
592
- if (body.token) {
593
- data.tokenId = new TokenId(
594
- body.token.shardNum ?? 0,
595
- body.token.realmNum ?? 0,
596
- body.token.tokenNum ?? 0
597
- ).toString();
598
- }
599
- return data;
94
+ createHash(algorithm) {
95
+ return new NodeHashAdapter(this.crypto.createHash(algorithm));
600
96
  }
601
- static parseTokenUnpause(body) {
602
- if (!body) return void 0;
603
- const data = {};
604
- if (body.token) {
605
- data.tokenId = new TokenId(
606
- body.token.shardNum ?? 0,
607
- body.token.realmNum ?? 0,
608
- body.token.tokenNum ?? 0
609
- ).toString();
610
- }
611
- return data;
97
+ createHmac(algorithm, key) {
98
+ return new NodeHmacAdapter(this.crypto.createHmac(algorithm, key));
612
99
  }
613
- static parseTokenWipeAccount(body) {
614
- if (!body) return void 0;
615
- const data = {};
616
- if (body.token) {
617
- data.tokenId = new TokenId(
618
- body.token.shardNum ?? 0,
619
- body.token.realmNum ?? 0,
620
- body.token.tokenNum ?? 0
621
- ).toString();
622
- }
623
- if (body.account) {
624
- data.accountId = new AccountId(
625
- body.account.shardNum ?? 0,
626
- body.account.realmNum ?? 0,
627
- body.account.accountNum ?? 0
628
- ).toString();
629
- }
630
- if (body.serialNumbers && body.serialNumbers.length > 0) {
631
- data.serialNumbers = body.serialNumbers.map(
632
- (sn) => Long.fromValue(sn).toString()
100
+ async pbkdf2(password, salt, iterations, keylen, digest) {
101
+ return new Promise((resolve, reject) => {
102
+ this.crypto.pbkdf2(
103
+ password,
104
+ salt,
105
+ iterations,
106
+ keylen,
107
+ digest,
108
+ (err, derivedKey) => {
109
+ if (err) reject(err);
110
+ else resolve(derivedKey);
111
+ }
633
112
  );
634
- }
635
- if (body.amount) {
636
- data.amount = Long.fromValue(body.amount).toString();
637
- }
638
- return data;
113
+ });
639
114
  }
640
- static parseTokenDelete(body) {
641
- if (!body) return void 0;
642
- const data = {};
643
- if (body.token) {
644
- data.tokenId = new TokenId(
645
- body.token.shardNum ?? 0,
646
- body.token.realmNum ?? 0,
647
- body.token.tokenNum ?? 0
648
- ).toString();
649
- }
650
- return data;
651
- }
652
- static parseTokenAssociate(body) {
653
- if (!body) return void 0;
654
- const data = {};
655
- if (body.account) {
656
- data.accountId = new AccountId(
657
- body.account.shardNum ?? 0,
658
- body.account.realmNum ?? 0,
659
- body.account.accountNum ?? 0
660
- ).toString();
661
- }
662
- if (body.tokens && body.tokens.length > 0) {
663
- data.tokenIds = body.tokens.map(
664
- (t) => new TokenId(
665
- t.shardNum ?? 0,
666
- t.realmNum ?? 0,
667
- t.tokenNum ?? 0
668
- ).toString()
669
- );
670
- }
671
- return data;
115
+ timingSafeEqual(a, b) {
116
+ return this.crypto.timingSafeEqual(a, b);
672
117
  }
673
- static parseTokenDissociate(body) {
674
- if (!body) return void 0;
675
- const data = {};
676
- if (body.account) {
677
- data.accountId = new AccountId(
678
- body.account.shardNum ?? 0,
679
- body.account.realmNum ?? 0,
680
- body.account.accountNum ?? 0
681
- ).toString();
682
- }
683
- if (body.tokens && body.tokens.length > 0) {
684
- data.tokenIds = body.tokens.map(
685
- (t) => new TokenId(
686
- t.shardNum ?? 0,
687
- t.realmNum ?? 0,
688
- t.tokenNum ?? 0
689
- ).toString()
690
- );
691
- }
692
- return data;
118
+ }
119
+ class WebCryptoAdapter {
120
+ createHash(algorithm) {
121
+ return new WebHashAdapter(algorithm);
122
+ }
123
+ createHmac(algorithm, key) {
124
+ return new WebHmacAdapter(key, algorithm);
125
+ }
126
+ async pbkdf2(password, salt, iterations, keylen, digest) {
127
+ const encoder = new TextEncoder();
128
+ const webCrypto = globalThis.crypto;
129
+ if (!webCrypto?.subtle) {
130
+ throw new Error("WebCrypto not available");
131
+ }
132
+ const keyMaterial = await webCrypto.subtle.importKey(
133
+ "raw",
134
+ encoder.encode(password),
135
+ { name: "PBKDF2" },
136
+ false,
137
+ ["deriveBits"]
138
+ );
139
+ const derivedBits = await webCrypto.subtle.deriveBits(
140
+ {
141
+ name: "PBKDF2",
142
+ salt: new Uint8Array(salt),
143
+ iterations,
144
+ hash: this.mapDigest(digest)
145
+ },
146
+ keyMaterial,
147
+ keylen * 8
148
+ );
149
+ return Buffer.from(derivedBits);
150
+ }
151
+ timingSafeEqual(a, b) {
152
+ if (a.length !== b.length) return false;
153
+ let result = 0;
154
+ for (let i = 0; i < a.length; i++) {
155
+ result |= a[i] ^ b[i];
156
+ }
157
+ return result === 0;
158
+ }
159
+ mapDigest(digest) {
160
+ const digestMap = {
161
+ sha256: "SHA-256",
162
+ sha1: "SHA-1",
163
+ sha512: "SHA-512"
164
+ };
165
+ return digestMap[digest.toLowerCase()] || "SHA-256";
693
166
  }
694
- /**
695
- * Parse token airdrop transaction for both fungible tokens and NFTs
696
- * Extracts airdrop transfers from transaction protobuf data
697
- */
698
- static parseTokenAirdrop(transaction) {
699
- try {
700
- const transactionBody = transaction._transactionBody;
701
- if (transactionBody?.tokenAirdrop) {
702
- const airdrop = transactionBody.tokenAirdrop;
703
- return {
704
- tokenTransfers: (airdrop.tokenTransfers || []).map(
705
- (transfer) => ({
706
- tokenId: transfer.token?.toString() || "Unknown",
707
- transfers: (transfer.transfers || []).map((t) => ({
708
- accountId: t.accountID?.toString() || "Unknown",
709
- amount: t.amount?.toString() || "0",
710
- serialNumbers: t.serialNumbers?.map((sn) => sn.toString())
711
- }))
712
- })
713
- )
714
- };
715
- }
716
- if (hasTransactionType(transaction, "tokenAirdrop")) {
717
- const txBody = extractTransactionBody(transaction);
718
- if (txBody?.tokenAirdrop) {
719
- return this.parseTokenAirdropFromProto(txBody.tokenAirdrop);
720
- }
721
- }
722
- const tx = transaction;
723
- const tokenTransfersList = tx._tokenTransfers || [];
724
- if (tokenTransfersList.length > 0) {
725
- return {
726
- tokenTransfers: tokenTransfersList.map((transfer) => ({
727
- tokenId: transfer.tokenId?.toString() || "Unknown",
728
- transfers: (transfer.transfers || []).map((t) => ({
729
- accountId: t.accountId?.toString() || "Unknown",
730
- amount: t.amount?.toString() || "0",
731
- serialNumbers: t.serialNumbers?.map((sn) => sn.toString())
732
- }))
733
- }))
734
- };
735
- }
736
- return null;
737
- } catch (error) {
738
- console.warn("[HTSParser] Failed to parse token airdrop:", error);
739
- return null;
740
- }
167
+ }
168
+ class FallbackCryptoAdapter {
169
+ createHash(algorithm) {
170
+ return new FallbackHashAdapter(algorithm);
741
171
  }
742
- /**
743
- * Parse token airdrop from protobuf data for scheduled transactions
744
- */
745
- static parseTokenAirdropFromProto(airdrop) {
746
- const tokenTransfers = [];
747
- if (airdrop.tokenTransfers) {
748
- for (const tokenTransfer of airdrop.tokenTransfers) {
749
- const token = tokenTransfer.token ? new TokenId(
750
- tokenTransfer.token.shardNum ?? 0,
751
- tokenTransfer.token.realmNum ?? 0,
752
- tokenTransfer.token.tokenNum ?? 0
753
- ) : null;
754
- const transfers = [];
755
- if (tokenTransfer.transfers) {
756
- for (const transfer of tokenTransfer.transfers) {
757
- const accountId = transfer.accountID ? new AccountId(
758
- transfer.accountID.shardNum ?? 0,
759
- transfer.accountID.realmNum ?? 0,
760
- transfer.accountID.accountNum ?? 0
761
- ) : null;
762
- transfers.push({
763
- accountId: accountId?.toString() || "Unknown",
764
- amount: transfer.amount ? Long.fromValue(transfer.amount).toString() : "0",
765
- serialNumbers: transfer.serialNumbers?.map(
766
- (sn) => Long.fromValue(sn).toString()
767
- )
768
- });
769
- }
770
- }
771
- tokenTransfers.push({
772
- tokenId: token?.toString() || "Unknown",
773
- transfers
774
- });
775
- }
776
- }
777
- return { tokenTransfers };
172
+ createHmac(algorithm, key) {
173
+ return new FallbackHmacAdapter(key, algorithm);
778
174
  }
779
- /**
780
- * Extract token creation data from Transaction object internal fields
781
- * This handles the case where token creation data is stored in Transaction internals
782
- */
783
- static extractTokenCreationFromTransaction(transaction) {
784
- try {
785
- const tx = transaction;
786
- if (tx._tokenName || tx._tokenSymbol) {
787
- const result = {
788
- tokenName: tx._tokenName || "Unknown Token",
789
- tokenSymbol: tx._tokenSymbol || "UNKNOWN",
790
- initialSupply: tx._initialSupply?.toString() || "0",
791
- decimals: Number(tx._decimals || 0),
792
- treasuryAccountId: tx._treasuryAccountId?.toString() || "Unknown"
793
- };
794
- if (tx._maxSupply) {
795
- result.maxSupply = tx._maxSupply.toString();
796
- }
797
- if (tx._tokenType) {
798
- result.tokenType = tx._tokenType.toString ? tx._tokenType.toString() : String(tx._tokenType);
799
- }
800
- if (tx._supplyType) {
801
- result.supplyType = tx._supplyType.toString ? tx._supplyType.toString() : String(tx._supplyType);
802
- }
803
- if (tx._tokenMemo) {
804
- result.memo = tx._tokenMemo;
805
- }
806
- if (tx._adminKey) {
807
- result.adminKey = tx._adminKey.toString();
808
- }
809
- if (tx._kycKey) {
810
- result.kycKey = tx._kycKey.toString();
811
- }
812
- if (tx._freezeKey) {
813
- result.freezeKey = tx._freezeKey.toString();
814
- }
815
- if (tx._wipeKey) {
816
- result.wipeKey = tx._wipeKey.toString();
817
- }
818
- if (tx._supplyKey) {
819
- result.supplyKey = tx._supplyKey.toString();
820
- }
821
- if (tx._feeScheduleKey) {
822
- result.feeScheduleKey = tx._feeScheduleKey.toString();
823
- }
824
- if (tx._pauseKey) {
825
- result.pauseKey = tx._pauseKey.toString();
826
- }
827
- if (tx._metadataKey) {
828
- result.metadataKey = tx._metadataKey.toString();
829
- }
830
- if (tx._autoRenewAccountId) {
831
- result.autoRenewAccount = tx._autoRenewAccountId.toString();
832
- }
833
- if (tx._autoRenewPeriod) {
834
- result.autoRenewPeriod = tx._autoRenewPeriod.seconds?.toString() || tx._autoRenewPeriod.toString();
835
- }
836
- if (tx._expirationTime) {
837
- result.expiry = tx._expirationTime.seconds?.toString() || tx._expirationTime.toString();
838
- }
839
- if (tx._customFees && Array.isArray(tx._customFees) && tx._customFees.length > 0) {
840
- result.customFees = tx._customFees.map((fee) => {
841
- const customFee = {
842
- feeCollectorAccountId: fee.feeCollectorAccountId?.toString() || "",
843
- feeType: "FIXED_FEE"
844
- };
845
- if (fee.fixedFee) {
846
- customFee.feeType = "FIXED_FEE";
847
- customFee.fixedFee = {
848
- amount: fee.fixedFee.amount?.toString() || "0",
849
- denominatingTokenId: fee.fixedFee.denominatingTokenId?.toString()
850
- };
851
- } else if (fee.fractionalFee) {
852
- customFee.feeType = "FRACTIONAL_FEE";
853
- customFee.fractionalFee = {
854
- numerator: fee.fractionalFee.numerator?.toString() || "0",
855
- denominator: fee.fractionalFee.denominator?.toString() || "1",
856
- minimumAmount: fee.fractionalFee.minimumAmount?.toString() || "0",
857
- maximumAmount: fee.fractionalFee.maximumAmount?.toString() || "0",
858
- netOfTransfers: fee.fractionalFee.netOfTransfers || false
859
- };
860
- } else if (fee.royaltyFee) {
861
- customFee.feeType = "ROYALTY_FEE";
862
- customFee.royaltyFee = {
863
- numerator: fee.royaltyFee.numerator?.toString() || "0",
864
- denominator: fee.royaltyFee.denominator?.toString() || "1",
865
- fallbackFee: fee.royaltyFee.fallbackFee ? {
866
- amount: fee.royaltyFee.fallbackFee.amount?.toString() || "0",
867
- denominatingTokenId: fee.royaltyFee.fallbackFee.denominatingTokenId?.toString()
868
- } : void 0
869
- };
870
- }
871
- customFee.allCollectorsAreExempt = fee.allCollectorsAreExempt || false;
872
- return customFee;
873
- });
874
- }
875
- return result;
175
+ async pbkdf2(password, salt, iterations, keylen, digest) {
176
+ const encoder = new TextEncoder();
177
+ const passwordBuffer = Buffer.from(encoder.encode(password));
178
+ let result = Buffer.alloc(keylen);
179
+ for (let i = 0; i < iterations; i++) {
180
+ const combined = Buffer.concat([passwordBuffer, salt, Buffer.from([i])]);
181
+ let hash2 = 0;
182
+ for (let j = 0; j < combined.length; j++) {
183
+ hash2 = (hash2 << 5) - hash2 + combined[j] & 4294967295;
876
184
  }
877
- return null;
878
- } catch (error) {
879
- return null;
185
+ result[i % keylen] ^= hash2 & 255;
880
186
  }
187
+ return result;
881
188
  }
882
- /**
883
- * Extract token airdrop data from Transaction object internal fields
884
- * This handles the case where airdrop data is stored in Transaction internals
885
- */
886
- static extractTokenAirdropFromTransaction(transaction) {
887
- try {
888
- const tx = transaction;
889
- if (tx._tokenAirdrops && Array.isArray(tx._tokenAirdrops)) {
890
- const tokenTransfers = tx._tokenAirdrops.map((airdrop) => ({
891
- tokenId: airdrop.tokenId?.toString() || "Unknown",
892
- transfers: (airdrop.transfers || []).map((transfer) => ({
893
- accountId: transfer.accountId?.toString() || "Unknown",
894
- amount: transfer.amount?.toString() || "0",
895
- serialNumbers: transfer.serialNumbers?.map((s) => s.toString()) || []
896
- }))
897
- }));
898
- return { tokenTransfers };
899
- }
900
- return null;
901
- } catch (error) {
902
- return null;
189
+ timingSafeEqual(a, b) {
190
+ if (a.length !== b.length) return false;
191
+ let result = 0;
192
+ for (let i = 0; i < a.length; i++) {
193
+ result |= a[i] ^ b[i];
903
194
  }
195
+ return result === 0;
904
196
  }
905
- /**
906
- * Parse HTS transaction from Transaction object with comprehensive extraction
907
- * This is the unified entry point that handles both protobuf and internal field extraction
908
- */
909
- static parseFromTransactionObject(transaction) {
910
- try {
197
+ }
198
+ function getCryptoAdapter() {
199
+ const env = detectCryptoEnvironment();
200
+ switch (env.preferredAPI) {
201
+ case "node":
911
202
  try {
912
- const bytes = transaction.toBytes ? transaction.toBytes() : void 0;
913
- if (bytes) {
914
- const decoded = proto.TransactionList.decode(bytes);
915
- if (decoded.transactionList && decoded.transactionList.length > 0) {
916
- const tx = decoded.transactionList[0];
917
- let txBody = null;
918
- if (tx.bodyBytes && tx.bodyBytes.length > 0) {
919
- txBody = proto.TransactionBody.decode(tx.bodyBytes);
920
- } else if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
921
- const signedTx = proto.SignedTransaction.decode(
922
- tx.signedTransactionBytes
923
- );
924
- if (signedTx.bodyBytes) {
925
- txBody = proto.TransactionBody.decode(signedTx.bodyBytes);
926
- }
927
- }
928
- if (txBody) {
929
- if (txBody.tokenCreation) {
930
- const tokenCreation2 = this.parseTokenCreate(
931
- txBody.tokenCreation
932
- );
933
- if (tokenCreation2) {
934
- return {
935
- type: "TOKENCREATE",
936
- humanReadableType: "Token Creation",
937
- tokenCreation: tokenCreation2
938
- };
939
- }
940
- }
941
- if (txBody.tokenMint) {
942
- const tokenMint = this.parseTokenMint(txBody.tokenMint);
943
- if (tokenMint) {
944
- return {
945
- type: "TOKENMINT",
946
- humanReadableType: "Token Mint",
947
- tokenMint
948
- };
949
- }
950
- }
951
- if (txBody.tokenBurn) {
952
- const tokenBurn = this.parseTokenBurn(txBody.tokenBurn);
953
- if (tokenBurn) {
954
- return {
955
- type: "TOKENBURN",
956
- humanReadableType: "Token Burn",
957
- tokenBurn
958
- };
959
- }
960
- }
961
- if (txBody.tokenUpdate) {
962
- const tokenUpdate = this.parseTokenUpdate(txBody.tokenUpdate);
963
- if (tokenUpdate) {
964
- return {
965
- type: "TOKENUPDATE",
966
- humanReadableType: "Token Update",
967
- tokenUpdate
968
- };
969
- }
970
- }
971
- if (txBody.tokenFreeze) {
972
- const tokenFreeze = this.parseTokenFreeze(txBody.tokenFreeze);
973
- if (tokenFreeze) {
974
- return {
975
- type: "TOKENFREEZE",
976
- humanReadableType: "Token Freeze",
977
- tokenFreeze
978
- };
979
- }
980
- }
981
- if (txBody.tokenUnfreeze) {
982
- const tokenUnfreeze = this.parseTokenUnfreeze(
983
- txBody.tokenUnfreeze
984
- );
985
- if (tokenUnfreeze) {
986
- return {
987
- type: "TOKENUNFREEZE",
988
- humanReadableType: "Token Unfreeze",
989
- tokenUnfreeze
990
- };
991
- }
992
- }
993
- if (txBody.tokenGrantKyc) {
994
- const tokenGrantKyc = this.parseTokenGrantKyc(
995
- txBody.tokenGrantKyc
996
- );
997
- if (tokenGrantKyc) {
998
- return {
999
- type: "TOKENGRANTKYC",
1000
- humanReadableType: "Token Grant KYC",
1001
- tokenGrantKyc
1002
- };
1003
- }
1004
- }
1005
- if (txBody.tokenRevokeKyc) {
1006
- const tokenRevokeKyc = this.parseTokenRevokeKyc(
1007
- txBody.tokenRevokeKyc
1008
- );
1009
- if (tokenRevokeKyc) {
1010
- return {
1011
- type: "TOKENREVOKEKYC",
1012
- humanReadableType: "Token Revoke KYC",
1013
- tokenRevokeKyc
1014
- };
1015
- }
1016
- }
1017
- if (txBody.tokenPause) {
1018
- const tokenPause = this.parseTokenPause(txBody.tokenPause);
1019
- if (tokenPause) {
1020
- return {
1021
- type: "TOKENPAUSE",
1022
- humanReadableType: "Token Pause",
1023
- tokenPause
1024
- };
1025
- }
1026
- }
1027
- if (txBody.tokenUnpause) {
1028
- const tokenUnpause = this.parseTokenUnpause(
1029
- txBody.tokenUnpause
1030
- );
1031
- if (tokenUnpause) {
1032
- return {
1033
- type: "TOKENUNPAUSE",
1034
- humanReadableType: "Token Unpause",
1035
- tokenUnpause
1036
- };
1037
- }
1038
- }
1039
- if (txBody.tokenWipe) {
1040
- const tokenWipeAccount = this.parseTokenWipeAccount(
1041
- txBody.tokenWipe
1042
- );
1043
- if (tokenWipeAccount) {
1044
- return {
1045
- type: "TOKENWIPEACCOUNT",
1046
- humanReadableType: "Token Wipe Account",
1047
- tokenWipeAccount
1048
- };
1049
- }
1050
- }
1051
- if (txBody.tokenDeletion) {
1052
- const tokenDelete = this.parseTokenDelete(txBody.tokenDeletion);
1053
- if (tokenDelete) {
1054
- return {
1055
- type: "TOKENDELETE",
1056
- humanReadableType: "Token Delete",
1057
- tokenDelete
1058
- };
1059
- }
1060
- }
1061
- if (txBody.tokenAssociate) {
1062
- const tokenAssociate = this.parseTokenAssociate(
1063
- txBody.tokenAssociate
1064
- );
1065
- if (tokenAssociate) {
1066
- return {
1067
- type: "TOKENASSOCIATE",
1068
- humanReadableType: "Token Associate",
1069
- tokenAssociate
1070
- };
1071
- }
1072
- }
1073
- if (txBody.tokenDissociate) {
1074
- const tokenDissociate = this.parseTokenDissociate(
1075
- txBody.tokenDissociate
1076
- );
1077
- if (tokenDissociate) {
1078
- return {
1079
- type: "TOKENDISSOCIATE",
1080
- humanReadableType: "Token Dissociate",
1081
- tokenDissociate
1082
- };
1083
- }
1084
- }
1085
- if (txBody.tokenFeeScheduleUpdate) {
1086
- const tokenFeeScheduleUpdate = this.parseTokenFeeScheduleUpdate(
1087
- txBody.tokenFeeScheduleUpdate
1088
- );
1089
- if (tokenFeeScheduleUpdate) {
1090
- return {
1091
- type: "TOKENFEESCHEDULEUPDATE",
1092
- humanReadableType: "Token Fee Schedule Update",
1093
- tokenFeeScheduleUpdate
1094
- };
1095
- }
1096
- }
1097
- if (txBody.tokenAirdrop) {
1098
- const tokenAirdrop2 = this.parseTokenAirdropFromProto(
1099
- txBody.tokenAirdrop
1100
- );
1101
- if (tokenAirdrop2) {
1102
- return {
1103
- type: "TOKENAIRDROP",
1104
- humanReadableType: "Token Airdrop",
1105
- tokenAirdrop: tokenAirdrop2
1106
- };
1107
- }
1108
- }
1109
- }
1110
- }
203
+ return new NodeCryptoAdapter();
204
+ } catch {
205
+ const globalCrypto = typeof globalThis !== "undefined" ? globalThis.crypto : void 0;
206
+ if (typeof globalCrypto?.subtle !== "undefined") {
207
+ return new WebCryptoAdapter();
1111
208
  }
1112
- } catch (e) {
1113
- }
1114
- const protoResult = this.parseHTSTransaction(transaction);
1115
- if (protoResult.type) {
1116
- return protoResult;
1117
- }
1118
- const tokenCreation = this.extractTokenCreationFromTransaction(transaction);
1119
- const tokenAirdrop = this.extractTokenAirdropFromTransaction(transaction);
1120
- if (tokenCreation) {
1121
- return {
1122
- type: "TOKENCREATE",
1123
- humanReadableType: "Token Creation",
1124
- tokenCreation
1125
- };
209
+ return new FallbackCryptoAdapter();
1126
210
  }
1127
- if (tokenAirdrop) {
1128
- return {
1129
- type: "TOKENAIRDROP",
1130
- humanReadableType: "Token Airdrop",
1131
- tokenAirdrop
1132
- };
1133
- }
1134
- return {};
1135
- } catch (error) {
1136
- return {};
1137
- }
211
+ case "web":
212
+ return new WebCryptoAdapter();
213
+ case "none":
214
+ default:
215
+ return new FallbackCryptoAdapter();
1138
216
  }
1139
217
  }
218
+ async function hash(content, algorithm = "sha256") {
219
+ const adapter = getCryptoAdapter();
220
+ const hasher = adapter.createHash(algorithm);
221
+ const buffer = typeof content === "string" ? Buffer.from(content) : content;
222
+ const result = hasher.update(buffer).digest("hex");
223
+ if (result instanceof Promise) {
224
+ return await result;
225
+ }
226
+ return result;
227
+ }
1140
228
  export {
1141
- HTSParser
229
+ FallbackCryptoAdapter,
230
+ FallbackHmacAdapter,
231
+ NodeCryptoAdapter,
232
+ NodeHmacAdapter,
233
+ WebCryptoAdapter,
234
+ WebHmacAdapter,
235
+ getCryptoAdapter,
236
+ hash
1142
237
  };
1143
238
  //# sourceMappingURL=standards-sdk.es131.js.map