@hashgraphonline/standards-sdk 0.1.141 → 0.1.143

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 (273) hide show
  1. package/README.md +24 -1
  2. package/dist/cjs/hcs-11/client.d.ts.map +1 -1
  3. package/dist/cjs/hcs-11/types.d.ts +1 -0
  4. package/dist/cjs/hcs-11/types.d.ts.map +1 -1
  5. package/dist/cjs/hcs-16/base-client.d.ts.map +1 -1
  6. package/dist/cjs/hcs-17/types.d.ts.map +1 -1
  7. package/dist/cjs/hcs-20/sdk.d.ts.map +1 -1
  8. package/dist/cjs/hcs-20/types.d.ts +9 -8
  9. package/dist/cjs/hcs-20/types.d.ts.map +1 -1
  10. package/dist/cjs/hcs-21/base-client.d.ts +14 -12
  11. package/dist/cjs/hcs-21/base-client.d.ts.map +1 -1
  12. package/dist/cjs/hcs-21/browser.d.ts +17 -7
  13. package/dist/cjs/hcs-21/browser.d.ts.map +1 -1
  14. package/dist/cjs/hcs-21/index.d.ts +1 -0
  15. package/dist/cjs/hcs-21/index.d.ts.map +1 -1
  16. package/dist/cjs/hcs-21/sdk.d.ts +70 -6
  17. package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
  18. package/dist/cjs/hcs-21/tx.d.ts +6 -2
  19. package/dist/cjs/hcs-21/tx.d.ts.map +1 -1
  20. package/dist/cjs/hcs-21/types.d.ts +751 -66
  21. package/dist/cjs/hcs-21/types.d.ts.map +1 -1
  22. package/dist/cjs/hcs-21/verify.d.ts +6 -0
  23. package/dist/cjs/hcs-21/verify.d.ts.map +1 -0
  24. package/dist/cjs/inscribe/inscriber.d.ts +3 -1
  25. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  26. package/dist/cjs/inscribe/quote-cache.d.ts.map +1 -1
  27. package/dist/cjs/inscribe/types.d.ts +7 -0
  28. package/dist/cjs/inscribe/types.d.ts.map +1 -1
  29. package/dist/cjs/services/registry-broker/client.d.ts +4 -3
  30. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  31. package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
  32. package/dist/cjs/services/registry-broker/schemas.d.ts +49 -25
  33. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  34. package/dist/cjs/services/registry-broker/types.d.ts +1 -2
  35. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  36. package/dist/cjs/services/types.d.ts +1 -0
  37. package/dist/cjs/services/types.d.ts.map +1 -1
  38. package/dist/cjs/standards-sdk.cjs +2 -2
  39. package/dist/cjs/standards-sdk.cjs.map +1 -1
  40. package/dist/cjs/utils/dynamic-import.d.ts +1 -0
  41. package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
  42. package/dist/es/hcs-11/client.d.ts.map +1 -1
  43. package/dist/es/hcs-11/types.d.ts +1 -0
  44. package/dist/es/hcs-11/types.d.ts.map +1 -1
  45. package/dist/es/hcs-16/base-client.d.ts.map +1 -1
  46. package/dist/es/hcs-17/types.d.ts.map +1 -1
  47. package/dist/es/hcs-20/sdk.d.ts.map +1 -1
  48. package/dist/es/hcs-20/types.d.ts +9 -8
  49. package/dist/es/hcs-20/types.d.ts.map +1 -1
  50. package/dist/es/hcs-21/base-client.d.ts +14 -12
  51. package/dist/es/hcs-21/base-client.d.ts.map +1 -1
  52. package/dist/es/hcs-21/browser.d.ts +17 -7
  53. package/dist/es/hcs-21/browser.d.ts.map +1 -1
  54. package/dist/es/hcs-21/index.d.ts +1 -0
  55. package/dist/es/hcs-21/index.d.ts.map +1 -1
  56. package/dist/es/hcs-21/sdk.d.ts +70 -6
  57. package/dist/es/hcs-21/sdk.d.ts.map +1 -1
  58. package/dist/es/hcs-21/tx.d.ts +6 -2
  59. package/dist/es/hcs-21/tx.d.ts.map +1 -1
  60. package/dist/es/hcs-21/types.d.ts +751 -66
  61. package/dist/es/hcs-21/types.d.ts.map +1 -1
  62. package/dist/es/hcs-21/verify.d.ts +6 -0
  63. package/dist/es/hcs-21/verify.d.ts.map +1 -0
  64. package/dist/es/inscribe/inscriber.d.ts +3 -1
  65. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  66. package/dist/es/inscribe/quote-cache.d.ts.map +1 -1
  67. package/dist/es/inscribe/types.d.ts +7 -0
  68. package/dist/es/inscribe/types.d.ts.map +1 -1
  69. package/dist/es/services/registry-broker/client.d.ts +4 -3
  70. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  71. package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
  72. package/dist/es/services/registry-broker/schemas.d.ts +49 -25
  73. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  74. package/dist/es/services/registry-broker/types.d.ts +1 -2
  75. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  76. package/dist/es/services/types.d.ts +1 -0
  77. package/dist/es/services/types.d.ts.map +1 -1
  78. package/dist/es/standards-sdk.es.js +64 -51
  79. package/dist/es/standards-sdk.es.js.map +1 -1
  80. package/dist/es/standards-sdk.es10.js +2 -2
  81. package/dist/es/standards-sdk.es100.js +26 -229
  82. package/dist/es/standards-sdk.es100.js.map +1 -1
  83. package/dist/es/standards-sdk.es101.js +228 -109
  84. package/dist/es/standards-sdk.es101.js.map +1 -1
  85. package/dist/es/standards-sdk.es102.js +94 -15
  86. package/dist/es/standards-sdk.es102.js.map +1 -1
  87. package/dist/es/standards-sdk.es103.js +30 -80
  88. package/dist/es/standards-sdk.es103.js.map +1 -1
  89. package/dist/es/standards-sdk.es104.js +80 -27
  90. package/dist/es/standards-sdk.es104.js.map +1 -1
  91. package/dist/es/standards-sdk.es105.js +25 -136
  92. package/dist/es/standards-sdk.es105.js.map +1 -1
  93. package/dist/es/standards-sdk.es106.js +140 -27
  94. package/dist/es/standards-sdk.es106.js.map +1 -1
  95. package/dist/es/standards-sdk.es107.js +27 -20
  96. package/dist/es/standards-sdk.es107.js.map +1 -1
  97. package/dist/es/standards-sdk.es108.js +18 -156
  98. package/dist/es/standards-sdk.es108.js.map +1 -1
  99. package/dist/es/standards-sdk.es109.js +148 -196
  100. package/dist/es/standards-sdk.es109.js.map +1 -1
  101. package/dist/es/standards-sdk.es110.js +160 -747
  102. package/dist/es/standards-sdk.es110.js.map +1 -1
  103. package/dist/es/standards-sdk.es111.js +786 -9
  104. package/dist/es/standards-sdk.es111.js.map +1 -1
  105. package/dist/es/standards-sdk.es112.js +13 -567
  106. package/dist/es/standards-sdk.es112.js.map +1 -1
  107. package/dist/es/standards-sdk.es113.js +541 -576
  108. package/dist/es/standards-sdk.es113.js.map +1 -1
  109. package/dist/es/standards-sdk.es114.js +601 -12
  110. package/dist/es/standards-sdk.es114.js.map +1 -1
  111. package/dist/es/standards-sdk.es115.js +13 -2
  112. package/dist/es/standards-sdk.es115.js.map +1 -1
  113. package/dist/es/standards-sdk.es116.js +2 -83
  114. package/dist/es/standards-sdk.es116.js.map +1 -1
  115. package/dist/es/standards-sdk.es117.js +80 -36
  116. package/dist/es/standards-sdk.es117.js.map +1 -1
  117. package/dist/es/standards-sdk.es118.js +39 -2
  118. package/dist/es/standards-sdk.es118.js.map +1 -1
  119. package/dist/es/standards-sdk.es119.js +2 -223
  120. package/dist/es/standards-sdk.es119.js.map +1 -1
  121. package/dist/es/standards-sdk.es12.js +1 -1
  122. package/dist/es/standards-sdk.es120.js +193 -1110
  123. package/dist/es/standards-sdk.es120.js.map +1 -1
  124. package/dist/es/standards-sdk.es121.js +1059 -225
  125. package/dist/es/standards-sdk.es121.js.map +1 -1
  126. package/dist/es/standards-sdk.es122.js +303 -419
  127. package/dist/es/standards-sdk.es122.js.map +1 -1
  128. package/dist/es/standards-sdk.es123.js +418 -351
  129. package/dist/es/standards-sdk.es123.js.map +1 -1
  130. package/dist/es/standards-sdk.es124.js +348 -754
  131. package/dist/es/standards-sdk.es124.js.map +1 -1
  132. package/dist/es/standards-sdk.es125.js +854 -178
  133. package/dist/es/standards-sdk.es125.js.map +1 -1
  134. package/dist/es/standards-sdk.es126.js +153 -1512
  135. package/dist/es/standards-sdk.es126.js.map +1 -1
  136. package/dist/es/standards-sdk.es127.js +1373 -1977
  137. package/dist/es/standards-sdk.es127.js.map +1 -1
  138. package/dist/es/standards-sdk.es128.js +2211 -50
  139. package/dist/es/standards-sdk.es128.js.map +1 -1
  140. package/dist/es/standards-sdk.es129.js +59 -79
  141. package/dist/es/standards-sdk.es129.js.map +1 -1
  142. package/dist/es/standards-sdk.es13.js +1 -1
  143. package/dist/es/standards-sdk.es130.js +80 -152
  144. package/dist/es/standards-sdk.es130.js.map +1 -1
  145. package/dist/es/standards-sdk.es131.js +159 -7
  146. package/dist/es/standards-sdk.es131.js.map +1 -1
  147. package/dist/es/standards-sdk.es132.js +7 -86
  148. package/dist/es/standards-sdk.es132.js.map +1 -1
  149. package/dist/es/standards-sdk.es133.js +65 -44
  150. package/dist/es/standards-sdk.es133.js.map +1 -1
  151. package/dist/es/standards-sdk.es134.js +65 -28
  152. package/dist/es/standards-sdk.es134.js.map +1 -1
  153. package/dist/es/standards-sdk.es135.js +28 -138
  154. package/dist/es/standards-sdk.es135.js.map +1 -1
  155. package/dist/es/standards-sdk.es136.js +133 -37
  156. package/dist/es/standards-sdk.es136.js.map +1 -1
  157. package/dist/es/standards-sdk.es137.js +42 -732
  158. package/dist/es/standards-sdk.es137.js.map +1 -1
  159. package/dist/es/standards-sdk.es138.js +746 -12254
  160. package/dist/es/standards-sdk.es138.js.map +1 -1
  161. package/dist/es/standards-sdk.es139.js +12269 -12
  162. package/dist/es/standards-sdk.es139.js.map +1 -1
  163. package/dist/es/standards-sdk.es14.js +1 -1
  164. package/dist/es/standards-sdk.es141.js +20 -2
  165. package/dist/es/standards-sdk.es141.js.map +1 -1
  166. package/dist/es/standards-sdk.es142.js +13 -168
  167. package/dist/es/standards-sdk.es142.js.map +1 -1
  168. package/dist/es/standards-sdk.es143.js +139 -289
  169. package/dist/es/standards-sdk.es143.js.map +1 -1
  170. package/dist/es/standards-sdk.es144.js +274 -298
  171. package/dist/es/standards-sdk.es144.js.map +1 -1
  172. package/dist/es/standards-sdk.es145.js +262 -369
  173. package/dist/es/standards-sdk.es145.js.map +1 -1
  174. package/dist/es/standards-sdk.es146.js +316 -194
  175. package/dist/es/standards-sdk.es146.js.map +1 -1
  176. package/dist/es/standards-sdk.es147.js +319 -64
  177. package/dist/es/standards-sdk.es147.js.map +1 -1
  178. package/dist/es/standards-sdk.es148.js +79 -0
  179. package/dist/es/standards-sdk.es148.js.map +1 -0
  180. package/dist/es/standards-sdk.es15.js +1 -1
  181. package/dist/es/standards-sdk.es16.js +1 -1
  182. package/dist/es/standards-sdk.es17.js +5 -10
  183. package/dist/es/standards-sdk.es17.js.map +1 -1
  184. package/dist/es/standards-sdk.es19.js +12 -16
  185. package/dist/es/standards-sdk.es19.js.map +1 -1
  186. package/dist/es/standards-sdk.es20.js +9 -13
  187. package/dist/es/standards-sdk.es20.js.map +1 -1
  188. package/dist/es/standards-sdk.es21.js +1 -1
  189. package/dist/es/standards-sdk.es22.js +1 -1
  190. package/dist/es/standards-sdk.es23.js +1 -1
  191. package/dist/es/standards-sdk.es24.js +1 -1
  192. package/dist/es/standards-sdk.es25.js +1 -1
  193. package/dist/es/standards-sdk.es26.js +1 -1
  194. package/dist/es/standards-sdk.es27.js +1 -1
  195. package/dist/es/standards-sdk.es28.js +16 -18
  196. package/dist/es/standards-sdk.es28.js.map +1 -1
  197. package/dist/es/standards-sdk.es29.js.map +1 -1
  198. package/dist/es/standards-sdk.es3.js +2 -2
  199. package/dist/es/standards-sdk.es31.js +2 -2
  200. package/dist/es/standards-sdk.es32.js +4 -4
  201. package/dist/es/standards-sdk.es33.js +1 -1
  202. package/dist/es/standards-sdk.es36.js +8 -12
  203. package/dist/es/standards-sdk.es36.js.map +1 -1
  204. package/dist/es/standards-sdk.es37.js +4 -4
  205. package/dist/es/standards-sdk.es38.js +2 -2
  206. package/dist/es/standards-sdk.es39.js +2 -2
  207. package/dist/es/standards-sdk.es40.js +1 -1
  208. package/dist/es/standards-sdk.es41.js +1 -1
  209. package/dist/es/standards-sdk.es42.js +2 -2
  210. package/dist/es/standards-sdk.es47.js +1 -1
  211. package/dist/es/standards-sdk.es5.js +2 -2
  212. package/dist/es/standards-sdk.es52.js +1 -1
  213. package/dist/es/standards-sdk.es54.js +1 -1
  214. package/dist/es/standards-sdk.es57.js +1 -1
  215. package/dist/es/standards-sdk.es6.js +2 -2
  216. package/dist/es/standards-sdk.es61.js +7 -11
  217. package/dist/es/standards-sdk.es61.js.map +1 -1
  218. package/dist/es/standards-sdk.es65.js +2 -2
  219. package/dist/es/standards-sdk.es66.js +3 -3
  220. package/dist/es/standards-sdk.es69.js +2 -2
  221. package/dist/es/standards-sdk.es7.js +2 -2
  222. package/dist/es/standards-sdk.es70.js +3 -3
  223. package/dist/es/standards-sdk.es71.js +2 -2
  224. package/dist/es/standards-sdk.es72.js +1 -1
  225. package/dist/es/standards-sdk.es73.js.map +1 -1
  226. package/dist/es/standards-sdk.es75.js +2 -2
  227. package/dist/es/standards-sdk.es77.js +5 -3
  228. package/dist/es/standards-sdk.es77.js.map +1 -1
  229. package/dist/es/standards-sdk.es78.js +4 -10
  230. package/dist/es/standards-sdk.es78.js.map +1 -1
  231. package/dist/es/standards-sdk.es79.js +1 -1
  232. package/dist/es/standards-sdk.es8.js +1 -1
  233. package/dist/es/standards-sdk.es80.js +113 -29
  234. package/dist/es/standards-sdk.es80.js.map +1 -1
  235. package/dist/es/standards-sdk.es82.js +23 -4
  236. package/dist/es/standards-sdk.es82.js.map +1 -1
  237. package/dist/es/standards-sdk.es83.js +39 -14
  238. package/dist/es/standards-sdk.es83.js.map +1 -1
  239. package/dist/es/standards-sdk.es84.js +198 -17
  240. package/dist/es/standards-sdk.es84.js.map +1 -1
  241. package/dist/es/standards-sdk.es85.js +256 -9
  242. package/dist/es/standards-sdk.es85.js.map +1 -1
  243. package/dist/es/standards-sdk.es86.js +55 -21
  244. package/dist/es/standards-sdk.es86.js.map +1 -1
  245. package/dist/es/standards-sdk.es87.js +22 -75
  246. package/dist/es/standards-sdk.es87.js.map +1 -1
  247. package/dist/es/standards-sdk.es88.js +45 -30
  248. package/dist/es/standards-sdk.es88.js.map +1 -1
  249. package/dist/es/standards-sdk.es89.js +57 -22
  250. package/dist/es/standards-sdk.es89.js.map +1 -1
  251. package/dist/es/standards-sdk.es90.js +28 -23
  252. package/dist/es/standards-sdk.es90.js.map +1 -1
  253. package/dist/es/standards-sdk.es91.js +23 -167
  254. package/dist/es/standards-sdk.es91.js.map +1 -1
  255. package/dist/es/standards-sdk.es92.js +158 -119
  256. package/dist/es/standards-sdk.es92.js.map +1 -1
  257. package/dist/es/standards-sdk.es93.js +68 -95
  258. package/dist/es/standards-sdk.es93.js.map +1 -1
  259. package/dist/es/standards-sdk.es94.js +136 -119
  260. package/dist/es/standards-sdk.es94.js.map +1 -1
  261. package/dist/es/standards-sdk.es95.js +139 -39
  262. package/dist/es/standards-sdk.es95.js.map +1 -1
  263. package/dist/es/standards-sdk.es96.js +42 -257
  264. package/dist/es/standards-sdk.es96.js.map +1 -1
  265. package/dist/es/standards-sdk.es97.js +243 -80
  266. package/dist/es/standards-sdk.es97.js.map +1 -1
  267. package/dist/es/standards-sdk.es98.js +47 -48
  268. package/dist/es/standards-sdk.es98.js.map +1 -1
  269. package/dist/es/standards-sdk.es99.js +100 -28
  270. package/dist/es/standards-sdk.es99.js.map +1 -1
  271. package/dist/es/utils/dynamic-import.d.ts +1 -0
  272. package/dist/es/utils/dynamic-import.d.ts.map +1 -1
  273. package/package.json +3 -3
@@ -1,116 +1,235 @@
1
- import { Client } from "@hashgraph/sdk";
2
- import { Logger } from "./standards-sdk.es105.js";
3
- import { createNodeOperatorContext } from "./standards-sdk.es135.js";
4
- import { buildHcs18CreateDiscoveryTopicTx, buildHcs18AnnounceMessage, buildHcs18SubmitDiscoveryMessageTx, buildHcs18ProposeMessage, buildHcs18RespondMessage, buildHcs18CompleteMessage, buildHcs18WithdrawMessage } from "./standards-sdk.es103.js";
5
- import { HCS18BaseClient } from "./standards-sdk.es104.js";
6
- class HCS18Client extends HCS18BaseClient {
7
- constructor(config) {
8
- super({
9
- network: config.network,
10
- logger: Logger.getInstance({
11
- level: config.logLevel || "info",
12
- module: "HCS-18",
13
- silent: config.silent
14
- })
15
- });
16
- this.operatorCtx = createNodeOperatorContext({
17
- network: this.network,
18
- operatorId: config.operatorId,
19
- operatorKey: config.operatorKey,
20
- mirrorNode: this.mirrorNode,
21
- logger: this.logger,
22
- client: Client.forName(this.network)
23
- });
24
- this.client = this.operatorCtx.client;
25
- }
26
- async ensureInitialized() {
27
- await this.operatorCtx.ensureInitialized();
28
- }
29
- async createDiscoveryTopic(options) {
30
- await this.ensureInitialized();
31
- const ttl = options?.ttlSeconds;
32
- let operatorPublicKey;
33
- try {
34
- operatorPublicKey = this.operatorCtx.operatorKey.publicKey;
35
- } catch {
36
- operatorPublicKey = void 0;
1
+ var DiscoveryOperation = /* @__PURE__ */ ((DiscoveryOperation2) => {
2
+ DiscoveryOperation2["ANNOUNCE"] = "announce";
3
+ DiscoveryOperation2["PROPOSE"] = "propose";
4
+ DiscoveryOperation2["RESPOND"] = "respond";
5
+ DiscoveryOperation2["COMPLETE"] = "complete";
6
+ DiscoveryOperation2["WITHDRAW"] = "withdraw";
7
+ return DiscoveryOperation2;
8
+ })(DiscoveryOperation || {});
9
+ function isRecord(value) {
10
+ return typeof value === "object" && value !== null;
11
+ }
12
+ function isString(value) {
13
+ return typeof value === "string";
14
+ }
15
+ function isNumber(value) {
16
+ return typeof value === "number" && Number.isFinite(value);
17
+ }
18
+ function isArray(value) {
19
+ return Array.isArray(value);
20
+ }
21
+ function isArrayOfStrings(value) {
22
+ return Array.isArray(value) && value.every(isString);
23
+ }
24
+ function isDiscoveryMessage(value) {
25
+ if (!isRecord(value)) {
26
+ return false;
27
+ }
28
+ if (value.p !== "hcs-18") {
29
+ return false;
30
+ }
31
+ if (!isString(value.op)) {
32
+ return false;
33
+ }
34
+ const op = value.op;
35
+ if (!["announce", "propose", "respond", "complete", "withdraw"].includes(op)) {
36
+ return false;
37
+ }
38
+ return "data" in value;
39
+ }
40
+ function isAnnounceMessage(value) {
41
+ if (!isDiscoveryMessage(value)) {
42
+ return false;
43
+ }
44
+ const v = value;
45
+ if (v.op !== "announce") {
46
+ return false;
47
+ }
48
+ if (!isRecord(v.data)) {
49
+ return false;
50
+ }
51
+ const d = v.data;
52
+ if (!isString(d.account)) {
53
+ return false;
54
+ }
55
+ if (!isRecord(d.petal)) {
56
+ return false;
57
+ }
58
+ const petal = d.petal;
59
+ if (!isString(petal.name) || !isNumber(petal.priority)) {
60
+ return false;
61
+ }
62
+ if (!isRecord(d.capabilities)) {
63
+ return false;
64
+ }
65
+ const caps = d.capabilities;
66
+ if (!isArrayOfStrings(caps.protocols)) {
67
+ return false;
68
+ }
69
+ if ("valid_for" in d && d.valid_for !== void 0 && d.valid_for !== null && !isNumber(d.valid_for)) {
70
+ return false;
71
+ }
72
+ return true;
73
+ }
74
+ function isProposeMessage(value) {
75
+ if (!isDiscoveryMessage(value)) {
76
+ return false;
77
+ }
78
+ const v = value;
79
+ if (v.op !== "propose") {
80
+ return false;
81
+ }
82
+ if (!isRecord(v.data)) {
83
+ return false;
84
+ }
85
+ const d = v.data;
86
+ if (!isString(d.proposer)) {
87
+ return false;
88
+ }
89
+ if (!isArray(d.members)) {
90
+ return false;
91
+ }
92
+ const membersOk = d.members.every((m) => {
93
+ if (!isRecord(m)) {
94
+ return false;
37
95
  }
38
- const tx = buildHcs18CreateDiscoveryTopicTx({
39
- ttlSeconds: ttl,
40
- adminKey: options?.adminKey,
41
- submitKey: options?.submitKey,
42
- operatorPublicKey,
43
- memoOverride: options?.memoOverride
44
- });
45
- const resp = await tx.execute(this.client);
46
- const receipt = await resp.getReceipt(this.client);
47
- const topicId = receipt.topicId?.toString();
48
- if (!topicId) {
49
- throw new Error("Failed to create discovery topic");
96
+ const mr = m;
97
+ if (!isString(mr.account)) {
98
+ return false;
50
99
  }
51
- return { topicId, receipt };
52
- }
53
- async announce(params) {
54
- await this.ensureInitialized();
55
- const message = buildHcs18AnnounceMessage(params.data);
56
- const tx = buildHcs18SubmitDiscoveryMessageTx({
57
- topicId: params.discoveryTopicId,
58
- message,
59
- transactionMemo: params.memo
60
- });
61
- const resp = await tx.execute(this.client);
62
- const receipt = await resp.getReceipt(this.client);
63
- const seq = receipt.topicSequenceNumber.toNumber();
64
- return { receipt, sequenceNumber: seq };
65
- }
66
- async propose(params) {
67
- await this.ensureInitialized();
68
- const message = buildHcs18ProposeMessage(params.data);
69
- const tx = buildHcs18SubmitDiscoveryMessageTx({
70
- topicId: params.discoveryTopicId,
71
- message,
72
- transactionMemo: params.memo
73
- });
74
- const resp = await tx.execute(this.client);
75
- const receipt = await resp.getReceipt(this.client);
76
- const seq = receipt.topicSequenceNumber.toNumber();
77
- return { receipt, sequenceNumber: seq };
78
- }
79
- async respond(params) {
80
- await this.ensureInitialized();
81
- const message = buildHcs18RespondMessage(params.data);
82
- const tx = buildHcs18SubmitDiscoveryMessageTx({
83
- topicId: params.discoveryTopicId,
84
- message,
85
- transactionMemo: params.memo
86
- });
87
- const resp = await tx.execute(this.client);
88
- return await resp.getReceipt(this.client);
89
- }
90
- async complete(params) {
91
- await this.ensureInitialized();
92
- const message = buildHcs18CompleteMessage(params.data);
93
- const tx = buildHcs18SubmitDiscoveryMessageTx({
94
- topicId: params.discoveryTopicId,
95
- message,
96
- transactionMemo: params.memo
97
- });
98
- const resp = await tx.execute(this.client);
99
- return await resp.getReceipt(this.client);
100
- }
101
- async withdraw(params) {
102
- await this.ensureInitialized();
103
- const message = buildHcs18WithdrawMessage(params.data);
104
- const tx = buildHcs18SubmitDiscoveryMessageTx({
105
- topicId: params.discoveryTopicId,
106
- message,
107
- transactionMemo: params.memo
108
- });
109
- const resp = await tx.execute(this.client);
110
- return await resp.getReceipt(this.client);
100
+ if (!("priority" in mr) || !isNumber(mr.priority)) {
101
+ return false;
102
+ }
103
+ if ("announce_seq" in mr && mr.announce_seq !== void 0 && mr.announce_seq !== null && !isNumber(mr.announce_seq)) {
104
+ return false;
105
+ }
106
+ return true;
107
+ });
108
+ if (!membersOk) {
109
+ return false;
110
+ }
111
+ if (!isRecord(d.config)) {
112
+ return false;
111
113
  }
114
+ const cfg = d.config;
115
+ if (!isString(cfg.name) || !isNumber(cfg.threshold)) {
116
+ return false;
117
+ }
118
+ return true;
119
+ }
120
+ function isRespondMessage(value) {
121
+ if (!isDiscoveryMessage(value)) {
122
+ return false;
123
+ }
124
+ const v = value;
125
+ if (v.op !== "respond") {
126
+ return false;
127
+ }
128
+ if (!isRecord(v.data)) {
129
+ return false;
130
+ }
131
+ const d = v.data;
132
+ if (!isString(d.responder)) {
133
+ return false;
134
+ }
135
+ if (!isNumber(d.proposal_seq)) {
136
+ return false;
137
+ }
138
+ if (!isString(d.decision)) {
139
+ return false;
140
+ }
141
+ if (!["accept", "reject"].includes(d.decision)) {
142
+ return false;
143
+ }
144
+ return true;
145
+ }
146
+ function isCompleteMessage(value) {
147
+ if (!isDiscoveryMessage(value)) {
148
+ return false;
149
+ }
150
+ const v = value;
151
+ if (v.op !== "complete") {
152
+ return false;
153
+ }
154
+ if (!isRecord(v.data)) {
155
+ return false;
156
+ }
157
+ const d = v.data;
158
+ if (!isString(d.proposer)) {
159
+ return false;
160
+ }
161
+ if (!isNumber(d.proposal_seq)) {
162
+ return false;
163
+ }
164
+ if (!isString(d.flora_account)) {
165
+ return false;
166
+ }
167
+ if (!isRecord(d.topics)) {
168
+ return false;
169
+ }
170
+ const t = d.topics;
171
+ if (!isString(t.communication) || !isString(t.transaction) || !isString(t.state)) {
172
+ return false;
173
+ }
174
+ return true;
175
+ }
176
+ function isWithdrawMessage(value) {
177
+ if (!isDiscoveryMessage(value)) {
178
+ return false;
179
+ }
180
+ const v = value;
181
+ if (v.op !== "withdraw") {
182
+ return false;
183
+ }
184
+ if (!isRecord(v.data)) {
185
+ return false;
186
+ }
187
+ const d = v.data;
188
+ if (!isString(d.account)) {
189
+ return false;
190
+ }
191
+ if (!isNumber(d.announce_seq)) {
192
+ return false;
193
+ }
194
+ if ("reason" in d && d.reason !== void 0 && d.reason !== null && !isString(d.reason)) {
195
+ return false;
196
+ }
197
+ return true;
112
198
  }
199
+ var DiscoveryState = /* @__PURE__ */ ((DiscoveryState2) => {
200
+ DiscoveryState2["IDLE"] = "idle";
201
+ DiscoveryState2["ANNOUNCED"] = "announced";
202
+ DiscoveryState2["PROPOSING"] = "proposing";
203
+ DiscoveryState2["FORMING"] = "forming";
204
+ DiscoveryState2["ACTIVE"] = "active";
205
+ DiscoveryState2["WITHDRAWN"] = "withdrawn";
206
+ return DiscoveryState2;
207
+ })(DiscoveryState || {});
208
+ class DiscoveryError extends Error {
209
+ constructor(message, code) {
210
+ super(message);
211
+ this.code = code;
212
+ this.name = "DiscoveryError";
213
+ }
214
+ }
215
+ const DiscoveryErrorCodes = {
216
+ INVALID_MESSAGE: "INVALID_MESSAGE",
217
+ TIMEOUT: "TIMEOUT",
218
+ INSUFFICIENT_PETALS: "INSUFFICIENT_PETALS",
219
+ FLORA_CREATION_FAILED: "FLORA_CREATION_FAILED",
220
+ ALREADY_IN_DISCOVERY: "ALREADY_IN_DISCOVERY",
221
+ INVALID_STATE: "INVALID_STATE"
222
+ };
113
223
  export {
114
- HCS18Client
224
+ DiscoveryError,
225
+ DiscoveryErrorCodes,
226
+ DiscoveryOperation,
227
+ DiscoveryState,
228
+ isAnnounceMessage,
229
+ isCompleteMessage,
230
+ isDiscoveryMessage,
231
+ isProposeMessage,
232
+ isRespondMessage,
233
+ isWithdrawMessage
115
234
  };
116
235
  //# sourceMappingURL=standards-sdk.es101.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es101.js","sources":["../../src/hcs-18/sdk.ts"],"sourcesContent":["import {\n Client,\n TopicCreateTransaction,\n TransactionReceipt,\n} from '@hashgraph/sdk';\nimport { Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport type { MaybeKey } from '../common/tx/tx-utils';\nimport { buildHcs18CreateDiscoveryTopicTx } from './tx';\nimport { HCS18BaseClient } from './base-client';\nimport type {\n AnnounceData,\n ProposeData,\n RespondData,\n CompleteMessage,\n WithdrawMessage,\n DiscoveryMessage,\n} from './types';\nimport {\n buildHcs18SubmitDiscoveryMessageTx,\n buildHcs18AnnounceMessage,\n buildHcs18ProposeMessage,\n buildHcs18RespondMessage,\n buildHcs18CompleteMessage,\n buildHcs18WithdrawMessage,\n} from './tx';\n\nexport interface SDKHCS18ClientConfig {\n network: NetworkType;\n operatorId: string;\n operatorKey: string | import('@hashgraph/sdk').PrivateKey;\n logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent';\n silent?: boolean;\n}\n\nexport class HCS18Client extends HCS18BaseClient {\n private readonly operatorCtx: NodeOperatorContext;\n private readonly client: Client;\n\n constructor(config: SDKHCS18ClientConfig) {\n super({\n network: config.network,\n logger: Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-18',\n silent: config.silent,\n }),\n });\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: config.operatorId,\n operatorKey: config.operatorKey,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: Client.forName(this.network),\n });\n this.client = this.operatorCtx.client;\n }\n\n private async ensureInitialized(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n async createDiscoveryTopic(options?: {\n ttlSeconds?: number;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n memoOverride?: string;\n }): Promise<{ topicId: string; receipt: TransactionReceipt }> {\n await this.ensureInitialized();\n const ttl = options?.ttlSeconds;\n\n let operatorPublicKey: import('@hashgraph/sdk').PublicKey | undefined;\n try {\n operatorPublicKey = this.operatorCtx.operatorKey.publicKey;\n } catch {\n operatorPublicKey = undefined;\n }\n const tx: TopicCreateTransaction = buildHcs18CreateDiscoveryTopicTx({\n ttlSeconds: ttl,\n adminKey: options?.adminKey,\n submitKey: options?.submitKey,\n operatorPublicKey,\n memoOverride: options?.memoOverride,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const topicId = receipt.topicId?.toString();\n if (!topicId) {\n throw new Error('Failed to create discovery topic');\n }\n return { topicId, receipt };\n }\n\n async announce(params: {\n discoveryTopicId: string;\n data: AnnounceData;\n memo?: string;\n }): Promise<{ receipt: TransactionReceipt; sequenceNumber: number }> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18AnnounceMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const seq = receipt.topicSequenceNumber.toNumber();\n return { receipt, sequenceNumber: seq };\n }\n\n async propose(params: {\n discoveryTopicId: string;\n data: ProposeData;\n memo?: string;\n }): Promise<{ receipt: TransactionReceipt; sequenceNumber: number }> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18ProposeMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const seq = receipt.topicSequenceNumber.toNumber();\n return { receipt, sequenceNumber: seq };\n }\n\n async respond(params: {\n discoveryTopicId: string;\n data: RespondData;\n memo?: string;\n }): Promise<TransactionReceipt> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18RespondMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n\n async complete(params: {\n discoveryTopicId: string;\n data: CompleteMessage['data'];\n memo?: string;\n }): Promise<TransactionReceipt> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18CompleteMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n\n async withdraw(params: {\n discoveryTopicId: string;\n data: WithdrawMessage['data'];\n memo?: string;\n }): Promise<TransactionReceipt> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18WithdrawMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es101.js","sources":["../../src/hcs-18/types.ts"],"sourcesContent":["/**\n * HCS-18 Flora Discovery Protocol Types\n * Standard for Flora discovery and formation\n */\n\nimport { TopicId } from '@hashgraph/sdk';\n\n/**\n * HCS-18 Operation types\n */\nexport enum DiscoveryOperation {\n ANNOUNCE = 'announce',\n PROPOSE = 'propose',\n RESPOND = 'respond',\n COMPLETE = 'complete',\n WITHDRAW = 'withdraw',\n}\n\n/**\n * Base HCS-18 message structure\n */\nexport interface DiscoveryMessage {\n p: 'hcs-18';\n op: DiscoveryOperation;\n data: any;\n}\n\n/**\n * Announce operation data\n */\nexport interface AnnounceData {\n account: string;\n petal: {\n name: string;\n priority: number;\n };\n capabilities: {\n protocols: string[];\n resources?: {\n compute?: 'high' | 'medium' | 'low';\n storage?: 'high' | 'medium' | 'low';\n bandwidth?: 'high' | 'medium' | 'low';\n };\n group_preferences?: {\n sizes?: number[];\n threshold_ratios?: number[];\n };\n };\n valid_for?: number;\n}\n\n/**\n * Propose operation data\n */\nexport interface ProposeData {\n proposer: string;\n members: Array<{\n account: string;\n announce_seq?: number;\n priority: number;\n status?: 'existing' | 'proposed';\n }>;\n config: {\n name: string;\n threshold: number;\n purpose?: string;\n reason?: string;\n };\n existing_flora?: string;\n}\n\n/**\n * Respond operation data\n */\nexport interface RespondData {\n responder: string;\n proposal_seq: number;\n decision: 'accept' | 'reject';\n reason?: string;\n accepted_seq?: number;\n}\n\n/**\n * Complete operation data\n */\nexport interface CompleteData {\n proposal_seq: number;\n flora_account: string;\n topics: {\n communication: string;\n transaction: string;\n state: string;\n };\n proposer?: string;\n}\n\n/**\n * Withdraw operation data\n */\nexport interface WithdrawData {\n account: string;\n announce_seq: number;\n reason?: string;\n}\n\n/**\n * Typed message operations\n */\nexport interface AnnounceMessage extends DiscoveryMessage {\n op: DiscoveryOperation.ANNOUNCE;\n data: AnnounceData;\n}\n\nexport interface ProposeMessage extends DiscoveryMessage {\n op: DiscoveryOperation.PROPOSE;\n data: ProposeData;\n}\n\nexport interface RespondMessage extends DiscoveryMessage {\n op: DiscoveryOperation.RESPOND;\n data: RespondData;\n}\n\nexport interface CompleteMessage extends DiscoveryMessage {\n op: DiscoveryOperation.COMPLETE;\n data: CompleteData;\n}\n\nexport interface WithdrawMessage extends DiscoveryMessage {\n op: DiscoveryOperation.WITHDRAW;\n data: WithdrawData;\n}\n\n/**\n * Type guard utilities for HCS-18 discovery messages\n */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nfunction isArrayOfStrings(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(isString);\n}\n\nexport function isDiscoveryMessage(value: unknown): value is DiscoveryMessage {\n if (!isRecord(value)) {\n return false;\n }\n if (value.p !== 'hcs-18') {\n return false;\n }\n if (!isString((value as Record<string, unknown>).op)) {\n return false;\n }\n const op = (value as Record<string, unknown>).op as string;\n if (\n !['announce', 'propose', 'respond', 'complete', 'withdraw'].includes(op)\n ) {\n return false;\n }\n return 'data' in value;\n}\n\nexport function isAnnounceMessage(value: unknown): value is AnnounceMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.ANNOUNCE) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.account)) {\n return false;\n }\n if (!isRecord(d.petal)) {\n return false;\n }\n const petal = d.petal as Record<string, unknown>;\n if (!isString(petal.name) || !isNumber(petal.priority)) {\n return false;\n }\n if (!isRecord(d.capabilities)) {\n return false;\n }\n const caps = d.capabilities as Record<string, unknown>;\n if (!isArrayOfStrings(caps.protocols)) {\n return false;\n }\n if (\n 'valid_for' in d &&\n d.valid_for !== undefined &&\n d.valid_for !== null &&\n !isNumber(d.valid_for)\n ) {\n return false;\n }\n return true;\n}\n\nexport function isProposeMessage(value: unknown): value is ProposeMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.PROPOSE) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.proposer)) {\n return false;\n }\n if (!isArray(d.members)) {\n return false;\n }\n const membersOk = (d.members as unknown[]).every(m => {\n if (!isRecord(m)) {\n return false;\n }\n const mr = m as Record<string, unknown>;\n if (!isString(mr.account)) {\n return false;\n }\n if (!('priority' in mr) || !isNumber(mr.priority)) {\n return false;\n }\n if (\n 'announce_seq' in mr &&\n mr.announce_seq !== undefined &&\n mr.announce_seq !== null &&\n !isNumber(mr.announce_seq)\n ) {\n return false;\n }\n return true;\n });\n if (!membersOk) {\n return false;\n }\n if (!isRecord(d.config)) {\n return false;\n }\n const cfg = d.config as Record<string, unknown>;\n if (!isString(cfg.name) || !isNumber(cfg.threshold)) {\n return false;\n }\n return true;\n}\n\nexport function isRespondMessage(value: unknown): value is RespondMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.RESPOND) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.responder)) {\n return false;\n }\n if (!isNumber(d.proposal_seq)) {\n return false;\n }\n if (!isString(d.decision)) {\n return false;\n }\n if (!['accept', 'reject'].includes(d.decision as string)) {\n return false;\n }\n return true;\n}\n\nexport function isCompleteMessage(value: unknown): value is CompleteMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.COMPLETE) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.proposer)) {\n return false;\n }\n if (!isNumber(d.proposal_seq)) {\n return false;\n }\n if (!isString(d.flora_account)) {\n return false;\n }\n if (!isRecord(d.topics)) {\n return false;\n }\n const t = d.topics as Record<string, unknown>;\n if (\n !isString(t.communication) ||\n !isString(t.transaction) ||\n !isString(t.state)\n ) {\n return false;\n }\n return true;\n}\n\nexport function isWithdrawMessage(value: unknown): value is WithdrawMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.WITHDRAW) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.account)) {\n return false;\n }\n if (!isNumber(d.announce_seq)) {\n return false;\n }\n if (\n 'reason' in d &&\n d.reason !== undefined &&\n d.reason !== null &&\n !isString(d.reason)\n ) {\n return false;\n }\n return true;\n}\n\n/**\n * Discovery phase states\n */\nexport enum DiscoveryState {\n IDLE = 'idle',\n ANNOUNCED = 'announced',\n PROPOSING = 'proposing',\n FORMING = 'forming',\n ACTIVE = 'active',\n WITHDRAWN = 'withdrawn',\n}\n\n/**\n * Tracked announcement with HCS metadata\n */\nexport interface TrackedAnnouncement {\n account: string;\n sequenceNumber: number;\n consensusTimestamp: string;\n data: AnnounceData;\n}\n\n/**\n * Tracked proposal with HCS metadata\n */\nexport interface TrackedProposal {\n sequenceNumber: number;\n consensusTimestamp: string;\n proposer: string;\n data: ProposeData;\n responses: Map<string, RespondData>;\n}\n\n/**\n * Flora formation result\n */\nexport interface FloraFormation {\n proposalSeq: number;\n floraAccountId: string;\n topics: {\n communication: string;\n transaction: string;\n state: string;\n };\n members: Array<{\n account: string;\n priority: number;\n }>;\n threshold: number;\n createdAt: Date;\n}\n\n/**\n * Discovery event types for monitoring\n */\nexport interface DiscoveryEvent {\n type:\n | 'announcement_received'\n | 'proposal_received'\n | 'response_received'\n | 'formation_complete'\n | 'withdrawal_received'\n | 'discovery_timeout';\n sequenceNumber?: number;\n timestamp: Date;\n data: any;\n}\n\n/**\n * Discovery configuration\n */\nexport interface DiscoveryConfig {\n discoveryTopicId: string | TopicId;\n accountId: string;\n petalName: string;\n priority: number;\n capabilities: {\n protocols: string[];\n resources?: AnnounceData['capabilities']['resources'];\n group_preferences?: AnnounceData['capabilities']['group_preferences'];\n };\n autoAcceptFilter?: (proposal: TrackedProposal) => boolean;\n onDiscoveryEvent?: (event: DiscoveryEvent) => void;\n memberPrivateKeys?: Map<string, string>;\n}\n\n/**\n * HCS-18 Errors\n */\nexport class DiscoveryError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n ) {\n super(message);\n this.name = 'DiscoveryError';\n }\n}\n\nexport const DiscoveryErrorCodes = {\n INVALID_MESSAGE: 'INVALID_MESSAGE',\n TIMEOUT: 'TIMEOUT',\n INSUFFICIENT_PETALS: 'INSUFFICIENT_PETALS',\n FLORA_CREATION_FAILED: 'FLORA_CREATION_FAILED',\n ALREADY_IN_DISCOVERY: 'ALREADY_IN_DISCOVERY',\n INVALID_STATE: 'INVALID_STATE',\n} as const;\n"],"names":["DiscoveryOperation","DiscoveryState"],"mappings":"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"}
@@ -1,37 +1,116 @@
1
- import { buildHcs18AnnounceMessage, buildHcs18ProposeMessage, buildHcs18RespondMessage, buildHcs18CompleteMessage, buildHcs18WithdrawMessage } from "./standards-sdk.es103.js";
2
- class HCS18BrowserClient {
1
+ import { Client } from "@hashgraph/sdk";
2
+ import { Logger } from "./standards-sdk.es106.js";
3
+ import { createNodeOperatorContext } from "./standards-sdk.es136.js";
4
+ import { buildHcs18CreateDiscoveryTopicTx, buildHcs18AnnounceMessage, buildHcs18SubmitDiscoveryMessageTx, buildHcs18ProposeMessage, buildHcs18RespondMessage, buildHcs18CompleteMessage, buildHcs18WithdrawMessage } from "./standards-sdk.es104.js";
5
+ import { HCS18BaseClient } from "./standards-sdk.es105.js";
6
+ class HCS18Client extends HCS18BaseClient {
3
7
  constructor(config) {
4
- this.hwc = config.hwc;
8
+ super({
9
+ network: config.network,
10
+ logger: Logger.getInstance({
11
+ level: config.logLevel || "info",
12
+ module: "HCS-18",
13
+ silent: config.silent
14
+ })
15
+ });
16
+ this.operatorCtx = createNodeOperatorContext({
17
+ network: this.network,
18
+ operatorId: config.operatorId,
19
+ operatorKey: config.operatorKey,
20
+ mirrorNode: this.mirrorNode,
21
+ logger: this.logger,
22
+ client: Client.forName(this.network)
23
+ });
24
+ this.client = this.operatorCtx.client;
5
25
  }
6
- async submit(discoveryTopicId, message) {
7
- const receipt = await this.hwc.submitMessageToTopic(
8
- discoveryTopicId,
9
- JSON.stringify(message)
10
- );
11
- return receipt;
26
+ async ensureInitialized() {
27
+ await this.operatorCtx.ensureInitialized();
28
+ }
29
+ async createDiscoveryTopic(options) {
30
+ await this.ensureInitialized();
31
+ const ttl = options?.ttlSeconds;
32
+ let operatorPublicKey;
33
+ try {
34
+ operatorPublicKey = this.operatorCtx.operatorKey.publicKey;
35
+ } catch {
36
+ operatorPublicKey = void 0;
37
+ }
38
+ const tx = buildHcs18CreateDiscoveryTopicTx({
39
+ ttlSeconds: ttl,
40
+ adminKey: options?.adminKey,
41
+ submitKey: options?.submitKey,
42
+ operatorPublicKey,
43
+ memoOverride: options?.memoOverride
44
+ });
45
+ const resp = await tx.execute(this.client);
46
+ const receipt = await resp.getReceipt(this.client);
47
+ const topicId = receipt.topicId?.toString();
48
+ if (!topicId) {
49
+ throw new Error("Failed to create discovery topic");
50
+ }
51
+ return { topicId, receipt };
12
52
  }
13
53
  async announce(params) {
54
+ await this.ensureInitialized();
14
55
  const message = buildHcs18AnnounceMessage(params.data);
15
- return this.submit(params.discoveryTopicId, message);
56
+ const tx = buildHcs18SubmitDiscoveryMessageTx({
57
+ topicId: params.discoveryTopicId,
58
+ message,
59
+ transactionMemo: params.memo
60
+ });
61
+ const resp = await tx.execute(this.client);
62
+ const receipt = await resp.getReceipt(this.client);
63
+ const seq = receipt.topicSequenceNumber.toNumber();
64
+ return { receipt, sequenceNumber: seq };
16
65
  }
17
66
  async propose(params) {
67
+ await this.ensureInitialized();
18
68
  const message = buildHcs18ProposeMessage(params.data);
19
- return this.submit(params.discoveryTopicId, message);
69
+ const tx = buildHcs18SubmitDiscoveryMessageTx({
70
+ topicId: params.discoveryTopicId,
71
+ message,
72
+ transactionMemo: params.memo
73
+ });
74
+ const resp = await tx.execute(this.client);
75
+ const receipt = await resp.getReceipt(this.client);
76
+ const seq = receipt.topicSequenceNumber.toNumber();
77
+ return { receipt, sequenceNumber: seq };
20
78
  }
21
79
  async respond(params) {
80
+ await this.ensureInitialized();
22
81
  const message = buildHcs18RespondMessage(params.data);
23
- return this.submit(params.discoveryTopicId, message);
82
+ const tx = buildHcs18SubmitDiscoveryMessageTx({
83
+ topicId: params.discoveryTopicId,
84
+ message,
85
+ transactionMemo: params.memo
86
+ });
87
+ const resp = await tx.execute(this.client);
88
+ return await resp.getReceipt(this.client);
24
89
  }
25
90
  async complete(params) {
91
+ await this.ensureInitialized();
26
92
  const message = buildHcs18CompleteMessage(params.data);
27
- return this.submit(params.discoveryTopicId, message);
93
+ const tx = buildHcs18SubmitDiscoveryMessageTx({
94
+ topicId: params.discoveryTopicId,
95
+ message,
96
+ transactionMemo: params.memo
97
+ });
98
+ const resp = await tx.execute(this.client);
99
+ return await resp.getReceipt(this.client);
28
100
  }
29
101
  async withdraw(params) {
102
+ await this.ensureInitialized();
30
103
  const message = buildHcs18WithdrawMessage(params.data);
31
- return this.submit(params.discoveryTopicId, message);
104
+ const tx = buildHcs18SubmitDiscoveryMessageTx({
105
+ topicId: params.discoveryTopicId,
106
+ message,
107
+ transactionMemo: params.memo
108
+ });
109
+ const resp = await tx.execute(this.client);
110
+ return await resp.getReceipt(this.client);
32
111
  }
33
112
  }
34
113
  export {
35
- HCS18BrowserClient
114
+ HCS18Client
36
115
  };
37
116
  //# sourceMappingURL=standards-sdk.es102.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es102.js","sources":["../../src/hcs-18/browser.ts"],"sourcesContent":["import type { TransactionReceipt } from '@hashgraph/sdk';\nimport { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport type {\n DiscoveryMessage,\n AnnounceData,\n ProposeData,\n RespondData,\n CompleteMessage,\n WithdrawMessage,\n} from './types';\nimport {\n buildHcs18AnnounceMessage,\n buildHcs18ProposeMessage,\n buildHcs18RespondMessage,\n buildHcs18CompleteMessage,\n buildHcs18WithdrawMessage,\n} from './tx';\n\nexport interface BrowserHCS18ClientConfig {\n network: 'testnet' | 'mainnet';\n hwc: HashinalsWalletConnectSDK;\n}\n\nexport class HCS18BrowserClient {\n private readonly hwc: HashinalsWalletConnectSDK;\n\n constructor(config: BrowserHCS18ClientConfig) {\n this.hwc = config.hwc;\n }\n\n async submit(\n discoveryTopicId: string,\n message: DiscoveryMessage,\n ): Promise<TransactionReceipt> {\n const receipt = await this.hwc.submitMessageToTopic(\n discoveryTopicId,\n JSON.stringify(message),\n );\n return receipt;\n }\n\n async announce(params: {\n discoveryTopicId: string;\n data: AnnounceData;\n }): Promise<TransactionReceipt> {\n const message = buildHcs18AnnounceMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n\n async propose(params: {\n discoveryTopicId: string;\n data: ProposeData;\n }): Promise<TransactionReceipt> {\n const message = buildHcs18ProposeMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n\n async respond(params: {\n discoveryTopicId: string;\n data: RespondData;\n }): Promise<TransactionReceipt> {\n const message = buildHcs18RespondMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n\n async complete(params: {\n discoveryTopicId: string;\n data: CompleteMessage['data'];\n }): Promise<TransactionReceipt> {\n const message = buildHcs18CompleteMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n\n async withdraw(params: {\n discoveryTopicId: string;\n data: WithdrawMessage['data'];\n }): Promise<TransactionReceipt> {\n const message = buildHcs18WithdrawMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n}\n"],"names":[],"mappings":";AAuBO,MAAM,mBAAmB;AAAA,EAG9B,YAAY,QAAkC;AAC5C,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,MAAM,OACJ,kBACA,SAC6B;AAC7B,UAAM,UAAU,MAAM,KAAK,IAAI;AAAA,MAC7B;AAAA,MACA,KAAK,UAAU,OAAO;AAAA,IAAA;AAExB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,QAGiB;AAC9B,UAAM,UAAU,0BAA0B,OAAO,IAAI;AACrD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,QAAQ,QAGkB;AAC9B,UAAM,UAAU,yBAAyB,OAAO,IAAI;AACpD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,QAAQ,QAGkB;AAC9B,UAAM,UAAU,yBAAyB,OAAO,IAAI;AACpD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,SAAS,QAGiB;AAC9B,UAAM,UAAU,0BAA0B,OAAO,IAAI;AACrD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,SAAS,QAGiB;AAC9B,UAAM,UAAU,0BAA0B,OAAO,IAAI;AACrD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es102.js","sources":["../../src/hcs-18/sdk.ts"],"sourcesContent":["import {\n Client,\n TopicCreateTransaction,\n TransactionReceipt,\n} from '@hashgraph/sdk';\nimport { Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport type { MaybeKey } from '../common/tx/tx-utils';\nimport { buildHcs18CreateDiscoveryTopicTx } from './tx';\nimport { HCS18BaseClient } from './base-client';\nimport type {\n AnnounceData,\n ProposeData,\n RespondData,\n CompleteMessage,\n WithdrawMessage,\n DiscoveryMessage,\n} from './types';\nimport {\n buildHcs18SubmitDiscoveryMessageTx,\n buildHcs18AnnounceMessage,\n buildHcs18ProposeMessage,\n buildHcs18RespondMessage,\n buildHcs18CompleteMessage,\n buildHcs18WithdrawMessage,\n} from './tx';\n\nexport interface SDKHCS18ClientConfig {\n network: NetworkType;\n operatorId: string;\n operatorKey: string | import('@hashgraph/sdk').PrivateKey;\n logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent';\n silent?: boolean;\n}\n\nexport class HCS18Client extends HCS18BaseClient {\n private readonly operatorCtx: NodeOperatorContext;\n private readonly client: Client;\n\n constructor(config: SDKHCS18ClientConfig) {\n super({\n network: config.network,\n logger: Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-18',\n silent: config.silent,\n }),\n });\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: config.operatorId,\n operatorKey: config.operatorKey,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: Client.forName(this.network),\n });\n this.client = this.operatorCtx.client;\n }\n\n private async ensureInitialized(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n async createDiscoveryTopic(options?: {\n ttlSeconds?: number;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n memoOverride?: string;\n }): Promise<{ topicId: string; receipt: TransactionReceipt }> {\n await this.ensureInitialized();\n const ttl = options?.ttlSeconds;\n\n let operatorPublicKey: import('@hashgraph/sdk').PublicKey | undefined;\n try {\n operatorPublicKey = this.operatorCtx.operatorKey.publicKey;\n } catch {\n operatorPublicKey = undefined;\n }\n const tx: TopicCreateTransaction = buildHcs18CreateDiscoveryTopicTx({\n ttlSeconds: ttl,\n adminKey: options?.adminKey,\n submitKey: options?.submitKey,\n operatorPublicKey,\n memoOverride: options?.memoOverride,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const topicId = receipt.topicId?.toString();\n if (!topicId) {\n throw new Error('Failed to create discovery topic');\n }\n return { topicId, receipt };\n }\n\n async announce(params: {\n discoveryTopicId: string;\n data: AnnounceData;\n memo?: string;\n }): Promise<{ receipt: TransactionReceipt; sequenceNumber: number }> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18AnnounceMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const seq = receipt.topicSequenceNumber.toNumber();\n return { receipt, sequenceNumber: seq };\n }\n\n async propose(params: {\n discoveryTopicId: string;\n data: ProposeData;\n memo?: string;\n }): Promise<{ receipt: TransactionReceipt; sequenceNumber: number }> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18ProposeMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const seq = receipt.topicSequenceNumber.toNumber();\n return { receipt, sequenceNumber: seq };\n }\n\n async respond(params: {\n discoveryTopicId: string;\n data: RespondData;\n memo?: string;\n }): Promise<TransactionReceipt> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18RespondMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n\n async complete(params: {\n discoveryTopicId: string;\n data: CompleteMessage['data'];\n memo?: string;\n }): Promise<TransactionReceipt> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18CompleteMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n\n async withdraw(params: {\n discoveryTopicId: string;\n data: WithdrawMessage['data'];\n memo?: string;\n }): Promise<TransactionReceipt> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18WithdrawMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n}\n"],"names":[],"mappings":"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"}