@hashgraphonline/standards-sdk 0.0.52 → 0.0.53

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 (236) hide show
  1. package/dist/es/hcs-10/base-client.d.ts +40 -45
  2. package/dist/es/hcs-10/base-client.d.ts.map +1 -1
  3. package/dist/es/hcs-10/browser.d.ts +8 -10
  4. package/dist/es/hcs-10/browser.d.ts.map +1 -1
  5. package/dist/es/hcs-10/sdk.d.ts +67 -13
  6. package/dist/es/hcs-10/sdk.d.ts.map +1 -1
  7. package/dist/es/hcs-10/types.d.ts +0 -7
  8. package/dist/es/hcs-10/types.d.ts.map +1 -1
  9. package/dist/es/hcs-11/index.d.ts +1 -1
  10. package/dist/es/hcs-11/index.d.ts.map +1 -1
  11. package/dist/es/inscribe/types.d.ts +1 -1
  12. package/dist/es/inscribe/types.d.ts.map +1 -1
  13. package/dist/es/services/mirror-node.d.ts.map +1 -1
  14. package/dist/es/standards-sdk.es.js +2 -1
  15. package/dist/es/standards-sdk.es10.js +138 -123
  16. package/dist/es/standards-sdk.es10.js.map +1 -1
  17. package/dist/es/standards-sdk.es100.js +3 -4
  18. package/dist/es/standards-sdk.es100.js.map +1 -1
  19. package/dist/es/standards-sdk.es101.js +16 -39
  20. package/dist/es/standards-sdk.es101.js.map +1 -1
  21. package/dist/es/standards-sdk.es102.js +5 -40
  22. package/dist/es/standards-sdk.es102.js.map +1 -1
  23. package/dist/es/standards-sdk.es103.js +37 -35
  24. package/dist/es/standards-sdk.es103.js.map +1 -1
  25. package/dist/es/standards-sdk.es104.js +34 -72
  26. package/dist/es/standards-sdk.es104.js.map +1 -1
  27. package/dist/es/standards-sdk.es105.js +37 -3
  28. package/dist/es/standards-sdk.es105.js.map +1 -1
  29. package/dist/es/standards-sdk.es106.js +78 -2
  30. package/dist/es/standards-sdk.es106.js.map +1 -1
  31. package/dist/es/standards-sdk.es107.js +3 -2
  32. package/dist/es/standards-sdk.es107.js.map +1 -1
  33. package/dist/es/standards-sdk.es108.js +2 -34
  34. package/dist/es/standards-sdk.es108.js.map +1 -1
  35. package/dist/es/standards-sdk.es109.js +2 -33
  36. package/dist/es/standards-sdk.es109.js.map +1 -1
  37. package/dist/es/standards-sdk.es110.js +34 -9
  38. package/dist/es/standards-sdk.es110.js.map +1 -1
  39. package/dist/es/standards-sdk.es111.js +31 -32
  40. package/dist/es/standards-sdk.es111.js.map +1 -1
  41. package/dist/es/standards-sdk.es112.js +12 -0
  42. package/dist/es/standards-sdk.es112.js.map +1 -0
  43. package/dist/es/standards-sdk.es113.js +37 -0
  44. package/dist/es/standards-sdk.es113.js.map +1 -0
  45. package/dist/es/standards-sdk.es12.js +3 -2
  46. package/dist/es/standards-sdk.es12.js.map +1 -1
  47. package/dist/es/standards-sdk.es13.js +1 -1
  48. package/dist/es/standards-sdk.es16.js +2 -1
  49. package/dist/es/standards-sdk.es16.js.map +1 -1
  50. package/dist/es/standards-sdk.es17.js +6 -3
  51. package/dist/es/standards-sdk.es17.js.map +1 -1
  52. package/dist/es/standards-sdk.es18.js.map +1 -1
  53. package/dist/es/standards-sdk.es19.js +1767 -3
  54. package/dist/es/standards-sdk.es19.js.map +1 -1
  55. package/dist/es/standards-sdk.es20.js +3 -4167
  56. package/dist/es/standards-sdk.es20.js.map +1 -1
  57. package/dist/es/standards-sdk.es21.js +4086 -960
  58. package/dist/es/standards-sdk.es21.js.map +1 -1
  59. package/dist/es/standards-sdk.es22.js +1041 -36
  60. package/dist/es/standards-sdk.es22.js.map +1 -1
  61. package/dist/es/standards-sdk.es23.js +5 -48
  62. package/dist/es/standards-sdk.es23.js.map +1 -1
  63. package/dist/es/standards-sdk.es24.js +36 -6624
  64. package/dist/es/standards-sdk.es24.js.map +1 -1
  65. package/dist/es/standards-sdk.es25.js +48 -5
  66. package/dist/es/standards-sdk.es25.js.map +1 -1
  67. package/dist/es/standards-sdk.es26.js +6627 -2
  68. package/dist/es/standards-sdk.es26.js.map +1 -1
  69. package/dist/es/standards-sdk.es27.js +2 -101
  70. package/dist/es/standards-sdk.es27.js.map +1 -1
  71. package/dist/es/standards-sdk.es28.js +419 -2
  72. package/dist/es/standards-sdk.es28.js.map +1 -1
  73. package/dist/es/standards-sdk.es29.js +2 -16
  74. package/dist/es/standards-sdk.es29.js.map +1 -1
  75. package/dist/es/standards-sdk.es30.js +120 -4
  76. package/dist/es/standards-sdk.es30.js.map +1 -1
  77. package/dist/es/standards-sdk.es31.js +101 -2282
  78. package/dist/es/standards-sdk.es31.js.map +1 -1
  79. package/dist/es/standards-sdk.es32.js +2 -2
  80. package/dist/es/standards-sdk.es32.js.map +1 -1
  81. package/dist/es/standards-sdk.es33.js +15 -418
  82. package/dist/es/standards-sdk.es33.js.map +1 -1
  83. package/dist/es/standards-sdk.es34.js +409 -2
  84. package/dist/es/standards-sdk.es34.js.map +1 -1
  85. package/dist/es/standards-sdk.es35.js +2282 -120
  86. package/dist/es/standards-sdk.es35.js.map +1 -1
  87. package/dist/es/standards-sdk.es36.js +164 -2
  88. package/dist/es/standards-sdk.es36.js.map +1 -1
  89. package/dist/es/standards-sdk.es37.js +0 -25
  90. package/dist/es/standards-sdk.es37.js.map +1 -1
  91. package/dist/es/standards-sdk.es38.js +2 -362
  92. package/dist/es/standards-sdk.es38.js.map +1 -1
  93. package/dist/es/standards-sdk.es39.js +3 -6
  94. package/dist/es/standards-sdk.es39.js.map +1 -1
  95. package/dist/es/standards-sdk.es4.js +1 -1
  96. package/dist/es/standards-sdk.es40.js +185 -169
  97. package/dist/es/standards-sdk.es40.js.map +1 -1
  98. package/dist/es/standards-sdk.es41.js +437 -80
  99. package/dist/es/standards-sdk.es41.js.map +1 -1
  100. package/dist/es/standards-sdk.es42.js +21 -110
  101. package/dist/es/standards-sdk.es42.js.map +1 -1
  102. package/dist/es/standards-sdk.es43.js +130 -43
  103. package/dist/es/standards-sdk.es43.js.map +1 -1
  104. package/dist/es/standards-sdk.es44.js +17 -9
  105. package/dist/es/standards-sdk.es44.js.map +1 -1
  106. package/dist/es/standards-sdk.es45.js +22 -90
  107. package/dist/es/standards-sdk.es45.js.map +1 -1
  108. package/dist/es/standards-sdk.es46.js +28 -3
  109. package/dist/es/standards-sdk.es46.js.map +1 -1
  110. package/dist/es/standards-sdk.es47.js +21 -2
  111. package/dist/es/standards-sdk.es47.js.map +1 -1
  112. package/dist/es/standards-sdk.es48.js +36 -104
  113. package/dist/es/standards-sdk.es48.js.map +1 -1
  114. package/dist/es/standards-sdk.es49.js +15 -71
  115. package/dist/es/standards-sdk.es49.js.map +1 -1
  116. package/dist/es/standards-sdk.es5.js +410 -134
  117. package/dist/es/standards-sdk.es5.js.map +1 -1
  118. package/dist/es/standards-sdk.es50.js +60 -5
  119. package/dist/es/standards-sdk.es50.js.map +1 -1
  120. package/dist/es/standards-sdk.es51.js +1288 -4
  121. package/dist/es/standards-sdk.es51.js.map +1 -1
  122. package/dist/es/standards-sdk.es52.js +131 -204
  123. package/dist/es/standards-sdk.es52.js.map +1 -1
  124. package/dist/es/standards-sdk.es53.js +89 -56
  125. package/dist/es/standards-sdk.es53.js.map +1 -1
  126. package/dist/es/standards-sdk.es54.js +84 -69
  127. package/dist/es/standards-sdk.es54.js.map +1 -1
  128. package/dist/es/standards-sdk.es55.js +27 -190
  129. package/dist/es/standards-sdk.es55.js.map +1 -1
  130. package/dist/es/standards-sdk.es56.js +5 -437
  131. package/dist/es/standards-sdk.es56.js.map +1 -1
  132. package/dist/es/standards-sdk.es57.js +155 -21
  133. package/dist/es/standards-sdk.es57.js.map +1 -1
  134. package/dist/es/standards-sdk.es58.js +21 -137
  135. package/dist/es/standards-sdk.es58.js.map +1 -1
  136. package/dist/es/standards-sdk.es59.js +788 -13
  137. package/dist/es/standards-sdk.es59.js.map +1 -1
  138. package/dist/es/standards-sdk.es60.js +167 -22
  139. package/dist/es/standards-sdk.es60.js.map +1 -1
  140. package/dist/es/standards-sdk.es61.js +137 -23
  141. package/dist/es/standards-sdk.es61.js.map +1 -1
  142. package/dist/es/standards-sdk.es62.js +358 -15
  143. package/dist/es/standards-sdk.es62.js.map +1 -1
  144. package/dist/es/standards-sdk.es63.js +5 -43
  145. package/dist/es/standards-sdk.es63.js.map +1 -1
  146. package/dist/es/standards-sdk.es64.js +174 -13
  147. package/dist/es/standards-sdk.es64.js.map +1 -1
  148. package/dist/es/standards-sdk.es65.js +76 -56
  149. package/dist/es/standards-sdk.es65.js.map +1 -1
  150. package/dist/es/standards-sdk.es66.js +104 -1279
  151. package/dist/es/standards-sdk.es66.js.map +1 -1
  152. package/dist/es/standards-sdk.es67.js +42 -138
  153. package/dist/es/standards-sdk.es67.js.map +1 -1
  154. package/dist/es/standards-sdk.es68.js +10 -91
  155. package/dist/es/standards-sdk.es68.js.map +1 -1
  156. package/dist/es/standards-sdk.es69.js +89 -76
  157. package/dist/es/standards-sdk.es69.js.map +1 -1
  158. package/dist/es/standards-sdk.es70.js +3 -31
  159. package/dist/es/standards-sdk.es70.js.map +1 -1
  160. package/dist/es/standards-sdk.es71.js +2 -6
  161. package/dist/es/standards-sdk.es71.js.map +1 -1
  162. package/dist/es/standards-sdk.es72.js +99 -145
  163. package/dist/es/standards-sdk.es72.js.map +1 -1
  164. package/dist/es/standards-sdk.es73.js +71 -20
  165. package/dist/es/standards-sdk.es73.js.map +1 -1
  166. package/dist/es/standards-sdk.es74.js +5 -792
  167. package/dist/es/standards-sdk.es74.js.map +1 -1
  168. package/dist/es/standards-sdk.es75.js +4 -142
  169. package/dist/es/standards-sdk.es75.js.map +1 -1
  170. package/dist/es/standards-sdk.es76.js +209 -162
  171. package/dist/es/standards-sdk.es76.js.map +1 -1
  172. package/dist/es/standards-sdk.es77.js +56 -30
  173. package/dist/es/standards-sdk.es77.js.map +1 -1
  174. package/dist/es/standards-sdk.es78.js +69 -63
  175. package/dist/es/standards-sdk.es78.js.map +1 -1
  176. package/dist/es/standards-sdk.es79.js +17 -46
  177. package/dist/es/standards-sdk.es79.js.map +1 -1
  178. package/dist/es/standards-sdk.es8.js +143 -180
  179. package/dist/es/standards-sdk.es8.js.map +1 -1
  180. package/dist/es/standards-sdk.es80.js +25 -8
  181. package/dist/es/standards-sdk.es80.js.map +1 -1
  182. package/dist/es/standards-sdk.es81.js +24 -63
  183. package/dist/es/standards-sdk.es81.js.map +1 -1
  184. package/dist/es/standards-sdk.es82.js +38 -6
  185. package/dist/es/standards-sdk.es82.js.map +1 -1
  186. package/dist/es/standards-sdk.es83.js +30 -13
  187. package/dist/es/standards-sdk.es83.js.map +1 -1
  188. package/dist/es/standards-sdk.es84.js +63 -7
  189. package/dist/es/standards-sdk.es84.js.map +1 -1
  190. package/dist/es/standards-sdk.es85.js +47 -42
  191. package/dist/es/standards-sdk.es85.js.map +1 -1
  192. package/dist/es/standards-sdk.es86.js +10 -2
  193. package/dist/es/standards-sdk.es86.js.map +1 -1
  194. package/dist/es/standards-sdk.es87.js +58 -129
  195. package/dist/es/standards-sdk.es87.js.map +1 -1
  196. package/dist/es/standards-sdk.es88.js +5 -171
  197. package/dist/es/standards-sdk.es88.js.map +1 -1
  198. package/dist/es/standards-sdk.es89.js +14 -20
  199. package/dist/es/standards-sdk.es89.js.map +1 -1
  200. package/dist/es/standards-sdk.es9.js +1 -1
  201. package/dist/es/standards-sdk.es90.js +7 -27
  202. package/dist/es/standards-sdk.es90.js.map +1 -1
  203. package/dist/es/standards-sdk.es91.js +45 -26
  204. package/dist/es/standards-sdk.es91.js.map +1 -1
  205. package/dist/es/standards-sdk.es92.js +2 -38
  206. package/dist/es/standards-sdk.es92.js.map +1 -1
  207. package/dist/es/standards-sdk.es93.js +134 -30
  208. package/dist/es/standards-sdk.es93.js.map +1 -1
  209. package/dist/es/standards-sdk.es94.js +171 -14
  210. package/dist/es/standards-sdk.es94.js.map +1 -1
  211. package/dist/es/standards-sdk.es95.js +13 -4
  212. package/dist/es/standards-sdk.es95.js.map +1 -1
  213. package/dist/es/standards-sdk.es96.js +13 -4
  214. package/dist/es/standards-sdk.es96.js.map +1 -1
  215. package/dist/es/standards-sdk.es97.js +31 -12
  216. package/dist/es/standards-sdk.es97.js.map +1 -1
  217. package/dist/es/standards-sdk.es98.js +15 -13
  218. package/dist/es/standards-sdk.es98.js.map +1 -1
  219. package/dist/es/standards-sdk.es99.js +3 -15
  220. package/dist/es/standards-sdk.es99.js.map +1 -1
  221. package/dist/umd/hcs-10/base-client.d.ts +40 -45
  222. package/dist/umd/hcs-10/base-client.d.ts.map +1 -1
  223. package/dist/umd/hcs-10/browser.d.ts +8 -10
  224. package/dist/umd/hcs-10/browser.d.ts.map +1 -1
  225. package/dist/umd/hcs-10/sdk.d.ts +67 -13
  226. package/dist/umd/hcs-10/sdk.d.ts.map +1 -1
  227. package/dist/umd/hcs-10/types.d.ts +0 -7
  228. package/dist/umd/hcs-10/types.d.ts.map +1 -1
  229. package/dist/umd/hcs-11/index.d.ts +1 -1
  230. package/dist/umd/hcs-11/index.d.ts.map +1 -1
  231. package/dist/umd/inscribe/types.d.ts +1 -1
  232. package/dist/umd/inscribe/types.d.ts.map +1 -1
  233. package/dist/umd/services/mirror-node.d.ts.map +1 -1
  234. package/dist/umd/standards-sdk.umd.js +23 -19
  235. package/dist/umd/standards-sdk.umd.js.map +1 -1
  236. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es5.js","sources":["../../src/hcs-10/sdk.ts"],"sourcesContent":["import {\n Client,\n AccountCreateTransaction,\n PrivateKey,\n Hbar,\n KeyList,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TopicId,\n Transaction,\n TransactionResponse,\n TransactionReceipt,\n PublicKey,\n AccountId,\n CustomFixedFee,\n} from '@hashgraph/sdk';\nimport {\n PayloadSizeError,\n AccountCreationError,\n TopicCreationError,\n ConnectionConfirmationError,\n} from './errors';\nimport {\n InscriptionSDK,\n RetrievedInscriptionResult,\n} from '@kiloscribe/inscription-sdk';\nimport { Logger, LogLevel } from '../utils/logger';\nimport { HCS10BaseClient } from './base-client';\nimport * as mime from 'mime-types';\nimport {\n HCSClientConfig,\n AgentConfig,\n CreateAccountResponse,\n CreateAgentResponse,\n InscribePfpResponse,\n StoreHCS11ProfileResponse,\n AgentRegistrationResult,\n HandleConnectionRequestResponse,\n WaitForConnectionConfirmationResponse,\n GetAccountAndSignerResponse,\n InboundTopicType,\n TopicFeeConfig,\n FeeConfigBuilderInterface,\n AgentCreationState,\n RegistrationProgressCallback,\n InscriptionProgressCallback,\n InscriptionProgressData,\n RegistrationProgressData,\n} from './types';\nimport { HCS11Client } from '../hcs-11';\nimport { AgentBuilder } from './agent-builder';\nimport { accountIdsToExemptKeys } from '../utils/topic-fee-utils';\n\nexport { InboundTopicType } from './types';\nexport { FeeConfigBuilder } from './fee-config-builder';\n\nexport interface AgentMetadata {\n type: 'autonomous' | 'manual';\n model?: string;\n socials?: {\n twitter?: string;\n discord?: string;\n github?: string;\n website?: string;\n x?: string;\n linkedin?: string;\n youtube?: string;\n telegram?: string;\n };\n creator?: string;\n properties?: Record<string, any>;\n}\n\nexport class HCS10Client extends HCS10BaseClient {\n private client: Client;\n private operatorPrivateKey: PrivateKey;\n protected declare network: string;\n protected declare logger: Logger;\n protected guardedRegistryBaseUrl: string;\n private hcs11Client: HCS11Client;\n\n constructor(config: HCSClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n prettyPrint: config.prettyPrint,\n });\n if (config.network === 'mainnet') {\n this.client = Client.forMainnet();\n } else {\n this.client = Client.forTestnet();\n }\n this.operatorPrivateKey = PrivateKey.fromString(config.operatorPrivateKey);\n this.network = config.network;\n this.client.setOperator(\n config.operatorId,\n this.operatorPrivateKey.toString()\n );\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-SDK',\n });\n this.guardedRegistryBaseUrl =\n config.guardedRegistryBaseUrl || 'https://moonscape.tech';\n\n this.hcs11Client = new HCS11Client({\n network: config.network,\n auth: {\n operatorId: config.operatorId,\n privateKey: config.operatorPrivateKey,\n },\n logLevel: config.logLevel,\n });\n }\n\n public getClient() {\n return this.client;\n }\n\n /**\n * Creates a new Hedera account\n * @returns Object with account ID and private key\n */\n async createAccount(): Promise<CreateAccountResponse> {\n this.logger.info('Creating new account');\n const newKey = PrivateKey.generate();\n\n const accountTransaction = new AccountCreateTransaction()\n .setKey(newKey.publicKey)\n .setInitialBalance(new Hbar(10));\n\n this.logger.debug('Executing account creation transaction');\n const accountResponse = await accountTransaction.execute(this.client);\n const accountReceipt = await accountResponse.getReceipt(this.client);\n const newAccountId = accountReceipt.accountId;\n\n if (!newAccountId) {\n this.logger.error('Account creation failed: accountId is null');\n throw new AccountCreationError(\n 'Failed to create account: accountId is null'\n );\n }\n\n this.logger.info(\n `Account created successfully: ${newAccountId.toString()}`\n );\n return {\n accountId: newAccountId.toString(),\n privateKey: newKey.toString(),\n };\n }\n\n /**\n * Creates an inbound topic with the specified configuration\n * @param accountId Account ID associated with the topic\n * @param topicType Type of inbound topic (public, controlled, or fee-based)\n * @param feeConfig Optional fee configuration for fee-based topics\n * @returns The topic ID of the created inbound topic\n */\n async createInboundTopic(\n accountId: string,\n topicType: InboundTopicType,\n feeConfig?: FeeConfigBuilderInterface\n ): Promise<string> {\n this.logger.info(`Creating ${topicType} inbound topic`);\n const memo = `hcs-10:0:60:0:${accountId}`;\n\n switch (topicType) {\n case InboundTopicType.PUBLIC:\n return this.createTopic(memo, true, false);\n\n case InboundTopicType.CONTROLLED:\n return this.createTopic(memo, true, true);\n\n case InboundTopicType.FEE_BASED:\n if (!feeConfig) {\n throw new Error('Fee configuration is required for fee-based topics');\n }\n return this.createTopic(memo, true, true, feeConfig.build());\n\n default:\n throw new Error(`Unsupported inbound topic type: ${topicType}`);\n }\n }\n\n /**\n * Creates a new agent with inbound and outbound topics\n * @param builder The agent builder object\n * @returns Object with topic IDs\n */\n async createAgent(builder: AgentBuilder): Promise<CreateAgentResponse> {\n const config = builder.build();\n const outboundTopicId = await this.createTopic('hcs-10:0:60:1', true, true);\n this.logger.info(`Created new outbound topic ID: ${outboundTopicId}`);\n\n const accountId = this.client.operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n const inboundTopicId = await this.createInboundTopic(\n accountId,\n config.inboundTopicType,\n config.inboundTopicType === InboundTopicType.FEE_BASED\n ? config.feeConfig\n : undefined\n );\n this.logger.info(`Created new inbound topic ID: ${inboundTopicId}`);\n\n let pfpTopicId = config.existingPfpTopicId || '';\n\n if (!pfpTopicId && config.pfpBuffer && config.pfpBuffer.length > 0) {\n this.logger.info('Inscribing new profile picture');\n const pfpResult = await this.inscribePfp(\n config.pfpBuffer,\n config.pfpFileName\n );\n pfpTopicId = pfpResult.pfpTopicId;\n this.logger.info(\n `Profile picture inscribed with topic ID: ${pfpTopicId}`\n );\n } else if (config.existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${config.existingPfpTopicId}`\n );\n }\n\n let pfpBufferToUse: Buffer | undefined = undefined;\n if (config.pfpBuffer && config.pfpBuffer.length > 0) {\n pfpBufferToUse = config.pfpBuffer;\n }\n\n const profileResult = await this.storeHCS11Profile(\n config.name,\n config.description,\n inboundTopicId,\n outboundTopicId,\n config.capabilities,\n config.metadata,\n pfpBufferToUse,\n config.pfpFileName,\n config.existingPfpTopicId\n );\n const profileTopicId = profileResult.profileTopicId;\n this.logger.info(`Profile stored with topic ID: ${profileTopicId}`);\n\n return {\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n };\n }\n\n /**\n * Inscribes a profile picture to Hedera\n * @param buffer Profile picture buffer\n * @param fileName Filename\n * @returns Response with topic ID and transaction ID\n */\n async inscribePfp(\n buffer: Buffer,\n fileName: string\n ): Promise<InscribePfpResponse> {\n try {\n this.logger.info('Inscribing profile picture using HCS-11 client');\n\n const imageResult = await this.hcs11Client.inscribeImage(\n buffer,\n fileName\n );\n\n if (!imageResult.success) {\n this.logger.error(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n throw new Error(\n imageResult?.error || 'Failed to inscribe profile picture'\n );\n }\n\n this.logger.info(\n `Successfully inscribed profile picture with topic ID: ${imageResult.imageTopicId}`\n );\n return {\n pfpTopicId: imageResult.imageTopicId,\n transactionId: imageResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error inscribing profile picture: ${error.message}`);\n return {\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n /**\n * Stores an HCS-11 profile for an agent\n * @param agentName Agent name\n * @param agentDescription Agent description\n * @param inboundTopicId Inbound topic ID\n * @param outboundTopicId Outbound topic ID\n * @param capabilities Agent capability tags\n * @param metadata Additional metadata\n * @param pfpBuffer Optional profile picture buffer\n * @param pfpFileName Optional profile picture filename\n * @returns Response with topic IDs and transaction ID\n */\n async storeHCS11Profile(\n agentName: string,\n agentDescription: string,\n inboundTopicId: string,\n outboundTopicId: string,\n capabilities: number[] = [],\n metadata: AgentMetadata,\n pfpBuffer?: Buffer,\n pfpFileName?: string,\n existingPfpTopicId?: string\n ): Promise<StoreHCS11ProfileResponse> {\n try {\n let pfpTopicId = existingPfpTopicId || '';\n\n if (!pfpTopicId && pfpBuffer && pfpFileName) {\n this.logger.info('Inscribing profile picture for HCS-11 profile');\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName);\n if (!pfpResult.success) {\n this.logger.error(\n 'Failed to inscribe profile picture, continuing without PFP'\n );\n } else {\n pfpTopicId = pfpResult.pfpTopicId;\n }\n } else if (existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${existingPfpTopicId} for HCS-11 profile`\n );\n }\n\n const agentType = this.hcs11Client.getAgentTypeFromMetadata({\n type: metadata.type || 'autonomous',\n } as AgentMetadata);\n\n const formattedSocials = metadata.socials\n ? Object.entries(metadata.socials)\n .filter(([_, handle]) => handle)\n .map(([platform, handle]) => {\n let resolvedPlatform = platform;\n if (platform === 'x') {\n resolvedPlatform = 'twitter';\n }\n return {\n platform: resolvedPlatform,\n handle,\n };\n })\n : undefined;\n\n const profile = this.hcs11Client.createAIAgentProfile(\n agentName,\n agentType,\n capabilities,\n metadata.model || 'unknown',\n {\n alias: agentName.toLowerCase().replace(/\\s+/g, '_'),\n bio: agentDescription,\n profileImage: undefined,\n socials: formattedSocials,\n properties: metadata.properties,\n inboundTopicId,\n outboundTopicId,\n creator: metadata.creator,\n }\n );\n\n if (pfpTopicId) {\n profile.profileImage = `hcs://1/${pfpTopicId}`;\n }\n\n const profileResult = await this.hcs11Client.createAndInscribeProfile(\n profile,\n true\n );\n\n if (!profileResult.success) {\n this.logger.error(`Failed to inscribe profile: ${profileResult.error}`);\n throw new Error(profileResult.error || 'Failed to inscribe profile');\n }\n\n this.logger.info(\n `Profile inscribed with topic ID: ${profileResult.profileTopicId}, transaction ID: ${profileResult.transactionId}`\n );\n\n return {\n profileTopicId: profileResult.profileTopicId,\n pfpTopicId,\n transactionId: profileResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error storing HCS-11 profile: ${error.message}`);\n return {\n profileTopicId: '',\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n private async setupFees(\n transaction: TopicCreateTransaction,\n feeConfig: TopicFeeConfig,\n additionalExemptAccounts: string[] = []\n ): Promise<void> {\n if (!this.client.operatorPublicKey) {\n return;\n }\n\n this.logger.info('Setting up topic with custom fees');\n\n const customFee = new CustomFixedFee()\n .setAmount(Number(feeConfig.feeAmount.amount))\n .setFeeCollectorAccountId(\n AccountId.fromString(feeConfig.feeCollectorAccountId)\n );\n\n let exemptAccountIds = [\n ...(feeConfig.exemptAccounts || []),\n ...additionalExemptAccounts,\n ];\n\n console.log('exemptAccountIds', exemptAccountIds);\n\n if (exemptAccountIds.length > 0) {\n const uniqueExemptAccountIds = Array.from(new Set(exemptAccountIds));\n const filteredExemptAccounts = uniqueExemptAccountIds.filter(\n (account) => account !== this.client.operatorAccountId?.toString()\n );\n\n let exemptKeys: PublicKey[] = [];\n if (filteredExemptAccounts.length > 0) {\n try {\n exemptKeys = await accountIdsToExemptKeys(\n filteredExemptAccounts,\n this.network,\n this.logger\n );\n } catch (error) {\n this.logger.warn(\n `Error getting exempt keys: ${error}, continuing without exempt keys`\n );\n }\n }\n\n if (exemptKeys.length > 0) {\n transaction.setFeeExemptKeys(exemptKeys);\n }\n }\n\n transaction\n .setFeeScheduleKey(this.client.operatorPublicKey)\n .setCustomFees([customFee]);\n }\n\n /**\n * Handles a connection request from another account\n * @param inboundTopicId Inbound topic ID\n * @param requestingAccountId Requesting account ID\n * @param connectionRequestId Connection request ID\n * @param connectionFeeConfig Optional fee configuration for the connection topic\n * @returns Response with connection details\n */\n async handleConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n connectionRequestId: number,\n connectionFeeConfig?: FeeConfigBuilderInterface\n ): Promise<HandleConnectionRequestResponse> {\n const memo = `hcs-10:${inboundTopicId}:${connectionRequestId}`;\n this.logger.info(\n `Handling connection request ${connectionRequestId} from ${requestingAccountId}`\n );\n\n const accountId = this.getClient().operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n let requesterKey = await this.mirrorNode.getPublicKey(requestingAccountId);\n const accountKey = await this.mirrorNode.getPublicKey(accountId);\n\n if (!accountKey) {\n throw new Error('Failed to retrieve public key');\n }\n\n const thresholdKey = new KeyList([accountKey, requesterKey], 1);\n\n let connectionTopicId: string;\n\n try {\n if (connectionFeeConfig) {\n const feeConfig = connectionFeeConfig.build();\n const modifiedFeeConfig = {\n ...feeConfig,\n exemptAccounts: [...(feeConfig.exemptAccounts || [])],\n };\n\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey,\n modifiedFeeConfig\n );\n } else {\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey\n );\n }\n\n this.logger.info(`Created new connection topic ID: ${connectionTopicId}`);\n } catch (error) {\n this.logger.error(`Failed to create connection topic: ${error}`);\n throw new TopicCreationError(\n `Failed to create connection topic: ${error}`\n );\n }\n\n const operatorId = `${inboundTopicId}@${accountId}`;\n\n const confirmedConnectionSequenceNumber = await this.confirmConnection(\n inboundTopicId,\n connectionTopicId,\n requestingAccountId,\n connectionRequestId,\n operatorId,\n 'Connection accepted. Looking forward to collaborating!'\n );\n\n return {\n connectionTopicId,\n confirmedConnectionSequenceNumber,\n operatorId,\n };\n }\n\n async confirmConnection(\n inboundTopicId: string,\n connectionTopicId: string,\n connectedAccountId: string,\n connectionId: number,\n operatorId: string,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<number> {\n this.logger.info(`Confirming connection with ID ${connectionId}`);\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n connected_account_id: connectedAccountId,\n operator_id: operatorId,\n connection_id: connectionId,\n m: memo,\n };\n\n const result = await this.submitPayload(inboundTopicId, payload, submitKey);\n const sequenceNumber = result.topicSequenceNumber?.toNumber();\n\n if (!sequenceNumber) {\n throw new ConnectionConfirmationError(\n 'Failed to confirm connection: sequence number is null'\n );\n }\n\n return sequenceNumber;\n }\n\n async createTopic(\n memo: string,\n adminKey?: boolean | PublicKey | KeyList,\n submitKey?: boolean | PublicKey | KeyList,\n feeConfig?: TopicFeeConfig\n ): Promise<string> {\n this.logger.info('Creating topic');\n const transaction = new TopicCreateTransaction().setTopicMemo(memo);\n\n if (adminKey) {\n if (\n typeof adminKey === 'boolean' &&\n adminKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setAdminKey(this.client.operatorPublicKey);\n transaction.setAutoRenewAccountId(this.client.operatorAccountId!);\n } else if (adminKey instanceof PublicKey || adminKey instanceof KeyList) {\n transaction.setAdminKey(adminKey);\n if (this.client.operatorAccountId) {\n transaction.setAutoRenewAccountId(this.client.operatorAccountId);\n }\n }\n }\n\n if (submitKey) {\n if (\n typeof submitKey === 'boolean' &&\n submitKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setSubmitKey(this.client.operatorPublicKey);\n } else if (\n submitKey instanceof PublicKey ||\n submitKey instanceof KeyList\n ) {\n transaction.setSubmitKey(submitKey);\n }\n }\n\n if (feeConfig) {\n await this.setupFees(transaction, feeConfig);\n }\n\n this.logger.debug('Executing topic creation transaction');\n const txResponse = await transaction.execute(this.client);\n const receipt = await txResponse.getReceipt(this.client);\n\n if (!receipt.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n throw new Error('Failed to create topic: topicId is null');\n }\n\n const topicId = receipt.topicId.toString();\n return topicId;\n }\n\n async submitMessage(\n topicId: string,\n message: string,\n submitKey?: PrivateKey\n ): Promise<TransactionReceipt> {\n const submissionCheck = await this.canSubmitToInboundTopic(\n topicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n return this.submitPayload(\n topicId,\n message,\n submitKey,\n submissionCheck.requiresFee\n );\n }\n\n public async submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee: boolean = false\n ): Promise<TransactionReceipt> {\n let message: string;\n if (typeof payload === 'string') {\n message = payload;\n } else {\n message = JSON.stringify(payload);\n }\n\n const payloadSizeInBytes = Buffer.byteLength(message, 'utf8');\n if (payloadSizeInBytes > 1000) {\n throw new PayloadSizeError(\n 'Payload size exceeds 1000 bytes limit',\n payloadSizeInBytes\n );\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(topicId))\n .setMessage(message);\n\n if (requiresFee) {\n this.logger.info(\n 'Topic requires fee payment, setting max transaction fee'\n );\n transaction.setMaxTransactionFee(new Hbar(this.feeAmount));\n transaction.setTransactionMemo('HIP-991 Fee Payment');\n }\n\n let transactionResponse: TransactionResponse;\n if (submitKey) {\n transaction.freezeWith(this.client);\n const signedTransaction = await transaction.sign(submitKey);\n transactionResponse = await signedTransaction.execute(this.client);\n } else {\n transactionResponse = await transaction.execute(this.client);\n }\n\n const receipt = await transactionResponse.getReceipt(this.client);\n if (!receipt) {\n this.logger.error('Failed to submit message: receipt is null');\n throw new Error('Failed to submit message: receipt is null');\n }\n this.logger.info('Message submitted successfully');\n return receipt;\n }\n\n async submitConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n operatorId: string,\n memo: string\n ): Promise<TransactionReceipt> {\n const submissionCheck = await this.canSubmitToInboundTopic(\n inboundTopicId,\n requestingAccountId\n );\n\n if (!submissionCheck.canSubmit) {\n throw new Error(`Cannot submit to topic: ${submissionCheck.reason}`);\n }\n\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: operatorId,\n memo: memo,\n };\n\n const requiresFee = submissionCheck.requiresFee;\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage,\n undefined,\n requiresFee\n );\n\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveOutboundConnectTopic(\n requestingAccountId\n );\n\n const responseSequenceNumber = response.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n await this.submitPayload(\n outboundTopic.outboundTopic,\n {\n ...connectionRequestMessage,\n outbound_topic_id: outboundTopic.outboundTopic,\n connection_request_id: responseSequenceNumber,\n },\n this.operatorPrivateKey\n );\n\n return response;\n }\n\n async inscribeFile(\n buffer: Buffer,\n fileName: string,\n options?: {\n progressCallback?: InscriptionProgressCallback;\n waitMaxAttempts?: number;\n waitIntervalMs?: number;\n }\n ): Promise<RetrievedInscriptionResult> {\n this.logger.info('Inscribing file');\n if (!this.client.operatorAccountId) {\n this.logger.error('Operator account ID is not set');\n throw new Error('Operator account ID is not set');\n }\n\n if (!this.operatorPrivateKey) {\n this.logger.error('Operator private key is not set');\n throw new Error('Operator private key is not set');\n }\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n });\n\n const progressCallback = options?.progressCallback;\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing file for inscription',\n progressPercent: 10,\n });\n }\n\n const result = await sdk.inscribeAndExecute(\n {\n file: {\n type: 'base64',\n base64: buffer.toString('base64'),\n fileName,\n mimeType,\n },\n holderId: this.client.operatorAccountId.toString(),\n mode: 'file',\n network: this.network as 'testnet' | 'mainnet',\n },\n {\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n }\n );\n\n if (!result.transactionId || !result.jobId) {\n this.logger.error('Failed to inscribe, no transaction ID or job ID.');\n throw new Error('Failed to inscribe, no transaction ID or job ID.');\n }\n\n if (result.transactionId && result.jobId) {\n this.logger.info(\n `Transaction ID: ${result.transactionId}, Job ID: ${result.jobId}`\n );\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Inscription transaction submitted',\n progressPercent: 30,\n details: {\n transactionId: result.transactionId,\n jobId: result.jobId,\n },\n });\n }\n }\n\n const maxAttempts = options?.waitMaxAttempts || 30;\n const intervalMs = options?.waitIntervalMs || 4000;\n\n let wrappedProgressCallback: ((data: any) => void) | undefined = undefined;\n if (progressCallback) {\n wrappedProgressCallback = (data: any) => {\n let stage: InscriptionProgressData['stage'];\n if (data.confirmed) {\n stage = 'confirming';\n } else if (data.status === 'COMPLETED') {\n stage = 'completed';\n } else {\n stage = 'verifying';\n }\n\n let attemptPercent: number;\n if (data.currentAttempt) {\n attemptPercent = (data.currentAttempt / maxAttempts) * 60 + 30;\n } else if (data.confirmed) {\n attemptPercent = 90;\n } else if (data.status === 'COMPLETED') {\n attemptPercent = 100;\n } else {\n attemptPercent = 60;\n }\n\n progressCallback({\n stage: stage,\n message: `Waiting for inscription confirmation (attempt ${\n data.currentAttempt || '?'\n }/${maxAttempts})`,\n progressPercent: Math.min(attemptPercent, 100),\n details: data,\n });\n };\n }\n\n const status = await sdk.waitForInscription(\n result.jobId,\n maxAttempts,\n intervalMs,\n true,\n wrappedProgressCallback\n );\n\n if (progressCallback && status.topic_id) {\n progressCallback({\n stage: 'completed',\n message: 'Inscription completed successfully',\n progressPercent: 100,\n details: {\n topicId: status.topic_id,\n },\n });\n }\n\n return status;\n }\n\n /**\n * Waits for confirmation of a connection request\n * @param inboundTopicId Inbound topic ID\n * @param connectionRequestId Connection request ID\n * @param maxAttempts Maximum number of attempts\n * @param delayMs Delay between attempts in milliseconds\n * @returns Connection confirmation details\n */\n async waitForConnectionConfirmation(\n inboundTopicId: string,\n connectionRequestId: number,\n maxAttempts = 60,\n delayMs = 2000\n ): Promise<WaitForConnectionConfirmationResponse> {\n this.logger.info(\n `Waiting for connection confirmation on inbound topic ${inboundTopicId} for request ID ${connectionRequestId}`\n );\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n this.logger.info(\n `Attempt ${attempt + 1}/${maxAttempts} to find connection confirmation`\n );\n const messages = await this.mirrorNode.getTopicMessages(inboundTopicId);\n\n const connectionCreatedMessages = messages.filter(\n (m) => m.op === 'connection_created'\n );\n\n this.logger.info(\n `Found ${connectionCreatedMessages.length} connection_created messages`\n );\n\n if (connectionCreatedMessages.length > 0) {\n for (const message of connectionCreatedMessages) {\n if (Number(message.connection_id) === Number(connectionRequestId)) {\n this.logger.info('Connection confirmation found');\n return {\n connectionTopicId: message.connection_topic_id,\n sequence_number: Number(message.sequence_number),\n confirmedBy: message.operator_id,\n memo: message.m,\n };\n }\n }\n }\n\n if (attempt < maxAttempts - 1) {\n this.logger.info(\n `No matching confirmation found, waiting ${delayMs}ms before retrying...`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw new Error(\n `Connection confirmation not found after ${maxAttempts} attempts for request ID ${connectionRequestId}`\n );\n }\n\n getAccountAndSigner(): GetAccountAndSignerResponse {\n return {\n accountId: this.client.operatorAccountId!.toString()!,\n signer: this.operatorPrivateKey,\n };\n }\n\n getNetwork(): string {\n return this.network;\n }\n\n getLogger(): Logger {\n return this.logger;\n }\n}\n"],"names":["mime.lookup"],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es5.js","sources":["../../src/hcs-10/sdk.ts"],"sourcesContent":["import {\n Client,\n AccountCreateTransaction,\n PrivateKey,\n Hbar,\n KeyList,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TopicId,\n Transaction,\n TransactionResponse,\n TransactionReceipt,\n PublicKey,\n AccountId,\n CustomFixedFee,\n} from '@hashgraph/sdk';\nimport {\n PayloadSizeError,\n AccountCreationError,\n TopicCreationError,\n ConnectionConfirmationError,\n} from './errors';\nimport {\n InscriptionSDK,\n RetrievedInscriptionResult,\n} from '@kiloscribe/inscription-sdk';\nimport { Logger, LogLevel } from '../utils/logger';\nimport { HCS10BaseClient } from './base-client';\nimport * as mime from 'mime-types';\nimport {\n HCSClientConfig,\n AgentConfig,\n CreateAccountResponse,\n CreateAgentResponse,\n InscribePfpResponse,\n StoreHCS11ProfileResponse,\n AgentRegistrationResult,\n HandleConnectionRequestResponse,\n WaitForConnectionConfirmationResponse,\n GetAccountAndSignerResponse,\n InboundTopicType,\n TopicFeeConfig,\n FeeConfigBuilderInterface,\n AgentCreationState,\n} from './types';\nimport { HCS11Client } from '../hcs-11';\nimport { AgentBuilder } from './agent-builder';\nimport { accountIdsToExemptKeys } from '../utils/topic-fee-utils';\nimport { Hcs10MemoType } from './base-client';\n\nexport { InboundTopicType } from './types';\nexport { FeeConfigBuilder } from './fee-config-builder';\n\nexport interface AgentMetadata {\n type: 'autonomous' | 'manual';\n model?: string;\n socials?: {\n twitter?: string;\n discord?: string;\n github?: string;\n website?: string;\n x?: string;\n linkedin?: string;\n youtube?: string;\n telegram?: string;\n };\n creator?: string;\n properties?: Record<string, any>;\n}\n\n/**\n * Progress report data for registration operations\n */\nexport interface RegistrationProgressData {\n stage: 'preparing' | 'submitting' | 'confirming' | 'verifying' | 'completed';\n message: string;\n progressPercent?: number;\n details?: Record<string, any>;\n}\n\n/**\n * Progress callback function type for registration operations\n */\nexport type RegistrationProgressCallback = (\n data: RegistrationProgressData\n) => void;\n\nexport class HCS10Client extends HCS10BaseClient {\n private client: Client;\n private operatorPrivateKey: PrivateKey;\n protected declare network: string;\n protected declare logger: Logger;\n protected guardedRegistryBaseUrl: string;\n private hcs11Client: HCS11Client;\n\n constructor(config: HCSClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n prettyPrint: config.prettyPrint,\n feeAmount: config.feeAmount,\n });\n this.client =\n config.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n this.operatorPrivateKey = PrivateKey.fromString(config.operatorPrivateKey);\n this.network = config.network;\n this.client.setOperator(\n config.operatorId,\n this.operatorPrivateKey.toString()\n );\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-SDK',\n });\n this.guardedRegistryBaseUrl =\n config.guardedRegistryBaseUrl || 'https://moonscape.tech';\n\n this.hcs11Client = new HCS11Client({\n network: config.network,\n auth: {\n operatorId: config.operatorId,\n privateKey: config.operatorPrivateKey,\n },\n logLevel: config.logLevel,\n });\n }\n\n public getClient() {\n return this.client;\n }\n\n /**\n * Creates a new Hedera account\n * @returns Object with account ID and private key\n */\n async createAccount(): Promise<CreateAccountResponse> {\n this.logger.info('Creating new account');\n const newKey = PrivateKey.generate();\n\n const accountTransaction = new AccountCreateTransaction()\n .setKey(newKey.publicKey)\n .setInitialBalance(new Hbar(10));\n\n this.logger.debug('Executing account creation transaction');\n const accountResponse = await accountTransaction.execute(this.client);\n const accountReceipt = await accountResponse.getReceipt(this.client);\n const newAccountId = accountReceipt.accountId;\n\n if (!newAccountId) {\n this.logger.error('Account creation failed: accountId is null');\n throw new AccountCreationError(\n 'Failed to create account: accountId is null'\n );\n }\n\n this.logger.info(\n `Account created successfully: ${newAccountId.toString()}`\n );\n return {\n accountId: newAccountId.toString(),\n privateKey: newKey.toString(),\n };\n }\n\n /**\n * Creates an inbound topic for an agent\n * @param accountId The account ID associated with the inbound topic\n * @param topicType Type of inbound topic (public, controlled, or fee-based)\n * @param ttl Optional Time-To-Live for the topic memo, defaults to 60\n * @param feeConfigBuilder Optional fee configuration builder for fee-based topics\n * @returns The topic ID of the created inbound topic\n */\n async createInboundTopic(\n accountId: string,\n topicType: InboundTopicType,\n ttl: number = 60,\n feeConfigBuilder?: FeeConfigBuilderInterface\n ): Promise<string> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.INBOUND, {\n accountId,\n ttl,\n });\n\n let submitKey: boolean | PublicKey | KeyList | undefined;\n let feeConfig: TopicFeeConfig | undefined;\n\n switch (topicType) {\n case InboundTopicType.PUBLIC:\n submitKey = false;\n break;\n case InboundTopicType.CONTROLLED:\n submitKey = true;\n break;\n case InboundTopicType.FEE_BASED:\n submitKey = true;\n if (!feeConfigBuilder) {\n throw new Error(\n 'Fee configuration builder is required for fee-based topics'\n );\n }\n feeConfig = feeConfigBuilder.build();\n break;\n default:\n throw new Error(`Unsupported inbound topic type: ${topicType}`);\n }\n\n return this.createTopic(memo, true, submitKey, feeConfig);\n }\n\n /**\n * Creates a new agent with inbound and outbound topics\n * @param builder The agent builder object\n * @param ttl Optional Time-To-Live for the topic memos, defaults to 60\n * @returns Object with topic IDs\n */\n async createAgent(\n builder: AgentBuilder,\n ttl: number = 60\n ): Promise<CreateAgentResponse> {\n const config = builder.build();\n const outboundMemo = this._generateHcs10Memo(Hcs10MemoType.OUTBOUND, {\n ttl,\n });\n const outboundTopicId = await this.createTopic(outboundMemo, true, true);\n this.logger.info(`Created new outbound topic ID: ${outboundTopicId}`);\n\n const accountId = this.client.operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n const inboundTopicId = await this.createInboundTopic(\n accountId,\n config.inboundTopicType,\n ttl,\n config.inboundTopicType === InboundTopicType.FEE_BASED\n ? config.feeConfig\n : undefined\n );\n\n let pfpTopicId = config.existingPfpTopicId || '';\n\n if (!pfpTopicId && config.pfpBuffer && config.pfpBuffer.length > 0) {\n this.logger.info('Inscribing new profile picture');\n const pfpResult = await this.inscribePfp(\n config.pfpBuffer,\n config.pfpFileName\n );\n pfpTopicId = pfpResult.pfpTopicId;\n this.logger.info(\n `Profile picture inscribed with topic ID: ${pfpTopicId}`\n );\n } else if (config.existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${config.existingPfpTopicId}`\n );\n }\n\n const profileResult = await this.storeHCS11Profile(\n config.name,\n config.description,\n inboundTopicId,\n outboundTopicId,\n config.capabilities,\n config.metadata,\n config.pfpBuffer && config.pfpBuffer.length > 0\n ? config.pfpBuffer\n : undefined,\n config.pfpFileName,\n config.existingPfpTopicId\n );\n const profileTopicId = profileResult.profileTopicId;\n this.logger.info(`Profile stored with topic ID: ${profileTopicId}`);\n\n return {\n inboundTopicId,\n outboundTopicId,\n pfpTopicId,\n profileTopicId,\n };\n }\n\n /**\n * Inscribes a profile picture to Hedera\n * @param buffer Profile picture buffer\n * @param fileName Filename\n * @returns Response with topic ID and transaction ID\n */\n async inscribePfp(\n buffer: Buffer,\n fileName: string\n ): Promise<InscribePfpResponse> {\n try {\n this.logger.info('Inscribing profile picture using HCS-11 client');\n\n const imageResult = await this.hcs11Client.inscribeImage(\n buffer,\n fileName\n );\n\n if (!imageResult.success) {\n this.logger.error(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n throw new Error(\n imageResult?.error || 'Failed to inscribe profile picture'\n );\n }\n\n this.logger.info(\n `Successfully inscribed profile picture with topic ID: ${imageResult.imageTopicId}`\n );\n return {\n pfpTopicId: imageResult.imageTopicId,\n transactionId: imageResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error inscribing profile picture: ${error.message}`);\n return {\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n /**\n * Stores an HCS-11 profile for an agent\n * @param agentName Agent name\n * @param agentDescription Agent description\n * @param inboundTopicId Inbound topic ID\n * @param outboundTopicId Outbound topic ID\n * @param capabilities Agent capability tags\n * @param metadata Additional metadata\n * @param pfpBuffer Optional profile picture buffer\n * @param pfpFileName Optional profile picture filename\n * @returns Response with topic IDs and transaction ID\n */\n async storeHCS11Profile(\n agentName: string,\n agentDescription: string,\n inboundTopicId: string,\n outboundTopicId: string,\n capabilities: number[] = [],\n metadata: AgentMetadata,\n pfpBuffer?: Buffer,\n pfpFileName?: string,\n existingPfpTopicId?: string\n ): Promise<StoreHCS11ProfileResponse> {\n try {\n let pfpTopicId = existingPfpTopicId || '';\n\n if (!pfpTopicId && pfpBuffer && pfpFileName) {\n this.logger.info('Inscribing profile picture for HCS-11 profile');\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName);\n if (!pfpResult.success) {\n this.logger.error(\n 'Failed to inscribe profile picture, continuing without PFP'\n );\n } else {\n pfpTopicId = pfpResult.pfpTopicId;\n }\n } else if (existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${existingPfpTopicId} for HCS-11 profile`\n );\n }\n\n const agentType = this.hcs11Client.getAgentTypeFromMetadata({\n type: metadata.type || 'autonomous',\n } as AgentMetadata);\n\n const formattedSocials = metadata.socials\n ? Object.entries(metadata.socials)\n .filter(([_, handle]) => handle)\n .map(([platform, handle]) => ({\n platform: platform === 'x' ? 'twitter' : platform,\n handle,\n }))\n : undefined;\n\n const profile = this.hcs11Client.createAIAgentProfile(\n agentName,\n agentType,\n capabilities,\n metadata.model || 'unknown',\n {\n alias: agentName.toLowerCase().replace(/\\s+/g, '_'),\n bio: agentDescription,\n profileImage: pfpTopicId ? `hcs://1/${pfpTopicId}` : undefined,\n socials: formattedSocials,\n properties: metadata.properties,\n inboundTopicId,\n outboundTopicId,\n creator: metadata.creator,\n }\n );\n\n const profileResult = await this.hcs11Client.createAndInscribeProfile(\n profile,\n true\n );\n\n if (!profileResult.success) {\n this.logger.error(`Failed to inscribe profile: ${profileResult.error}`);\n throw new Error(profileResult.error || 'Failed to inscribe profile');\n }\n\n this.logger.info(\n `Profile inscribed with topic ID: ${profileResult.profileTopicId}, transaction ID: ${profileResult.transactionId}`\n );\n\n return {\n profileTopicId: profileResult.profileTopicId,\n pfpTopicId,\n transactionId: profileResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error storing HCS-11 profile: ${error.message}`);\n return {\n profileTopicId: '',\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n private async setupFees(\n transaction: TopicCreateTransaction,\n feeConfig: TopicFeeConfig,\n additionalExemptAccounts: string[] = []\n ): Promise<void> {\n if (!this.client.operatorPublicKey) {\n return;\n }\n\n this.logger.info('Setting up topic with custom fees');\n\n const customFee = new CustomFixedFee()\n .setAmount(Number(feeConfig.feeAmount.amount))\n .setFeeCollectorAccountId(\n AccountId.fromString(feeConfig.feeCollectorAccountId)\n );\n\n let exemptAccountIds = [\n ...(feeConfig.exemptAccounts || []),\n ...additionalExemptAccounts,\n ];\n\n console.log('exemptAccountIds', exemptAccountIds);\n\n if (exemptAccountIds.length > 0) {\n const uniqueExemptAccountIds = Array.from(new Set(exemptAccountIds));\n const filteredExemptAccounts = uniqueExemptAccountIds.filter(\n (account) => account !== this.client.operatorAccountId?.toString()\n );\n\n let exemptKeys: PublicKey[] = [];\n if (filteredExemptAccounts.length > 0) {\n try {\n exemptKeys = await accountIdsToExemptKeys(\n filteredExemptAccounts,\n this.network,\n this.logger\n );\n } catch (error) {\n this.logger.warn(\n `Error getting exempt keys: ${error}, continuing without exempt keys`\n );\n }\n }\n\n if (exemptKeys.length > 0) {\n transaction.setFeeExemptKeys(exemptKeys);\n }\n }\n\n transaction\n .setFeeScheduleKey(this.client.operatorPublicKey)\n .setCustomFees([customFee]);\n }\n\n /**\n * Handles a connection request from another account\n * @param inboundTopicId Inbound topic ID\n * @param requestingAccountId Requesting account ID\n * @param connectionRequestId Connection request ID\n * @param connectionFeeConfig Optional fee configuration for the connection topic\n * @param ttl Optional ttl parameter with default\n * @returns Response with connection details\n */\n async handleConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n connectionRequestId: number,\n connectionFeeConfig?: FeeConfigBuilderInterface,\n ttl: number = 60\n ): Promise<HandleConnectionRequestResponse> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.CONNECTION, {\n ttl,\n inboundTopicId,\n connectionId: connectionRequestId,\n });\n this.logger.info(\n `Handling connection request ${connectionRequestId} from ${requestingAccountId}`\n );\n\n const accountId = this.getClient().operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n let requesterKey = await this.mirrorNode.getPublicKey(requestingAccountId);\n const accountKey = await this.mirrorNode.getPublicKey(accountId);\n\n if (!accountKey) {\n throw new Error('Failed to retrieve public key');\n }\n\n const thresholdKey = new KeyList([accountKey, requesterKey], 1);\n\n let connectionTopicId: string;\n\n try {\n if (connectionFeeConfig) {\n const feeConfig = connectionFeeConfig.build();\n const modifiedFeeConfig = {\n ...feeConfig,\n exemptAccounts: [...(feeConfig.exemptAccounts || [])],\n };\n\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey,\n modifiedFeeConfig\n );\n } else {\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey\n );\n }\n\n this.logger.info(`Created new connection topic ID: ${connectionTopicId}`);\n } catch (error) {\n this.logger.error(`Failed to create connection topic: ${error}`);\n throw new TopicCreationError(\n `Failed to create connection topic: ${error}`\n );\n }\n\n const operatorId = `${inboundTopicId}@${accountId}`;\n\n const confirmedConnectionSequenceNumber = await this.confirmConnection(\n inboundTopicId,\n connectionTopicId,\n requestingAccountId,\n connectionRequestId,\n operatorId,\n 'Connection accepted. Looking forward to collaborating!'\n );\n\n return {\n connectionTopicId,\n confirmedConnectionSequenceNumber,\n operatorId,\n };\n }\n\n async confirmConnection(\n inboundTopicId: string,\n connectionTopicId: string,\n connectedAccountId: string,\n connectionId: number,\n operatorId: string,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<number> {\n this.logger.info(`Confirming connection with ID ${connectionId}`);\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n connected_account_id: connectedAccountId,\n operator_id: operatorId,\n connection_id: connectionId,\n m: memo,\n };\n\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const result = await this.submitPayload(\n inboundTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n\n const sequenceNumber = result.topicSequenceNumber?.toNumber();\n\n if (!sequenceNumber) {\n throw new ConnectionConfirmationError(\n 'Failed to confirm connection: sequence number is null'\n );\n }\n\n return sequenceNumber;\n }\n\n async sendMessage(\n connectionTopicId: string,\n operatorId: string,\n data: string,\n memo?: string,\n submitKey?: PrivateKey\n ): Promise<void> {\n const submissionCheck = await this.canSubmitToTopic(\n connectionTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const payload = {\n p: 'hcs-10',\n op: 'message',\n operator_id: operatorId,\n data,\n m: memo,\n };\n\n const payloadString = JSON.stringify(payload);\n const isLargePayload = Buffer.from(payloadString).length > 1000;\n\n if (isLargePayload) {\n this.logger.info(\n 'Message payload exceeds 1000 bytes, storing via inscription'\n );\n try {\n const contentBuffer = Buffer.from(data);\n const fileName = `message-${Date.now()}.json`;\n const inscriptionResult = await this.inscribeFile(\n contentBuffer,\n fileName\n );\n\n if (inscriptionResult?.topic_id) {\n payload.data = `hcs://1/${inscriptionResult.topic_id}`;\n this.logger.info(\n `Large message inscribed with topic ID: ${inscriptionResult.topic_id}`\n );\n } else {\n throw new Error('Failed to inscribe large message content');\n }\n } catch (error) {\n this.logger.error('Error inscribing large message:', error);\n throw new Error(\n `Failed to handle large message: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n this.logger.info('Submitting message to connection topic', payload);\n await this.submitPayload(\n connectionTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n }\n\n async createTopic(\n memo: string,\n adminKey?: boolean | PublicKey | KeyList,\n submitKey?: boolean | PublicKey | KeyList,\n feeConfig?: TopicFeeConfig\n ): Promise<string> {\n this.logger.info('Creating topic');\n const transaction = new TopicCreateTransaction().setTopicMemo(memo);\n\n if (adminKey) {\n if (\n typeof adminKey === 'boolean' &&\n adminKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setAdminKey(this.client.operatorPublicKey);\n transaction.setAutoRenewAccountId(this.client.operatorAccountId!);\n } else if (adminKey instanceof PublicKey || adminKey instanceof KeyList) {\n transaction.setAdminKey(adminKey);\n if (this.client.operatorAccountId) {\n transaction.setAutoRenewAccountId(this.client.operatorAccountId);\n }\n }\n }\n\n if (submitKey) {\n if (\n typeof submitKey === 'boolean' &&\n submitKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setSubmitKey(this.client.operatorPublicKey);\n } else if (\n submitKey instanceof PublicKey ||\n submitKey instanceof KeyList\n ) {\n transaction.setSubmitKey(submitKey);\n }\n }\n\n if (feeConfig) {\n await this.setupFees(transaction, feeConfig);\n }\n\n this.logger.debug('Executing topic creation transaction');\n const txResponse = await transaction.execute(this.client);\n const receipt = await txResponse.getReceipt(this.client);\n\n if (!receipt.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n throw new Error('Failed to create topic: topicId is null');\n }\n\n const topicId = receipt.topicId.toString();\n return topicId;\n }\n\n public async submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee: boolean = false\n ): Promise<TransactionReceipt> {\n const message =\n typeof payload === 'string' ? payload : JSON.stringify(payload);\n\n const payloadSizeInBytes = Buffer.byteLength(message, 'utf8');\n if (payloadSizeInBytes > 1000) {\n throw new PayloadSizeError(\n 'Payload size exceeds 1000 bytes limit',\n payloadSizeInBytes\n );\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(topicId))\n .setMessage(message);\n\n if (requiresFee) {\n this.logger.info(\n 'Topic requires fee payment, setting max transaction fee'\n );\n transaction.setMaxTransactionFee(new Hbar(this.feeAmount));\n transaction.setTransactionMemo('HIP-991 Fee Payment');\n }\n\n let transactionResponse: TransactionResponse;\n if (submitKey) {\n transaction.freezeWith(this.client);\n const signedTransaction = await transaction.sign(submitKey);\n transactionResponse = await signedTransaction.execute(this.client);\n } else {\n transactionResponse = await transaction.execute(this.client);\n }\n\n const receipt = await transactionResponse.getReceipt(this.client);\n if (!receipt) {\n this.logger.error('Failed to submit message: receipt is null');\n throw new Error('Failed to submit message: receipt is null');\n }\n this.logger.info('Message submitted successfully');\n return receipt;\n }\n\n async submitConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n operatorId: string,\n memo: string\n ): Promise<TransactionReceipt> {\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n requestingAccountId\n );\n\n if (!submissionCheck.canSubmit) {\n throw new Error(`Cannot submit to topic: ${submissionCheck.reason}`);\n }\n\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: operatorId,\n memo: memo,\n };\n\n const requiresFee = submissionCheck.requiresFee;\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage,\n undefined,\n requiresFee\n );\n\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveOutboundConnectTopic(\n requestingAccountId\n );\n\n const responseSequenceNumber = response.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n await this.submitPayload(\n outboundTopic.outboundTopic,\n {\n ...connectionRequestMessage,\n outbound_topic_id: outboundTopic.outboundTopic,\n connection_request_id: responseSequenceNumber,\n },\n this.operatorPrivateKey\n );\n\n return response;\n }\n\n async inscribeFile(\n buffer: Buffer,\n fileName: string\n ): Promise<RetrievedInscriptionResult> {\n this.logger.info('Inscribing file');\n if (!this.client.operatorAccountId) {\n this.logger.error('Operator account ID is not set');\n throw new Error('Operator account ID is not set');\n }\n\n if (!this.operatorPrivateKey) {\n this.logger.error('Operator private key is not set');\n throw new Error('Operator private key is not set');\n }\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n });\n\n const result = await sdk.inscribeAndExecute(\n {\n file: {\n type: 'base64',\n base64: buffer.toString('base64'),\n fileName,\n mimeType,\n },\n holderId: this.client.operatorAccountId.toString(),\n mode: 'file',\n network: this.network as 'testnet' | 'mainnet',\n },\n {\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n }\n );\n\n if (!result.transactionId || !result.jobId) {\n this.logger.error('Failed to inscribe, no transaction ID or job ID.');\n throw new Error('Failed to inscribe, no transaction ID or job ID.');\n }\n\n if (result.transactionId && result.jobId) {\n this.logger.info(\n `Transaction ID: ${result.transactionId}, Job ID: ${result.jobId}`\n );\n }\n\n const status = await sdk.waitForInscription(result.jobId, 30, 4000, true);\n return status;\n }\n\n /**\n * Waits for confirmation of a connection request\n * @param inboundTopicId Inbound topic ID\n * @param connectionRequestId Connection request ID\n * @param maxAttempts Maximum number of attempts\n * @param delayMs Delay between attempts in milliseconds\n * @returns Connection confirmation details\n */\n async waitForConnectionConfirmation(\n inboundTopicId: string,\n connectionRequestId: number,\n maxAttempts = 60,\n delayMs = 2000\n ): Promise<WaitForConnectionConfirmationResponse> {\n this.logger.info(\n `Waiting for connection confirmation on inbound topic ${inboundTopicId} for request ID ${connectionRequestId}`\n );\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n this.logger.info(\n `Attempt ${attempt + 1}/${maxAttempts} to find connection confirmation`\n );\n const messages = await this.mirrorNode.getTopicMessages(inboundTopicId);\n\n const connectionCreatedMessages = messages.filter(\n (m) => m.op === 'connection_created'\n );\n\n this.logger.info(\n `Found ${connectionCreatedMessages.length} connection_created messages`\n );\n\n if (connectionCreatedMessages.length > 0) {\n for (const message of connectionCreatedMessages) {\n if (Number(message.connection_id) === Number(connectionRequestId)) {\n this.logger.info('Connection confirmation found');\n return {\n connectionTopicId: message.connection_topic_id,\n sequence_number: Number(message.sequence_number),\n confirmedBy: message.operator_id,\n memo: message.m,\n };\n }\n }\n }\n\n if (attempt < maxAttempts - 1) {\n this.logger.info(\n `No matching confirmation found, waiting ${delayMs}ms before retrying...`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw new Error(\n `Connection confirmation not found after ${maxAttempts} attempts for request ID ${connectionRequestId}`\n );\n }\n\n getAccountAndSigner(): GetAccountAndSignerResponse {\n return {\n accountId: this.client.operatorAccountId!.toString()!,\n signer: this.operatorPrivateKey,\n };\n }\n\n /**\n * Creates and registers an agent with a Guarded registry.\n *\n * This function performs the following steps:\n * 1. Creates a new account if no existing account is provided.\n * 2. Initializes an HCS10 client with the new account.\n * 3. Creates an agent on the client.\n * 4. Registers the agent with the Hashgraph Online Guarded Registry.\n *\n * @param builder The agent builder object\n * @param options Optional configuration including progress callback and state management\n * @returns Agent registration result\n */\n async createAndRegisterAgent(\n builder: AgentBuilder,\n options?: {\n baseUrl?: string;\n progressCallback?: RegistrationProgressCallback;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n const config = builder.build();\n const progressCallback = options?.progressCallback;\n const baseUrl = options?.baseUrl || this.guardedRegistryBaseUrl;\n let state = options?.existingState || undefined;\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: { state },\n });\n }\n\n const account = config.existingAccount || (await this.createAccount());\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Created account or using existing account',\n progressPercent: 20,\n details: { state, account },\n });\n }\n\n const agentClient = new HCS10Client({\n network: config.network,\n operatorId: account.accountId,\n operatorPrivateKey: account.privateKey,\n operatorPublicKey: PrivateKey.fromString(\n account.privateKey\n ).publicKey.toString(),\n logLevel: 'info' as LogLevel,\n guardedRegistryBaseUrl: baseUrl,\n });\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Initialized agent client',\n progressPercent: 30,\n details: { state },\n });\n }\n\n const { outboundTopicId, inboundTopicId, pfpTopicId, profileTopicId } =\n await agentClient.createAgent(builder);\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Created agent with topics and profile',\n progressPercent: 60,\n details: {\n state,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n },\n });\n }\n\n const operatorId = `${inboundTopicId}@${account.accountId}`;\n\n const registrationResult =\n await agentClient.registerAgentWithGuardedRegistry(\n account.accountId,\n config.network,\n {\n progressCallback: (data) => {\n const adjustedPercent = 60 + (data.progressPercent || 0) * 0.4;\n if (progressCallback) {\n progressCallback({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: {\n ...data.details,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: data.details?.state || state,\n },\n });\n }\n },\n existingState: state,\n }\n );\n\n if (!registrationResult.success) {\n return registrationResult;\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent creation and registration complete',\n progressPercent: 100,\n details: {\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: registrationResult.state,\n },\n });\n }\n\n return {\n ...registrationResult,\n metadata: {\n accountId: account.accountId,\n privateKey: account.privateKey,\n operatorId,\n inboundTopicId,\n outboundTopicId,\n profileTopicId,\n pfpTopicId,\n },\n };\n } catch (error: any) {\n this.logger.error(\n `Failed to create and register agent: ${error.message}`\n );\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry\n * @param accountId Account ID to register\n * @param inboundTopicId Inbound topic ID for the agent\n * @param network Network type ('mainnet' or 'testnet')\n * @param options Optional configuration including progress callback and confirmation settings\n * @returns Registration result\n */\n async registerAgentWithGuardedRegistry(\n accountId: string,\n network: string = this.network,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n maxAttempts?: number;\n delayMs?: number;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n this.logger.info('Registering agent with guarded registry');\n\n const maxAttempts = options?.maxAttempts ?? 60;\n const delayMs = options?.delayMs ?? 2000;\n const progressCallback = options?.progressCallback;\n let state =\n options?.existingState ||\n ({\n currentStage: 'registration',\n completedPercentage: 0,\n createdResources: [],\n } as AgentCreationState);\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: {\n state,\n },\n });\n }\n\n const registrationResult = await this.executeRegistration(\n accountId,\n network,\n this.guardedRegistryBaseUrl,\n this.logger\n );\n\n if (!registrationResult.success) {\n return {\n ...registrationResult,\n state,\n };\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Submitting registration to registry',\n progressPercent: 30,\n details: {\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n if (registrationResult.transaction) {\n const transaction = Transaction.fromBytes(\n Buffer.from(registrationResult.transaction, 'base64')\n );\n\n this.logger.info(`Processing registration transaction`);\n await transaction.execute(this.client);\n this.logger.info(`Successfully processed registration transaction`);\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'confirming',\n message: 'Confirming registration transaction',\n progressPercent: 60,\n details: {\n accountId,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n const confirmed = await this.waitForRegistrationConfirmation(\n registrationResult.transactionId!,\n network,\n this.guardedRegistryBaseUrl,\n maxAttempts,\n delayMs,\n this.logger\n );\n\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n if (!state.createdResources) {\n state.createdResources = [];\n }\n if (registrationResult.transactionId) {\n state.createdResources.push(\n `registration:${registrationResult.transactionId}`\n );\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent registration complete',\n progressPercent: 100,\n details: {\n confirmed,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n return {\n ...registrationResult,\n confirmed,\n state,\n };\n } catch (error: any) {\n this.logger.error(`Failed to register agent: ${error.message}`);\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry. Should be called by a registry.\n * @param registryTopicId - The topic ID of the guarded registry.\n * @param accountId - The account ID of the agent\n * @param inboundTopicId - The topic ID of the inbound topic\n * @param memo - The memo of the agent\n * @param submitKey - The submit key of the agent\n */\n async registerAgent(\n registryTopicId: string,\n accountId: string,\n inboundTopicId: string,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<void> {\n this.logger.info('Registering agent');\n const payload = {\n p: 'hcs-10',\n op: 'register',\n account_id: accountId,\n inbound_topic_id: inboundTopicId,\n m: memo,\n };\n\n await this.submitPayload(registryTopicId, payload, submitKey);\n }\n\n async getInboundTopicType(topicId: string): Promise<InboundTopicType> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n\n if (!topicInfo) {\n throw new Error('Topic does not exist');\n }\n\n const hasSubmitKey = topicInfo.submit_key && topicInfo.submit_key.key;\n\n if (!hasSubmitKey) {\n return InboundTopicType.PUBLIC;\n }\n\n const hasFeeScheduleKey =\n topicInfo.fee_schedule_key && topicInfo.fee_schedule_key.key;\n\n if (hasFeeScheduleKey && topicInfo.custom_fees) {\n const customFees = topicInfo.custom_fees;\n\n if (\n customFees &&\n customFees.fixed_fees &&\n customFees.fixed_fees.length > 0\n ) {\n this.logger.info(\n `Topic ${topicId} is fee-based with ${customFees.fixed_fees.length} custom fees`\n );\n return InboundTopicType.FEE_BASED;\n }\n }\n\n return InboundTopicType.CONTROLLED;\n } catch (error: any) {\n this.logger.error(`Error determining topic type: ${error.message}`);\n throw new Error(`Failed to determine topic type: ${error.message}`);\n }\n }\n\n getNetwork(): string {\n return this.network;\n }\n\n getLogger(): Logger {\n return this.logger;\n }\n}\n"],"names":["mime.lookup"],"mappings":"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"}
@@ -1,9 +1,64 @@
1
- function spread(callback) {
2
- return function wrap(arr) {
3
- return callback.apply(null, arr);
4
- };
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import { defineProperties } from "./standards-sdk.es55.js";
5
+ import { Typed } from "./standards-sdk.es59.js";
6
+ import { Coder } from "./standards-sdk.es41.js";
7
+ import { pack, unpack } from "./standards-sdk.es43.js";
8
+ class TupleCoder extends Coder {
9
+ constructor(coders, localName) {
10
+ let dynamic = false;
11
+ const types = [];
12
+ coders.forEach((coder) => {
13
+ if (coder.dynamic) {
14
+ dynamic = true;
15
+ }
16
+ types.push(coder.type);
17
+ });
18
+ const type = "tuple(" + types.join(",") + ")";
19
+ super("tuple", type, localName, dynamic);
20
+ __publicField(this, "coders");
21
+ defineProperties(this, { coders: Object.freeze(coders.slice()) });
22
+ }
23
+ defaultValue() {
24
+ const values = [];
25
+ this.coders.forEach((coder) => {
26
+ values.push(coder.defaultValue());
27
+ });
28
+ const uniqueNames = this.coders.reduce((accum, coder) => {
29
+ const name = coder.localName;
30
+ if (name) {
31
+ if (!accum[name]) {
32
+ accum[name] = 0;
33
+ }
34
+ accum[name]++;
35
+ }
36
+ return accum;
37
+ }, {});
38
+ this.coders.forEach((coder, index) => {
39
+ let name = coder.localName;
40
+ if (!name || uniqueNames[name] !== 1) {
41
+ return;
42
+ }
43
+ if (name === "length") {
44
+ name = "_length";
45
+ }
46
+ if (values[name] != null) {
47
+ return;
48
+ }
49
+ values[name] = values[index];
50
+ });
51
+ return Object.freeze(values);
52
+ }
53
+ encode(writer, _value) {
54
+ const value = Typed.dereference(_value, "tuple");
55
+ return pack(writer, this.coders, value);
56
+ }
57
+ decode(reader) {
58
+ return unpack(reader, this.coders);
59
+ }
5
60
  }
6
61
  export {
7
- spread as default
62
+ TupleCoder
8
63
  };
9
64
  //# sourceMappingURL=standards-sdk.es50.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es50.js","sources":["../../node_modules/axios/lib/helpers/spread.js"],"sourcesContent":["'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n"],"names":[],"mappings":"AAuBe,SAAS,OAAO,UAAU;AACvC,SAAO,SAAS,KAAK,KAAK;AACxB,WAAO,SAAS,MAAM,MAAM,GAAG;AAAA,EAChC;AACH;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"standards-sdk.es50.js","sources":["../../node_modules/ethers/lib.esm/abi/coders/tuple.js"],"sourcesContent":["import { defineProperties } from \"../../utils/properties.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\n/**\n * @_ignore\n */\nexport class TupleCoder extends Coder {\n coders;\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return unpack(reader, this.coders);\n }\n}\n//# sourceMappingURL=tuple.js.map"],"names":[],"mappings":";;;;;;;AAOO,MAAM,mBAAmB,MAAM;AAAA,EAElC,YAAY,QAAQ,WAAW;AAC3B,QAAI,UAAU;AACd,UAAM,QAAQ,CAAE;AAChB,WAAO,QAAQ,CAAC,UAAU;AACtB,UAAI,MAAM,SAAS;AACf,kBAAU;AAAA,MAC1B;AACY,YAAM,KAAK,MAAM,IAAI;AAAA,IACjC,CAAS;AACD,UAAM,OAAQ,WAAW,MAAM,KAAK,GAAG,IAAI;AAC3C,UAAM,SAAS,MAAM,WAAW,OAAO;AAX3C;AAYI,qBAAiB,MAAM,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAO,CAAA,GAAG;AAAA,EACxE;AAAA,EACI,eAAe;AACX,UAAM,SAAS,CAAE;AACjB,SAAK,OAAO,QAAQ,CAAC,UAAU;AAC3B,aAAO,KAAK,MAAM,cAAc;AAAA,IAC5C,CAAS;AAED,UAAM,cAAc,KAAK,OAAO,OAAO,CAAC,OAAO,UAAU;AACrD,YAAM,OAAO,MAAM;AACnB,UAAI,MAAM;AACN,YAAI,CAAC,MAAM,IAAI,GAAG;AACd,gBAAM,IAAI,IAAI;AAAA,QAClC;AACgB,cAAM,IAAI;AAAA,MAC1B;AACY,aAAO;AAAA,IACV,GAAE,EAAE;AAEL,SAAK,OAAO,QAAQ,CAAC,OAAO,UAAU;AAClC,UAAI,OAAO,MAAM;AACjB,UAAI,CAAC,QAAQ,YAAY,IAAI,MAAM,GAAG;AAClC;AAAA,MAChB;AACY,UAAI,SAAS,UAAU;AACnB,eAAO;AAAA,MACvB;AACY,UAAI,OAAO,IAAI,KAAK,MAAM;AACtB;AAAA,MAChB;AACY,aAAO,IAAI,IAAI,OAAO,KAAK;AAAA,IACvC,CAAS;AACD,WAAO,OAAO,OAAO,MAAM;AAAA,EACnC;AAAA,EACI,OAAO,QAAQ,QAAQ;AACnB,UAAM,QAAQ,MAAM,YAAY,QAAQ,OAAO;AAC/C,WAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK;AAAA,EAC9C;AAAA,EACI,OAAO,QAAQ;AACX,WAAO,OAAO,QAAQ,KAAK,MAAM;AAAA,EACzC;AACA;","x_google_ignoreList":[0]}