@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,407 +1,72 @@
1
- import { TopicMessageSubmitTransaction, TopicId, Hbar } from "@hashgraph/sdk";
2
- import { HCS20BaseClient } from "./standards-sdk.es79.js";
3
- import { PointsValidationError, TopicRegistrationError } from "./standards-sdk.es78.js";
4
- import { BrowserHCS2Client } from "./standards-sdk.es74.js";
5
- class BrowserHCS20Client extends HCS20BaseClient {
1
+ import { Logger } from "./standards-sdk.es117.js";
2
+ import { HederaMirrorNode } from "./standards-sdk.es138.js";
3
+ import { HCS20_CONSTANTS, HCS20MessageSchema } from "./standards-sdk.es78.js";
4
+ import { InvalidAccountFormatError } from "./standards-sdk.es79.js";
5
+ class HCS20BaseClient {
6
6
  constructor(config) {
7
- super({
8
- network: config.network,
9
- logger: config.logger,
10
- mirrorNodeUrl: config.mirrorNodeUrl,
11
- registryTopicId: config.registryTopicId,
12
- publicTopicId: config.publicTopicId
13
- });
14
- this.hwc = config.hwc;
15
- this.feeAmount = config.feeAmount || 20;
16
- }
17
- /**
18
- * Get operator account ID
19
- */
20
- getOperatorId() {
21
- const accountInfo = this.hwc.getAccountInfo();
22
- if (!accountInfo?.accountId) {
23
- throw new Error("Wallet not connected");
24
- }
25
- return accountInfo.accountId;
26
- }
27
- async createRegistryTopic() {
28
- const hcs2Client = new BrowserHCS2Client({
29
- hwc: this.hwc,
30
- network: this.network
31
- });
32
- const topicCreateResponse = await hcs2Client.createRegistry();
33
- if (!topicCreateResponse.success) {
34
- throw new Error("Failed to create topic");
35
- }
36
- return topicCreateResponse.topicId;
7
+ this.logger = config.logger || new Logger({ module: "HCS20Client" });
8
+ this.network = config.network === "mainnet" ? "mainnet" : "testnet";
9
+ this.mirrorNode = new HederaMirrorNode(
10
+ this.network,
11
+ this.logger,
12
+ config.mirrorNodeUrl ? { customUrl: config.mirrorNodeUrl } : void 0
13
+ );
14
+ this.registryTopicId = config.registryTopicId || HCS20_CONSTANTS.REGISTRY_TOPIC_ID;
15
+ this.publicTopicId = config.publicTopicId || HCS20_CONSTANTS.PUBLIC_TOPIC_ID;
37
16
  }
38
17
  /**
39
- * Deploy new points
18
+ * Validate HCS-20 message using Zod schema
40
19
  */
41
- async deployPoints(options) {
42
- const operatorId = this.getOperatorId();
43
- const { progressCallback } = options;
20
+ validateMessage(message) {
44
21
  try {
45
- progressCallback?.({
46
- stage: "creating-topic",
47
- percentage: 20
48
- });
49
- let topicId;
50
- if (options.usePrivateTopic) {
51
- const publicKey = await this.mirrorNode.getPublicKey(operatorId);
52
- const hcs2Client = new BrowserHCS2Client({
53
- hwc: this.hwc,
54
- network: this.network
55
- });
56
- const topicCreateResponse = await hcs2Client.createRegistry({
57
- submitKey: publicKey.toString(),
58
- adminKey: publicKey.toString()
59
- });
60
- if (!topicCreateResponse.success) {
61
- throw new Error("Failed to create topic");
62
- }
63
- topicId = topicCreateResponse.topicId;
64
- this.logger.info(`Created private topic: ${topicId}`);
65
- } else {
66
- topicId = this.publicTopicId;
67
- }
68
- progressCallback?.({
69
- stage: "submitting-deploy",
70
- percentage: 50,
71
- topicId
72
- });
73
- const deployMessage = {
74
- p: "hcs-20",
75
- op: "deploy",
76
- name: options.name,
77
- tick: this.normalizeTick(options.tick),
78
- max: options.maxSupply,
79
- lim: options.limitPerMint,
80
- metadata: options.metadata,
81
- m: options.topicMemo
82
- };
83
- const validation = this.validateMessage(deployMessage);
84
- if (!validation.valid) {
85
- throw new PointsValidationError(
86
- "Invalid deploy message",
87
- validation.errors
22
+ HCS20MessageSchema.parse(message);
23
+ return { valid: true };
24
+ } catch (error) {
25
+ if (error.errors) {
26
+ const errors = error.errors.map(
27
+ (e) => `${e.path.join(".")}: ${e.message}`
88
28
  );
29
+ return { valid: false, errors };
89
30
  }
90
- const deployResult = await this.submitPayload(
91
- topicId,
92
- deployMessage,
93
- options.usePrivateTopic
94
- );
95
- const deployTxId = deployResult.transactionHash?.toString() || "";
96
- progressCallback?.({
97
- stage: "confirming",
98
- percentage: 80,
99
- topicId,
100
- deployTxId
101
- });
102
- await new Promise((resolve) => setTimeout(resolve, 2e3));
103
- progressCallback?.({
104
- stage: "complete",
105
- percentage: 100,
106
- topicId,
107
- deployTxId
108
- });
109
- return {
110
- name: options.name,
111
- tick: this.normalizeTick(options.tick),
112
- maxSupply: options.maxSupply,
113
- limitPerMint: options.limitPerMint,
114
- metadata: options.metadata,
115
- topicId,
116
- deployerAccountId: operatorId,
117
- currentSupply: "0",
118
- deploymentTimestamp: (/* @__PURE__ */ new Date()).toISOString(),
119
- isPrivate: options.usePrivateTopic || false
120
- };
121
- } catch (error) {
122
- progressCallback?.({
123
- stage: "complete",
124
- percentage: 100,
125
- error: error instanceof Error ? error.message : "Unknown error"
126
- });
127
- throw error;
31
+ return { valid: false, errors: [error.message] };
128
32
  }
129
33
  }
130
34
  /**
131
- * Mint points
35
+ * Normalize tick to lowercase and trimmed
132
36
  */
133
- async mintPoints(options) {
134
- const { progressCallback } = options;
135
- try {
136
- progressCallback?.({
137
- stage: "validating",
138
- percentage: 20
139
- });
140
- progressCallback?.({
141
- stage: "submitting",
142
- percentage: 50
143
- });
144
- const mintMessage = {
145
- p: "hcs-20",
146
- op: "mint",
147
- tick: this.normalizeTick(options.tick),
148
- amt: options.amount,
149
- to: this.accountToString(options.to),
150
- m: options.memo
151
- };
152
- const topicId = options.topicId || this.publicTopicId;
153
- const mintResult = await this.submitPayload(topicId, mintMessage, false);
154
- const mintTxId = mintResult.transactionHash?.toString() || "";
155
- progressCallback?.({
156
- stage: "confirming",
157
- percentage: 80,
158
- mintTxId
159
- });
160
- await new Promise((resolve) => setTimeout(resolve, 2e3));
161
- progressCallback?.({
162
- stage: "complete",
163
- percentage: 100,
164
- mintTxId
165
- });
166
- return {
167
- id: mintTxId,
168
- operation: "mint",
169
- tick: this.normalizeTick(options.tick),
170
- amount: options.amount,
171
- to: this.accountToString(options.to),
172
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
173
- sequenceNumber: 0,
174
- topicId,
175
- transactionId: mintTxId,
176
- memo: options.memo
177
- };
178
- } catch (error) {
179
- progressCallback?.({
180
- stage: "complete",
181
- percentage: 100,
182
- error: error instanceof Error ? error.message : "Unknown error"
183
- });
184
- throw error;
185
- }
37
+ normalizeTick(tick) {
38
+ return tick.toLowerCase().trim();
186
39
  }
187
40
  /**
188
- * Transfer points
41
+ * Convert account to string format
189
42
  */
190
- async transferPoints(options) {
191
- const { progressCallback } = options;
192
- try {
193
- progressCallback?.({
194
- stage: "validating-balance",
195
- percentage: 20
196
- });
197
- progressCallback?.({
198
- stage: "submitting",
199
- percentage: 50
200
- });
201
- const transferMessage = {
202
- p: "hcs-20",
203
- op: "transfer",
204
- tick: this.normalizeTick(options.tick),
205
- amt: options.amount,
206
- from: this.accountToString(options.from),
207
- to: this.accountToString(options.to),
208
- m: options.memo
209
- };
210
- const topicId = options.topicId || this.publicTopicId;
211
- const transferResult = await this.submitPayload(
212
- topicId,
213
- transferMessage,
214
- false
215
- );
216
- const transferTxId = transferResult.transactionHash?.toString() || "";
217
- progressCallback?.({
218
- stage: "confirming",
219
- percentage: 80,
220
- transferTxId
221
- });
222
- await new Promise((resolve) => setTimeout(resolve, 2e3));
223
- progressCallback?.({
224
- stage: "complete",
225
- percentage: 100,
226
- transferTxId
227
- });
228
- return {
229
- id: transferTxId,
230
- operation: "transfer",
231
- tick: this.normalizeTick(options.tick),
232
- amount: options.amount,
233
- from: this.accountToString(options.from),
234
- to: this.accountToString(options.to),
235
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
236
- sequenceNumber: 0,
237
- topicId,
238
- transactionId: transferTxId,
239
- memo: options.memo
240
- };
241
- } catch (error) {
242
- progressCallback?.({
243
- stage: "complete",
244
- percentage: 100,
245
- error: error instanceof Error ? error.message : "Unknown error"
246
- });
247
- throw error;
248
- }
249
- }
250
- /**
251
- * Burn points
252
- */
253
- async burnPoints(options) {
254
- const { progressCallback } = options;
255
- try {
256
- progressCallback?.({
257
- stage: "validating-balance",
258
- percentage: 20
259
- });
260
- progressCallback?.({
261
- stage: "submitting",
262
- percentage: 50
263
- });
264
- const burnMessage = {
265
- p: "hcs-20",
266
- op: "burn",
267
- tick: this.normalizeTick(options.tick),
268
- amt: options.amount,
269
- from: this.accountToString(options.from),
270
- m: options.memo
271
- };
272
- const topicId = options.topicId || this.publicTopicId;
273
- const burnResult = await this.submitPayload(topicId, burnMessage, false);
274
- const burnTxId = burnResult.transactionHash?.toString() || "";
275
- progressCallback?.({
276
- stage: "confirming",
277
- percentage: 80,
278
- burnTxId
279
- });
280
- await new Promise((resolve) => setTimeout(resolve, 2e3));
281
- progressCallback?.({
282
- stage: "complete",
283
- percentage: 100,
284
- burnTxId
285
- });
286
- return {
287
- id: burnTxId,
288
- operation: "burn",
289
- tick: this.normalizeTick(options.tick),
290
- amount: options.amount,
291
- from: this.accountToString(options.from),
292
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
293
- sequenceNumber: 0,
294
- topicId,
295
- transactionId: burnTxId,
296
- memo: options.memo
297
- };
298
- } catch (error) {
299
- progressCallback?.({
300
- stage: "complete",
301
- percentage: 100,
302
- error: error instanceof Error ? error.message : "Unknown error"
303
- });
304
- throw error;
43
+ accountToString(account) {
44
+ if (typeof account === "string") {
45
+ if (!HCS20_CONSTANTS.HEDERA_ACCOUNT_REGEX.test(account)) {
46
+ throw new InvalidAccountFormatError(account);
47
+ }
48
+ return account;
305
49
  }
50
+ return account.toString();
306
51
  }
307
52
  /**
308
- * Register a topic in the registry
53
+ * Convert topic to string format
309
54
  */
310
- async registerTopic(options) {
311
- const { progressCallback } = options;
312
- try {
313
- progressCallback?.({
314
- stage: "validating",
315
- percentage: 20
316
- });
317
- const registerMessage = {
318
- p: "hcs-20",
319
- op: "register",
320
- name: options.name,
321
- metadata: options.metadata,
322
- private: options.isPrivate,
323
- t_id: this.topicToString(options.topicId),
324
- m: options.memo
325
- };
326
- const validation = this.validateMessage(registerMessage);
327
- if (!validation.valid) {
328
- throw new PointsValidationError(
329
- "Invalid register message",
330
- validation.errors
331
- );
55
+ topicToString(topic) {
56
+ if (typeof topic === "string") {
57
+ if (!HCS20_CONSTANTS.HEDERA_ACCOUNT_REGEX.test(topic)) {
58
+ throw new InvalidAccountFormatError(topic);
332
59
  }
333
- progressCallback?.({
334
- stage: "submitting",
335
- percentage: 50
336
- });
337
- const registerResult = await this.submitPayload(
338
- this.registryTopicId,
339
- registerMessage,
340
- false
341
- );
342
- const registerTxId = registerResult.transactionHash?.toString() || "";
343
- progressCallback?.({
344
- stage: "confirming",
345
- percentage: 80,
346
- registerTxId
347
- });
348
- await new Promise((resolve) => setTimeout(resolve, 2e3));
349
- progressCallback?.({
350
- stage: "complete",
351
- percentage: 100,
352
- registerTxId
353
- });
354
- } catch (error) {
355
- progressCallback?.({
356
- stage: "complete",
357
- percentage: 100,
358
- error: error instanceof Error ? error.message : "Unknown error"
359
- });
360
- throw new TopicRegistrationError(
361
- error instanceof Error ? error.message : "Unknown error",
362
- this.topicToString(options.topicId)
363
- );
60
+ return topic;
364
61
  }
62
+ return topic.toString();
365
63
  }
366
64
  /**
367
- * Submit payload to topic using HWC
65
+ * NOTE: State queries (getPointsInfo, getBalance, etc.) require an external indexing service.
66
+ * The HCS-20 clients only handle message submission. Use HCS20PointsIndexer for state management.
368
67
  */
369
- async submitPayload(topicId, payload, requiresFee) {
370
- this.logger.debug(`Submitting payload to topic ${topicId}`);
371
- let message;
372
- if (typeof payload === "string") {
373
- message = payload;
374
- } else {
375
- message = JSON.stringify(payload);
376
- }
377
- const transaction = new TopicMessageSubmitTransaction().setTopicId(TopicId.fromString(topicId)).setMessage(message);
378
- if (requiresFee) {
379
- this.logger.info(
380
- "Topic requires fee payment, setting max transaction fee"
381
- );
382
- transaction.setMaxTransactionFee(new Hbar(this.feeAmount));
383
- }
384
- const transactionResponse = await this.hwc.executeTransactionWithErrorHandling(
385
- transaction,
386
- false
387
- );
388
- if (transactionResponse?.error) {
389
- this.logger.error(
390
- `Failed to submit payload: ${transactionResponse.error}`
391
- );
392
- throw new Error(`Failed to submit payload: ${transactionResponse.error}`);
393
- }
394
- if (!transactionResponse?.result) {
395
- this.logger.error(
396
- "Failed to submit message: receipt is null or undefined"
397
- );
398
- throw new Error("Failed to submit message: receipt is null or undefined");
399
- }
400
- this.logger.debug("Payload submitted successfully via HWC");
401
- return transactionResponse.result;
402
- }
403
68
  }
404
69
  export {
405
- BrowserHCS20Client
70
+ HCS20BaseClient
406
71
  };
407
72
  //# sourceMappingURL=standards-sdk.es80.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es80.js","sources":["../../src/hcs-20/browser.ts"],"sourcesContent":["/**\n * Browser implementation of HCS-20 client using Hashinals WalletConnect\n */\n\nimport {\n TopicId,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TransactionReceipt,\n Hbar,\n AccountId,\n} from '@hashgraph/sdk';\nimport { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport { HCS20BaseClient } from './base-client';\nimport {\n DeployPointsOptions,\n MintPointsOptions,\n TransferPointsOptions,\n BurnPointsOptions,\n RegisterTopicOptions,\n PointsInfo,\n PointsTransaction,\n HCS20DeployMessage,\n HCS20MintMessage,\n HCS20TransferMessage,\n HCS20BurnMessage,\n HCS20RegisterMessage,\n} from './types';\nimport {\n PointsDeploymentError,\n TopicRegistrationError,\n PointsValidationError,\n} from './errors';\nimport { BrowserHCS2Client } from '../hcs-2/browser';\n\n/**\n * Browser-specific HCS-20 client configuration\n */\nexport interface BrowserHCS20Config {\n network: 'mainnet' | 'testnet';\n hwc: HashinalsWalletConnectSDK;\n mirrorNodeUrl?: string;\n logger?: any;\n registryTopicId?: string;\n publicTopicId?: string;\n feeAmount?: number;\n}\n\n/**\n * Browser HCS-20 client for managing auditable points\n */\nexport class BrowserHCS20Client extends HCS20BaseClient {\n private hwc: HashinalsWalletConnectSDK;\n private feeAmount: number;\n\n constructor(config: BrowserHCS20Config) {\n super({\n network: config.network,\n logger: config.logger,\n mirrorNodeUrl: config.mirrorNodeUrl,\n registryTopicId: config.registryTopicId,\n publicTopicId: config.publicTopicId,\n });\n\n this.hwc = config.hwc;\n this.feeAmount = config.feeAmount || 20;\n }\n\n /**\n * Get operator account ID\n */\n private getOperatorId(): string {\n const accountInfo = this.hwc.getAccountInfo();\n if (!accountInfo?.accountId) {\n throw new Error('Wallet not connected');\n }\n return accountInfo.accountId;\n }\n\n async createRegistryTopic(): Promise<string> {\n const hcs2Client = new BrowserHCS2Client({\n hwc: this.hwc,\n network: this.network,\n });\n\n const topicCreateResponse = await hcs2Client.createRegistry();\n\n if (!topicCreateResponse.success) {\n throw new Error('Failed to create topic');\n }\n\n return topicCreateResponse.topicId;\n }\n\n /**\n * Deploy new points\n */\n async deployPoints(options: DeployPointsOptions): Promise<PointsInfo> {\n const operatorId = this.getOperatorId();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'creating-topic',\n percentage: 20,\n });\n\n let topicId: string;\n\n if (options.usePrivateTopic) {\n const publicKey = await this.mirrorNode.getPublicKey(operatorId);\n\n const hcs2Client = new BrowserHCS2Client({\n hwc: this.hwc,\n network: this.network,\n });\n\n const topicCreateResponse = await hcs2Client.createRegistry({\n submitKey: publicKey.toString(),\n adminKey: publicKey.toString(),\n });\n\n if (!topicCreateResponse.success) {\n throw new Error('Failed to create topic');\n }\n\n topicId = topicCreateResponse.topicId;\n this.logger.info(`Created private topic: ${topicId}`);\n } else {\n topicId = this.publicTopicId;\n }\n\n progressCallback?.({\n stage: 'submitting-deploy',\n percentage: 50,\n topicId,\n });\n\n const deployMessage: HCS20DeployMessage = {\n p: 'hcs-20',\n op: 'deploy',\n name: options.name,\n tick: this.normalizeTick(options.tick),\n max: options.maxSupply,\n lim: options.limitPerMint,\n metadata: options.metadata,\n m: options.topicMemo,\n };\n\n const validation = this.validateMessage(deployMessage);\n if (!validation.valid) {\n throw new PointsValidationError(\n 'Invalid deploy message',\n validation.errors!,\n );\n }\n\n const deployResult = await this.submitPayload(\n topicId,\n deployMessage,\n options.usePrivateTopic,\n );\n\n const deployTxId =\n (deployResult as any).transactionHash?.toString() || '';\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n topicId,\n deployTxId,\n });\n\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n topicId,\n deployTxId,\n });\n\n return {\n name: options.name,\n tick: this.normalizeTick(options.tick),\n maxSupply: options.maxSupply,\n limitPerMint: options.limitPerMint,\n metadata: options.metadata,\n topicId,\n deployerAccountId: operatorId,\n currentSupply: '0',\n deploymentTimestamp: new Date().toISOString(),\n isPrivate: options.usePrivateTopic || false,\n };\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Mint points\n */\n async mintPoints(options: MintPointsOptions): Promise<PointsTransaction> {\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating',\n percentage: 20,\n });\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const mintMessage: HCS20MintMessage = {\n p: 'hcs-20',\n op: 'mint',\n tick: this.normalizeTick(options.tick),\n amt: options.amount,\n to: this.accountToString(options.to),\n m: options.memo,\n };\n\n const topicId = (options as any).topicId || this.publicTopicId;\n const mintResult = await this.submitPayload(topicId, mintMessage, false);\n\n const mintTxId = (mintResult as any).transactionHash?.toString() || '';\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n mintTxId,\n });\n\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n mintTxId,\n });\n\n return {\n id: mintTxId,\n operation: 'mint',\n tick: this.normalizeTick(options.tick),\n amount: options.amount,\n to: this.accountToString(options.to),\n timestamp: new Date().toISOString(),\n sequenceNumber: 0,\n topicId,\n transactionId: mintTxId,\n memo: options.memo,\n };\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Transfer points\n */\n async transferPoints(\n options: TransferPointsOptions,\n ): Promise<PointsTransaction> {\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating-balance',\n percentage: 20,\n });\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const transferMessage: HCS20TransferMessage = {\n p: 'hcs-20',\n op: 'transfer',\n tick: this.normalizeTick(options.tick),\n amt: options.amount,\n from: this.accountToString(options.from),\n to: this.accountToString(options.to),\n m: options.memo,\n };\n\n const topicId = (options as any).topicId || this.publicTopicId;\n const transferResult = await this.submitPayload(\n topicId,\n transferMessage,\n false,\n );\n\n const transferTxId =\n (transferResult as any).transactionHash?.toString() || '';\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n transferTxId,\n });\n\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n transferTxId,\n });\n\n return {\n id: transferTxId,\n operation: 'transfer',\n tick: this.normalizeTick(options.tick),\n amount: options.amount,\n from: this.accountToString(options.from),\n to: this.accountToString(options.to),\n timestamp: new Date().toISOString(),\n sequenceNumber: 0,\n topicId,\n transactionId: transferTxId,\n memo: options.memo,\n };\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Burn points\n */\n async burnPoints(options: BurnPointsOptions): Promise<PointsTransaction> {\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating-balance',\n percentage: 20,\n });\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const burnMessage: HCS20BurnMessage = {\n p: 'hcs-20',\n op: 'burn',\n tick: this.normalizeTick(options.tick),\n amt: options.amount,\n from: this.accountToString(options.from),\n m: options.memo,\n };\n\n const topicId = (options as any).topicId || this.publicTopicId;\n const burnResult = await this.submitPayload(topicId, burnMessage, false);\n\n const burnTxId = (burnResult as any).transactionHash?.toString() || '';\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n burnTxId,\n });\n\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n burnTxId,\n });\n\n return {\n id: burnTxId,\n operation: 'burn',\n tick: this.normalizeTick(options.tick),\n amount: options.amount,\n from: this.accountToString(options.from),\n timestamp: new Date().toISOString(),\n sequenceNumber: 0,\n topicId,\n transactionId: burnTxId,\n memo: options.memo,\n };\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Register a topic in the registry\n */\n async registerTopic(options: RegisterTopicOptions): Promise<void> {\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating',\n percentage: 20,\n });\n\n const registerMessage: HCS20RegisterMessage = {\n p: 'hcs-20',\n op: 'register',\n name: options.name,\n metadata: options.metadata,\n private: options.isPrivate,\n t_id: this.topicToString(options.topicId),\n m: options.memo,\n };\n\n const validation = this.validateMessage(registerMessage);\n if (!validation.valid) {\n throw new PointsValidationError(\n 'Invalid register message',\n validation.errors!,\n );\n }\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const registerResult = await this.submitPayload(\n this.registryTopicId,\n registerMessage,\n false,\n );\n\n const registerTxId =\n (registerResult as any).transactionHash?.toString() || '';\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n registerTxId,\n });\n\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n registerTxId,\n });\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw new TopicRegistrationError(\n error instanceof Error ? error.message : 'Unknown error',\n this.topicToString(options.topicId),\n );\n }\n }\n\n /**\n * Submit payload to topic using HWC\n */\n private async submitPayload(\n topicId: string,\n payload: object | string,\n requiresFee?: boolean,\n ): Promise<TransactionReceipt> {\n this.logger.debug(`Submitting payload to topic ${topicId}`);\n\n let message: string;\n if (typeof payload === 'string') {\n message = payload;\n } else {\n message = JSON.stringify(payload);\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(topicId))\n .setMessage(message);\n\n if (requiresFee) {\n this.logger.info(\n 'Topic requires fee payment, setting max transaction fee',\n );\n transaction.setMaxTransactionFee(new Hbar(this.feeAmount));\n }\n\n const transactionResponse =\n await this.hwc.executeTransactionWithErrorHandling(\n transaction as any,\n false,\n );\n\n if (transactionResponse?.error) {\n this.logger.error(\n `Failed to submit payload: ${transactionResponse.error}`,\n );\n throw new Error(`Failed to submit payload: ${transactionResponse.error}`);\n }\n\n if (!transactionResponse?.result) {\n this.logger.error(\n 'Failed to submit message: receipt is null or undefined',\n );\n throw new Error('Failed to submit message: receipt is null or undefined');\n }\n\n this.logger.debug('Payload submitted successfully via HWC');\n return transactionResponse.result;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es80.js","sources":["../../src/hcs-20/base-client.ts"],"sourcesContent":["/**\n * Base client for HCS-20 Auditable Points operations\n */\n\nimport { AccountId, TopicId } from '@hashgraph/sdk';\nimport { Logger, ILogger } from '../utils/logger';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport type { NetworkType } from '../utils/types';\nimport {\n HCS20ClientConfig,\n HCS20MessageSchema,\n PointsInfo,\n PointsTransaction,\n HCS20_CONSTANTS,\n DeployPointsOptions,\n MintPointsOptions,\n TransferPointsOptions,\n BurnPointsOptions,\n RegisterTopicOptions,\n} from './types';\nimport { InvalidAccountFormatError } from './errors';\n\n/**\n * Abstract base class for HCS-20 clients\n */\nexport abstract class HCS20BaseClient {\n protected logger: ILogger;\n protected mirrorNode: HederaMirrorNode;\n protected network: NetworkType;\n protected registryTopicId: string;\n protected publicTopicId: string;\n\n constructor(config: HCS20ClientConfig) {\n this.logger = config.logger || new Logger({ module: 'HCS20Client' });\n this.network = config.network === 'mainnet' ? 'mainnet' : 'testnet';\n this.mirrorNode = new HederaMirrorNode(\n this.network,\n this.logger,\n config.mirrorNodeUrl ? { customUrl: config.mirrorNodeUrl } : undefined,\n );\n this.registryTopicId =\n config.registryTopicId || HCS20_CONSTANTS.REGISTRY_TOPIC_ID;\n this.publicTopicId =\n config.publicTopicId || HCS20_CONSTANTS.PUBLIC_TOPIC_ID;\n }\n\n /**\n * Deploy new points\n */\n abstract deployPoints(options: DeployPointsOptions): Promise<PointsInfo>;\n\n /**\n * Mint points\n */\n abstract mintPoints(options: MintPointsOptions): Promise<PointsTransaction>;\n\n /**\n * Transfer points\n */\n abstract transferPoints(\n options: TransferPointsOptions,\n ): Promise<PointsTransaction>;\n\n /**\n * Burn points\n */\n abstract burnPoints(options: BurnPointsOptions): Promise<PointsTransaction>;\n\n /**\n * Register a topic in the registry\n */\n abstract registerTopic(options: RegisterTopicOptions): Promise<void>;\n\n /**\n * Validate HCS-20 message using Zod schema\n */\n protected validateMessage(message: any): {\n valid: boolean;\n errors?: string[];\n } {\n try {\n HCS20MessageSchema.parse(message);\n return { valid: true };\n } catch (error: any) {\n if (error.errors) {\n const errors = error.errors.map(\n (e: any) => `${e.path.join('.')}: ${e.message}`,\n );\n return { valid: false, errors };\n }\n return { valid: false, errors: [error.message] };\n }\n }\n\n /**\n * Normalize tick to lowercase and trimmed\n */\n protected normalizeTick(tick: string): string {\n return tick.toLowerCase().trim();\n }\n\n /**\n * Convert account to string format\n */\n protected accountToString(account: string | AccountId): string {\n if (typeof account === 'string') {\n if (!HCS20_CONSTANTS.HEDERA_ACCOUNT_REGEX.test(account)) {\n throw new InvalidAccountFormatError(account);\n }\n return account;\n }\n return account.toString();\n }\n\n /**\n * Convert topic to string format\n */\n protected topicToString(topic: string | TopicId): string {\n if (typeof topic === 'string') {\n if (!HCS20_CONSTANTS.HEDERA_ACCOUNT_REGEX.test(topic)) {\n throw new InvalidAccountFormatError(topic);\n }\n return topic;\n }\n return topic.toString();\n }\n\n /**\n * NOTE: State queries (getPointsInfo, getBalance, etc.) require an external indexing service.\n * The HCS-20 clients only handle message submission. Use HCS20PointsIndexer for state management.\n */\n}\n"],"names":[],"mappings":";;;;AAyBO,MAAe,gBAAgB;AAAA,EAOpC,YAAY,QAA2B;AACrC,SAAK,SAAS,OAAO,UAAU,IAAI,OAAO,EAAE,QAAQ,eAAe;AACnE,SAAK,UAAU,OAAO,YAAY,YAAY,YAAY;AAC1D,SAAK,aAAa,IAAI;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO,gBAAgB,EAAE,WAAW,OAAO,kBAAkB;AAAA,IAAA;AAE/D,SAAK,kBACH,OAAO,mBAAmB,gBAAgB;AAC5C,SAAK,gBACH,OAAO,iBAAiB,gBAAgB;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAgCU,gBAAgB,SAGxB;AACA,QAAI;AACF,yBAAmB,MAAM,OAAO;AAChC,aAAO,EAAE,OAAO,KAAA;AAAA,IAClB,SAAS,OAAY;AACnB,UAAI,MAAM,QAAQ;AAChB,cAAM,SAAS,MAAM,OAAO;AAAA,UAC1B,CAAC,MAAW,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO;AAAA,QAAA;AAE/C,eAAO,EAAE,OAAO,OAAO,OAAA;AAAA,MACzB;AACA,aAAO,EAAE,OAAO,OAAO,QAAQ,CAAC,MAAM,OAAO,EAAA;AAAA,IAC/C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,cAAc,MAAsB;AAC5C,WAAO,KAAK,YAAA,EAAc,KAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKU,gBAAgB,SAAqC;AAC7D,QAAI,OAAO,YAAY,UAAU;AAC/B,UAAI,CAAC,gBAAgB,qBAAqB,KAAK,OAAO,GAAG;AACvD,cAAM,IAAI,0BAA0B,OAAO;AAAA,MAC7C;AACA,aAAO;AAAA,IACT;AACA,WAAO,QAAQ,SAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKU,cAAc,OAAiC;AACvD,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAI,CAAC,gBAAgB,qBAAqB,KAAK,KAAK,GAAG;AACrD,cAAM,IAAI,0BAA0B,KAAK;AAAA,MAC3C;AACA,aAAO;AAAA,IACT;AACA,WAAO,MAAM,SAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAMF;"}