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

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 (249) hide show
  1. package/README.md +13 -1
  2. package/dist/cjs/hcs-16/base-client.d.ts.map +1 -1
  3. package/dist/cjs/hcs-17/types.d.ts.map +1 -1
  4. package/dist/cjs/hcs-20/sdk.d.ts.map +1 -1
  5. package/dist/cjs/hcs-20/types.d.ts +9 -8
  6. package/dist/cjs/hcs-20/types.d.ts.map +1 -1
  7. package/dist/cjs/hcs-21/base-client.d.ts +4 -3
  8. package/dist/cjs/hcs-21/base-client.d.ts.map +1 -1
  9. package/dist/cjs/hcs-21/index.d.ts +1 -0
  10. package/dist/cjs/hcs-21/index.d.ts.map +1 -1
  11. package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
  12. package/dist/cjs/hcs-21/tx.d.ts.map +1 -1
  13. package/dist/cjs/hcs-21/types.d.ts +135 -64
  14. package/dist/cjs/hcs-21/types.d.ts.map +1 -1
  15. package/dist/cjs/hcs-21/verify.d.ts +6 -0
  16. package/dist/cjs/hcs-21/verify.d.ts.map +1 -0
  17. package/dist/cjs/inscribe/inscriber.d.ts +1 -0
  18. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  19. package/dist/cjs/inscribe/quote-cache.d.ts.map +1 -1
  20. package/dist/cjs/services/registry-broker/client.d.ts +4 -3
  21. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  22. package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
  23. package/dist/cjs/services/registry-broker/schemas.d.ts +16 -16
  24. package/dist/cjs/standards-sdk.cjs +2 -2
  25. package/dist/cjs/standards-sdk.cjs.map +1 -1
  26. package/dist/cjs/utils/dynamic-import.d.ts +1 -0
  27. package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
  28. package/dist/es/hcs-16/base-client.d.ts.map +1 -1
  29. package/dist/es/hcs-17/types.d.ts.map +1 -1
  30. package/dist/es/hcs-20/sdk.d.ts.map +1 -1
  31. package/dist/es/hcs-20/types.d.ts +9 -8
  32. package/dist/es/hcs-20/types.d.ts.map +1 -1
  33. package/dist/es/hcs-21/base-client.d.ts +4 -3
  34. package/dist/es/hcs-21/base-client.d.ts.map +1 -1
  35. package/dist/es/hcs-21/index.d.ts +1 -0
  36. package/dist/es/hcs-21/index.d.ts.map +1 -1
  37. package/dist/es/hcs-21/sdk.d.ts.map +1 -1
  38. package/dist/es/hcs-21/tx.d.ts.map +1 -1
  39. package/dist/es/hcs-21/types.d.ts +135 -64
  40. package/dist/es/hcs-21/types.d.ts.map +1 -1
  41. package/dist/es/hcs-21/verify.d.ts +6 -0
  42. package/dist/es/hcs-21/verify.d.ts.map +1 -0
  43. package/dist/es/inscribe/inscriber.d.ts +1 -0
  44. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  45. package/dist/es/inscribe/quote-cache.d.ts.map +1 -1
  46. package/dist/es/services/registry-broker/client.d.ts +4 -3
  47. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  48. package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
  49. package/dist/es/services/registry-broker/schemas.d.ts +16 -16
  50. package/dist/es/standards-sdk.es.js +58 -50
  51. package/dist/es/standards-sdk.es.js.map +1 -1
  52. package/dist/es/standards-sdk.es10.js +2 -2
  53. package/dist/es/standards-sdk.es100.js +26 -229
  54. package/dist/es/standards-sdk.es100.js.map +1 -1
  55. package/dist/es/standards-sdk.es101.js +228 -109
  56. package/dist/es/standards-sdk.es101.js.map +1 -1
  57. package/dist/es/standards-sdk.es102.js +94 -15
  58. package/dist/es/standards-sdk.es102.js.map +1 -1
  59. package/dist/es/standards-sdk.es103.js +30 -80
  60. package/dist/es/standards-sdk.es103.js.map +1 -1
  61. package/dist/es/standards-sdk.es104.js +80 -27
  62. package/dist/es/standards-sdk.es104.js.map +1 -1
  63. package/dist/es/standards-sdk.es105.js +25 -136
  64. package/dist/es/standards-sdk.es105.js.map +1 -1
  65. package/dist/es/standards-sdk.es106.js +140 -27
  66. package/dist/es/standards-sdk.es106.js.map +1 -1
  67. package/dist/es/standards-sdk.es107.js +27 -20
  68. package/dist/es/standards-sdk.es107.js.map +1 -1
  69. package/dist/es/standards-sdk.es108.js +18 -156
  70. package/dist/es/standards-sdk.es108.js.map +1 -1
  71. package/dist/es/standards-sdk.es109.js +148 -196
  72. package/dist/es/standards-sdk.es109.js.map +1 -1
  73. package/dist/es/standards-sdk.es110.js +160 -747
  74. package/dist/es/standards-sdk.es110.js.map +1 -1
  75. package/dist/es/standards-sdk.es111.js +786 -9
  76. package/dist/es/standards-sdk.es111.js.map +1 -1
  77. package/dist/es/standards-sdk.es112.js +13 -567
  78. package/dist/es/standards-sdk.es112.js.map +1 -1
  79. package/dist/es/standards-sdk.es113.js +541 -576
  80. package/dist/es/standards-sdk.es113.js.map +1 -1
  81. package/dist/es/standards-sdk.es114.js +601 -12
  82. package/dist/es/standards-sdk.es114.js.map +1 -1
  83. package/dist/es/standards-sdk.es115.js +13 -2
  84. package/dist/es/standards-sdk.es115.js.map +1 -1
  85. package/dist/es/standards-sdk.es116.js +2 -83
  86. package/dist/es/standards-sdk.es116.js.map +1 -1
  87. package/dist/es/standards-sdk.es117.js +80 -36
  88. package/dist/es/standards-sdk.es117.js.map +1 -1
  89. package/dist/es/standards-sdk.es118.js +39 -2
  90. package/dist/es/standards-sdk.es118.js.map +1 -1
  91. package/dist/es/standards-sdk.es119.js +2 -223
  92. package/dist/es/standards-sdk.es119.js.map +1 -1
  93. package/dist/es/standards-sdk.es12.js +1 -1
  94. package/dist/es/standards-sdk.es120.js +193 -1110
  95. package/dist/es/standards-sdk.es120.js.map +1 -1
  96. package/dist/es/standards-sdk.es121.js +1059 -225
  97. package/dist/es/standards-sdk.es121.js.map +1 -1
  98. package/dist/es/standards-sdk.es122.js +303 -419
  99. package/dist/es/standards-sdk.es122.js.map +1 -1
  100. package/dist/es/standards-sdk.es123.js +418 -351
  101. package/dist/es/standards-sdk.es123.js.map +1 -1
  102. package/dist/es/standards-sdk.es124.js +348 -785
  103. package/dist/es/standards-sdk.es124.js.map +1 -1
  104. package/dist/es/standards-sdk.es125.js +767 -183
  105. package/dist/es/standards-sdk.es125.js.map +1 -1
  106. package/dist/es/standards-sdk.es126.js +153 -1512
  107. package/dist/es/standards-sdk.es126.js.map +1 -1
  108. package/dist/es/standards-sdk.es127.js +1373 -1987
  109. package/dist/es/standards-sdk.es127.js.map +1 -1
  110. package/dist/es/standards-sdk.es128.js +2208 -67
  111. package/dist/es/standards-sdk.es128.js.map +1 -1
  112. package/dist/es/standards-sdk.es129.js +59 -79
  113. package/dist/es/standards-sdk.es129.js.map +1 -1
  114. package/dist/es/standards-sdk.es13.js +1 -1
  115. package/dist/es/standards-sdk.es130.js +80 -152
  116. package/dist/es/standards-sdk.es130.js.map +1 -1
  117. package/dist/es/standards-sdk.es131.js +159 -7
  118. package/dist/es/standards-sdk.es131.js.map +1 -1
  119. package/dist/es/standards-sdk.es132.js +7 -86
  120. package/dist/es/standards-sdk.es132.js.map +1 -1
  121. package/dist/es/standards-sdk.es133.js +65 -44
  122. package/dist/es/standards-sdk.es133.js.map +1 -1
  123. package/dist/es/standards-sdk.es134.js +65 -28
  124. package/dist/es/standards-sdk.es134.js.map +1 -1
  125. package/dist/es/standards-sdk.es135.js +69 -125
  126. package/dist/es/standards-sdk.es135.js.map +1 -1
  127. package/dist/es/standards-sdk.es136.js +28 -42
  128. package/dist/es/standards-sdk.es136.js.map +1 -1
  129. package/dist/es/standards-sdk.es137.js +132 -50
  130. package/dist/es/standards-sdk.es137.js.map +1 -1
  131. package/dist/es/standards-sdk.es138.js +36 -58
  132. package/dist/es/standards-sdk.es138.js.map +1 -1
  133. package/dist/es/standards-sdk.es139.js +56 -766
  134. package/dist/es/standards-sdk.es139.js.map +1 -1
  135. package/dist/es/standards-sdk.es14.js +1 -1
  136. package/dist/es/standards-sdk.es140.js +746 -12254
  137. package/dist/es/standards-sdk.es140.js.map +1 -1
  138. package/dist/es/standards-sdk.es141.js +12235 -133
  139. package/dist/es/standards-sdk.es141.js.map +1 -1
  140. package/dist/es/standards-sdk.es142.js +13 -318
  141. package/dist/es/standards-sdk.es142.js.map +1 -1
  142. package/dist/es/standards-sdk.es143.js +120 -294
  143. package/dist/es/standards-sdk.es143.js.map +1 -1
  144. package/dist/es/standards-sdk.es144.js +191 -322
  145. package/dist/es/standards-sdk.es144.js.map +1 -1
  146. package/dist/es/standards-sdk.es145.js +294 -279
  147. package/dist/es/standards-sdk.es145.js.map +1 -1
  148. package/dist/es/standards-sdk.es146.js +440 -63
  149. package/dist/es/standards-sdk.es146.js.map +1 -1
  150. package/dist/es/standards-sdk.es147.js +327 -13
  151. package/dist/es/standards-sdk.es147.js.map +1 -1
  152. package/dist/es/standards-sdk.es148.js +79 -0
  153. package/dist/es/standards-sdk.es148.js.map +1 -0
  154. package/dist/es/standards-sdk.es15.js +1 -1
  155. package/dist/es/standards-sdk.es16.js +1 -1
  156. package/dist/es/standards-sdk.es17.js +5 -11
  157. package/dist/es/standards-sdk.es17.js.map +1 -1
  158. package/dist/es/standards-sdk.es19.js +12 -17
  159. package/dist/es/standards-sdk.es19.js.map +1 -1
  160. package/dist/es/standards-sdk.es2.js +26 -72
  161. package/dist/es/standards-sdk.es2.js.map +1 -1
  162. package/dist/es/standards-sdk.es20.js +9 -14
  163. package/dist/es/standards-sdk.es20.js.map +1 -1
  164. package/dist/es/standards-sdk.es21.js +1 -1
  165. package/dist/es/standards-sdk.es22.js +1 -1
  166. package/dist/es/standards-sdk.es23.js +1 -1
  167. package/dist/es/standards-sdk.es24.js +1 -1
  168. package/dist/es/standards-sdk.es25.js +1 -1
  169. package/dist/es/standards-sdk.es26.js +1 -1
  170. package/dist/es/standards-sdk.es27.js +1 -1
  171. package/dist/es/standards-sdk.es28.js +12 -17
  172. package/dist/es/standards-sdk.es28.js.map +1 -1
  173. package/dist/es/standards-sdk.es3.js +2 -2
  174. package/dist/es/standards-sdk.es31.js +2 -2
  175. package/dist/es/standards-sdk.es32.js +4 -4
  176. package/dist/es/standards-sdk.es33.js +1 -1
  177. package/dist/es/standards-sdk.es36.js +6 -12
  178. package/dist/es/standards-sdk.es36.js.map +1 -1
  179. package/dist/es/standards-sdk.es37.js +4 -4
  180. package/dist/es/standards-sdk.es38.js +2 -2
  181. package/dist/es/standards-sdk.es39.js +2 -2
  182. package/dist/es/standards-sdk.es40.js +1 -1
  183. package/dist/es/standards-sdk.es41.js +1 -1
  184. package/dist/es/standards-sdk.es42.js +2 -2
  185. package/dist/es/standards-sdk.es47.js +1 -1
  186. package/dist/es/standards-sdk.es5.js +2 -2
  187. package/dist/es/standards-sdk.es52.js +1 -1
  188. package/dist/es/standards-sdk.es54.js +1 -1
  189. package/dist/es/standards-sdk.es57.js +2 -2
  190. package/dist/es/standards-sdk.es59.js +1 -1
  191. package/dist/es/standards-sdk.es6.js +2 -2
  192. package/dist/es/standards-sdk.es60.js +1 -1
  193. package/dist/es/standards-sdk.es61.js +7 -12
  194. package/dist/es/standards-sdk.es61.js.map +1 -1
  195. package/dist/es/standards-sdk.es63.js +1 -1
  196. package/dist/es/standards-sdk.es65.js +2 -2
  197. package/dist/es/standards-sdk.es66.js +3 -3
  198. package/dist/es/standards-sdk.es69.js +2 -2
  199. package/dist/es/standards-sdk.es7.js +2 -2
  200. package/dist/es/standards-sdk.es70.js +3 -3
  201. package/dist/es/standards-sdk.es71.js +2 -2
  202. package/dist/es/standards-sdk.es72.js +1 -1
  203. package/dist/es/standards-sdk.es73.js.map +1 -1
  204. package/dist/es/standards-sdk.es75.js +2 -2
  205. package/dist/es/standards-sdk.es77.js +5 -3
  206. package/dist/es/standards-sdk.es77.js.map +1 -1
  207. package/dist/es/standards-sdk.es78.js +4 -10
  208. package/dist/es/standards-sdk.es78.js.map +1 -1
  209. package/dist/es/standards-sdk.es79.js +1 -1
  210. package/dist/es/standards-sdk.es8.js +1 -1
  211. package/dist/es/standards-sdk.es80.js +26 -15
  212. package/dist/es/standards-sdk.es80.js.map +1 -1
  213. package/dist/es/standards-sdk.es82.js +12 -4
  214. package/dist/es/standards-sdk.es82.js.map +1 -1
  215. package/dist/es/standards-sdk.es83.js +7 -6
  216. package/dist/es/standards-sdk.es83.js.map +1 -1
  217. package/dist/es/standards-sdk.es84.js +7 -5
  218. package/dist/es/standards-sdk.es84.js.map +1 -1
  219. package/dist/es/standards-sdk.es86.js +55 -21
  220. package/dist/es/standards-sdk.es86.js.map +1 -1
  221. package/dist/es/standards-sdk.es87.js +22 -75
  222. package/dist/es/standards-sdk.es87.js.map +1 -1
  223. package/dist/es/standards-sdk.es88.js +45 -30
  224. package/dist/es/standards-sdk.es88.js.map +1 -1
  225. package/dist/es/standards-sdk.es89.js +57 -22
  226. package/dist/es/standards-sdk.es89.js.map +1 -1
  227. package/dist/es/standards-sdk.es90.js +28 -23
  228. package/dist/es/standards-sdk.es90.js.map +1 -1
  229. package/dist/es/standards-sdk.es91.js +23 -167
  230. package/dist/es/standards-sdk.es91.js.map +1 -1
  231. package/dist/es/standards-sdk.es92.js +158 -119
  232. package/dist/es/standards-sdk.es92.js.map +1 -1
  233. package/dist/es/standards-sdk.es93.js +68 -95
  234. package/dist/es/standards-sdk.es93.js.map +1 -1
  235. package/dist/es/standards-sdk.es94.js +136 -119
  236. package/dist/es/standards-sdk.es94.js.map +1 -1
  237. package/dist/es/standards-sdk.es95.js +139 -39
  238. package/dist/es/standards-sdk.es95.js.map +1 -1
  239. package/dist/es/standards-sdk.es96.js +42 -257
  240. package/dist/es/standards-sdk.es96.js.map +1 -1
  241. package/dist/es/standards-sdk.es97.js +243 -80
  242. package/dist/es/standards-sdk.es97.js.map +1 -1
  243. package/dist/es/standards-sdk.es98.js +47 -48
  244. package/dist/es/standards-sdk.es98.js.map +1 -1
  245. package/dist/es/standards-sdk.es99.js +100 -28
  246. package/dist/es/standards-sdk.es99.js.map +1 -1
  247. package/dist/es/utils/dynamic-import.d.ts +1 -0
  248. package/dist/es/utils/dynamic-import.d.ts.map +1 -1
  249. package/package.json +63 -65
@@ -1,133 +1,172 @@
1
- import { AccountId, Client, ScheduleSignTransaction } from "@hashgraph/sdk";
2
- import { createNodeOperatorContext } from "./standards-sdk.es135.js";
3
- import { HederaMirrorNode } from "./standards-sdk.es126.js";
4
- import { HCS16BaseClient } from "./standards-sdk.es94.js";
5
- import { buildHcs16CreateFloraTopicTx, buildHcs16FloraCreatedTx, buildHcs16TransactionTx, buildHcs16StateUpdateTx, buildHcs16CreateAccountTx } from "./standards-sdk.es91.js";
6
- class HCS16Client extends HCS16BaseClient {
7
- constructor(config) {
8
- super({ network: config.network, logger: config.logger });
9
- this.operatorId = AccountId.fromString(config.operatorId);
10
- const mirror = new HederaMirrorNode(config.network, this.logger);
11
- this.operatorCtx = createNodeOperatorContext({
12
- network: config.network,
13
- operatorId: this.operatorId,
14
- operatorKey: config.operatorKey,
15
- keyType: config.keyType,
16
- mirrorNode: mirror,
17
- logger: this.logger,
18
- client: config.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
19
- });
20
- this.client = this.operatorCtx.client;
1
+ import { AccountId, TopicCreateTransaction, CustomFixedFee, TokenId, AccountCreateTransaction, Hbar, AccountUpdateTransaction, ScheduleCreateTransaction, TopicUpdateTransaction } from "@hashgraph/sdk";
2
+ import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es138.js";
3
+ import { FloraOperation } from "./standards-sdk.es91.js";
4
+ function encodeHcs16FloraMemo(params) {
5
+ return `hcs-16:${params.floraAccountId}:${params.topicType}`;
6
+ }
7
+ function buildHcs16CreateFloraTopicTx(params) {
8
+ const memo = encodeHcs16FloraMemo({
9
+ floraAccountId: params.floraAccountId,
10
+ topicType: params.topicType
11
+ });
12
+ const tx = buildTopicCreateTx({
13
+ memo,
14
+ adminKey: params.adminKey,
15
+ submitKey: params.submitKey,
16
+ operatorPublicKey: params.operatorPublicKey
17
+ });
18
+ if (params.autoRenewAccountId) {
19
+ tx.setAutoRenewAccountId(AccountId.fromString(params.autoRenewAccountId));
20
+ }
21
+ return tx;
22
+ }
23
+ function buildHcs16CreateTransactionTopicTx(params) {
24
+ const tx = new TopicCreateTransaction().setTopicMemo(params.memo);
25
+ if (params.adminKey) {
26
+ tx.setAdminKey(params.adminKey);
21
27
  }
22
- /**
23
- * Create a Flora topic with memo `hcs-16:<floraAccountId>:<topicType>`.
24
- */
25
- async createFloraTopic(params) {
26
- const tx = buildHcs16CreateFloraTopicTx({
27
- floraAccountId: params.floraAccountId,
28
- topicType: params.topicType,
29
- adminKey: params.adminKey,
30
- submitKey: params.submitKey,
31
- operatorPublicKey: this.client.operatorPublicKey || void 0,
32
- autoRenewAccountId: params.autoRenewAccountId
28
+ if (params.submitKey) {
29
+ tx.setSubmitKey(params.submitKey);
30
+ }
31
+ if (params.feeScheduleKey) {
32
+ tx.setFeeScheduleKey(params.feeScheduleKey);
33
+ }
34
+ if (params.customFees && params.customFees.length > 0) {
35
+ const fees = params.customFees.map((fee) => {
36
+ const cf = new CustomFixedFee().setAmount(fee.amount).setFeeCollectorAccountId(
37
+ AccountId.fromString(fee.feeCollectorAccountId)
38
+ );
39
+ if (fee.denominatingTokenId) {
40
+ cf.setDenominatingTokenId(TokenId.fromString(fee.denominatingTokenId));
41
+ }
42
+ return cf;
33
43
  });
34
- const resp = await tx.execute(this.client);
35
- const receipt = await resp.getReceipt(this.client);
36
- if (!receipt.topicId) {
37
- throw new Error("Failed to create Flora topic");
38
- }
39
- return receipt.topicId.toString();
44
+ tx.setCustomFees(fees);
40
45
  }
41
- async sendFloraCreated(params) {
42
- const tx = buildHcs16FloraCreatedTx(params);
43
- const resp = await tx.execute(this.client);
44
- return resp.getReceipt(this.client);
46
+ if (params.feeExemptKeys && params.feeExemptKeys.length > 0) {
47
+ throw new Error("feeExemptKeys not supported by installed @hashgraph/sdk");
45
48
  }
46
- /**
47
- * Send HCS-16 transaction (preferred). scheduleId is the ScheduleId entity (e.g., 0.0.12345).
48
- */
49
- async sendTransaction(params) {
50
- const tx = buildHcs16TransactionTx(params);
51
- const resp = await tx.execute(this.client);
52
- return resp.getReceipt(this.client);
49
+ return tx;
50
+ }
51
+ function buildHcs16CreateAccountTx(params) {
52
+ const tx = new AccountCreateTransaction().setKey(params.keyList);
53
+ const initial = typeof params.initialBalanceHbar === "number" ? params.initialBalanceHbar : 1;
54
+ tx.setInitialBalance(new Hbar(initial));
55
+ const maxAssoc = typeof params.maxAutomaticTokenAssociations === "number" ? params.maxAutomaticTokenAssociations : -1;
56
+ tx.setMaxAutomaticTokenAssociations(maxAssoc);
57
+ return tx;
58
+ }
59
+ function buildHcs16ScheduleAccountKeyUpdateTx(params) {
60
+ const inner = new AccountUpdateTransaction().setAccountId(AccountId.fromString(params.floraAccountId)).setKey(params.newKeyList);
61
+ if (params.memo) {
62
+ inner.setTransactionMemo(params.memo);
53
63
  }
54
- /**
55
- * Sign a scheduled transaction by ScheduleId entity using provided signer key (PrivateKey).
56
- * The signer must be a valid member key for the scheduled transaction to count toward threshold.
57
- */
58
- async signSchedule(params) {
59
- const tx = await new ScheduleSignTransaction().setScheduleId(params.scheduleId).freezeWith(this.client);
60
- const signed = await tx.sign(params.signerKey);
61
- const resp = await signed.execute(this.client);
62
- return resp.getReceipt(this.client);
64
+ return new ScheduleCreateTransaction().setScheduledTransaction(inner);
65
+ }
66
+ function buildHcs16ScheduleTopicKeyUpdateTx(params) {
67
+ const inner = new TopicUpdateTransaction().setTopicId(params.topicId);
68
+ if (params.adminKey) {
69
+ inner.setAdminKey(params.adminKey);
63
70
  }
64
- async sendStateUpdate(params) {
65
- const tx = buildHcs16StateUpdateTx(params);
66
- const resp = await tx.execute(this.client);
67
- return resp.getReceipt(this.client);
71
+ if (params.submitKey) {
72
+ inner.setSubmitKey(params.submitKey);
68
73
  }
69
- /**
70
- * Resolve member public keys from Mirror Node and build a KeyList with the given threshold.
71
- */
72
- async assembleKeyList(params) {
73
- return super.assembleKeyList(params);
74
+ if (params.memo) {
75
+ inner.setTransactionMemo(params.memo);
74
76
  }
75
- /**
76
- * Create a Flora account with a threshold KeyList, then create the three Flora topics.
77
- * Returns the Flora account ID and the topic IDs.
78
- */
79
- async createFloraAccountWithTopics(params) {
80
- const keyList = await this.assembleKeyList({
77
+ return new ScheduleCreateTransaction().setScheduledTransaction(inner);
78
+ }
79
+ function buildHcs16MessageTx(params) {
80
+ const payload = {
81
+ p: "hcs-16",
82
+ op: params.op,
83
+ operator_id: params.operatorId,
84
+ ...params.body || {}
85
+ };
86
+ return buildMessageTx({
87
+ topicId: params.topicId,
88
+ message: JSON.stringify(payload)
89
+ });
90
+ }
91
+ function buildHcs16FloraCreatedTx(params) {
92
+ return buildHcs16MessageTx({
93
+ topicId: params.topicId,
94
+ operatorId: params.operatorId,
95
+ op: FloraOperation.FLORA_CREATED,
96
+ body: {
97
+ flora_account_id: params.floraAccountId,
98
+ topics: params.topics
99
+ }
100
+ });
101
+ }
102
+ function buildHcs16TransactionTx(params) {
103
+ return buildHcs16MessageTx({
104
+ topicId: params.topicId,
105
+ operatorId: params.operatorId,
106
+ op: FloraOperation.TRANSACTION,
107
+ body: {
108
+ schedule_id: params.scheduleId,
109
+ data: params.data,
110
+ m: params.data
111
+ }
112
+ });
113
+ }
114
+ function buildHcs16StateUpdateTx(params) {
115
+ return buildHcs16MessageTx({
116
+ topicId: params.topicId,
117
+ operatorId: params.operatorId,
118
+ op: FloraOperation.STATE_UPDATE,
119
+ body: {
120
+ hash: params.hash,
121
+ epoch: params.epoch,
122
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
123
+ }
124
+ });
125
+ }
126
+ function buildHcs16FloraJoinRequestTx(params) {
127
+ return buildHcs16MessageTx({
128
+ topicId: params.topicId,
129
+ operatorId: params.operatorId,
130
+ op: FloraOperation.FLORA_JOIN_REQUEST,
131
+ body: {
132
+ candidate_account_id: params.candidateAccountId
133
+ }
134
+ });
135
+ }
136
+ function buildHcs16FloraJoinVoteTx(params) {
137
+ return buildHcs16MessageTx({
138
+ topicId: params.topicId,
139
+ operatorId: params.operatorId,
140
+ op: FloraOperation.FLORA_JOIN_VOTE,
141
+ body: {
142
+ candidate_account_id: params.candidateAccountId,
143
+ approve: params.approve
144
+ }
145
+ });
146
+ }
147
+ function buildHcs16FloraJoinAcceptedTx(params) {
148
+ return buildHcs16MessageTx({
149
+ topicId: params.topicId,
150
+ operatorId: params.operatorId,
151
+ op: FloraOperation.FLORA_JOIN_ACCEPTED,
152
+ body: {
81
153
  members: params.members,
82
- threshold: params.threshold
83
- });
84
- const submitList = await this.assembleSubmitKeyList(params.members);
85
- const createAcc = buildHcs16CreateAccountTx({
86
- keyList,
87
- initialBalanceHbar: typeof params.initialBalanceHbar === "number" ? params.initialBalanceHbar : 5,
88
- maxAutomaticTokenAssociations: -1
89
- });
90
- const accResp = await createAcc.execute(this.client);
91
- const accReceipt = await accResp.getReceipt(this.client);
92
- if (!accReceipt.accountId) {
93
- throw new Error("Failed to create Flora account");
154
+ epoch: params.epoch
94
155
  }
95
- const floraAccountId = accReceipt.accountId.toString();
96
- const {
97
- communication: commTx,
98
- transaction: trnTx,
99
- state: stateTx
100
- } = this.buildFloraTopicCreateTxs({
101
- floraAccountId,
102
- keyList,
103
- submitList,
104
- autoRenewAccountId: params.autoRenewAccountId
105
- });
106
- const commR = await commTx.execute(this.client).then((r) => r.getReceipt(this.client));
107
- const trnR = await trnTx.execute(this.client).then((r) => r.getReceipt(this.client));
108
- const stateR = await stateTx.execute(this.client).then((r) => r.getReceipt(this.client));
109
- const topics = {
110
- communication: commR.topicId.toString(),
111
- transaction: trnR.topicId.toString(),
112
- state: stateR.topicId.toString()
113
- };
114
- return { floraAccountId, topics };
115
- }
116
- /**
117
- * Convenience: publish flora_created on the communication topic.
118
- */
119
- async publishFloraCreated(params) {
120
- const tx = buildHcs16FloraCreatedTx({
121
- topicId: params.communicationTopicId,
122
- operatorId: params.operatorId,
123
- floraAccountId: params.floraAccountId,
124
- topics: params.topics
125
- });
126
- const resp = await tx.execute(this.client);
127
- return resp.getReceipt(this.client);
128
- }
156
+ });
129
157
  }
130
158
  export {
131
- HCS16Client
159
+ buildHcs16CreateAccountTx,
160
+ buildHcs16CreateFloraTopicTx,
161
+ buildHcs16CreateTransactionTopicTx,
162
+ buildHcs16FloraCreatedTx,
163
+ buildHcs16FloraJoinAcceptedTx,
164
+ buildHcs16FloraJoinRequestTx,
165
+ buildHcs16FloraJoinVoteTx,
166
+ buildHcs16MessageTx,
167
+ buildHcs16ScheduleAccountKeyUpdateTx,
168
+ buildHcs16ScheduleTopicKeyUpdateTx,
169
+ buildHcs16StateUpdateTx,
170
+ buildHcs16TransactionTx
132
171
  };
133
172
  //# sourceMappingURL=standards-sdk.es92.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es92.js","sources":["../../src/hcs-16/sdk.ts"],"sourcesContent":["import {\n Client,\n AccountId,\n PublicKey,\n KeyList,\n TransactionReceipt,\n Hbar,\n ScheduleSignTransaction,\n PrivateKey,\n} from '@hashgraph/sdk';\nimport type { NetworkType } from '../utils/types';\nimport type { Logger } from '../utils/logger';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { HCS16BaseClient } from './base-client';\nimport {\n buildHcs16CreateFloraTopicTx,\n buildHcs16FloraCreatedTx,\n buildHcs16TransactionTx,\n buildHcs16StateUpdateTx,\n} from './tx';\nimport { FloraTopicType } from './types';\nimport {\n buildHcs16FloraJoinRequestTx,\n buildHcs16FloraJoinVoteTx,\n buildHcs16FloraJoinAcceptedTx,\n buildHcs16CreateAccountTx,\n} from './tx';\n\nexport interface HCS16ClientConfig {\n network: NetworkType;\n operatorId: string;\n operatorKey: string;\n keyType?: 'ecdsa' | 'ed25519';\n logger?: Logger;\n}\n\n/**\n * Node SDK client for HCS‑16 Flora operations.\n */\nexport class HCS16Client extends HCS16BaseClient {\n private readonly client: Client;\n private readonly operatorId: AccountId;\n private readonly operatorCtx: NodeOperatorContext;\n\n constructor(config: HCS16ClientConfig) {\n super({ network: config.network, logger: config.logger });\n this.operatorId = AccountId.fromString(config.operatorId);\n const mirror = new HederaMirrorNode(config.network, this.logger);\n this.operatorCtx = createNodeOperatorContext({\n network: config.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: mirror,\n logger: this.logger,\n client:\n config.network === 'mainnet'\n ? Client.forMainnet()\n : Client.forTestnet(),\n });\n this.client = this.operatorCtx.client;\n }\n\n /**\n * Create a Flora topic with memo `hcs-16:<floraAccountId>:<topicType>`.\n */\n async createFloraTopic(params: {\n floraAccountId: string;\n topicType: FloraTopicType;\n adminKey?: PublicKey | KeyList;\n submitKey?: PublicKey | KeyList;\n autoRenewAccountId?: string;\n }): Promise<string> {\n const tx = buildHcs16CreateFloraTopicTx({\n floraAccountId: params.floraAccountId,\n topicType: params.topicType,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: this.client.operatorPublicKey || undefined,\n autoRenewAccountId: params.autoRenewAccountId,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.topicId) {\n throw new Error('Failed to create Flora topic');\n }\n return receipt.topicId.toString();\n }\n\n async sendFloraCreated(params: {\n topicId: string;\n operatorId: string;\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n }): Promise<TransactionReceipt> {\n const tx = buildHcs16FloraCreatedTx(params);\n const resp = await tx.execute(this.client);\n return resp.getReceipt(this.client);\n }\n\n /**\n * Send HCS-16 transaction (preferred). scheduleId is the ScheduleId entity (e.g., 0.0.12345).\n */\n async sendTransaction(params: {\n topicId: string;\n operatorId: string;\n scheduleId: string;\n data?: string;\n }): Promise<TransactionReceipt> {\n const tx = buildHcs16TransactionTx(params);\n const resp = await tx.execute(this.client);\n return resp.getReceipt(this.client);\n }\n\n /**\n * Sign a scheduled transaction by ScheduleId entity using provided signer key (PrivateKey).\n * The signer must be a valid member key for the scheduled transaction to count toward threshold.\n */\n async signSchedule(params: {\n scheduleId: string;\n signerKey: PrivateKey;\n }): Promise<TransactionReceipt> {\n const tx = await new ScheduleSignTransaction()\n .setScheduleId(params.scheduleId)\n .freezeWith(this.client);\n const signed = await tx.sign(params.signerKey);\n const resp = await signed.execute(this.client);\n return resp.getReceipt(this.client);\n }\n\n async sendStateUpdate(params: {\n topicId: string;\n operatorId: string;\n hash: string;\n epoch?: number;\n }): Promise<TransactionReceipt> {\n const tx = buildHcs16StateUpdateTx(params);\n const resp = await tx.execute(this.client);\n return resp.getReceipt(this.client);\n }\n\n /**\n * Resolve member public keys from Mirror Node and build a KeyList with the given threshold.\n */\n async assembleKeyList(params: {\n members: string[];\n threshold: number;\n }): Promise<KeyList> {\n return super.assembleKeyList(params);\n }\n\n /**\n * Create a Flora account with a threshold KeyList, then create the three Flora topics.\n * Returns the Flora account ID and the topic IDs.\n */\n async createFloraAccountWithTopics(params: {\n members: string[];\n threshold: number;\n initialBalanceHbar?: number;\n autoRenewAccountId?: string;\n }): Promise<{\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n }> {\n const keyList = await this.assembleKeyList({\n members: params.members,\n threshold: params.threshold,\n });\n const submitList = await this.assembleSubmitKeyList(params.members);\n\n const createAcc = buildHcs16CreateAccountTx({\n keyList,\n initialBalanceHbar:\n typeof params.initialBalanceHbar === 'number'\n ? params.initialBalanceHbar\n : 5,\n maxAutomaticTokenAssociations: -1,\n });\n const accResp = await createAcc.execute(this.client);\n const accReceipt = await accResp.getReceipt(this.client);\n if (!accReceipt.accountId) {\n throw new Error('Failed to create Flora account');\n }\n const floraAccountId = accReceipt.accountId.toString();\n\n const {\n communication: commTx,\n transaction: trnTx,\n state: stateTx,\n } = this.buildFloraTopicCreateTxs({\n floraAccountId,\n keyList,\n submitList,\n autoRenewAccountId: params.autoRenewAccountId,\n });\n\n const commR = await commTx\n .execute(this.client)\n .then(r => r.getReceipt(this.client));\n const trnR = await trnTx\n .execute(this.client)\n .then(r => r.getReceipt(this.client));\n const stateR = await stateTx\n .execute(this.client)\n .then(r => r.getReceipt(this.client));\n const topics = {\n communication: commR.topicId!.toString(),\n transaction: trnR.topicId!.toString(),\n state: stateR.topicId!.toString(),\n };\n return { floraAccountId, topics };\n }\n\n /**\n * Convenience: publish flora_created on the communication topic.\n */\n async publishFloraCreated(params: {\n communicationTopicId: string;\n operatorId: string;\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n }): Promise<TransactionReceipt> {\n const tx = buildHcs16FloraCreatedTx({\n topicId: params.communicationTopicId,\n operatorId: params.operatorId,\n floraAccountId: params.floraAccountId,\n topics: params.topics,\n });\n const resp = await tx.execute(this.client);\n return resp.getReceipt(this.client);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es92.js","sources":["../../src/hcs-16/tx.ts"],"sourcesContent":["import {\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TopicUpdateTransaction,\n AccountCreateTransaction,\n AccountUpdateTransaction,\n ScheduleCreateTransaction,\n Hbar,\n PublicKey,\n KeyList,\n AccountId,\n CustomFixedFee,\n TokenId,\n} from '@hashgraph/sdk';\nimport {\n buildTopicCreateTx,\n buildMessageTx,\n type MaybeKey,\n} from '../common/tx/tx-utils';\nimport { FloraOperation, FloraTopicType, type FloraMessage } from './types';\n\nfunction encodeHcs16FloraMemo(params: {\n floraAccountId: string;\n topicType: FloraTopicType;\n}): string {\n return `hcs-16:${params.floraAccountId}:${params.topicType}`;\n}\n\n/**\n * Build a TopicCreateTransaction for HCS‑16 Flora topics (communication/transaction/state).\n */\nexport function buildHcs16CreateFloraTopicTx(params: {\n floraAccountId: string;\n topicType: FloraTopicType;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n operatorPublicKey?: PublicKey;\n autoRenewAccountId?: string;\n}): TopicCreateTransaction {\n const memo = encodeHcs16FloraMemo({\n floraAccountId: params.floraAccountId,\n topicType: params.topicType,\n });\n const tx = buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n if (params.autoRenewAccountId) {\n tx.setAutoRenewAccountId(AccountId.fromString(params.autoRenewAccountId));\n }\n return tx;\n}\n\n/**\n * Build a TopicCreateTransaction for a generic HCS‑16 transaction topic with HIP‑991 fees.\n */\nexport function buildHcs16CreateTransactionTopicTx(params: {\n memo: string;\n adminKey?: KeyList | PublicKey;\n submitKey?: KeyList | PublicKey;\n feeScheduleKey?: KeyList | PublicKey;\n customFees?: Array<{\n amount: number;\n feeCollectorAccountId: string;\n denominatingTokenId?: string;\n }>;\n feeExemptKeys?: PublicKey[];\n}): TopicCreateTransaction {\n const tx = new TopicCreateTransaction().setTopicMemo(params.memo);\n if (params.adminKey) {\n tx.setAdminKey(params.adminKey);\n }\n if (params.submitKey) {\n tx.setSubmitKey(params.submitKey);\n }\n if (params.feeScheduleKey) {\n tx.setFeeScheduleKey(params.feeScheduleKey);\n }\n if (params.customFees && params.customFees.length > 0) {\n const fees = params.customFees.map(fee => {\n const cf = new CustomFixedFee()\n .setAmount(fee.amount)\n .setFeeCollectorAccountId(\n AccountId.fromString(fee.feeCollectorAccountId),\n );\n if (fee.denominatingTokenId) {\n cf.setDenominatingTokenId(TokenId.fromString(fee.denominatingTokenId));\n }\n return cf;\n });\n tx.setCustomFees(fees);\n }\n if (params.feeExemptKeys && params.feeExemptKeys.length > 0) {\n throw new Error('feeExemptKeys not supported by installed @hashgraph/sdk');\n }\n return tx;\n}\n\n/**\n * Build an AccountCreateTransaction for a Flora account given a KeyList and optional params.\n */\nexport function buildHcs16CreateAccountTx(params: {\n keyList: KeyList;\n initialBalanceHbar?: number;\n maxAutomaticTokenAssociations?: number;\n}): AccountCreateTransaction {\n const tx = new AccountCreateTransaction().setKey(params.keyList);\n const initial =\n typeof params.initialBalanceHbar === 'number'\n ? params.initialBalanceHbar\n : 1;\n tx.setInitialBalance(new Hbar(initial));\n const maxAssoc =\n typeof params.maxAutomaticTokenAssociations === 'number'\n ? params.maxAutomaticTokenAssociations\n : -1;\n tx.setMaxAutomaticTokenAssociations(maxAssoc);\n return tx;\n}\n\n/**\n * Build a ScheduleCreateTransaction that wraps an AccountUpdateTransaction to rotate the Flora account KeyList.\n * Members will sign this scheduled transaction until threshold is reached and it executes.\n */\nexport function buildHcs16ScheduleAccountKeyUpdateTx(params: {\n floraAccountId: string;\n newKeyList: KeyList;\n memo?: string;\n}): ScheduleCreateTransaction {\n const inner = new AccountUpdateTransaction()\n .setAccountId(AccountId.fromString(params.floraAccountId))\n .setKey(params.newKeyList);\n if (params.memo) {\n inner.setTransactionMemo(params.memo);\n }\n return new ScheduleCreateTransaction().setScheduledTransaction(inner);\n}\n\n/**\n * Build a ScheduleCreateTransaction that wraps a TopicUpdateTransaction to rotate topic admin/submit keys.\n * Repeat for CTopic, TTopic, and STopic as needed for membership changes.\n */\nexport function buildHcs16ScheduleTopicKeyUpdateTx(params: {\n topicId: string;\n adminKey?: KeyList | PublicKey;\n submitKey?: KeyList | PublicKey;\n memo?: string;\n}): ScheduleCreateTransaction {\n const inner = new TopicUpdateTransaction().setTopicId(params.topicId);\n if (params.adminKey) {\n inner.setAdminKey(params.adminKey);\n }\n if (params.submitKey) {\n inner.setSubmitKey(params.submitKey);\n }\n if (params.memo) {\n inner.setTransactionMemo(params.memo);\n }\n return new ScheduleCreateTransaction().setScheduledTransaction(inner);\n}\n\n/**\n * Build a TopicMessageSubmitTransaction for generic HCS‑16 messages.\n * Body fields are merged into the envelope `{ p: 'hcs-16', op, operator_id }`.\n */\nexport function buildHcs16MessageTx(params: {\n topicId: string;\n operatorId: string;\n op: FloraOperation;\n body?: Record<string, unknown>;\n}): TopicMessageSubmitTransaction {\n const payload: FloraMessage = {\n p: 'hcs-16',\n op: params.op,\n operator_id: params.operatorId,\n ...(params.body || {}),\n } as FloraMessage;\n\n return buildMessageTx({\n topicId: params.topicId,\n message: JSON.stringify(payload),\n });\n}\n\n/**\n * Build HCS‑16 flora_created message.\n */\nexport function buildHcs16FloraCreatedTx(params: {\n topicId: string;\n operatorId: string;\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n}): TopicMessageSubmitTransaction {\n return buildHcs16MessageTx({\n topicId: params.topicId,\n operatorId: params.operatorId,\n op: FloraOperation.FLORA_CREATED,\n body: {\n flora_account_id: params.floraAccountId,\n topics: params.topics,\n },\n });\n}\n\n/**\n * Build HCS‑16 transaction message.\n */\nexport function buildHcs16TransactionTx(params: {\n topicId: string;\n operatorId: string;\n scheduleId: string;\n data?: string;\n}): TopicMessageSubmitTransaction {\n return buildHcs16MessageTx({\n topicId: params.topicId,\n operatorId: params.operatorId,\n op: FloraOperation.TRANSACTION,\n body: {\n schedule_id: params.scheduleId,\n data: params.data,\n m: params.data,\n },\n });\n}\n\n/**\n * Build HCS‑16 state_update message.\n */\nexport function buildHcs16StateUpdateTx(params: {\n topicId: string;\n operatorId: string;\n hash: string;\n epoch?: number;\n}): TopicMessageSubmitTransaction {\n return buildHcs16MessageTx({\n topicId: params.topicId,\n operatorId: params.operatorId,\n op: FloraOperation.STATE_UPDATE,\n body: {\n hash: params.hash,\n epoch: params.epoch,\n timestamp: new Date().toISOString(),\n },\n });\n}\n\n/**\n * Build HCS‑16 flora_join_request message.\n */\nexport function buildHcs16FloraJoinRequestTx(params: {\n topicId: string;\n operatorId: string;\n candidateAccountId: string;\n}): TopicMessageSubmitTransaction {\n return buildHcs16MessageTx({\n topicId: params.topicId,\n operatorId: params.operatorId,\n op: FloraOperation.FLORA_JOIN_REQUEST,\n body: {\n candidate_account_id: params.candidateAccountId,\n },\n });\n}\n\n/**\n * Build HCS‑16 flora_join_vote message.\n */\nexport function buildHcs16FloraJoinVoteTx(params: {\n topicId: string;\n operatorId: string;\n candidateAccountId: string;\n approve: boolean;\n}): TopicMessageSubmitTransaction {\n return buildHcs16MessageTx({\n topicId: params.topicId,\n operatorId: params.operatorId,\n op: FloraOperation.FLORA_JOIN_VOTE,\n body: {\n candidate_account_id: params.candidateAccountId,\n approve: params.approve,\n },\n });\n}\n\n/**\n * Build HCS‑16 flora_join_accepted message.\n */\nexport function buildHcs16FloraJoinAcceptedTx(params: {\n topicId: string;\n operatorId: string;\n members: string[];\n epoch?: number;\n}): TopicMessageSubmitTransaction {\n return buildHcs16MessageTx({\n topicId: params.topicId,\n operatorId: params.operatorId,\n op: FloraOperation.FLORA_JOIN_ACCEPTED,\n body: {\n members: params.members,\n epoch: params.epoch,\n },\n });\n}\n"],"names":[],"mappings":";;;AAqBA,SAAS,qBAAqB,QAGnB;AACT,SAAO,UAAU,OAAO,cAAc,IAAI,OAAO,SAAS;AAC5D;AAKO,SAAS,6BAA6B,QAOlB;AACzB,QAAM,OAAO,qBAAqB;AAAA,IAChC,gBAAgB,OAAO;AAAA,IACvB,WAAW,OAAO;AAAA,EAAA,CACnB;AACD,QAAM,KAAK,mBAAmB;AAAA,IAC5B;AAAA,IACA,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,mBAAmB,OAAO;AAAA,EAAA,CAC3B;AACD,MAAI,OAAO,oBAAoB;AAC7B,OAAG,sBAAsB,UAAU,WAAW,OAAO,kBAAkB,CAAC;AAAA,EAC1E;AACA,SAAO;AACT;AAKO,SAAS,mCAAmC,QAWxB;AACzB,QAAM,KAAK,IAAI,uBAAA,EAAyB,aAAa,OAAO,IAAI;AAChE,MAAI,OAAO,UAAU;AACnB,OAAG,YAAY,OAAO,QAAQ;AAAA,EAChC;AACA,MAAI,OAAO,WAAW;AACpB,OAAG,aAAa,OAAO,SAAS;AAAA,EAClC;AACA,MAAI,OAAO,gBAAgB;AACzB,OAAG,kBAAkB,OAAO,cAAc;AAAA,EAC5C;AACA,MAAI,OAAO,cAAc,OAAO,WAAW,SAAS,GAAG;AACrD,UAAM,OAAO,OAAO,WAAW,IAAI,CAAA,QAAO;AACxC,YAAM,KAAK,IAAI,eAAA,EACZ,UAAU,IAAI,MAAM,EACpB;AAAA,QACC,UAAU,WAAW,IAAI,qBAAqB;AAAA,MAAA;AAElD,UAAI,IAAI,qBAAqB;AAC3B,WAAG,uBAAuB,QAAQ,WAAW,IAAI,mBAAmB,CAAC;AAAA,MACvE;AACA,aAAO;AAAA,IACT,CAAC;AACD,OAAG,cAAc,IAAI;AAAA,EACvB;AACA,MAAI,OAAO,iBAAiB,OAAO,cAAc,SAAS,GAAG;AAC3D,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACA,SAAO;AACT;AAKO,SAAS,0BAA0B,QAIb;AAC3B,QAAM,KAAK,IAAI,yBAAA,EAA2B,OAAO,OAAO,OAAO;AAC/D,QAAM,UACJ,OAAO,OAAO,uBAAuB,WACjC,OAAO,qBACP;AACN,KAAG,kBAAkB,IAAI,KAAK,OAAO,CAAC;AACtC,QAAM,WACJ,OAAO,OAAO,kCAAkC,WAC5C,OAAO,gCACP;AACN,KAAG,iCAAiC,QAAQ;AAC5C,SAAO;AACT;AAMO,SAAS,qCAAqC,QAIvB;AAC5B,QAAM,QAAQ,IAAI,2BACf,aAAa,UAAU,WAAW,OAAO,cAAc,CAAC,EACxD,OAAO,OAAO,UAAU;AAC3B,MAAI,OAAO,MAAM;AACf,UAAM,mBAAmB,OAAO,IAAI;AAAA,EACtC;AACA,SAAO,IAAI,0BAAA,EAA4B,wBAAwB,KAAK;AACtE;AAMO,SAAS,mCAAmC,QAKrB;AAC5B,QAAM,QAAQ,IAAI,uBAAA,EAAyB,WAAW,OAAO,OAAO;AACpE,MAAI,OAAO,UAAU;AACnB,UAAM,YAAY,OAAO,QAAQ;AAAA,EACnC;AACA,MAAI,OAAO,WAAW;AACpB,UAAM,aAAa,OAAO,SAAS;AAAA,EACrC;AACA,MAAI,OAAO,MAAM;AACf,UAAM,mBAAmB,OAAO,IAAI;AAAA,EACtC;AACA,SAAO,IAAI,0BAAA,EAA4B,wBAAwB,KAAK;AACtE;AAMO,SAAS,oBAAoB,QAKF;AAChC,QAAM,UAAwB;AAAA,IAC5B,GAAG;AAAA,IACH,IAAI,OAAO;AAAA,IACX,aAAa,OAAO;AAAA,IACpB,GAAI,OAAO,QAAQ,CAAA;AAAA,EAAC;AAGtB,SAAO,eAAe;AAAA,IACpB,SAAS,OAAO;AAAA,IAChB,SAAS,KAAK,UAAU,OAAO;AAAA,EAAA,CAChC;AACH;AAKO,SAAS,yBAAyB,QAKP;AAChC,SAAO,oBAAoB;AAAA,IACzB,SAAS,OAAO;AAAA,IAChB,YAAY,OAAO;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,MAAM;AAAA,MACJ,kBAAkB,OAAO;AAAA,MACzB,QAAQ,OAAO;AAAA,IAAA;AAAA,EACjB,CACD;AACH;AAKO,SAAS,wBAAwB,QAKN;AAChC,SAAO,oBAAoB;AAAA,IACzB,SAAS,OAAO;AAAA,IAChB,YAAY,OAAO;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,MAAM;AAAA,MACJ,aAAa,OAAO;AAAA,MACpB,MAAM,OAAO;AAAA,MACb,GAAG,OAAO;AAAA,IAAA;AAAA,EACZ,CACD;AACH;AAKO,SAAS,wBAAwB,QAKN;AAChC,SAAO,oBAAoB;AAAA,IACzB,SAAS,OAAO;AAAA,IAChB,YAAY,OAAO;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,MAAM;AAAA,MACJ,MAAM,OAAO;AAAA,MACb,OAAO,OAAO;AAAA,MACd,YAAW,oBAAI,KAAA,GAAO,YAAA;AAAA,IAAY;AAAA,EACpC,CACD;AACH;AAKO,SAAS,6BAA6B,QAIX;AAChC,SAAO,oBAAoB;AAAA,IACzB,SAAS,OAAO;AAAA,IAChB,YAAY,OAAO;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,MAAM;AAAA,MACJ,sBAAsB,OAAO;AAAA,IAAA;AAAA,EAC/B,CACD;AACH;AAKO,SAAS,0BAA0B,QAKR;AAChC,SAAO,oBAAoB;AAAA,IACzB,SAAS,OAAO;AAAA,IAChB,YAAY,OAAO;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,MAAM;AAAA,MACJ,sBAAsB,OAAO;AAAA,MAC7B,SAAS,OAAO;AAAA,IAAA;AAAA,EAClB,CACD;AACH;AAKO,SAAS,8BAA8B,QAKZ;AAChC,SAAO,oBAAoB;AAAA,IACzB,SAAS,OAAO;AAAA,IAChB,YAAY,OAAO;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,MAAM;AAAA,MACJ,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO;AAAA,IAAA;AAAA,EAChB,CACD;AACH;"}
@@ -1,85 +1,82 @@
1
- import { ScheduleSignTransaction } from "@hashgraph/sdk";
2
- import { buildHcs16CreateFloraTopicTx, buildHcs16FloraCreatedTx, buildHcs16TransactionTx, buildHcs16StateUpdateTx, buildHcs16CreateAccountTx, buildHcs16FloraJoinRequestTx, buildHcs16FloraJoinVoteTx, buildHcs16FloraJoinAcceptedTx } from "./standards-sdk.es91.js";
3
- import { HCS16BaseClient } from "./standards-sdk.es94.js";
4
- class HCS16BrowserClient extends HCS16BaseClient {
1
+ import { AccountId, Client, ScheduleSignTransaction } from "@hashgraph/sdk";
2
+ import { createNodeOperatorContext } from "./standards-sdk.es137.js";
3
+ import { HederaMirrorNode } from "./standards-sdk.es127.js";
4
+ import { HCS16BaseClient } from "./standards-sdk.es95.js";
5
+ import { buildHcs16CreateFloraTopicTx, buildHcs16FloraCreatedTx, buildHcs16TransactionTx, buildHcs16StateUpdateTx, buildHcs16CreateAccountTx } from "./standards-sdk.es92.js";
6
+ class HCS16Client extends HCS16BaseClient {
5
7
  constructor(config) {
6
- super({ network: config.network });
7
- this.hwc = config.hwc;
8
- this.signer = config.signer;
9
- }
10
- ensureConnected() {
11
- if (this.signer && typeof this.signer.getAccountId === "function") {
12
- return this.signer.getAccountId().toString();
13
- }
14
- const info = this.hwc?.getAccountInfo?.();
15
- const accountId = info?.accountId;
16
- if (!accountId) {
17
- throw new Error("No active wallet connection");
18
- }
19
- return accountId;
20
- }
21
- getSigner() {
22
- if (this.signer) {
23
- return this.signer;
24
- }
25
- this.ensureConnected();
26
- const s = this.hwc?.dAppConnector?.signers?.[0];
27
- if (!s) {
28
- throw new Error("No active wallet signer");
29
- }
30
- return s;
8
+ super({ network: config.network, logger: config.logger });
9
+ this.operatorId = AccountId.fromString(config.operatorId);
10
+ const mirror = new HederaMirrorNode(config.network, this.logger);
11
+ this.operatorCtx = createNodeOperatorContext({
12
+ network: config.network,
13
+ operatorId: this.operatorId,
14
+ operatorKey: config.operatorKey,
15
+ keyType: config.keyType,
16
+ mirrorNode: mirror,
17
+ logger: this.logger,
18
+ client: config.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
19
+ });
20
+ this.client = this.operatorCtx.client;
31
21
  }
22
+ /**
23
+ * Create a Flora topic with memo `hcs-16:<floraAccountId>:<topicType>`.
24
+ */
32
25
  async createFloraTopic(params) {
33
- this.ensureConnected();
34
- const signer = this.getSigner();
35
26
  const tx = buildHcs16CreateFloraTopicTx({
36
27
  floraAccountId: params.floraAccountId,
37
28
  topicType: params.topicType,
38
29
  adminKey: params.adminKey,
39
30
  submitKey: params.submitKey,
31
+ operatorPublicKey: this.client.operatorPublicKey || void 0,
40
32
  autoRenewAccountId: params.autoRenewAccountId
41
33
  });
42
- const frozen = await tx.freezeWithSigner(signer);
43
- const res = await frozen.executeWithSigner(signer);
44
- const receipt = await res.getReceiptWithSigner(signer);
45
- const topicId = receipt?.topicId?.toString?.() || "";
46
- return topicId;
34
+ const resp = await tx.execute(this.client);
35
+ const receipt = await resp.getReceipt(this.client);
36
+ if (!receipt.topicId) {
37
+ throw new Error("Failed to create Flora topic");
38
+ }
39
+ return receipt.topicId.toString();
47
40
  }
48
41
  async sendFloraCreated(params) {
49
- const signer = this.getSigner();
50
42
  const tx = buildHcs16FloraCreatedTx(params);
51
- const frozen = await tx.freezeWithSigner(signer);
52
- await frozen.executeWithSigner(signer);
43
+ const resp = await tx.execute(this.client);
44
+ return resp.getReceipt(this.client);
53
45
  }
46
+ /**
47
+ * Send HCS-16 transaction (preferred). scheduleId is the ScheduleId entity (e.g., 0.0.12345).
48
+ */
54
49
  async sendTransaction(params) {
55
- const signer = this.getSigner();
56
50
  const tx = buildHcs16TransactionTx(params);
57
- const frozen = await tx.freezeWithSigner(signer);
58
- await frozen.executeWithSigner(signer);
51
+ const resp = await tx.execute(this.client);
52
+ return resp.getReceipt(this.client);
59
53
  }
60
54
  /**
61
- * Wallet-signed ScheduleSign for a given scheduleId.
55
+ * Sign a scheduled transaction by ScheduleId entity using provided signer key (PrivateKey).
56
+ * The signer must be a valid member key for the scheduled transaction to count toward threshold.
62
57
  */
63
58
  async signSchedule(params) {
64
- const signer = this.getSigner();
65
- const tx = await new ScheduleSignTransaction().setScheduleId(params.scheduleId).freezeWithSigner(signer);
66
- await tx.executeWithSigner(signer);
59
+ const tx = await new ScheduleSignTransaction().setScheduleId(params.scheduleId).freezeWith(this.client);
60
+ const signed = await tx.sign(params.signerKey);
61
+ const resp = await signed.execute(this.client);
62
+ return resp.getReceipt(this.client);
67
63
  }
68
64
  async sendStateUpdate(params) {
69
- const signer = this.getSigner();
70
65
  const tx = buildHcs16StateUpdateTx(params);
71
- const frozen = await tx.freezeWithSigner(signer);
72
- await frozen.executeWithSigner(signer);
66
+ const resp = await tx.execute(this.client);
67
+ return resp.getReceipt(this.client);
68
+ }
69
+ /**
70
+ * Resolve member public keys from Mirror Node and build a KeyList with the given threshold.
71
+ */
72
+ async assembleKeyList(params) {
73
+ return super.assembleKeyList(params);
73
74
  }
74
- /** credit_purchase is not part of HCS-16 specification */
75
75
  /**
76
- * Create Flora account and C/T/S topics using DAppSigner.
77
- * - Account KeyList = threshold of members
78
- * - Topic submitKey = 1-of-M KeyList of members
79
- * Returns created Flora account ID and topic IDs.
76
+ * Create a Flora account with a threshold KeyList, then create the three Flora topics.
77
+ * Returns the Flora account ID and the topic IDs.
80
78
  */
81
79
  async createFloraAccountWithTopics(params) {
82
- const signer = this.getSigner();
83
80
  const keyList = await this.assembleKeyList({
84
81
  members: params.members,
85
82
  threshold: params.threshold
@@ -90,13 +87,12 @@ class HCS16BrowserClient extends HCS16BaseClient {
90
87
  initialBalanceHbar: typeof params.initialBalanceHbar === "number" ? params.initialBalanceHbar : 5,
91
88
  maxAutomaticTokenAssociations: -1
92
89
  });
93
- const accFrozen = await createAcc.freezeWithSigner(signer);
94
- const accExec = await accFrozen.executeWithSigner(signer);
95
- const accReceipt = await accExec.getReceiptWithSigner(signer);
96
- const floraAccountId = accReceipt?.accountId?.toString?.();
97
- if (!floraAccountId) {
90
+ const accResp = await createAcc.execute(this.client);
91
+ const accReceipt = await accResp.getReceipt(this.client);
92
+ if (!accReceipt.accountId) {
98
93
  throw new Error("Failed to create Flora account");
99
94
  }
95
+ const floraAccountId = accReceipt.accountId.toString();
100
96
  const {
101
97
  communication: commTx,
102
98
  transaction: trnTx,
@@ -107,54 +103,31 @@ class HCS16BrowserClient extends HCS16BaseClient {
107
103
  submitList,
108
104
  autoRenewAccountId: params.autoRenewAccountId
109
105
  });
110
- const commR = await (await (await commTx.freezeWithSigner(signer)).executeWithSigner(signer)).getReceiptWithSigner(signer);
111
- const trnR = await (await (await trnTx.freezeWithSigner(signer)).executeWithSigner(signer)).getReceiptWithSigner(signer);
112
- const stateR = await (await (await stateTx.freezeWithSigner(signer)).executeWithSigner(signer)).getReceiptWithSigner(signer);
106
+ const commR = await commTx.execute(this.client).then((r) => r.getReceipt(this.client));
107
+ const trnR = await trnTx.execute(this.client).then((r) => r.getReceipt(this.client));
108
+ const stateR = await stateTx.execute(this.client).then((r) => r.getReceipt(this.client));
113
109
  const topics = {
114
- communication: commR?.topicId?.toString?.() || "",
115
- transaction: trnR?.topicId?.toString?.() || "",
116
- state: stateR?.topicId?.toString?.() || ""
110
+ communication: commR.topicId.toString(),
111
+ transaction: trnR.topicId.toString(),
112
+ state: stateR.topicId.toString()
117
113
  };
118
114
  return { floraAccountId, topics };
119
115
  }
120
- /** Publish flora_created on the communication topic. */
116
+ /**
117
+ * Convenience: publish flora_created on the communication topic.
118
+ */
121
119
  async publishFloraCreated(params) {
122
- const signer = this.getSigner();
123
120
  const tx = buildHcs16FloraCreatedTx({
124
121
  topicId: params.communicationTopicId,
125
122
  operatorId: params.operatorId,
126
123
  floraAccountId: params.floraAccountId,
127
124
  topics: params.topics
128
125
  });
129
- const frozen = await tx.freezeWithSigner(signer);
130
- await frozen.executeWithSigner(signer);
131
- }
132
- /**
133
- * Post flora_join_request on Flora communication topic.
134
- * If submitKey=1/M, a member must relay the message.
135
- */
136
- async sendFloraJoinRequest(params) {
137
- const signer = this.getSigner();
138
- const tx = buildHcs16FloraJoinRequestTx(params);
139
- const frozen = await tx.freezeWithSigner(signer);
140
- await frozen.executeWithSigner(signer);
141
- }
142
- /** Post flora_join_vote approval/rejection on the communication topic. */
143
- async sendFloraJoinVote(params) {
144
- const signer = this.getSigner();
145
- const tx = buildHcs16FloraJoinVoteTx(params);
146
- const frozen = await tx.freezeWithSigner(signer);
147
- await frozen.executeWithSigner(signer);
148
- }
149
- /** Post flora_join_accepted after threshold approval. */
150
- async sendFloraJoinAccepted(params) {
151
- const signer = this.getSigner();
152
- const tx = buildHcs16FloraJoinAcceptedTx(params);
153
- const frozen = await tx.freezeWithSigner(signer);
154
- await frozen.executeWithSigner(signer);
126
+ const resp = await tx.execute(this.client);
127
+ return resp.getReceipt(this.client);
155
128
  }
156
129
  }
157
130
  export {
158
- HCS16BrowserClient
131
+ HCS16Client
159
132
  };
160
133
  //# sourceMappingURL=standards-sdk.es93.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es93.js","sources":["../../src/hcs-16/browser.ts"],"sourcesContent":["import type { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport type { PublicKey, KeyList } from '@hashgraph/sdk';\nimport { ScheduleSignTransaction } from '@hashgraph/sdk';\nimport {\n buildHcs16CreateFloraTopicTx,\n buildHcs16FloraCreatedTx,\n buildHcs16TransactionTx,\n buildHcs16StateUpdateTx,\n buildHcs16FloraJoinRequestTx,\n buildHcs16FloraJoinVoteTx,\n buildHcs16FloraJoinAcceptedTx,\n buildHcs16CreateAccountTx,\n} from './tx';\nimport { FloraTopicType } from './types';\nimport { HCS16BaseClient } from './base-client';\n\nexport interface HCS16BrowserClientConfig {\n network: 'testnet' | 'mainnet';\n hwc?: HashinalsWalletConnectSDK;\n signer?: DAppSigner;\n}\n\n/**\n * Browser client for HCS‑16 operations using a DAppSigner.\n */\nexport class HCS16BrowserClient extends HCS16BaseClient {\n private readonly hwc?: HashinalsWalletConnectSDK;\n private readonly signer?: DAppSigner;\n\n constructor(config: HCS16BrowserClientConfig) {\n super({ network: config.network });\n this.hwc = config.hwc;\n this.signer = config.signer;\n }\n\n private ensureConnected(): string {\n if (\n this.signer &&\n typeof (this.signer as DAppSigner).getAccountId === 'function'\n ) {\n return (this.signer as DAppSigner).getAccountId().toString();\n }\n const info = this.hwc?.getAccountInfo?.();\n const accountId = info?.accountId;\n if (!accountId) {\n throw new Error('No active wallet connection');\n }\n return accountId;\n }\n\n private getSigner(): DAppSigner {\n if (this.signer) {\n return this.signer;\n }\n this.ensureConnected();\n const s = this.hwc?.dAppConnector?.signers?.[0];\n if (!s) {\n throw new Error('No active wallet signer');\n }\n return s as unknown as DAppSigner;\n }\n\n async createFloraTopic(params: {\n floraAccountId: string;\n topicType: FloraTopicType;\n adminKey?: PublicKey | KeyList;\n submitKey?: PublicKey | KeyList;\n autoRenewAccountId?: string;\n }): Promise<string> {\n this.ensureConnected();\n const signer = this.getSigner();\n const tx = buildHcs16CreateFloraTopicTx({\n floraAccountId: params.floraAccountId,\n topicType: params.topicType,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n autoRenewAccountId: params.autoRenewAccountId,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer);\n const topicId = receipt?.topicId?.toString?.() || '';\n return topicId;\n }\n\n async sendFloraCreated(params: {\n topicId: string;\n operatorId: string;\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n }): Promise<void> {\n const signer = this.getSigner();\n const tx = buildHcs16FloraCreatedTx(params);\n const frozen = await tx.freezeWithSigner(signer);\n await frozen.executeWithSigner(signer);\n }\n\n async sendTransaction(params: {\n topicId: string;\n operatorId: string;\n scheduleId: string;\n data?: string;\n }): Promise<void> {\n const signer = this.getSigner();\n const tx = buildHcs16TransactionTx(params);\n const frozen = await tx.freezeWithSigner(signer);\n await frozen.executeWithSigner(signer);\n }\n\n /**\n * Wallet-signed ScheduleSign for a given scheduleId.\n */\n async signSchedule(params: { scheduleId: string }): Promise<void> {\n const signer = this.getSigner();\n const tx = await new ScheduleSignTransaction()\n .setScheduleId(params.scheduleId)\n .freezeWithSigner(signer);\n await tx.executeWithSigner(signer);\n }\n\n async sendStateUpdate(params: {\n topicId: string;\n operatorId: string;\n hash: string;\n epoch?: number;\n }): Promise<void> {\n const signer = this.getSigner();\n const tx = buildHcs16StateUpdateTx(params);\n const frozen = await tx.freezeWithSigner(signer);\n await frozen.executeWithSigner(signer);\n }\n\n /** credit_purchase is not part of HCS-16 specification */\n\n /**\n * Create Flora account and C/T/S topics using DAppSigner.\n * - Account KeyList = threshold of members\n * - Topic submitKey = 1-of-M KeyList of members\n * Returns created Flora account ID and topic IDs.\n */\n async createFloraAccountWithTopics(params: {\n members: string[];\n threshold: number;\n initialBalanceHbar?: number;\n autoRenewAccountId?: string;\n }): Promise<{\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n }> {\n const signer = this.getSigner();\n const keyList = await this.assembleKeyList({\n members: params.members,\n threshold: params.threshold,\n });\n const submitList = await this.assembleSubmitKeyList(params.members);\n\n const createAcc = buildHcs16CreateAccountTx({\n keyList,\n initialBalanceHbar:\n typeof params.initialBalanceHbar === 'number'\n ? params.initialBalanceHbar\n : 5,\n maxAutomaticTokenAssociations: -1,\n });\n const accFrozen = await createAcc.freezeWithSigner(signer);\n const accExec = await accFrozen.executeWithSigner(signer);\n const accReceipt = await accExec.getReceiptWithSigner(signer);\n const floraAccountId = accReceipt?.accountId?.toString?.();\n if (!floraAccountId) {\n throw new Error('Failed to create Flora account');\n }\n\n const {\n communication: commTx,\n transaction: trnTx,\n state: stateTx,\n } = this.buildFloraTopicCreateTxs({\n floraAccountId,\n keyList,\n submitList,\n autoRenewAccountId: params.autoRenewAccountId,\n });\n\n const commR = await (\n await (await commTx.freezeWithSigner(signer)).executeWithSigner(signer)\n ).getReceiptWithSigner(signer);\n const trnR = await (\n await (await trnTx.freezeWithSigner(signer)).executeWithSigner(signer)\n ).getReceiptWithSigner(signer);\n const stateR = await (\n await (await stateTx.freezeWithSigner(signer)).executeWithSigner(signer)\n ).getReceiptWithSigner(signer);\n const topics = {\n communication: commR?.topicId?.toString?.() || '',\n transaction: trnR?.topicId?.toString?.() || '',\n state: stateR?.topicId?.toString?.() || '',\n };\n return { floraAccountId, topics };\n }\n\n /** Publish flora_created on the communication topic. */\n async publishFloraCreated(params: {\n communicationTopicId: string;\n operatorId: string;\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n }): Promise<void> {\n const signer = this.getSigner();\n const tx = buildHcs16FloraCreatedTx({\n topicId: params.communicationTopicId,\n operatorId: params.operatorId,\n floraAccountId: params.floraAccountId,\n topics: params.topics,\n });\n const frozen = await tx.freezeWithSigner(signer);\n await frozen.executeWithSigner(signer);\n }\n\n /**\n * Post flora_join_request on Flora communication topic.\n * If submitKey=1/M, a member must relay the message.\n */\n async sendFloraJoinRequest(params: {\n topicId: string;\n operatorId: string;\n candidateAccountId: string;\n }): Promise<void> {\n const signer = this.getSigner();\n const tx = buildHcs16FloraJoinRequestTx(params);\n const frozen = await tx.freezeWithSigner(signer);\n await frozen.executeWithSigner(signer);\n }\n\n /** Post flora_join_vote approval/rejection on the communication topic. */\n async sendFloraJoinVote(params: {\n topicId: string;\n operatorId: string;\n candidateAccountId: string;\n approve: boolean;\n }): Promise<void> {\n const signer = this.getSigner();\n const tx = buildHcs16FloraJoinVoteTx(params);\n const frozen = await tx.freezeWithSigner(signer);\n await frozen.executeWithSigner(signer);\n }\n\n /** Post flora_join_accepted after threshold approval. */\n async sendFloraJoinAccepted(params: {\n topicId: string;\n operatorId: string;\n members: string[];\n epoch?: number;\n }): Promise<void> {\n const signer = this.getSigner();\n const tx = buildHcs16FloraJoinAcceptedTx(params);\n const frozen = await tx.freezeWithSigner(signer);\n await frozen.executeWithSigner(signer);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es93.js","sources":["../../src/hcs-16/sdk.ts"],"sourcesContent":["import {\n Client,\n AccountId,\n PublicKey,\n KeyList,\n TransactionReceipt,\n Hbar,\n ScheduleSignTransaction,\n PrivateKey,\n} from '@hashgraph/sdk';\nimport type { NetworkType } from '../utils/types';\nimport type { Logger } from '../utils/logger';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { HCS16BaseClient } from './base-client';\nimport {\n buildHcs16CreateFloraTopicTx,\n buildHcs16FloraCreatedTx,\n buildHcs16TransactionTx,\n buildHcs16StateUpdateTx,\n} from './tx';\nimport { FloraTopicType } from './types';\nimport {\n buildHcs16FloraJoinRequestTx,\n buildHcs16FloraJoinVoteTx,\n buildHcs16FloraJoinAcceptedTx,\n buildHcs16CreateAccountTx,\n} from './tx';\n\nexport interface HCS16ClientConfig {\n network: NetworkType;\n operatorId: string;\n operatorKey: string;\n keyType?: 'ecdsa' | 'ed25519';\n logger?: Logger;\n}\n\n/**\n * Node SDK client for HCS‑16 Flora operations.\n */\nexport class HCS16Client extends HCS16BaseClient {\n private readonly client: Client;\n private readonly operatorId: AccountId;\n private readonly operatorCtx: NodeOperatorContext;\n\n constructor(config: HCS16ClientConfig) {\n super({ network: config.network, logger: config.logger });\n this.operatorId = AccountId.fromString(config.operatorId);\n const mirror = new HederaMirrorNode(config.network, this.logger);\n this.operatorCtx = createNodeOperatorContext({\n network: config.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: mirror,\n logger: this.logger,\n client:\n config.network === 'mainnet'\n ? Client.forMainnet()\n : Client.forTestnet(),\n });\n this.client = this.operatorCtx.client;\n }\n\n /**\n * Create a Flora topic with memo `hcs-16:<floraAccountId>:<topicType>`.\n */\n async createFloraTopic(params: {\n floraAccountId: string;\n topicType: FloraTopicType;\n adminKey?: PublicKey | KeyList;\n submitKey?: PublicKey | KeyList;\n autoRenewAccountId?: string;\n }): Promise<string> {\n const tx = buildHcs16CreateFloraTopicTx({\n floraAccountId: params.floraAccountId,\n topicType: params.topicType,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: this.client.operatorPublicKey || undefined,\n autoRenewAccountId: params.autoRenewAccountId,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.topicId) {\n throw new Error('Failed to create Flora topic');\n }\n return receipt.topicId.toString();\n }\n\n async sendFloraCreated(params: {\n topicId: string;\n operatorId: string;\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n }): Promise<TransactionReceipt> {\n const tx = buildHcs16FloraCreatedTx(params);\n const resp = await tx.execute(this.client);\n return resp.getReceipt(this.client);\n }\n\n /**\n * Send HCS-16 transaction (preferred). scheduleId is the ScheduleId entity (e.g., 0.0.12345).\n */\n async sendTransaction(params: {\n topicId: string;\n operatorId: string;\n scheduleId: string;\n data?: string;\n }): Promise<TransactionReceipt> {\n const tx = buildHcs16TransactionTx(params);\n const resp = await tx.execute(this.client);\n return resp.getReceipt(this.client);\n }\n\n /**\n * Sign a scheduled transaction by ScheduleId entity using provided signer key (PrivateKey).\n * The signer must be a valid member key for the scheduled transaction to count toward threshold.\n */\n async signSchedule(params: {\n scheduleId: string;\n signerKey: PrivateKey;\n }): Promise<TransactionReceipt> {\n const tx = await new ScheduleSignTransaction()\n .setScheduleId(params.scheduleId)\n .freezeWith(this.client);\n const signed = await tx.sign(params.signerKey);\n const resp = await signed.execute(this.client);\n return resp.getReceipt(this.client);\n }\n\n async sendStateUpdate(params: {\n topicId: string;\n operatorId: string;\n hash: string;\n epoch?: number;\n }): Promise<TransactionReceipt> {\n const tx = buildHcs16StateUpdateTx(params);\n const resp = await tx.execute(this.client);\n return resp.getReceipt(this.client);\n }\n\n /**\n * Resolve member public keys from Mirror Node and build a KeyList with the given threshold.\n */\n async assembleKeyList(params: {\n members: string[];\n threshold: number;\n }): Promise<KeyList> {\n return super.assembleKeyList(params);\n }\n\n /**\n * Create a Flora account with a threshold KeyList, then create the three Flora topics.\n * Returns the Flora account ID and the topic IDs.\n */\n async createFloraAccountWithTopics(params: {\n members: string[];\n threshold: number;\n initialBalanceHbar?: number;\n autoRenewAccountId?: string;\n }): Promise<{\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n }> {\n const keyList = await this.assembleKeyList({\n members: params.members,\n threshold: params.threshold,\n });\n const submitList = await this.assembleSubmitKeyList(params.members);\n\n const createAcc = buildHcs16CreateAccountTx({\n keyList,\n initialBalanceHbar:\n typeof params.initialBalanceHbar === 'number'\n ? params.initialBalanceHbar\n : 5,\n maxAutomaticTokenAssociations: -1,\n });\n const accResp = await createAcc.execute(this.client);\n const accReceipt = await accResp.getReceipt(this.client);\n if (!accReceipt.accountId) {\n throw new Error('Failed to create Flora account');\n }\n const floraAccountId = accReceipt.accountId.toString();\n\n const {\n communication: commTx,\n transaction: trnTx,\n state: stateTx,\n } = this.buildFloraTopicCreateTxs({\n floraAccountId,\n keyList,\n submitList,\n autoRenewAccountId: params.autoRenewAccountId,\n });\n\n const commR = await commTx\n .execute(this.client)\n .then(r => r.getReceipt(this.client));\n const trnR = await trnTx\n .execute(this.client)\n .then(r => r.getReceipt(this.client));\n const stateR = await stateTx\n .execute(this.client)\n .then(r => r.getReceipt(this.client));\n const topics = {\n communication: commR.topicId!.toString(),\n transaction: trnR.topicId!.toString(),\n state: stateR.topicId!.toString(),\n };\n return { floraAccountId, topics };\n }\n\n /**\n * Convenience: publish flora_created on the communication topic.\n */\n async publishFloraCreated(params: {\n communicationTopicId: string;\n operatorId: string;\n floraAccountId: string;\n topics: { communication: string; transaction: string; state: string };\n }): Promise<TransactionReceipt> {\n const tx = buildHcs16FloraCreatedTx({\n topicId: params.communicationTopicId,\n operatorId: params.operatorId,\n floraAccountId: params.floraAccountId,\n topics: params.topics,\n });\n const resp = await tx.execute(this.client);\n return resp.getReceipt(this.client);\n }\n}\n"],"names":[],"mappings":";;;;;AA2CO,MAAM,oBAAoB,gBAAgB;AAAA,EAK/C,YAAY,QAA2B;AACrC,UAAM,EAAE,SAAS,OAAO,SAAS,QAAQ,OAAO,QAAQ;AACxD,SAAK,aAAa,UAAU,WAAW,OAAO,UAAU;AACxD,UAAM,SAAS,IAAI,iBAAiB,OAAO,SAAS,KAAK,MAAM;AAC/D,SAAK,cAAc,0BAA0B;AAAA,MAC3C,SAAS,OAAO;AAAA,MAChB,YAAY,KAAK;AAAA,MACjB,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,YAAY;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,QACE,OAAO,YAAY,YACf,OAAO,WAAA,IACP,OAAO,WAAA;AAAA,IAAW,CACzB;AACD,SAAK,SAAS,KAAK,YAAY;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,QAMH;AAClB,UAAM,KAAK,6BAA6B;AAAA,MACtC,gBAAgB,OAAO;AAAA,MACvB,WAAW,OAAO;AAAA,MAClB,UAAU,OAAO;AAAA,MACjB,WAAW,OAAO;AAAA,MAClB,mBAAmB,KAAK,OAAO,qBAAqB;AAAA,MACpD,oBAAoB,OAAO;AAAA,IAAA,CAC5B;AACD,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,MAAM;AACjD,QAAI,CAAC,QAAQ,SAAS;AACpB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AACA,WAAO,QAAQ,QAAQ,SAAA;AAAA,EACzB;AAAA,EAEA,MAAM,iBAAiB,QAKS;AAC9B,UAAM,KAAK,yBAAyB,MAAM;AAC1C,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,WAAO,KAAK,WAAW,KAAK,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,QAKU;AAC9B,UAAM,KAAK,wBAAwB,MAAM;AACzC,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,WAAO,KAAK,WAAW,KAAK,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAa,QAGa;AAC9B,UAAM,KAAK,MAAM,IAAI,wBAAA,EAClB,cAAc,OAAO,UAAU,EAC/B,WAAW,KAAK,MAAM;AACzB,UAAM,SAAS,MAAM,GAAG,KAAK,OAAO,SAAS;AAC7C,UAAM,OAAO,MAAM,OAAO,QAAQ,KAAK,MAAM;AAC7C,WAAO,KAAK,WAAW,KAAK,MAAM;AAAA,EACpC;AAAA,EAEA,MAAM,gBAAgB,QAKU;AAC9B,UAAM,KAAK,wBAAwB,MAAM;AACzC,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,WAAO,KAAK,WAAW,KAAK,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,QAGD;AACnB,WAAO,MAAM,gBAAgB,MAAM;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,6BAA6B,QAQhC;AACD,UAAM,UAAU,MAAM,KAAK,gBAAgB;AAAA,MACzC,SAAS,OAAO;AAAA,MAChB,WAAW,OAAO;AAAA,IAAA,CACnB;AACD,UAAM,aAAa,MAAM,KAAK,sBAAsB,OAAO,OAAO;AAElE,UAAM,YAAY,0BAA0B;AAAA,MAC1C;AAAA,MACA,oBACE,OAAO,OAAO,uBAAuB,WACjC,OAAO,qBACP;AAAA,MACN,+BAA+B;AAAA,IAAA,CAChC;AACD,UAAM,UAAU,MAAM,UAAU,QAAQ,KAAK,MAAM;AACnD,UAAM,aAAa,MAAM,QAAQ,WAAW,KAAK,MAAM;AACvD,QAAI,CAAC,WAAW,WAAW;AACzB,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AACA,UAAM,iBAAiB,WAAW,UAAU,SAAA;AAE5C,UAAM;AAAA,MACJ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,OAAO;AAAA,IAAA,IACL,KAAK,yBAAyB;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA,oBAAoB,OAAO;AAAA,IAAA,CAC5B;AAED,UAAM,QAAQ,MAAM,OACjB,QAAQ,KAAK,MAAM,EACnB,KAAK,CAAA,MAAK,EAAE,WAAW,KAAK,MAAM,CAAC;AACtC,UAAM,OAAO,MAAM,MAChB,QAAQ,KAAK,MAAM,EACnB,KAAK,CAAA,MAAK,EAAE,WAAW,KAAK,MAAM,CAAC;AACtC,UAAM,SAAS,MAAM,QAClB,QAAQ,KAAK,MAAM,EACnB,KAAK,CAAA,MAAK,EAAE,WAAW,KAAK,MAAM,CAAC;AACtC,UAAM,SAAS;AAAA,MACb,eAAe,MAAM,QAAS,SAAA;AAAA,MAC9B,aAAa,KAAK,QAAS,SAAA;AAAA,MAC3B,OAAO,OAAO,QAAS,SAAA;AAAA,IAAS;AAElC,WAAO,EAAE,gBAAgB,OAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,QAKM;AAC9B,UAAM,KAAK,yBAAyB;AAAA,MAClC,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,MACnB,gBAAgB,OAAO;AAAA,MACvB,QAAQ,OAAO;AAAA,IAAA,CAChB;AACD,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,WAAO,KAAK,WAAW,KAAK,MAAM;AAAA,EACpC;AACF;"}