@hashgraphonline/standards-sdk 0.1.147 → 0.1.148-fix-wc-updates.canary.3273eda.101

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 (181) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/hcs-3/src/types.d.ts +64 -0
  3. package/dist/cjs/hcs-3/src/types.d.ts.map +1 -0
  4. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  5. package/dist/cjs/services/registry-broker/client/adapters.d.ts +15 -18
  6. package/dist/cjs/services/registry-broker/client/adapters.d.ts.map +1 -1
  7. package/dist/cjs/services/registry-broker/client/agents.d.ts +11 -14
  8. package/dist/cjs/services/registry-broker/client/agents.d.ts.map +1 -1
  9. package/dist/cjs/services/registry-broker/client/base-client.d.ts +100 -1
  10. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  11. package/dist/cjs/services/registry-broker/client/chat-history.d.ts +8 -12
  12. package/dist/cjs/services/registry-broker/client/chat-history.d.ts.map +1 -1
  13. package/dist/cjs/services/registry-broker/client/chat.d.ts +29 -30
  14. package/dist/cjs/services/registry-broker/client/chat.d.ts.map +1 -1
  15. package/dist/cjs/services/registry-broker/client/credits.d.ts +14 -18
  16. package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -1
  17. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts +0 -5
  18. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
  19. package/dist/cjs/services/registry-broker/client/encryption.d.ts +32 -30
  20. package/dist/cjs/services/registry-broker/client/encryption.d.ts.map +1 -1
  21. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts +5 -8
  22. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
  23. package/dist/cjs/services/registry-broker/client/search.d.ts +14 -17
  24. package/dist/cjs/services/registry-broker/client/search.d.ts.map +1 -1
  25. package/dist/cjs/services/registry-broker/schemas.d.ts +9 -9
  26. package/dist/cjs/services/registry-broker/types.d.ts +1 -0
  27. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  28. package/dist/cjs/standards-sdk.cjs +3 -3
  29. package/dist/cjs/standards-sdk.cjs.map +1 -1
  30. package/dist/es/hcs-3/src/types.d.ts +64 -0
  31. package/dist/es/hcs-3/src/types.d.ts.map +1 -0
  32. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  33. package/dist/es/services/registry-broker/client/adapters.d.ts +15 -18
  34. package/dist/es/services/registry-broker/client/adapters.d.ts.map +1 -1
  35. package/dist/es/services/registry-broker/client/agents.d.ts +11 -14
  36. package/dist/es/services/registry-broker/client/agents.d.ts.map +1 -1
  37. package/dist/es/services/registry-broker/client/base-client.d.ts +100 -1
  38. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  39. package/dist/es/services/registry-broker/client/chat-history.d.ts +8 -12
  40. package/dist/es/services/registry-broker/client/chat-history.d.ts.map +1 -1
  41. package/dist/es/services/registry-broker/client/chat.d.ts +29 -30
  42. package/dist/es/services/registry-broker/client/chat.d.ts.map +1 -1
  43. package/dist/es/services/registry-broker/client/credits.d.ts +14 -18
  44. package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -1
  45. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts +0 -5
  46. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
  47. package/dist/es/services/registry-broker/client/encryption.d.ts +32 -30
  48. package/dist/es/services/registry-broker/client/encryption.d.ts.map +1 -1
  49. package/dist/es/services/registry-broker/client/ledger-auth.d.ts +5 -8
  50. package/dist/es/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
  51. package/dist/es/services/registry-broker/client/search.d.ts +14 -17
  52. package/dist/es/services/registry-broker/client/search.d.ts.map +1 -1
  53. package/dist/es/services/registry-broker/schemas.d.ts +9 -9
  54. package/dist/es/services/registry-broker/types.d.ts +1 -0
  55. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  56. package/dist/es/standards-sdk.es.js +13 -16
  57. package/dist/es/standards-sdk.es.js.map +1 -1
  58. package/dist/es/standards-sdk.es101.js +1 -1
  59. package/dist/es/standards-sdk.es103.js +1 -1
  60. package/dist/es/standards-sdk.es109.js +3 -10
  61. package/dist/es/standards-sdk.es109.js.map +1 -1
  62. package/dist/es/standards-sdk.es11.js +1 -1
  63. package/dist/es/standards-sdk.es110.js +5 -5
  64. package/dist/es/standards-sdk.es12.js +1 -1
  65. package/dist/es/standards-sdk.es120.js +1 -1
  66. package/dist/es/standards-sdk.es121.js +1 -1
  67. package/dist/es/standards-sdk.es122.js +5 -5
  68. package/dist/es/standards-sdk.es124.js +20 -1
  69. package/dist/es/standards-sdk.es124.js.map +1 -1
  70. package/dist/es/standards-sdk.es125.js +1 -1
  71. package/dist/es/standards-sdk.es127.js +960 -178
  72. package/dist/es/standards-sdk.es127.js.map +1 -1
  73. package/dist/es/standards-sdk.es128.js +15 -205
  74. package/dist/es/standards-sdk.es128.js.map +1 -1
  75. package/dist/es/standards-sdk.es129.js +79 -96
  76. package/dist/es/standards-sdk.es129.js.map +1 -1
  77. package/dist/es/standards-sdk.es130.js +72 -112
  78. package/dist/es/standards-sdk.es130.js.map +1 -1
  79. package/dist/es/standards-sdk.es131.js +760 -213
  80. package/dist/es/standards-sdk.es131.js.map +1 -1
  81. package/dist/es/standards-sdk.es132.js +53 -173
  82. package/dist/es/standards-sdk.es132.js.map +1 -1
  83. package/dist/es/standards-sdk.es133.js +156 -119
  84. package/dist/es/standards-sdk.es133.js.map +1 -1
  85. package/dist/es/standards-sdk.es134.js +8 -327
  86. package/dist/es/standards-sdk.es134.js.map +1 -1
  87. package/dist/es/standards-sdk.es135.js +74 -452
  88. package/dist/es/standards-sdk.es135.js.map +1 -1
  89. package/dist/es/standards-sdk.es136.js +61 -13
  90. package/dist/es/standards-sdk.es136.js.map +1 -1
  91. package/dist/es/standards-sdk.es137.js +30 -81
  92. package/dist/es/standards-sdk.es137.js.map +1 -1
  93. package/dist/es/standards-sdk.es138.js +34 -87
  94. package/dist/es/standards-sdk.es138.js.map +1 -1
  95. package/dist/es/standards-sdk.es139.js +28 -60
  96. package/dist/es/standards-sdk.es139.js.map +1 -1
  97. package/dist/es/standards-sdk.es140.js +121 -142
  98. package/dist/es/standards-sdk.es140.js.map +1 -1
  99. package/dist/es/standards-sdk.es141.js +42 -7
  100. package/dist/es/standards-sdk.es141.js.map +1 -1
  101. package/dist/es/standards-sdk.es142.js +12255 -52
  102. package/dist/es/standards-sdk.es142.js.map +1 -1
  103. package/dist/es/standards-sdk.es143.js +49 -58
  104. package/dist/es/standards-sdk.es143.js.map +1 -1
  105. package/dist/es/standards-sdk.es144.js +84 -30
  106. package/dist/es/standards-sdk.es144.js.map +1 -1
  107. package/dist/es/standards-sdk.es145.js +17 -34
  108. package/dist/es/standards-sdk.es145.js.map +1 -1
  109. package/dist/es/standards-sdk.es146.js +172 -28
  110. package/dist/es/standards-sdk.es146.js.map +1 -1
  111. package/dist/es/standards-sdk.es147.js +299 -115
  112. package/dist/es/standards-sdk.es147.js.map +1 -1
  113. package/dist/es/standards-sdk.es148.js +340 -36
  114. package/dist/es/standards-sdk.es148.js.map +1 -1
  115. package/dist/es/standards-sdk.es149.js +452 -55
  116. package/dist/es/standards-sdk.es149.js.map +1 -1
  117. package/dist/es/standards-sdk.es150.js +317 -70
  118. package/dist/es/standards-sdk.es150.js.map +1 -1
  119. package/dist/es/standards-sdk.es151.js +76 -959
  120. package/dist/es/standards-sdk.es151.js.map +1 -1
  121. package/dist/es/standards-sdk.es152.js +169 -14
  122. package/dist/es/standards-sdk.es152.js.map +1 -1
  123. package/dist/es/standards-sdk.es153.js +201 -12268
  124. package/dist/es/standards-sdk.es153.js.map +1 -1
  125. package/dist/es/standards-sdk.es154.js +223 -156
  126. package/dist/es/standards-sdk.es154.js.map +1 -1
  127. package/dist/es/standards-sdk.es155.js +112 -315
  128. package/dist/es/standards-sdk.es155.js.map +1 -1
  129. package/dist/es/standards-sdk.es156.js +116 -336
  130. package/dist/es/standards-sdk.es156.js.map +1 -1
  131. package/dist/es/standards-sdk.es157.js +151 -443
  132. package/dist/es/standards-sdk.es157.js.map +1 -1
  133. package/dist/es/standards-sdk.es158.js +170 -316
  134. package/dist/es/standards-sdk.es158.js.map +1 -1
  135. package/dist/es/standards-sdk.es159.js +132 -69
  136. package/dist/es/standards-sdk.es159.js.map +1 -1
  137. package/dist/es/standards-sdk.es16.js +3 -10
  138. package/dist/es/standards-sdk.es16.js.map +1 -1
  139. package/dist/es/standards-sdk.es160.js +300 -208
  140. package/dist/es/standards-sdk.es160.js.map +1 -1
  141. package/dist/es/standards-sdk.es161.js +16 -1
  142. package/dist/es/standards-sdk.es161.js.map +1 -1
  143. package/dist/es/standards-sdk.es18.js +6 -13
  144. package/dist/es/standards-sdk.es18.js.map +1 -1
  145. package/dist/es/standards-sdk.es19.js +4 -11
  146. package/dist/es/standards-sdk.es19.js.map +1 -1
  147. package/dist/es/standards-sdk.es22.js +1 -1
  148. package/dist/es/standards-sdk.es27.js +6 -13
  149. package/dist/es/standards-sdk.es27.js.map +1 -1
  150. package/dist/es/standards-sdk.es30.js +1 -1
  151. package/dist/es/standards-sdk.es31.js +1 -1
  152. package/dist/es/standards-sdk.es35.js +5 -11
  153. package/dist/es/standards-sdk.es35.js.map +1 -1
  154. package/dist/es/standards-sdk.es36.js +3 -3
  155. package/dist/es/standards-sdk.es37.js +1 -1
  156. package/dist/es/standards-sdk.es4.js +1 -1
  157. package/dist/es/standards-sdk.es53.js +1 -1
  158. package/dist/es/standards-sdk.es56.js +1 -1
  159. package/dist/es/standards-sdk.es58.js +1 -1
  160. package/dist/es/standards-sdk.es59.js +1 -1
  161. package/dist/es/standards-sdk.es60.js +4 -11
  162. package/dist/es/standards-sdk.es60.js.map +1 -1
  163. package/dist/es/standards-sdk.es62.js +1 -1
  164. package/dist/es/standards-sdk.es64.js +1 -1
  165. package/dist/es/standards-sdk.es65.js +2 -2
  166. package/dist/es/standards-sdk.es68.js +2 -2
  167. package/dist/es/standards-sdk.es69.js +1 -1
  168. package/dist/es/standards-sdk.es7.js +1 -1
  169. package/dist/es/standards-sdk.es71.js +1 -1
  170. package/dist/es/standards-sdk.es76.js +1 -1
  171. package/dist/es/standards-sdk.es77.js +3 -10
  172. package/dist/es/standards-sdk.es77.js.map +1 -1
  173. package/dist/es/standards-sdk.es78.js +1 -1
  174. package/dist/es/standards-sdk.es81.js +1 -1
  175. package/dist/es/standards-sdk.es83.js +1 -1
  176. package/dist/es/standards-sdk.es87.js +3 -3
  177. package/dist/es/standards-sdk.es91.js +1 -1
  178. package/dist/es/standards-sdk.es92.js +1 -1
  179. package/dist/es/standards-sdk.es97.js +1 -1
  180. package/dist/es/standards-sdk.es99.js +1 -1
  181. package/package.json +2 -1
@@ -1,162 +1,141 @@
1
- import { CustomFeeType } from "./standards-sdk.es141.js";
2
- import { HederaMirrorNode } from "./standards-sdk.es126.js";
3
- class FeeConfigBuilder {
4
- constructor(options) {
5
- this.customFees = [];
6
- this.logger = options.logger;
7
- this.mirrorNode = new HederaMirrorNode(options.network, options.logger);
8
- this.defaultCollectorAccountId = options.defaultCollectorAccountId || "";
1
+ import { AccountId, Client, PrivateKey } from "@hashgraph/sdk";
2
+ import { detectKeyTypeFromString } from "./standards-sdk.es113.js";
3
+ class NodeOperatorResolver {
4
+ constructor(params) {
5
+ this.mirror = params.mirrorNode;
6
+ this.logger = params.logger;
9
7
  }
10
8
  /**
11
- * Static factory method to create a FeeConfigBuilder with a single HBAR fee.
12
- * @param hbarAmount Amount in HBAR.
13
- * @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.
14
- * @param network Network type ('mainnet' or 'testnet').
15
- * @param logger Logger instance.
16
- * @param exemptAccounts Optional array of account IDs exempt from this fee.
17
- * @returns A configured FeeConfigBuilder instance.
9
+ * Best-guess parsing for an operator key without network calls.
10
+ * - If PrivateKey: returns immediately with provided or fallback type.
11
+ * - If string with explicitType: parse directly.
12
+ * - If string without type: detect format; fallback to ECDSA.
18
13
  */
19
- static forHbar(hbarAmount, collectorAccountId, network, logger, exemptAccounts = []) {
20
- const builder = new FeeConfigBuilder({
21
- network,
22
- logger,
23
- defaultCollectorAccountId: collectorAccountId
24
- });
25
- return builder.addHbarFee(hbarAmount, collectorAccountId, exemptAccounts);
26
- }
27
- /**
28
- * Static factory method to create a FeeConfigBuilder with a single token fee.
29
- * Automatically fetches token decimals if not provided.
30
- * @param tokenAmount Amount of tokens.
31
- * @param feeTokenId Token ID for the fee.
32
- * @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.
33
- * @param network Network type ('mainnet' or 'testnet').
34
- * @param logger Logger instance.
35
- * @param exemptAccounts Optional array of account IDs exempt from this fee.
36
- * @param decimals Optional decimals for the token (fetched if omitted).
37
- * @returns A Promise resolving to a configured FeeConfigBuilder instance.
38
- */
39
- static async forToken(tokenAmount, feeTokenId, collectorAccountId, network, logger, exemptAccounts = [], decimals) {
40
- const builder = new FeeConfigBuilder({
41
- network,
42
- logger,
43
- defaultCollectorAccountId: collectorAccountId
44
- });
45
- await builder.addTokenFee(
46
- tokenAmount,
47
- feeTokenId,
48
- collectorAccountId,
49
- decimals,
50
- exemptAccounts
51
- );
52
- return builder;
53
- }
54
- /**
55
- * Adds an HBAR fee configuration to the builder.
56
- * Allows chaining multiple fee additions.
57
- * @param hbarAmount The amount in HBAR (e.g., 0.5).
58
- * @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.
59
- * @param exemptAccountIds Optional. Accounts specifically exempt from *this* HBAR fee.
60
- * @returns This FeeConfigBuilder instance for chaining.
61
- */
62
- addHbarFee(hbarAmount, collectorAccountId, exemptAccountIds = []) {
63
- if (hbarAmount <= 0) {
64
- throw new Error("HBAR amount must be greater than zero");
14
+ bestGuessOperatorKey(operatorKeyInput, explicitType) {
15
+ if (typeof operatorKeyInput !== "string") {
16
+ return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
17
+ }
18
+ if (explicitType) {
19
+ const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
20
+ return { keyType: explicitType, privateKey: pk };
21
+ }
22
+ try {
23
+ const detected = detectKeyTypeFromString(operatorKeyInput);
24
+ return {
25
+ keyType: detected.detectedType,
26
+ privateKey: detected.privateKey
27
+ };
28
+ } catch {
29
+ return {
30
+ keyType: "ecdsa",
31
+ privateKey: PrivateKey.fromStringECDSA(operatorKeyInput)
32
+ };
65
33
  }
66
- this.customFees.push({
67
- feeAmount: {
68
- amount: hbarAmount * 1e8,
69
- decimals: 0
70
- },
71
- feeCollectorAccountId: collectorAccountId || this.defaultCollectorAccountId,
72
- feeTokenId: void 0,
73
- exemptAccounts: [...exemptAccountIds],
74
- type: CustomFeeType.FIXED_FEE
75
- });
76
- return this;
77
34
  }
78
35
  /**
79
- * Adds a token fee configuration to the builder.
80
- * Allows chaining multiple fee additions.
81
- * Fetches token decimals automatically if not provided.
82
- * @param tokenAmount The amount of the specified token.
83
- * @param feeTokenId The ID of the token to charge the fee in.
84
- * @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.
85
- * @param decimals Optional. The number of decimals for the token. If omitted, it will be fetched from the mirror node.
86
- * @param exemptAccountIds Optional. Accounts specifically exempt from *this* token fee.
87
- * @returns A Promise resolving to this FeeConfigBuilder instance for chaining.
36
+ * Resolve an operator key using Mirror Node for key type when possible.
37
+ * - If PrivateKey: return immediately.
38
+ * - If explicitType: parse directly.
39
+ * - Else: query Mirror Node; fallback to local detection.
88
40
  */
89
- async addTokenFee(tokenAmount, feeTokenId, collectorAccountId, decimals, exemptAccountIds = []) {
90
- if (tokenAmount <= 0) {
91
- throw new Error("Token amount must be greater than zero");
41
+ async resolveOperatorKey(operatorId, operatorKeyInput, explicitType) {
42
+ if (typeof operatorKeyInput !== "string") {
43
+ return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
92
44
  }
93
- if (!feeTokenId) {
94
- throw new Error("Fee token ID is required when adding a token fee");
45
+ if (explicitType) {
46
+ const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
47
+ return { keyType: explicitType, privateKey: pk };
95
48
  }
96
- let finalDecimals = decimals;
97
- if (finalDecimals === void 0) {
98
- try {
99
- const tokenInfo = await this.mirrorNode.getTokenInfo(feeTokenId);
100
- if (tokenInfo?.decimals) {
101
- finalDecimals = parseInt(tokenInfo.decimals, 10);
102
- this.logger.info(
103
- `Fetched decimals for ${feeTokenId}: ${finalDecimals}`
104
- );
105
- } else {
106
- this.logger.warn(
107
- `Could not fetch decimals for ${feeTokenId}, defaulting to 0.`
108
- );
109
- finalDecimals = 0;
110
- }
111
- } catch (error) {
112
- this.logger.error(
113
- `Error fetching decimals for ${feeTokenId}, defaulting to 0: ${error}`
114
- );
115
- finalDecimals = 0;
116
- }
49
+ const account = typeof operatorId === "string" ? operatorId : operatorId.toString();
50
+ try {
51
+ const info = await this.mirror.requestAccount(account);
52
+ const t = info?.key?._type || "";
53
+ const keyType = t.includes("ED25519") ? "ed25519" : "ecdsa";
54
+ const privateKey = keyType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
55
+ return { keyType, privateKey };
56
+ } catch {
57
+ this.logger.warn(
58
+ "Mirror node key detection failed; using local detection or default ECDSA"
59
+ );
60
+ return this.bestGuessOperatorKey(operatorKeyInput);
117
61
  }
118
- this.customFees.push({
119
- feeAmount: {
120
- amount: tokenAmount * 10 ** finalDecimals,
121
- decimals: finalDecimals
122
- },
123
- feeCollectorAccountId: collectorAccountId || this.defaultCollectorAccountId,
124
- feeTokenId,
125
- exemptAccounts: [...exemptAccountIds],
126
- type: CustomFeeType.FIXED_FEE
127
- });
128
- return this;
129
62
  }
130
63
  /**
131
- * Builds the final TopicFeeConfig object.
132
- * @returns The TopicFeeConfig containing all added custom fees and a consolidated list of unique exempt accounts.
133
- * @throws Error if no fees have been added.
134
- * @throws Error if more than 10 fees have been added.
64
+ * Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.
135
65
  */
136
- build() {
137
- if (this.customFees.length === 0) {
138
- throw new Error(
139
- "At least one fee must be added using addHbarFee/addTokenFee or created using forHbar/forToken"
66
+ async resolveSupplyKey(tokenId, keyInput, fallbackType, explicitType) {
67
+ try {
68
+ const info = await this.mirror.getTokenInfo(tokenId);
69
+ const t = info?.supply_key?._type || "";
70
+ if (typeof keyInput !== "string") {
71
+ return keyInput;
72
+ }
73
+ if (explicitType) {
74
+ return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
75
+ }
76
+ if (t.includes("ED25519")) {
77
+ return PrivateKey.fromStringED25519(keyInput);
78
+ }
79
+ if (t.includes("ECDSA")) {
80
+ return PrivateKey.fromStringECDSA(keyInput);
81
+ }
82
+ return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
83
+ } catch {
84
+ if (typeof keyInput !== "string") {
85
+ return keyInput;
86
+ }
87
+ if (explicitType) {
88
+ return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
89
+ }
90
+ return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
91
+ }
92
+ }
93
+ }
94
+ function createNodeOperatorContext(params) {
95
+ const operatorId = typeof params.operatorId === "string" ? AccountId.fromString(params.operatorId) : params.operatorId;
96
+ const client = params.client ? params.client : params.network === "mainnet" ? Client.forMainnet() : Client.forTestnet();
97
+ const resolver = new NodeOperatorResolver({
98
+ mirrorNode: params.mirrorNode,
99
+ logger: params.logger
100
+ });
101
+ let currentKeyType;
102
+ let currentPrivateKey;
103
+ const guess = resolver.bestGuessOperatorKey(
104
+ params.operatorKey,
105
+ params.keyType
106
+ );
107
+ currentKeyType = guess.keyType;
108
+ currentPrivateKey = guess.privateKey;
109
+ client.setOperator(operatorId.toString(), currentPrivateKey);
110
+ const initPromise = (async () => {
111
+ try {
112
+ const resolved = await resolver.resolveOperatorKey(
113
+ operatorId,
114
+ params.operatorKey,
115
+ params.keyType
140
116
  );
117
+ currentKeyType = resolved.keyType;
118
+ currentPrivateKey = resolved.privateKey;
119
+ client.setOperator(operatorId.toString(), currentPrivateKey);
120
+ } catch {
141
121
  }
142
- if (this.customFees.length > 10) {
143
- throw new Error("Maximum of 10 custom fees per topic allowed");
122
+ })();
123
+ return {
124
+ client,
125
+ operatorId,
126
+ get operatorKey() {
127
+ return currentPrivateKey;
128
+ },
129
+ get keyType() {
130
+ return currentKeyType;
131
+ },
132
+ ensureInitialized: async () => {
133
+ await initPromise;
144
134
  }
145
- const allExemptAccounts = /* @__PURE__ */ new Set();
146
- this.customFees.forEach((fee) => {
147
- fee.exemptAccounts.forEach((account) => allExemptAccounts.add(account));
148
- });
149
- const resolvedCustomFees = this.customFees.map((fee) => ({
150
- ...fee,
151
- feeCollectorAccountId: fee.feeCollectorAccountId || this.defaultCollectorAccountId
152
- }));
153
- return {
154
- customFees: resolvedCustomFees,
155
- exemptAccounts: Array.from(allExemptAccounts)
156
- };
157
- }
135
+ };
158
136
  }
159
137
  export {
160
- FeeConfigBuilder
138
+ NodeOperatorResolver,
139
+ createNodeOperatorContext
161
140
  };
162
141
  //# sourceMappingURL=standards-sdk.es140.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es140.js","sources":["../../src/fees/fee-config-builder.ts"],"sourcesContent":["import {\n FeeConfigBuilderInterface,\n TokenFeeConfig,\n TopicFeeConfig,\n CustomFeeType,\n} from './types';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\n\n/**\n * FeeConfigBuilder provides a fluent interface for creating fee configurations\n * for HCS-10 topics. This makes it easy to configure fees without dealing with\n * the complexity of the underlying fee structure.\n *\n * Example usage:\n *\n * // Super simple one-liner with the factory method\n * const simpleFeeConfig = FeeConfigBuilder.forHbar(5, '0.0.12345', NetworkType.TESTNET, new Logger(), ['0.0.67890']);\n *\n * // With multiple fees:\n * const multipleFeeConfig = new FeeConfigBuilder({\n * network: NetworkType.TESTNET,\n * logger: new Logger(),\n * defaultCollectorAccountId: '0.0.12345',\n * defaultExemptAccountIds: ['0.0.67890']\n * })\n * .withHbarFee(1) // 1 HBAR fee\n * .withTokenFee(10, '0.0.54321') // 10 units of token 0.0.54321\n * .build();\n *\n * With Agent Builder\n * const agent = new AgentBuilder()\n * .setName('Fee Collector Agent')\n * .setDescription('An agent that collects fees')\n * .setInboundTopicType(InboundTopicType.FEE_BASED)\n * .setFeeConfig(FeeConfigBuilder.forHbar(1, '0.0.12345', NetworkType.TESTNET, new Logger(), ['0.0.67890']))\n * .setNetwork('testnet')\n .build();\n\n * Directly with client\n * const client = new HCS10Client(config);\n * const connectionFeeConfig = new FeeConfigBuilder({\n * network: NetworkType.TESTNET,\n * logger: new Logger(),\n * defaultCollectorAccountId: client.getAccountAndSigner().accountId,\n * defaultExemptAccountIds: ['0.0.67890']\n * })\n * .withHbarFee(0.5) // 0.5 HBAR (simple!)\n * .build();\n\n * const result = await client.handleConnectionRequest(\n * inboundTopicId,\n * requestingAccountId,\n * connectionRequestId,\n * connectionFeeConfig\n * );\n*/\nexport interface FeeConfigBuilderOptions {\n network: NetworkType;\n logger: Logger;\n defaultCollectorAccountId?: string;\n}\n\nexport class FeeConfigBuilder implements FeeConfigBuilderInterface {\n private customFees: TokenFeeConfig[] = [];\n private mirrorNode: HederaMirrorNode;\n private logger: Logger;\n private defaultCollectorAccountId: string;\n\n constructor(options: FeeConfigBuilderOptions) {\n this.logger = options.logger;\n this.mirrorNode = new HederaMirrorNode(options.network, options.logger);\n this.defaultCollectorAccountId = options.defaultCollectorAccountId || '';\n }\n\n /**\n * Static factory method to create a FeeConfigBuilder with a single HBAR fee.\n * @param hbarAmount Amount in HBAR.\n * @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.\n * @param network Network type ('mainnet' or 'testnet').\n * @param logger Logger instance.\n * @param exemptAccounts Optional array of account IDs exempt from this fee.\n * @returns A configured FeeConfigBuilder instance.\n */\n static forHbar(\n hbarAmount: number,\n collectorAccountId: string | undefined,\n network: NetworkType,\n logger: Logger,\n exemptAccounts: string[] = [],\n ): FeeConfigBuilder {\n const builder = new FeeConfigBuilder({\n network,\n logger,\n defaultCollectorAccountId: collectorAccountId,\n });\n return builder.addHbarFee(hbarAmount, collectorAccountId, exemptAccounts);\n }\n\n /**\n * Static factory method to create a FeeConfigBuilder with a single token fee.\n * Automatically fetches token decimals if not provided.\n * @param tokenAmount Amount of tokens.\n * @param feeTokenId Token ID for the fee.\n * @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.\n * @param network Network type ('mainnet' or 'testnet').\n * @param logger Logger instance.\n * @param exemptAccounts Optional array of account IDs exempt from this fee.\n * @param decimals Optional decimals for the token (fetched if omitted).\n * @returns A Promise resolving to a configured FeeConfigBuilder instance.\n */\n static async forToken(\n tokenAmount: number,\n feeTokenId: string,\n collectorAccountId: string | undefined,\n network: NetworkType,\n logger: Logger,\n exemptAccounts: string[] = [],\n decimals?: number,\n ): Promise<FeeConfigBuilder> {\n const builder = new FeeConfigBuilder({\n network,\n logger,\n defaultCollectorAccountId: collectorAccountId,\n });\n await builder.addTokenFee(\n tokenAmount,\n feeTokenId,\n collectorAccountId,\n decimals,\n exemptAccounts,\n );\n return builder;\n }\n\n /**\n * Adds an HBAR fee configuration to the builder.\n * Allows chaining multiple fee additions.\n * @param hbarAmount The amount in HBAR (e.g., 0.5).\n * @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.\n * @param exemptAccountIds Optional. Accounts specifically exempt from *this* HBAR fee.\n * @returns This FeeConfigBuilder instance for chaining.\n */\n addHbarFee(\n hbarAmount: number,\n collectorAccountId?: string,\n exemptAccountIds: string[] = [],\n ): FeeConfigBuilder {\n if (hbarAmount <= 0) {\n throw new Error('HBAR amount must be greater than zero');\n }\n\n this.customFees.push({\n feeAmount: {\n amount: hbarAmount * 100_000_000,\n decimals: 0,\n },\n feeCollectorAccountId:\n collectorAccountId || this.defaultCollectorAccountId,\n feeTokenId: undefined,\n exemptAccounts: [...exemptAccountIds],\n type: CustomFeeType.FIXED_FEE,\n });\n\n return this;\n }\n\n /**\n * Adds a token fee configuration to the builder.\n * Allows chaining multiple fee additions.\n * Fetches token decimals automatically if not provided.\n * @param tokenAmount The amount of the specified token.\n * @param feeTokenId The ID of the token to charge the fee in.\n * @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.\n * @param decimals Optional. The number of decimals for the token. If omitted, it will be fetched from the mirror node.\n * @param exemptAccountIds Optional. Accounts specifically exempt from *this* token fee.\n * @returns A Promise resolving to this FeeConfigBuilder instance for chaining.\n */\n async addTokenFee(\n tokenAmount: number,\n feeTokenId: string,\n collectorAccountId?: string,\n decimals?: number,\n exemptAccountIds: string[] = [],\n ): Promise<FeeConfigBuilder> {\n if (tokenAmount <= 0) {\n throw new Error('Token amount must be greater than zero');\n }\n if (!feeTokenId) {\n throw new Error('Fee token ID is required when adding a token fee');\n }\n\n let finalDecimals = decimals;\n if (finalDecimals === undefined) {\n try {\n const tokenInfo = await this.mirrorNode.getTokenInfo(feeTokenId);\n if (tokenInfo?.decimals) {\n finalDecimals = parseInt(tokenInfo.decimals, 10);\n this.logger.info(\n `Fetched decimals for ${feeTokenId}: ${finalDecimals}`,\n );\n } else {\n this.logger.warn(\n `Could not fetch decimals for ${feeTokenId}, defaulting to 0.`,\n );\n finalDecimals = 0;\n }\n } catch (error) {\n this.logger.error(\n `Error fetching decimals for ${feeTokenId}, defaulting to 0: ${error}`,\n );\n finalDecimals = 0;\n }\n }\n\n this.customFees.push({\n feeAmount: {\n amount: tokenAmount * 10 ** finalDecimals,\n decimals: finalDecimals,\n },\n feeCollectorAccountId:\n collectorAccountId || this.defaultCollectorAccountId,\n feeTokenId: feeTokenId,\n exemptAccounts: [...exemptAccountIds],\n type: CustomFeeType.FIXED_FEE,\n });\n\n return this;\n }\n\n /**\n * Builds the final TopicFeeConfig object.\n * @returns The TopicFeeConfig containing all added custom fees and a consolidated list of unique exempt accounts.\n * @throws Error if no fees have been added.\n * @throws Error if more than 10 fees have been added.\n */\n build(): TopicFeeConfig {\n if (this.customFees.length === 0) {\n throw new Error(\n 'At least one fee must be added using addHbarFee/addTokenFee or created using forHbar/forToken',\n );\n }\n\n if (this.customFees.length > 10) {\n throw new Error('Maximum of 10 custom fees per topic allowed');\n }\n\n const allExemptAccounts = new Set<string>();\n this.customFees.forEach(fee => {\n fee.exemptAccounts.forEach(account => allExemptAccounts.add(account));\n });\n\n const resolvedCustomFees = this.customFees.map(fee => ({\n ...fee,\n feeCollectorAccountId:\n fee.feeCollectorAccountId || this.defaultCollectorAccountId,\n }));\n\n return {\n customFees: resolvedCustomFees,\n exemptAccounts: Array.from(allExemptAccounts),\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es140.js","sources":["../../src/common/node-operator-resolver.ts"],"sourcesContent":["import { AccountId, Client, PrivateKey } from '@hashgraph/sdk';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { ILogger } from '../utils/logger';\nimport { detectKeyTypeFromString } from '../utils/key-type-detector';\nimport { NetworkType } from '../utils/types';\n\n/**\n * Resolves operator and supply private keys using Mirror Node as source of truth\n * with format-detection fallbacks for string keys.\n */\nexport class NodeOperatorResolver {\n private readonly mirror: HederaMirrorNode;\n private readonly logger: ILogger;\n\n constructor(params: { mirrorNode: HederaMirrorNode; logger: ILogger }) {\n this.mirror = params.mirrorNode;\n this.logger = params.logger;\n }\n\n /**\n * Best-guess parsing for an operator key without network calls.\n * - If PrivateKey: returns immediately with provided or fallback type.\n * - If string with explicitType: parse directly.\n * - If string without type: detect format; fallback to ECDSA.\n */\n bestGuessOperatorKey(\n operatorKeyInput: string | PrivateKey,\n explicitType?: 'ed25519' | 'ecdsa',\n ): { keyType: 'ed25519' | 'ecdsa'; privateKey: PrivateKey } {\n if (typeof operatorKeyInput !== 'string') {\n return { keyType: explicitType || 'ecdsa', privateKey: operatorKeyInput };\n }\n if (explicitType) {\n const pk =\n explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType: explicitType, privateKey: pk };\n }\n try {\n const detected = detectKeyTypeFromString(operatorKeyInput);\n return {\n keyType: detected.detectedType,\n privateKey: detected.privateKey,\n };\n } catch {\n return {\n keyType: 'ecdsa',\n privateKey: PrivateKey.fromStringECDSA(operatorKeyInput),\n };\n }\n }\n\n /**\n * Resolve an operator key using Mirror Node for key type when possible.\n * - If PrivateKey: return immediately.\n * - If explicitType: parse directly.\n * - Else: query Mirror Node; fallback to local detection.\n */\n async resolveOperatorKey(\n operatorId: string | AccountId,\n operatorKeyInput: string | PrivateKey,\n explicitType?: 'ed25519' | 'ecdsa',\n ): Promise<{ keyType: 'ed25519' | 'ecdsa'; privateKey: PrivateKey }> {\n if (typeof operatorKeyInput !== 'string') {\n return { keyType: explicitType || 'ecdsa', privateKey: operatorKeyInput };\n }\n if (explicitType) {\n const pk =\n explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType: explicitType, privateKey: pk };\n }\n const account =\n typeof operatorId === 'string' ? operatorId : operatorId.toString();\n try {\n const info = await this.mirror.requestAccount(account);\n const t = info?.key?._type || '';\n const keyType: 'ed25519' | 'ecdsa' = t.includes('ED25519')\n ? 'ed25519'\n : 'ecdsa';\n const privateKey =\n keyType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType, privateKey };\n } catch {\n this.logger.warn(\n 'Mirror node key detection failed; using local detection or default ECDSA',\n );\n return this.bestGuessOperatorKey(operatorKeyInput);\n }\n }\n\n /**\n * Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.\n */\n async resolveSupplyKey(\n tokenId: string,\n keyInput: string | PrivateKey,\n fallbackType: 'ed25519' | 'ecdsa',\n explicitType?: 'ed25519' | 'ecdsa',\n ): Promise<PrivateKey> {\n try {\n const info = await this.mirror.getTokenInfo(tokenId);\n const t = info?.supply_key?._type || '';\n if (typeof keyInput !== 'string') {\n return keyInput;\n }\n if (explicitType) {\n return explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n if (t.includes('ED25519')) {\n return PrivateKey.fromStringED25519(keyInput);\n }\n if (t.includes('ECDSA')) {\n return PrivateKey.fromStringECDSA(keyInput);\n }\n return fallbackType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n } catch {\n if (typeof keyInput !== 'string') {\n return keyInput;\n }\n if (explicitType) {\n return explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n return fallbackType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n }\n}\n\nexport interface NodeOperatorInitParams {\n network: NetworkType;\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n mirrorNode: HederaMirrorNode;\n logger: ILogger;\n client?: Client;\n}\n\nexport interface NodeOperatorContext {\n client: Client;\n operatorId: AccountId;\n readonly operatorKey: PrivateKey;\n readonly keyType: 'ed25519' | 'ecdsa';\n ensureInitialized(): Promise<void>;\n}\n\nexport function createNodeOperatorContext(\n params: NodeOperatorInitParams,\n): NodeOperatorContext {\n const operatorId: AccountId =\n typeof params.operatorId === 'string'\n ? AccountId.fromString(params.operatorId)\n : params.operatorId;\n\n const client: Client = params.client\n ? params.client\n : params.network === 'mainnet'\n ? Client.forMainnet()\n : Client.forTestnet();\n\n const resolver = new NodeOperatorResolver({\n mirrorNode: params.mirrorNode,\n logger: params.logger,\n });\n\n let currentKeyType: 'ed25519' | 'ecdsa';\n let currentPrivateKey: PrivateKey;\n\n const guess = resolver.bestGuessOperatorKey(\n params.operatorKey,\n params.keyType,\n );\n currentKeyType = guess.keyType;\n currentPrivateKey = guess.privateKey;\n client.setOperator(operatorId.toString(), currentPrivateKey);\n\n const initPromise = (async () => {\n try {\n const resolved = await resolver.resolveOperatorKey(\n operatorId,\n params.operatorKey,\n params.keyType,\n );\n currentKeyType = resolved.keyType;\n currentPrivateKey = resolved.privateKey;\n client.setOperator(operatorId.toString(), currentPrivateKey);\n } catch {}\n })();\n\n return {\n client,\n operatorId,\n get operatorKey() {\n return currentPrivateKey;\n },\n get keyType() {\n return currentKeyType;\n },\n ensureInitialized: async () => {\n await initPromise;\n },\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,45 @@
1
- var CustomFeeType = /* @__PURE__ */ ((CustomFeeType2) => {
2
- CustomFeeType2["FIXED_FEE"] = "FIXED_FEE";
3
- CustomFeeType2["FRACTIONAL_FEE"] = "FRACTIONAL_FEE";
4
- CustomFeeType2["ROYALTY_FEE"] = "ROYALTY_FEE";
5
- return CustomFeeType2;
6
- })(CustomFeeType || {});
1
+ import { TopicMessageSubmitTransaction, TopicId, TopicCreateTransaction, PublicKey, KeyList } from "@hashgraph/sdk";
2
+ function encodeHcs2RegistryMemo(indexedFlag, ttl) {
3
+ return `hcs-2:${indexedFlag}:${ttl}`;
4
+ }
5
+ function buildTopicCreateTx(params) {
6
+ const { memo, adminKey, submitKey, operatorPublicKey } = params;
7
+ const tx = new TopicCreateTransaction().setTopicMemo(memo);
8
+ const coerceKey = (k) => {
9
+ if (!k) return void 0;
10
+ if (k instanceof PublicKey || k instanceof KeyList) return k;
11
+ if (typeof k === "boolean") {
12
+ return k ? operatorPublicKey : void 0;
13
+ }
14
+ if (typeof k === "string") {
15
+ try {
16
+ return PublicKey.fromString(k);
17
+ } catch {
18
+ return void 0;
19
+ }
20
+ }
21
+ return void 0;
22
+ };
23
+ const admin = coerceKey(adminKey);
24
+ if (admin) {
25
+ tx.setAdminKey(admin);
26
+ }
27
+ const submit = coerceKey(submitKey);
28
+ if (submit) {
29
+ tx.setSubmitKey(submit);
30
+ }
31
+ return tx;
32
+ }
33
+ function buildMessageTx(params) {
34
+ const tx = new TopicMessageSubmitTransaction().setTopicId(TopicId.fromString(params.topicId)).setMessage(params.message);
35
+ if (params.transactionMemo) {
36
+ tx.setTransactionMemo(params.transactionMemo);
37
+ }
38
+ return tx;
39
+ }
7
40
  export {
8
- CustomFeeType
41
+ buildMessageTx,
42
+ buildTopicCreateTx,
43
+ encodeHcs2RegistryMemo
9
44
  };
10
45
  //# sourceMappingURL=standards-sdk.es141.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es141.js","sources":["../../src/fees/types.ts"],"sourcesContent":["export interface FeeConfigBuilderInterface {\n addHbarFee(\n hbarAmount: number,\n collectorAccountId?: string,\n exemptAccountIds?: string[],\n ): FeeConfigBuilderInterface;\n addTokenFee(\n tokenAmount: number,\n feeTokenId: string,\n collectorAccountId?: string,\n decimals?: number,\n exemptAccountIds?: string[],\n ): Promise<FeeConfigBuilderInterface>;\n build(): TopicFeeConfig;\n}\n\nexport enum CustomFeeType {\n FIXED_FEE = 'FIXED_FEE',\n FRACTIONAL_FEE = 'FRACTIONAL_FEE',\n ROYALTY_FEE = 'ROYALTY_FEE',\n}\n\nexport type FeeAmount = {\n amount: number;\n decimals?: number;\n};\n\nexport interface TokenFeeConfig {\n feeAmount: FeeAmount;\n feeCollectorAccountId: string;\n feeTokenId?: string;\n exemptAccounts: string[];\n type: CustomFeeType;\n}\n\nexport interface TopicFeeConfig {\n customFees: TokenFeeConfig[];\n exemptAccounts: string[];\n}\n"],"names":["CustomFeeType"],"mappings":"AAgBO,IAAK,kCAAAA,mBAAL;AACLA,iBAAA,WAAA,IAAY;AACZA,iBAAA,gBAAA,IAAiB;AACjBA,iBAAA,aAAA,IAAc;AAHJ,SAAAA;AAAA,GAAA,iBAAA,CAAA,CAAA;"}
1
+ {"version":3,"file":"standards-sdk.es141.js","sources":["../../src/common/tx/tx-utils.ts"],"sourcesContent":["import {\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n PublicKey,\n KeyList,\n TopicId,\n} from '@hashgraph/sdk';\n\nexport type MaybeKey = boolean | string | PublicKey | KeyList | undefined;\n\nexport function encodeHcs2RegistryMemo(\n indexedFlag: 0 | 1,\n ttl: number,\n): string {\n return `hcs-2:${indexedFlag}:${ttl}`;\n}\n\nexport function buildTopicCreateTx(params: {\n memo: string;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n operatorPublicKey?: PublicKey;\n}): TopicCreateTransaction {\n const { memo, adminKey, submitKey, operatorPublicKey } = params;\n const tx = new TopicCreateTransaction().setTopicMemo(memo);\n\n const coerceKey = (k?: MaybeKey): PublicKey | KeyList | undefined => {\n if (!k) return undefined;\n if (k instanceof PublicKey || k instanceof KeyList) return k;\n if (typeof k === 'boolean') {\n return k ? operatorPublicKey : undefined;\n }\n if (typeof k === 'string') {\n try {\n return PublicKey.fromString(k);\n } catch {\n return undefined;\n }\n }\n return undefined;\n };\n\n const admin = coerceKey(adminKey);\n if (admin) {\n tx.setAdminKey(admin);\n }\n\n const submit = coerceKey(submitKey);\n if (submit) {\n tx.setSubmitKey(submit);\n }\n\n return tx;\n}\n\nexport function buildMessageTx(params: {\n topicId: string;\n message: string | Uint8Array;\n transactionMemo?: string;\n}): TopicMessageSubmitTransaction {\n const tx = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(params.topicId))\n .setMessage(params.message);\n if (params.transactionMemo) {\n tx.setTransactionMemo(params.transactionMemo);\n }\n return tx;\n}\n"],"names":[],"mappings":";AAUO,SAAS,uBACd,aACA,KACQ;AACR,SAAO,SAAS,WAAW,IAAI,GAAG;AACpC;AAEO,SAAS,mBAAmB,QAKR;AACzB,QAAM,EAAE,MAAM,UAAU,WAAW,sBAAsB;AACzD,QAAM,KAAK,IAAI,yBAAyB,aAAa,IAAI;AAEzD,QAAM,YAAY,CAAC,MAAkD;AACnE,QAAI,CAAC,EAAG,QAAO;AACf,QAAI,aAAa,aAAa,aAAa,QAAS,QAAO;AAC3D,QAAI,OAAO,MAAM,WAAW;AAC1B,aAAO,IAAI,oBAAoB;AAAA,IACjC;AACA,QAAI,OAAO,MAAM,UAAU;AACzB,UAAI;AACF,eAAO,UAAU,WAAW,CAAC;AAAA,MAC/B,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,UAAU,QAAQ;AAChC,MAAI,OAAO;AACT,OAAG,YAAY,KAAK;AAAA,EACtB;AAEA,QAAM,SAAS,UAAU,SAAS;AAClC,MAAI,QAAQ;AACV,OAAG,aAAa,MAAM;AAAA,EACxB;AAEA,SAAO;AACT;AAEO,SAAS,eAAe,QAIG;AAChC,QAAM,KAAK,IAAI,gCACZ,WAAW,QAAQ,WAAW,OAAO,OAAO,CAAC,EAC7C,WAAW,OAAO,OAAO;AAC5B,MAAI,OAAO,iBAAiB;AAC1B,OAAG,mBAAmB,OAAO,eAAe;AAAA,EAC9C;AACA,SAAO;AACT;"}