@hashgraphonline/standards-sdk 0.1.141-canary.9 → 0.1.141-feat-hcs-21-flora-adapter.canary.b569177.46

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 (261) hide show
  1. package/README.md +13 -1
  2. package/dist/cjs/hcs-16/base-client.d.ts.map +1 -1
  3. package/dist/cjs/hcs-17/types.d.ts.map +1 -1
  4. package/dist/cjs/hcs-20/sdk.d.ts.map +1 -1
  5. package/dist/cjs/hcs-20/types.d.ts +9 -8
  6. package/dist/cjs/hcs-20/types.d.ts.map +1 -1
  7. package/dist/cjs/hcs-21/base-client.d.ts +5 -3
  8. package/dist/cjs/hcs-21/base-client.d.ts.map +1 -1
  9. package/dist/cjs/hcs-21/browser.d.ts +17 -7
  10. package/dist/cjs/hcs-21/browser.d.ts.map +1 -1
  11. package/dist/cjs/hcs-21/index.d.ts +1 -0
  12. package/dist/cjs/hcs-21/index.d.ts.map +1 -1
  13. package/dist/cjs/hcs-21/sdk.d.ts +62 -0
  14. package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
  15. package/dist/cjs/hcs-21/tx.d.ts.map +1 -1
  16. package/dist/cjs/hcs-21/types.d.ts +146 -65
  17. package/dist/cjs/hcs-21/types.d.ts.map +1 -1
  18. package/dist/cjs/hcs-21/verify.d.ts +6 -0
  19. package/dist/cjs/hcs-21/verify.d.ts.map +1 -0
  20. package/dist/cjs/inscribe/inscriber.d.ts +1 -0
  21. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  22. package/dist/cjs/inscribe/quote-cache.d.ts.map +1 -1
  23. package/dist/cjs/services/registry-broker/client.d.ts +4 -3
  24. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  25. package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
  26. package/dist/cjs/services/registry-broker/schemas.d.ts +16 -16
  27. package/dist/cjs/services/types.d.ts +1 -0
  28. package/dist/cjs/services/types.d.ts.map +1 -1
  29. package/dist/cjs/standards-sdk.cjs +2 -2
  30. package/dist/cjs/standards-sdk.cjs.map +1 -1
  31. package/dist/cjs/utils/dynamic-import.d.ts +1 -0
  32. package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
  33. package/dist/es/hcs-16/base-client.d.ts.map +1 -1
  34. package/dist/es/hcs-17/types.d.ts.map +1 -1
  35. package/dist/es/hcs-20/sdk.d.ts.map +1 -1
  36. package/dist/es/hcs-20/types.d.ts +9 -8
  37. package/dist/es/hcs-20/types.d.ts.map +1 -1
  38. package/dist/es/hcs-21/base-client.d.ts +5 -3
  39. package/dist/es/hcs-21/base-client.d.ts.map +1 -1
  40. package/dist/es/hcs-21/browser.d.ts +17 -7
  41. package/dist/es/hcs-21/browser.d.ts.map +1 -1
  42. package/dist/es/hcs-21/index.d.ts +1 -0
  43. package/dist/es/hcs-21/index.d.ts.map +1 -1
  44. package/dist/es/hcs-21/sdk.d.ts +62 -0
  45. package/dist/es/hcs-21/sdk.d.ts.map +1 -1
  46. package/dist/es/hcs-21/tx.d.ts.map +1 -1
  47. package/dist/es/hcs-21/types.d.ts +146 -65
  48. package/dist/es/hcs-21/types.d.ts.map +1 -1
  49. package/dist/es/hcs-21/verify.d.ts +6 -0
  50. package/dist/es/hcs-21/verify.d.ts.map +1 -0
  51. package/dist/es/inscribe/inscriber.d.ts +1 -0
  52. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  53. package/dist/es/inscribe/quote-cache.d.ts.map +1 -1
  54. package/dist/es/services/registry-broker/client.d.ts +4 -3
  55. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  56. package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
  57. package/dist/es/services/registry-broker/schemas.d.ts +16 -16
  58. package/dist/es/services/types.d.ts +1 -0
  59. package/dist/es/services/types.d.ts.map +1 -1
  60. package/dist/es/standards-sdk.es.js +58 -50
  61. package/dist/es/standards-sdk.es.js.map +1 -1
  62. package/dist/es/standards-sdk.es10.js +2 -2
  63. package/dist/es/standards-sdk.es100.js +26 -229
  64. package/dist/es/standards-sdk.es100.js.map +1 -1
  65. package/dist/es/standards-sdk.es101.js +228 -109
  66. package/dist/es/standards-sdk.es101.js.map +1 -1
  67. package/dist/es/standards-sdk.es102.js +94 -15
  68. package/dist/es/standards-sdk.es102.js.map +1 -1
  69. package/dist/es/standards-sdk.es103.js +30 -80
  70. package/dist/es/standards-sdk.es103.js.map +1 -1
  71. package/dist/es/standards-sdk.es104.js +80 -27
  72. package/dist/es/standards-sdk.es104.js.map +1 -1
  73. package/dist/es/standards-sdk.es105.js +25 -136
  74. package/dist/es/standards-sdk.es105.js.map +1 -1
  75. package/dist/es/standards-sdk.es106.js +140 -27
  76. package/dist/es/standards-sdk.es106.js.map +1 -1
  77. package/dist/es/standards-sdk.es107.js +27 -20
  78. package/dist/es/standards-sdk.es107.js.map +1 -1
  79. package/dist/es/standards-sdk.es108.js +18 -156
  80. package/dist/es/standards-sdk.es108.js.map +1 -1
  81. package/dist/es/standards-sdk.es109.js +148 -196
  82. package/dist/es/standards-sdk.es109.js.map +1 -1
  83. package/dist/es/standards-sdk.es110.js +160 -747
  84. package/dist/es/standards-sdk.es110.js.map +1 -1
  85. package/dist/es/standards-sdk.es111.js +786 -9
  86. package/dist/es/standards-sdk.es111.js.map +1 -1
  87. package/dist/es/standards-sdk.es112.js +13 -567
  88. package/dist/es/standards-sdk.es112.js.map +1 -1
  89. package/dist/es/standards-sdk.es113.js +541 -576
  90. package/dist/es/standards-sdk.es113.js.map +1 -1
  91. package/dist/es/standards-sdk.es114.js +601 -12
  92. package/dist/es/standards-sdk.es114.js.map +1 -1
  93. package/dist/es/standards-sdk.es115.js +13 -2
  94. package/dist/es/standards-sdk.es115.js.map +1 -1
  95. package/dist/es/standards-sdk.es116.js +2 -83
  96. package/dist/es/standards-sdk.es116.js.map +1 -1
  97. package/dist/es/standards-sdk.es117.js +80 -36
  98. package/dist/es/standards-sdk.es117.js.map +1 -1
  99. package/dist/es/standards-sdk.es118.js +39 -2
  100. package/dist/es/standards-sdk.es118.js.map +1 -1
  101. package/dist/es/standards-sdk.es119.js +2 -223
  102. package/dist/es/standards-sdk.es119.js.map +1 -1
  103. package/dist/es/standards-sdk.es12.js +1 -1
  104. package/dist/es/standards-sdk.es120.js +193 -1110
  105. package/dist/es/standards-sdk.es120.js.map +1 -1
  106. package/dist/es/standards-sdk.es121.js +1059 -225
  107. package/dist/es/standards-sdk.es121.js.map +1 -1
  108. package/dist/es/standards-sdk.es122.js +303 -419
  109. package/dist/es/standards-sdk.es122.js.map +1 -1
  110. package/dist/es/standards-sdk.es123.js +418 -351
  111. package/dist/es/standards-sdk.es123.js.map +1 -1
  112. package/dist/es/standards-sdk.es124.js +348 -785
  113. package/dist/es/standards-sdk.es124.js.map +1 -1
  114. package/dist/es/standards-sdk.es125.js +767 -183
  115. package/dist/es/standards-sdk.es125.js.map +1 -1
  116. package/dist/es/standards-sdk.es126.js +153 -1512
  117. package/dist/es/standards-sdk.es126.js.map +1 -1
  118. package/dist/es/standards-sdk.es127.js +1373 -1987
  119. package/dist/es/standards-sdk.es127.js.map +1 -1
  120. package/dist/es/standards-sdk.es128.js +2208 -67
  121. package/dist/es/standards-sdk.es128.js.map +1 -1
  122. package/dist/es/standards-sdk.es129.js +59 -79
  123. package/dist/es/standards-sdk.es129.js.map +1 -1
  124. package/dist/es/standards-sdk.es13.js +1 -1
  125. package/dist/es/standards-sdk.es130.js +80 -152
  126. package/dist/es/standards-sdk.es130.js.map +1 -1
  127. package/dist/es/standards-sdk.es131.js +159 -7
  128. package/dist/es/standards-sdk.es131.js.map +1 -1
  129. package/dist/es/standards-sdk.es132.js +7 -86
  130. package/dist/es/standards-sdk.es132.js.map +1 -1
  131. package/dist/es/standards-sdk.es133.js +65 -44
  132. package/dist/es/standards-sdk.es133.js.map +1 -1
  133. package/dist/es/standards-sdk.es134.js +65 -28
  134. package/dist/es/standards-sdk.es134.js.map +1 -1
  135. package/dist/es/standards-sdk.es135.js +69 -125
  136. package/dist/es/standards-sdk.es135.js.map +1 -1
  137. package/dist/es/standards-sdk.es136.js +28 -42
  138. package/dist/es/standards-sdk.es136.js.map +1 -1
  139. package/dist/es/standards-sdk.es137.js +132 -50
  140. package/dist/es/standards-sdk.es137.js.map +1 -1
  141. package/dist/es/standards-sdk.es138.js +36 -58
  142. package/dist/es/standards-sdk.es138.js.map +1 -1
  143. package/dist/es/standards-sdk.es139.js +12254 -746
  144. package/dist/es/standards-sdk.es139.js.map +1 -1
  145. package/dist/es/standards-sdk.es14.js +1 -1
  146. package/dist/es/standards-sdk.es140.js +746 -12254
  147. package/dist/es/standards-sdk.es140.js.map +1 -1
  148. package/dist/es/standards-sdk.es141.js +13 -168
  149. package/dist/es/standards-sdk.es141.js.map +1 -1
  150. package/dist/es/standards-sdk.es142.js +139 -289
  151. package/dist/es/standards-sdk.es142.js.map +1 -1
  152. package/dist/es/standards-sdk.es143.js +274 -298
  153. package/dist/es/standards-sdk.es143.js.map +1 -1
  154. package/dist/es/standards-sdk.es144.js +262 -369
  155. package/dist/es/standards-sdk.es144.js.map +1 -1
  156. package/dist/es/standards-sdk.es145.js +316 -194
  157. package/dist/es/standards-sdk.es145.js.map +1 -1
  158. package/dist/es/standards-sdk.es146.js +319 -64
  159. package/dist/es/standards-sdk.es146.js.map +1 -1
  160. package/dist/es/standards-sdk.es147.js +74 -15
  161. package/dist/es/standards-sdk.es147.js.map +1 -1
  162. package/dist/es/standards-sdk.es148.js +59 -0
  163. package/dist/es/standards-sdk.es148.js.map +1 -0
  164. package/dist/es/standards-sdk.es15.js +1 -1
  165. package/dist/es/standards-sdk.es16.js +1 -1
  166. package/dist/es/standards-sdk.es17.js +5 -11
  167. package/dist/es/standards-sdk.es17.js.map +1 -1
  168. package/dist/es/standards-sdk.es19.js +12 -17
  169. package/dist/es/standards-sdk.es19.js.map +1 -1
  170. package/dist/es/standards-sdk.es2.js +26 -72
  171. package/dist/es/standards-sdk.es2.js.map +1 -1
  172. package/dist/es/standards-sdk.es20.js +9 -14
  173. package/dist/es/standards-sdk.es20.js.map +1 -1
  174. package/dist/es/standards-sdk.es21.js +1 -1
  175. package/dist/es/standards-sdk.es22.js +1 -1
  176. package/dist/es/standards-sdk.es23.js +1 -1
  177. package/dist/es/standards-sdk.es24.js +1 -1
  178. package/dist/es/standards-sdk.es25.js +1 -1
  179. package/dist/es/standards-sdk.es26.js +1 -1
  180. package/dist/es/standards-sdk.es27.js +1 -1
  181. package/dist/es/standards-sdk.es28.js +12 -17
  182. package/dist/es/standards-sdk.es28.js.map +1 -1
  183. package/dist/es/standards-sdk.es3.js +2 -2
  184. package/dist/es/standards-sdk.es31.js +2 -2
  185. package/dist/es/standards-sdk.es32.js +4 -4
  186. package/dist/es/standards-sdk.es33.js +1 -1
  187. package/dist/es/standards-sdk.es36.js +6 -12
  188. package/dist/es/standards-sdk.es36.js.map +1 -1
  189. package/dist/es/standards-sdk.es37.js +4 -4
  190. package/dist/es/standards-sdk.es38.js +2 -2
  191. package/dist/es/standards-sdk.es39.js +2 -2
  192. package/dist/es/standards-sdk.es40.js +1 -1
  193. package/dist/es/standards-sdk.es41.js +1 -1
  194. package/dist/es/standards-sdk.es42.js +2 -2
  195. package/dist/es/standards-sdk.es47.js +1 -1
  196. package/dist/es/standards-sdk.es5.js +2 -2
  197. package/dist/es/standards-sdk.es52.js +1 -1
  198. package/dist/es/standards-sdk.es54.js +1 -1
  199. package/dist/es/standards-sdk.es57.js +2 -2
  200. package/dist/es/standards-sdk.es59.js +1 -1
  201. package/dist/es/standards-sdk.es6.js +2 -2
  202. package/dist/es/standards-sdk.es60.js +1 -1
  203. package/dist/es/standards-sdk.es61.js +7 -12
  204. package/dist/es/standards-sdk.es61.js.map +1 -1
  205. package/dist/es/standards-sdk.es63.js +1 -1
  206. package/dist/es/standards-sdk.es65.js +2 -2
  207. package/dist/es/standards-sdk.es66.js +3 -3
  208. package/dist/es/standards-sdk.es69.js +2 -2
  209. package/dist/es/standards-sdk.es7.js +2 -2
  210. package/dist/es/standards-sdk.es70.js +3 -3
  211. package/dist/es/standards-sdk.es71.js +2 -2
  212. package/dist/es/standards-sdk.es72.js +1 -1
  213. package/dist/es/standards-sdk.es73.js.map +1 -1
  214. package/dist/es/standards-sdk.es75.js +2 -2
  215. package/dist/es/standards-sdk.es77.js +5 -3
  216. package/dist/es/standards-sdk.es77.js.map +1 -1
  217. package/dist/es/standards-sdk.es78.js +4 -10
  218. package/dist/es/standards-sdk.es78.js.map +1 -1
  219. package/dist/es/standards-sdk.es79.js +1 -1
  220. package/dist/es/standards-sdk.es8.js +1 -1
  221. package/dist/es/standards-sdk.es80.js +27 -15
  222. package/dist/es/standards-sdk.es80.js.map +1 -1
  223. package/dist/es/standards-sdk.es82.js +12 -4
  224. package/dist/es/standards-sdk.es82.js.map +1 -1
  225. package/dist/es/standards-sdk.es83.js +31 -6
  226. package/dist/es/standards-sdk.es83.js.map +1 -1
  227. package/dist/es/standards-sdk.es84.js +179 -6
  228. package/dist/es/standards-sdk.es84.js.map +1 -1
  229. package/dist/es/standards-sdk.es85.js +258 -9
  230. package/dist/es/standards-sdk.es85.js.map +1 -1
  231. package/dist/es/standards-sdk.es86.js +55 -21
  232. package/dist/es/standards-sdk.es86.js.map +1 -1
  233. package/dist/es/standards-sdk.es87.js +22 -75
  234. package/dist/es/standards-sdk.es87.js.map +1 -1
  235. package/dist/es/standards-sdk.es88.js +45 -30
  236. package/dist/es/standards-sdk.es88.js.map +1 -1
  237. package/dist/es/standards-sdk.es89.js +57 -22
  238. package/dist/es/standards-sdk.es89.js.map +1 -1
  239. package/dist/es/standards-sdk.es90.js +28 -23
  240. package/dist/es/standards-sdk.es90.js.map +1 -1
  241. package/dist/es/standards-sdk.es91.js +23 -167
  242. package/dist/es/standards-sdk.es91.js.map +1 -1
  243. package/dist/es/standards-sdk.es92.js +158 -119
  244. package/dist/es/standards-sdk.es92.js.map +1 -1
  245. package/dist/es/standards-sdk.es93.js +68 -95
  246. package/dist/es/standards-sdk.es93.js.map +1 -1
  247. package/dist/es/standards-sdk.es94.js +136 -119
  248. package/dist/es/standards-sdk.es94.js.map +1 -1
  249. package/dist/es/standards-sdk.es95.js +139 -39
  250. package/dist/es/standards-sdk.es95.js.map +1 -1
  251. package/dist/es/standards-sdk.es96.js +42 -257
  252. package/dist/es/standards-sdk.es96.js.map +1 -1
  253. package/dist/es/standards-sdk.es97.js +243 -80
  254. package/dist/es/standards-sdk.es97.js.map +1 -1
  255. package/dist/es/standards-sdk.es98.js +47 -48
  256. package/dist/es/standards-sdk.es98.js.map +1 -1
  257. package/dist/es/standards-sdk.es99.js +100 -28
  258. package/dist/es/standards-sdk.es99.js.map +1 -1
  259. package/dist/es/utils/dynamic-import.d.ts +1 -0
  260. package/dist/es/utils/dynamic-import.d.ts.map +1 -1
  261. package/package.json +63 -65
@@ -1,1143 +1,226 @@
1
- import { proto } from "@hashgraph/proto";
2
- import { AccountId, Long, TokenId } from "@hashgraph/sdk";
3
- import { parseKey, hasTransactionType, extractTransactionBody } from "./standards-sdk.es146.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.es118.js";
2
+ import { NodeHashAdapter, WebHashAdapter, FallbackHashAdapter } from "./standards-sdk.es117.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 keyBuffer = await crypto.subtle.importKey(
29
+ "raw",
30
+ keyBytes,
31
+ { name: "HMAC", hash: this.mapAlgorithm(this.algorithm) },
32
+ false,
33
+ ["sign"]
34
+ );
35
+ const signature = await crypto.subtle.sign(
36
+ "HMAC",
37
+ keyBuffer,
38
+ new Uint8Array(combined)
39
+ );
40
+ if (encoding === "hex") {
41
+ return Array.from(new Uint8Array(signature)).map((b) => b.toString(16).padStart(2, "0")).join("");
42
+ }
43
+ return Buffer.from(signature);
44
+ }
45
+ mapAlgorithm(algorithm) {
46
+ const algorithmMap = {
47
+ sha256: "SHA-256",
48
+ sha1: "SHA-1",
49
+ sha512: "SHA-512"
364
50
  };
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;
51
+ return algorithmMap[algorithm.toLowerCase()] || "SHA-256";
371
52
  }
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;
421
- }
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;
53
+ }
54
+ class FallbackHmacAdapter {
55
+ constructor(key, algorithm = "sha256") {
56
+ this.key = key;
57
+ this.algorithm = algorithm;
58
+ this.data = [];
512
59
  }
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;
60
+ update(data) {
61
+ this.data.push(data);
62
+ return this;
531
63
  }
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();
64
+ digest(encoding) {
65
+ const combined = Buffer.concat(this.data);
66
+ const hash2 = this.simpleHmac(combined, this.key);
67
+ if (encoding === "hex") {
68
+ return hash2.toString(16).padStart(8, "0");
541
69
  }
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();
548
- }
549
- return data;
70
+ return hash2.toString();
550
71
  }
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();
560
- }
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();
72
+ simpleHmac(data, key) {
73
+ let hash2 = 0;
74
+ for (let i = 0; i < data.length; i++) {
75
+ const keyByte = key[i % key.length];
76
+ hash2 = (hash2 << 5) - hash2 + data[i] + keyByte & 4294967295;
567
77
  }
568
- return data;
78
+ return Math.abs(hash2);
569
79
  }
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();
80
+ }
81
+ class NodeCryptoAdapter {
82
+ constructor() {
83
+ try {
84
+ const moduleName = "crypto";
85
+ this.crypto = require(moduleName);
86
+ } catch (error) {
87
+ throw new Error("Node.js crypto module not available");
586
88
  }
587
- return data;
588
89
  }
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;
90
+ createHash(algorithm) {
91
+ return new NodeHashAdapter(this.crypto.createHash(algorithm));
600
92
  }
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;
93
+ createHmac(algorithm, key) {
94
+ return new NodeHmacAdapter(this.crypto.createHmac(algorithm, key));
612
95
  }
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()
96
+ async pbkdf2(password, salt, iterations, keylen, digest) {
97
+ return new Promise((resolve, reject) => {
98
+ this.crypto.pbkdf2(
99
+ password,
100
+ salt,
101
+ iterations,
102
+ keylen,
103
+ digest,
104
+ (err, derivedKey) => {
105
+ if (err) reject(err);
106
+ else resolve(derivedKey);
107
+ }
633
108
  );
634
- }
635
- if (body.amount) {
636
- data.amount = Long.fromValue(body.amount).toString();
637
- }
638
- return data;
109
+ });
639
110
  }
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;
111
+ timingSafeEqual(a, b) {
112
+ return this.crypto.timingSafeEqual(a, b);
651
113
  }
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;
114
+ }
115
+ class WebCryptoAdapter {
116
+ createHash(algorithm) {
117
+ return new WebHashAdapter(algorithm);
118
+ }
119
+ createHmac(algorithm, key) {
120
+ return new WebHmacAdapter(key, algorithm);
121
+ }
122
+ async pbkdf2(password, salt, iterations, keylen, digest) {
123
+ const encoder = new TextEncoder();
124
+ const keyMaterial = await crypto.subtle.importKey(
125
+ "raw",
126
+ encoder.encode(password),
127
+ { name: "PBKDF2" },
128
+ false,
129
+ ["deriveBits"]
130
+ );
131
+ const derivedBits = await crypto.subtle.deriveBits(
132
+ {
133
+ name: "PBKDF2",
134
+ salt: new Uint8Array(salt),
135
+ iterations,
136
+ hash: this.mapDigest(digest)
137
+ },
138
+ keyMaterial,
139
+ keylen * 8
140
+ );
141
+ return Buffer.from(derivedBits);
142
+ }
143
+ timingSafeEqual(a, b) {
144
+ if (a.length !== b.length) return false;
145
+ let result = 0;
146
+ for (let i = 0; i < a.length; i++) {
147
+ result |= a[i] ^ b[i];
148
+ }
149
+ return result === 0;
150
+ }
151
+ mapDigest(digest) {
152
+ const digestMap = {
153
+ sha256: "SHA-256",
154
+ sha1: "SHA-1",
155
+ sha512: "SHA-512"
156
+ };
157
+ return digestMap[digest.toLowerCase()] || "SHA-256";
672
158
  }
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;
159
+ }
160
+ class FallbackCryptoAdapter {
161
+ createHash(algorithm) {
162
+ return new FallbackHashAdapter(algorithm);
693
163
  }
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
- }
164
+ createHmac(algorithm, key) {
165
+ return new FallbackHmacAdapter(key, algorithm);
741
166
  }
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
- });
167
+ async pbkdf2(password, salt, iterations, keylen, digest) {
168
+ const encoder = new TextEncoder();
169
+ const passwordBuffer = Buffer.from(encoder.encode(password));
170
+ let result = Buffer.alloc(keylen);
171
+ for (let i = 0; i < iterations; i++) {
172
+ const combined = Buffer.concat([passwordBuffer, salt, Buffer.from([i])]);
173
+ let hash2 = 0;
174
+ for (let j = 0; j < combined.length; j++) {
175
+ hash2 = (hash2 << 5) - hash2 + combined[j] & 4294967295;
775
176
  }
177
+ result[i % keylen] ^= hash2 & 255;
776
178
  }
777
- return { tokenTransfers };
179
+ return result;
778
180
  }
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;
876
- }
877
- return null;
878
- } catch (error) {
879
- return null;
880
- }
881
- }
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;
181
+ timingSafeEqual(a, b) {
182
+ if (a.length !== b.length) return false;
183
+ let result = 0;
184
+ for (let i = 0; i < a.length; i++) {
185
+ result |= a[i] ^ b[i];
903
186
  }
187
+ return result === 0;
904
188
  }
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 {
189
+ }
190
+ function getCryptoAdapter() {
191
+ const env = detectCryptoEnvironment();
192
+ switch (env.preferredAPI) {
193
+ case "node":
911
194
  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
- }
1111
- }
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
- };
195
+ return new NodeCryptoAdapter();
196
+ } catch {
197
+ return new FallbackCryptoAdapter();
1126
198
  }
1127
- if (tokenAirdrop) {
1128
- return {
1129
- type: "TOKENAIRDROP",
1130
- humanReadableType: "Token Airdrop",
1131
- tokenAirdrop
1132
- };
1133
- }
1134
- return {};
1135
- } catch (error) {
1136
- return {};
1137
- }
199
+ case "web":
200
+ return new WebCryptoAdapter();
201
+ case "none":
202
+ default:
203
+ return new FallbackCryptoAdapter();
1138
204
  }
1139
205
  }
206
+ async function hash(content, algorithm = "sha256") {
207
+ const adapter = getCryptoAdapter();
208
+ const hasher = adapter.createHash(algorithm);
209
+ const buffer = typeof content === "string" ? Buffer.from(content) : content;
210
+ const result = hasher.update(buffer).digest("hex");
211
+ if (result instanceof Promise) {
212
+ return await result;
213
+ }
214
+ return result;
215
+ }
1140
216
  export {
1141
- HTSParser
217
+ FallbackCryptoAdapter,
218
+ FallbackHmacAdapter,
219
+ NodeCryptoAdapter,
220
+ NodeHmacAdapter,
221
+ WebCryptoAdapter,
222
+ WebHmacAdapter,
223
+ getCryptoAdapter,
224
+ hash
1142
225
  };
1143
226
  //# sourceMappingURL=standards-sdk.es120.js.map