@hashgraphonline/standards-agent-kit 0.2.136 → 0.2.138

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 (211) hide show
  1. package/README.md +3 -4
  2. package/dist/cjs/builders/hcs10/hcs10-builder.d.ts +1 -0
  3. package/dist/cjs/builders/hcs2/hcs2-builder.d.ts +8 -7
  4. package/dist/cjs/builders/hcs6/hcs6-builder.d.ts +5 -4
  5. package/dist/cjs/builders/inscriber/inscriber-builder.d.ts +32 -1
  6. package/dist/cjs/index.d.ts +4 -0
  7. package/dist/cjs/signing/bytes-registry.d.ts +17 -0
  8. package/dist/cjs/signing/signer-provider.d.ts +45 -0
  9. package/dist/cjs/standards-agent-kit.cjs +1 -1
  10. package/dist/cjs/standards-agent-kit.cjs.map +1 -1
  11. package/dist/cjs/tools/hcs10/InitiateConnectionTool.d.ts +4 -4
  12. package/dist/cjs/tools/hcs2/CreateRegistryTool.d.ts +2 -2
  13. package/dist/cjs/tools/hcs2/DeleteEntryTool.d.ts +2 -2
  14. package/dist/cjs/tools/hcs2/UpdateEntryTool.d.ts +2 -2
  15. package/dist/cjs/tools/hcs6/RegisterDynamicHashinalTool.d.ts +10 -10
  16. package/dist/cjs/tools/hcs6/UpdateDynamicHashinalTool.d.ts +8 -8
  17. package/dist/cjs/tools/inscriber/InscribeFromBufferTool.d.ts +5 -4
  18. package/dist/cjs/tools/inscriber/InscribeFromFileTool.d.ts +2 -2
  19. package/dist/cjs/tools/inscriber/InscribeFromUrlTool.d.ts +4 -4
  20. package/dist/cjs/tools/inscriber/InscribeHashinalTool.d.ts +3 -3
  21. package/dist/cjs/types/inscription-response.d.ts +8 -0
  22. package/dist/cjs/types/tx-results.d.ts +15 -0
  23. package/dist/cjs/utils/CodedError.d.ts +4 -0
  24. package/dist/cjs/utils/inscription-utils.d.ts +21 -0
  25. package/dist/cjs/validation/hip412-schemas.d.ts +2 -2
  26. package/dist/es/builders/hcs10/hcs10-builder.d.ts +1 -0
  27. package/dist/es/builders/hcs2/hcs2-builder.d.ts +8 -7
  28. package/dist/es/builders/hcs6/hcs6-builder.d.ts +5 -4
  29. package/dist/es/builders/inscriber/inscriber-builder.d.ts +32 -1
  30. package/dist/es/index.d.ts +4 -0
  31. package/dist/es/signing/bytes-registry.d.ts +17 -0
  32. package/dist/es/signing/signer-provider.d.ts +45 -0
  33. package/dist/es/standards-agent-kit.es.js +46 -42
  34. package/dist/es/standards-agent-kit.es.js.map +1 -1
  35. package/dist/es/standards-agent-kit.es10.js +24 -83
  36. package/dist/es/standards-agent-kit.es10.js.map +1 -1
  37. package/dist/es/standards-agent-kit.es11.js +224 -20
  38. package/dist/es/standards-agent-kit.es11.js.map +1 -1
  39. package/dist/es/standards-agent-kit.es12.js +78 -27
  40. package/dist/es/standards-agent-kit.es12.js.map +1 -1
  41. package/dist/es/standards-agent-kit.es13.js +26 -36
  42. package/dist/es/standards-agent-kit.es13.js.map +1 -1
  43. package/dist/es/standards-agent-kit.es14.js +17 -39
  44. package/dist/es/standards-agent-kit.es14.js.map +1 -1
  45. package/dist/es/standards-agent-kit.es15.js +36 -58
  46. package/dist/es/standards-agent-kit.es15.js.map +1 -1
  47. package/dist/es/standards-agent-kit.es16.js +45 -18
  48. package/dist/es/standards-agent-kit.es16.js.map +1 -1
  49. package/dist/es/standards-agent-kit.es17.js +53 -16
  50. package/dist/es/standards-agent-kit.es17.js.map +1 -1
  51. package/dist/es/standards-agent-kit.es18.js +18 -28
  52. package/dist/es/standards-agent-kit.es18.js.map +1 -1
  53. package/dist/es/standards-agent-kit.es19.js +26 -12
  54. package/dist/es/standards-agent-kit.es19.js.map +1 -1
  55. package/dist/es/standards-agent-kit.es20.js +38 -136
  56. package/dist/es/standards-agent-kit.es20.js.map +1 -1
  57. package/dist/es/standards-agent-kit.es21.js +13 -24
  58. package/dist/es/standards-agent-kit.es21.js.map +1 -1
  59. package/dist/es/standards-agent-kit.es22.js +136 -39
  60. package/dist/es/standards-agent-kit.es22.js.map +1 -1
  61. package/dist/es/standards-agent-kit.es23.js +25 -41
  62. package/dist/es/standards-agent-kit.es23.js.map +1 -1
  63. package/dist/es/standards-agent-kit.es24.js +49 -31
  64. package/dist/es/standards-agent-kit.es24.js.map +1 -1
  65. package/dist/es/standards-agent-kit.es25.js +34 -18
  66. package/dist/es/standards-agent-kit.es25.js.map +1 -1
  67. package/dist/es/standards-agent-kit.es26.js +35 -19
  68. package/dist/es/standards-agent-kit.es26.js.map +1 -1
  69. package/dist/es/standards-agent-kit.es27.js +45 -32
  70. package/dist/es/standards-agent-kit.es27.js.map +1 -1
  71. package/dist/es/standards-agent-kit.es28.js +54 -25
  72. package/dist/es/standards-agent-kit.es28.js.map +1 -1
  73. package/dist/es/standards-agent-kit.es29.js +35 -23
  74. package/dist/es/standards-agent-kit.es29.js.map +1 -1
  75. package/dist/es/standards-agent-kit.es3.js +41 -1545
  76. package/dist/es/standards-agent-kit.es3.js.map +1 -1
  77. package/dist/es/standards-agent-kit.es30.js +23 -39
  78. package/dist/es/standards-agent-kit.es30.js.map +1 -1
  79. package/dist/es/standards-agent-kit.es31.js +30 -28
  80. package/dist/es/standards-agent-kit.es31.js.map +1 -1
  81. package/dist/es/standards-agent-kit.es32.js +45 -32
  82. package/dist/es/standards-agent-kit.es32.js.map +1 -1
  83. package/dist/es/standards-agent-kit.es33.js +50 -89
  84. package/dist/es/standards-agent-kit.es33.js.map +1 -1
  85. package/dist/es/standards-agent-kit.es34.js +35 -228
  86. package/dist/es/standards-agent-kit.es34.js.map +1 -1
  87. package/dist/es/standards-agent-kit.es35.js +87 -212
  88. package/dist/es/standards-agent-kit.es35.js.map +1 -1
  89. package/dist/es/standards-agent-kit.es36.js +188 -128
  90. package/dist/es/standards-agent-kit.es36.js.map +1 -1
  91. package/dist/es/standards-agent-kit.es37.js +167 -561
  92. package/dist/es/standards-agent-kit.es37.js.map +1 -1
  93. package/dist/es/standards-agent-kit.es38.js +236 -31
  94. package/dist/es/standards-agent-kit.es38.js.map +1 -1
  95. package/dist/es/standards-agent-kit.es39.js +483 -206
  96. package/dist/es/standards-agent-kit.es39.js.map +1 -1
  97. package/dist/es/standards-agent-kit.es4.js +359 -81
  98. package/dist/es/standards-agent-kit.es4.js.map +1 -1
  99. package/dist/es/standards-agent-kit.es40.js +39 -135
  100. package/dist/es/standards-agent-kit.es40.js.map +1 -1
  101. package/dist/es/standards-agent-kit.es41.js +244 -28
  102. package/dist/es/standards-agent-kit.es41.js.map +1 -1
  103. package/dist/es/standards-agent-kit.es42.js +132 -418
  104. package/dist/es/standards-agent-kit.es42.js.map +1 -1
  105. package/dist/es/standards-agent-kit.es43.js +28 -184
  106. package/dist/es/standards-agent-kit.es43.js.map +1 -1
  107. package/dist/es/standards-agent-kit.es44.js +423 -3
  108. package/dist/es/standards-agent-kit.es44.js.map +1 -1
  109. package/dist/es/standards-agent-kit.es45.js +185 -24
  110. package/dist/es/standards-agent-kit.es45.js.map +1 -1
  111. package/dist/es/standards-agent-kit.es46.js +3 -3
  112. package/dist/es/standards-agent-kit.es46.js.map +1 -1
  113. package/dist/es/standards-agent-kit.es47.js +21 -50
  114. package/dist/es/standards-agent-kit.es47.js.map +1 -1
  115. package/dist/es/standards-agent-kit.es48.js +8 -3
  116. package/dist/es/standards-agent-kit.es48.js.map +1 -1
  117. package/dist/es/standards-agent-kit.es49.js +3 -39
  118. package/dist/es/standards-agent-kit.es49.js.map +1 -1
  119. package/dist/es/standards-agent-kit.es5.js +1747 -73
  120. package/dist/es/standards-agent-kit.es5.js.map +1 -1
  121. package/dist/es/standards-agent-kit.es50.js +18 -16
  122. package/dist/es/standards-agent-kit.es50.js.map +1 -1
  123. package/dist/es/standards-agent-kit.es51.js +49 -49
  124. package/dist/es/standards-agent-kit.es51.js.map +1 -1
  125. package/dist/es/standards-agent-kit.es52.js +6 -0
  126. package/dist/es/standards-agent-kit.es52.js.map +1 -0
  127. package/dist/es/standards-agent-kit.es53.js +43 -0
  128. package/dist/es/standards-agent-kit.es53.js.map +1 -0
  129. package/dist/es/standards-agent-kit.es54.js +22 -0
  130. package/dist/es/standards-agent-kit.es54.js.map +1 -0
  131. package/dist/es/standards-agent-kit.es55.js +77 -0
  132. package/dist/es/standards-agent-kit.es55.js.map +1 -0
  133. package/dist/es/standards-agent-kit.es56.js +7 -0
  134. package/dist/es/standards-agent-kit.es56.js.map +1 -0
  135. package/dist/es/standards-agent-kit.es6.js +347 -32
  136. package/dist/es/standards-agent-kit.es6.js.map +1 -1
  137. package/dist/es/standards-agent-kit.es7.js +142 -293
  138. package/dist/es/standards-agent-kit.es7.js.map +1 -1
  139. package/dist/es/standards-agent-kit.es8.js +201 -21
  140. package/dist/es/standards-agent-kit.es8.js.map +1 -1
  141. package/dist/es/standards-agent-kit.es9.js +301 -213
  142. package/dist/es/standards-agent-kit.es9.js.map +1 -1
  143. package/dist/es/tools/hcs10/InitiateConnectionTool.d.ts +4 -4
  144. package/dist/es/tools/hcs2/CreateRegistryTool.d.ts +2 -2
  145. package/dist/es/tools/hcs2/DeleteEntryTool.d.ts +2 -2
  146. package/dist/es/tools/hcs2/UpdateEntryTool.d.ts +2 -2
  147. package/dist/es/tools/hcs6/RegisterDynamicHashinalTool.d.ts +10 -10
  148. package/dist/es/tools/hcs6/UpdateDynamicHashinalTool.d.ts +8 -8
  149. package/dist/es/tools/inscriber/InscribeFromBufferTool.d.ts +5 -4
  150. package/dist/es/tools/inscriber/InscribeFromFileTool.d.ts +2 -2
  151. package/dist/es/tools/inscriber/InscribeFromUrlTool.d.ts +4 -4
  152. package/dist/es/tools/inscriber/InscribeHashinalTool.d.ts +3 -3
  153. package/dist/es/types/inscription-response.d.ts +8 -0
  154. package/dist/es/types/tx-results.d.ts +15 -0
  155. package/dist/es/utils/CodedError.d.ts +4 -0
  156. package/dist/es/utils/inscription-utils.d.ts +21 -0
  157. package/dist/es/validation/hip412-schemas.d.ts +2 -2
  158. package/dist/umd/builders/hcs10/hcs10-builder.d.ts +1 -0
  159. package/dist/umd/builders/hcs2/hcs2-builder.d.ts +8 -7
  160. package/dist/umd/builders/hcs6/hcs6-builder.d.ts +5 -4
  161. package/dist/umd/builders/inscriber/inscriber-builder.d.ts +32 -1
  162. package/dist/umd/index.d.ts +4 -0
  163. package/dist/umd/signing/bytes-registry.d.ts +17 -0
  164. package/dist/umd/signing/signer-provider.d.ts +45 -0
  165. package/dist/umd/standards-agent-kit.umd.js +1 -1
  166. package/dist/umd/standards-agent-kit.umd.js.map +1 -1
  167. package/dist/umd/tools/hcs10/InitiateConnectionTool.d.ts +4 -4
  168. package/dist/umd/tools/hcs2/CreateRegistryTool.d.ts +2 -2
  169. package/dist/umd/tools/hcs2/DeleteEntryTool.d.ts +2 -2
  170. package/dist/umd/tools/hcs2/UpdateEntryTool.d.ts +2 -2
  171. package/dist/umd/tools/hcs6/RegisterDynamicHashinalTool.d.ts +10 -10
  172. package/dist/umd/tools/hcs6/UpdateDynamicHashinalTool.d.ts +8 -8
  173. package/dist/umd/tools/inscriber/InscribeFromBufferTool.d.ts +5 -4
  174. package/dist/umd/tools/inscriber/InscribeFromFileTool.d.ts +2 -2
  175. package/dist/umd/tools/inscriber/InscribeFromUrlTool.d.ts +4 -4
  176. package/dist/umd/tools/inscriber/InscribeHashinalTool.d.ts +3 -3
  177. package/dist/umd/types/inscription-response.d.ts +8 -0
  178. package/dist/umd/types/tx-results.d.ts +15 -0
  179. package/dist/umd/utils/CodedError.d.ts +4 -0
  180. package/dist/umd/utils/inscription-utils.d.ts +21 -0
  181. package/dist/umd/validation/hip412-schemas.d.ts +2 -2
  182. package/package.json +10 -5
  183. package/src/builders/hcs10/hcs10-builder.ts +239 -6
  184. package/src/builders/hcs2/hcs2-builder.ts +302 -9
  185. package/src/builders/hcs6/hcs6-builder.ts +79 -4
  186. package/src/builders/inscriber/inscriber-builder.ts +235 -2
  187. package/src/hcs10/HCS10Client.ts +1 -1
  188. package/src/index.ts +5 -1
  189. package/src/lib/zod-render/schema-extension.ts +0 -1
  190. package/src/signing/bytes-registry.ts +501 -0
  191. package/src/signing/signer-provider.ts +120 -0
  192. package/src/tools/hcs2/CreateRegistryTool.ts +30 -5
  193. package/src/tools/hcs2/DeleteEntryTool.ts +16 -2
  194. package/src/tools/hcs2/MigrateRegistryTool.ts +16 -2
  195. package/src/tools/hcs2/QueryRegistryTool.ts +11 -2
  196. package/src/tools/hcs2/RegisterEntryTool.ts +17 -3
  197. package/src/tools/hcs2/UpdateEntryTool.ts +16 -2
  198. package/src/tools/hcs6/CreateDynamicRegistryTool.ts +17 -3
  199. package/src/tools/hcs6/RegisterDynamicHashinalTool.ts +17 -3
  200. package/src/tools/hcs6/UpdateDynamicHashinalTool.ts +17 -3
  201. package/src/tools/inscriber/InscribeFromBufferTool.ts +126 -21
  202. package/src/tools/inscriber/InscribeFromFileTool.ts +10 -13
  203. package/src/tools/inscriber/InscribeFromUrlTool.ts +15 -11
  204. package/src/tools/inscriber/InscribeHashinalTool.ts +40 -168
  205. package/src/tools/inscriber/RetrieveInscriptionTool.ts +15 -16
  206. package/src/types/inscription-response.ts +27 -0
  207. package/src/types/tx-results.ts +18 -0
  208. package/src/utils/CodedError.ts +8 -0
  209. package/src/utils/Encryption.ts +0 -2
  210. package/src/utils/ensure-agent-has-hbar.ts +4 -5
  211. package/src/utils/inscription-utils.ts +53 -0
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es5.js","sources":["../../src/builders/hcs6/hcs6-builder.ts"],"sourcesContent":["import { BaseServiceBuilder } from 'hedera-agent-kit';\nimport type { HederaAgentKit } from 'hedera-agent-kit';\nimport {\n HCS6Client,\n SDKHCS6ClientConfig,\n HCS6CreateRegistryOptions,\n HCS6RegisterEntryOptions,\n HCS6QueryRegistryOptions,\n HCS6RegisterOptions,\n HCS6CreateHashinalOptions,\n HCS6TopicRegistrationResponse,\n HCS6RegistryOperationResponse,\n HCS6TopicRegistry,\n HCS6CreateHashinalResponse,\n NetworkType,\n} from '@hashgraphonline/standards-sdk';\n\n/**\n * Builder for HCS-6 operations that delegates to HCS6Client\n */\nexport class HCS6Builder extends BaseServiceBuilder {\n protected hcs6Client?: HCS6Client;\n\n constructor(hederaKit: HederaAgentKit) {\n super(hederaKit);\n }\n\n /**\n * Get or create HCS-6 client\n */\n protected async getHCS6Client(): Promise<HCS6Client> {\n if (!this.hcs6Client) {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toString()\n : '';\n\n const network = this.hederaKit.client.network;\n const networkType: NetworkType = network.toString().includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n const config: SDKHCS6ClientConfig = {\n network: networkType,\n operatorId: operatorId,\n operatorKey: operatorPrivateKey,\n };\n\n this.hcs6Client = new HCS6Client(config);\n }\n return this.hcs6Client;\n }\n\n /**\n * Create a new HCS-6 dynamic registry\n * Note: This executes the transaction directly via HCS6Client\n */\n async createRegistry(\n options: HCS6CreateRegistryOptions = {}\n ): Promise<HCS6TopicRegistrationResponse> {\n const client = await this.getHCS6Client();\n const sanitized = { ...options };\n if ('adminKey' in sanitized) {\n delete (sanitized as any).adminKey;\n }\n return await client.createRegistry(sanitized);\n }\n\n /**\n * Register a new dynamic hashinal entry in an HCS-6 registry\n */\n async registerEntry(\n registryTopicId: string,\n options: HCS6RegisterEntryOptions\n ): Promise<HCS6RegistryOperationResponse> {\n const client = await this.getHCS6Client();\n return await client.registerEntry(registryTopicId, options);\n }\n\n /**\n * Query entries from an HCS-6 registry\n */\n async getRegistry(\n topicId: string,\n options: HCS6QueryRegistryOptions = {}\n ): Promise<HCS6TopicRegistry> {\n const client = await this.getHCS6Client();\n return await client.getRegistry(topicId, options);\n }\n\n /**\n * Create a complete dynamic hashinal with inscription and registry\n */\n async createHashinal(\n options: HCS6CreateHashinalOptions\n ): Promise<HCS6CreateHashinalResponse> {\n const client = await this.getHCS6Client();\n const metadata = {\n name: options.metadata?.name || 'Dynamic Hashinal',\n creator:\n options.metadata?.creator || this.hederaKit.signer.getAccountId().toString(),\n description: options.metadata?.description || 'Dynamic hashinal metadata',\n type: options.metadata?.type || 'json',\n ...options.metadata,\n } as Record<string, unknown>;\n\n return await client.createHashinal({\n ...options,\n metadata,\n });\n }\n\n /**\n * Register a dynamic hashinal with combined inscription and registry creation\n * This is the main method for creating and updating dynamic hashinals\n */\n async register(\n options: HCS6RegisterOptions\n ): Promise<HCS6CreateHashinalResponse> {\n const client = await this.getHCS6Client();\n const metadata = {\n name: options.metadata?.name || 'Dynamic Hashinal',\n creator:\n options.metadata?.creator || this.hederaKit.signer.getAccountId().toString(),\n description:\n options.metadata?.description || 'Dynamic hashinal registration',\n type: options.metadata?.type || 'json',\n ...options.metadata,\n } as Record<string, unknown>;\n\n return await client.register({\n ...options,\n metadata,\n });\n }\n\n /**\n * Submit a raw message to an HCS-6 topic\n */\n async submitMessage(\n topicId: string,\n payload: any\n ): Promise<any> {\n const client = await this.getHCS6Client();\n return await client.submitMessage(topicId, payload);\n }\n\n /**\n * Get topic info from mirror node\n */\n async getTopicInfo(topicId: string): Promise<any> {\n const client = await this.getHCS6Client();\n return await client.getTopicInfo(topicId);\n }\n\n /**\n * Close the HCS-6 client\n */\n async close(): Promise<void> {\n if (this.hcs6Client) {\n this.hcs6Client.close();\n this.hcs6Client = undefined;\n }\n }\n}"],"names":[],"mappings":";;AAoBO,MAAM,oBAAoB,mBAAmB;AAAA,EAGlD,YAAY,WAA2B;AACrC,UAAM,SAAS;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,gBAAqC;AACnD,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,aAAa,KAAK,UAAU,OAAO,aAAA,EAAe,SAAA;AACxD,YAAM,qBAAqB,KAAK,UAAU,QAAQ,sBAAA,IAC9C,KAAK,UAAU,OAAO,wBAAwB,SAAA,IAC9C;AAEJ,YAAM,UAAU,KAAK,UAAU,OAAO;AACtC,YAAM,cAA2B,QAAQ,SAAA,EAAW,SAAS,SAAS,IAClE,YACA;AAEJ,YAAM,SAA8B;AAAA,QAClC,SAAS;AAAA,QACT;AAAA,QACA,aAAa;AAAA,MAAA;AAGf,WAAK,aAAa,IAAI,WAAW,MAAM;AAAA,IACzC;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eACJ,UAAqC,IACG;AACxC,UAAM,SAAS,MAAM,KAAK,cAAA;AAC1B,UAAM,YAAY,EAAE,GAAG,QAAA;AACvB,QAAI,cAAc,WAAW;AAC3B,aAAQ,UAAkB;AAAA,IAC5B;AACA,WAAO,MAAM,OAAO,eAAe,SAAS;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cACJ,iBACA,SACwC;AACxC,UAAM,SAAS,MAAM,KAAK,cAAA;AAC1B,WAAO,MAAM,OAAO,cAAc,iBAAiB,OAAO;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YACJ,SACA,UAAoC,IACR;AAC5B,UAAM,SAAS,MAAM,KAAK,cAAA;AAC1B,WAAO,MAAM,OAAO,YAAY,SAAS,OAAO;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eACJ,SACqC;AACrC,UAAM,SAAS,MAAM,KAAK,cAAA;AAC1B,UAAM,WAAW;AAAA,MACf,MAAM,QAAQ,UAAU,QAAQ;AAAA,MAChC,SACE,QAAQ,UAAU,WAAW,KAAK,UAAU,OAAO,aAAA,EAAe,SAAA;AAAA,MACpE,aAAa,QAAQ,UAAU,eAAe;AAAA,MAC9C,MAAM,QAAQ,UAAU,QAAQ;AAAA,MAChC,GAAG,QAAQ;AAAA,IAAA;AAGb,WAAO,MAAM,OAAO,eAAe;AAAA,MACjC,GAAG;AAAA,MACH;AAAA,IAAA,CACD;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SACJ,SACqC;AACrC,UAAM,SAAS,MAAM,KAAK,cAAA;AAC1B,UAAM,WAAW;AAAA,MACf,MAAM,QAAQ,UAAU,QAAQ;AAAA,MAChC,SACE,QAAQ,UAAU,WAAW,KAAK,UAAU,OAAO,aAAA,EAAe,SAAA;AAAA,MACpE,aACE,QAAQ,UAAU,eAAe;AAAA,MACnC,MAAM,QAAQ,UAAU,QAAQ;AAAA,MAChC,GAAG,QAAQ;AAAA,IAAA;AAGb,WAAO,MAAM,OAAO,SAAS;AAAA,MAC3B,GAAG;AAAA,MACH;AAAA,IAAA,CACD;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cACJ,SACA,SACc;AACd,UAAM,SAAS,MAAM,KAAK,cAAA;AAC1B,WAAO,MAAM,OAAO,cAAc,SAAS,OAAO;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,SAA+B;AAChD,UAAM,SAAS,MAAM,KAAK,cAAA;AAC1B,WAAO,MAAM,OAAO,aAAa,OAAO;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAuB;AAC3B,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,MAAA;AAChB,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"standards-agent-kit.es5.js","sources":["../../src/builders/hcs10/hcs10-builder.ts"],"sourcesContent":["import { BaseServiceBuilder } from 'hedera-agent-kit';\nimport type { HederaAgentKit } from 'hedera-agent-kit';\nimport { PrivateKey, TransactionReceipt } from '@hashgraph/sdk';\nimport { SignerProviderRegistry, type DAppSigner, type NetworkString } from '../../signing/signer-provider';\nimport { ActiveConnection, IStateManager } from '../../state/state-types';\nimport { ExecuteResult } from '../types';\nimport {\n FeeConfigBuilderInterface,\n FeeConfigBuilder,\n HCS10Client,\n AgentBuilder,\n InboundTopicType as StandardInboundTopicType,\n AIAgentCapability as StandardAIAgentCapability,\n AgentRegistrationResult,\n ProfileResponse as SDKProfileResponse,\n HCSMessage,\n LogLevel,\n Logger as SDKLogger,\n SocialPlatform,\n HandleConnectionRequestResponse,\n Connection,\n} from '@hashgraphonline/standards-sdk';\nimport fs from 'fs';\nimport path from 'path';\nimport axios from 'axios';\n\nconst NOT_INITIALIZED_ERROR = 'ConnectionsManager not initialized';\n\n/**\n * Internal agent data for registration\n */\ninterface AgentRegistrationData {\n name: string;\n bio?: string;\n alias?: string;\n type?: 'autonomous' | 'manual';\n model?: string;\n capabilities?: number[];\n creator?: string;\n socials?: Record<string, string>;\n properties?: Record<string, unknown>;\n pfpBuffer?: Buffer;\n pfpFileName?: string;\n existingProfilePictureTopicId?: string;\n feeConfig?: FeeConfigBuilderInterface;\n}\n\n/**\n * Message response with timestamp\n */\nexport interface HCSMessageWithTimestamp extends Omit<HCSMessage, 'op'> {\n timestamp: number;\n data?: string;\n sequence_number: number;\n op?: HCSMessage['op'] | string;\n operator_id?: string;\n created?: Date;\n m?: string;\n}\n\n/**\n * Network type for HCS-10\n */\nexport type StandardNetworkType = 'mainnet' | 'testnet';\n\n/**\n * Parameters for agent registration\n */\nexport interface RegisterAgentParams {\n name: string;\n bio?: string;\n alias?: string;\n type?: 'autonomous' | 'manual';\n model?: string;\n capabilities?: number[];\n creator?: string;\n socials?: Record<string, string>;\n properties?: Record<string, unknown>;\n profilePicture?:\n | string\n | {\n url?: string;\n path?: string;\n filename?: string;\n };\n existingProfilePictureTopicId?: string;\n initialBalance?: number;\n userAccountId?: string;\n hbarFee?: number;\n tokenFees?: Array<{\n amount: number;\n tokenId: string;\n }>;\n exemptAccountIds?: string[];\n}\n\n/**\n * Parameters for initiating a connection\n */\nexport interface InitiateConnectionParams {\n targetAccountId: string;\n disableMonitor?: boolean;\n memo?: string;\n}\n\n/**\n * Parameters for accepting a connection request\n */\nexport interface AcceptConnectionParams {\n requestKey: string;\n hbarFee?: number | undefined;\n exemptAccountIds?: string[] | undefined;\n}\n\n/**\n * Parameters for sending a message\n */\nexport interface SendMessageParams {\n topicId: string;\n message: string;\n disableMonitoring?: boolean;\n}\n\n/**\n * Parameters for sending a message to a connected account\n */\nexport interface SendMessageToConnectionParams {\n targetIdentifier: string;\n message: string;\n disableMonitoring?: boolean;\n}\n\n/**\n * HCS10Builder facilitates HCS-10 protocol operations for agent communication\n * This builder incorporates all HCS10Client functionality directly\n */\nexport class HCS10Builder extends BaseServiceBuilder {\n private standardClient: HCS10Client;\n private stateManager: IStateManager | undefined;\n private executeResult?: ExecuteResult & { rawResult?: unknown };\n private network: StandardNetworkType;\n private sdkLogger: SDKLogger;\n\n constructor(\n hederaKit: HederaAgentKit,\n stateManager?: IStateManager,\n options?: {\n useEncryption?: boolean;\n registryUrl?: string;\n logLevel?: LogLevel;\n }\n ) {\n super(hederaKit);\n\n this.stateManager = stateManager;\n\n const network = this.hederaKit.client.network;\n this.network = network.toString().includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n this.sdkLogger = ((): SDKLogger => {\n try {\n if (typeof SDKLogger === 'function') {\n return new SDKLogger({\n module: 'HCS10Builder',\n level: options?.logLevel || 'info',\n });\n }\n } catch {}\n return {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n trace: () => {},\n setLogLevel: () => {},\n getLevel: () => 'info',\n setSilent: () => {},\n setModule: () => {},\n } as unknown as SDKLogger;\n })();\n\n this.standardClient = new HCS10Client({\n network: this.network,\n operatorId: operatorId,\n operatorPrivateKey: operatorPrivateKey,\n logLevel: options?.logLevel || 'info',\n });\n\n if (this.stateManager) {\n this.stateManager.initializeConnectionsManager(this.standardClient);\n }\n }\n\n /**\n * Get the operator account ID\n */\n public getOperatorId(): string {\n const operator = this.standardClient.getClient().operatorAccountId;\n if (!operator) {\n throw new Error('Operator Account ID not configured in standard client.');\n }\n return operator.toString();\n }\n\n /**\n * Get the network type\n */\n public getNetwork(): StandardNetworkType {\n return this.network;\n }\n\n /**\n * Get state manager instance\n */\n public getStateManager(): IStateManager | undefined {\n return this.stateManager;\n }\n\n /**\n * Get account and signer information\n */\n public getAccountAndSigner(): { accountId: string; signer: PrivateKey } {\n const result = this.standardClient.getAccountAndSigner();\n return {\n accountId: result.accountId,\n signer: result.signer as unknown as PrivateKey,\n };\n }\n\n /**\n * Get the inbound topic ID for the current operator\n */\n public async getInboundTopicId(): Promise<string> {\n try {\n const operatorId = this.getOperatorId();\n this.logger.info(\n `[HCS10Builder] Retrieving profile for operator ${operatorId} to find inbound topic...`\n );\n const profileResponse = await this.getAgentProfile(operatorId);\n if (profileResponse.success && profileResponse.topicInfo?.inboundTopic) {\n this.logger.info(\n `[HCS10Builder] Found inbound topic for operator ${operatorId}: ${profileResponse.topicInfo.inboundTopic}`\n );\n return profileResponse.topicInfo.inboundTopic;\n } else {\n throw new Error(\n `Could not retrieve inbound topic from profile for ${operatorId}. Profile success: ${profileResponse.success}, Error: ${profileResponse.error}`\n );\n }\n } catch (error) {\n this.logger.error(\n `[HCS10Builder] Error fetching operator's inbound topic ID (${this.getOperatorId()}):`,\n error\n );\n const operatorId = this.getOperatorId();\n let detailedMessage = `Failed to get inbound topic ID for operator ${operatorId}.`;\n if (\n error instanceof Error &&\n error.message.includes('does not have a valid HCS-11 memo')\n ) {\n detailedMessage += ` The account profile may not exist or is invalid. Please ensure this operator account (${operatorId}) is registered as an HCS-10 agent. You might need to register it first (e.g., using the 'register_agent' tool or SDK function).`;\n } else if (error instanceof Error) {\n detailedMessage += ` Reason: ${error.message}`;\n } else {\n detailedMessage += ` Unexpected error: ${String(error)}`;\n }\n throw new Error(detailedMessage);\n }\n }\n\n /**\n * Get agent profile\n */\n public async getAgentProfile(accountId: string): Promise<SDKProfileResponse> {\n try {\n return await this.standardClient.retrieveProfile(accountId);\n } catch (error) {\n this.logger.error(\n `[HCS10Builder] Error retrieving agent profile for account ${accountId}:`,\n error\n );\n throw error;\n }\n }\n\n /**\n * Submit connection request\n */\n public async submitConnectionRequest(\n inboundTopicId: string,\n memo: string\n ): Promise<TransactionReceipt> {\n const start = SignerProviderRegistry.startHCSDelegate;\n const exec = SignerProviderRegistry.walletExecutor;\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const network: NetworkString = this.network;\n\n try {\n const { ByteBuildRegistry } = await import('../../signing/bytes-registry');\n if (exec && ByteBuildRegistry.has('submitConnectionRequest')) {\n const built = await ByteBuildRegistry.build('submitConnectionRequest', this.hederaKit, { inboundTopicId, memo });\n if (built && built.transactionBytes) {\n const { transactionId } = await exec(built.transactionBytes, network);\n return ({ transactionId } as unknown) as TransactionReceipt;\n }\n }\n } catch {}\n\n if (start && exec) {\n try {\n const request: Record<string, unknown> = { inboundTopicId, memo };\n const { transactionBytes } = await start('submitConnectionRequest', request, network);\n const { transactionId } = await exec(transactionBytes, network);\n return ({ transactionId } as unknown) as TransactionReceipt;\n } catch (err) {\n if (preferWallet) {\n const e = new Error(`wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`);\n (e as unknown as { code: string }).code = 'wallet_submit_failed';\n throw e;\n }\n }\n } else if (preferWallet) {\n const e = new Error('wallet_unavailable: connect a wallet or configure StartHCSDelegate and WalletExecutor');\n (e as unknown as { code: string }).code = 'wallet_unavailable';\n throw e;\n }\n\n return this.standardClient.submitConnectionRequest(\n inboundTopicId,\n memo\n ) as Promise<TransactionReceipt>;\n }\n\n /**\n * Handle connection request\n */\n public async handleConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n connectionRequestId: number,\n feeConfig?: FeeConfigBuilderInterface\n ): Promise<HandleConnectionRequestResponse> {\n try {\n const start = SignerProviderRegistry.startHCSDelegate;\n const exec = SignerProviderRegistry.walletExecutor;\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const network: NetworkString = this.network;\n\n if (start && exec) {\n try {\n const request: Record<string, unknown> = {\n inboundTopicId,\n requestingAccountId,\n connectionRequestId,\n feeConfig: feeConfig ? 'configured' : undefined,\n };\n const { transactionBytes } = await start('handleConnectionRequest', request, network);\n const { transactionId } = await exec(transactionBytes, network);\n const minimal = {\n success: true,\n transactionId,\n } as unknown as HandleConnectionRequestResponse;\n return minimal;\n } catch (err) {\n if (preferWallet) {\n const e = new Error(`wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`);\n (e as unknown as { code: string }).code = 'wallet_submit_failed';\n throw e;\n }\n }\n } else if (preferWallet) {\n const e = new Error('wallet_unavailable: connect a wallet or configure StartHCSDelegate and WalletExecutor');\n (e as unknown as { code: string }).code = 'wallet_unavailable';\n throw e;\n }\n\n const result = await this.standardClient.handleConnectionRequest(\n inboundTopicId,\n requestingAccountId,\n connectionRequestId,\n feeConfig\n );\n\n if (\n result &&\n result.connectionTopicId &&\n typeof result.connectionTopicId === 'object' &&\n 'toString' in result.connectionTopicId\n ) {\n result.connectionTopicId = (\n result.connectionTopicId as { toString(): string }\n ).toString();\n }\n\n return result;\n } catch (error) {\n this.logger.error(\n `Error handling connection request #${connectionRequestId} for topic ${inboundTopicId}:`,\n error\n );\n throw new Error(\n `Failed to handle connection request: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Send message to a topic\n */\n public async sendMessage(\n topicId: string,\n data: string,\n memo?: string\n ): Promise<{\n sequenceNumber: number | undefined;\n receipt: TransactionReceipt;\n transactionId: string | undefined;\n }> {\n if (topicId && typeof topicId === 'object' && 'toString' in topicId) {\n topicId = (topicId as unknown as { toString: () => string })?.toString();\n }\n\n if (!topicId || typeof topicId !== 'string') {\n throw new Error(\n `Invalid topic ID provided to sendMessage: ${JSON.stringify(topicId)}`\n );\n }\n\n try {\n let prevMaxSeq = 0\n try {\n const prev = await this.getMessages(topicId)\n prevMaxSeq = prev.messages.reduce((max, m) => Math.max(max, m.sequence_number || 0), 0)\n } catch {}\n\n const start = SignerProviderRegistry.startHCSDelegate;\n const exec = SignerProviderRegistry.walletExecutor;\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const network: NetworkString = this.network;\n\n try {\n const { ByteBuildRegistry } = await import('../../signing/bytes-registry');\n if (exec && ByteBuildRegistry.has('sendMessage')) {\n const built = await ByteBuildRegistry.build('sendMessage', this.hederaKit, { topicId, data, memo });\n if (built && built.transactionBytes) {\n const { transactionId } = await exec(built.transactionBytes, network);\n const sequenceNumber = await this.pollForNewSequence(topicId, prevMaxSeq);\n return {\n sequenceNumber,\n receipt: ({ transactionId } as unknown) as TransactionReceipt,\n transactionId,\n };\n }\n }\n } catch {}\n\n if (start && exec) {\n try {\n const request: Record<string, unknown> = { topicId, data, memo };\n const { transactionBytes } = await start('sendMessage', request, network);\n const { transactionId } = await exec(transactionBytes, network);\n\n const sequenceNumber = await this.pollForNewSequence(topicId, prevMaxSeq);\n return {\n sequenceNumber,\n receipt: ({ transactionId } as unknown) as TransactionReceipt,\n transactionId,\n };\n } catch (err) {\n if (preferWallet) {\n const e = new Error(`wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`);\n (e as unknown as { code: string }).code = 'wallet_submit_failed';\n throw e;\n }\n }\n } else if (preferWallet) {\n const e = new Error('wallet_unavailable: connect a wallet or configure StartHCSDelegate and WalletExecutor');\n (e as unknown as { code: string }).code = 'wallet_unavailable';\n throw e;\n }\n\n const messageResponse = await this.standardClient.sendMessage(\n topicId,\n data,\n memo,\n undefined\n );\n return {\n sequenceNumber: messageResponse.topicSequenceNumber?.toNumber(),\n receipt: messageResponse as unknown as TransactionReceipt,\n transactionId:\n 'transactionId' in messageResponse\n ? (\n messageResponse as { transactionId?: { toString(): string } }\n ).transactionId?.toString()\n : undefined,\n };\n } catch (error) {\n this.logger.error(`Error sending message to topic ${topicId}:`, error);\n throw new Error(\n `Failed to send message: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Get messages from a topic\n */\n public async getMessages(topicId: string): Promise<{\n messages: HCSMessageWithTimestamp[];\n }> {\n if (topicId && typeof topicId === 'object' && 'toString' in topicId) {\n topicId = (topicId as unknown as { toString: () => string })?.toString();\n }\n\n if (!topicId || typeof topicId !== 'string') {\n throw new Error(\n `Invalid topic ID provided to getMessages: ${JSON.stringify(topicId)}`\n );\n }\n\n try {\n const result = await this.standardClient.getMessages(topicId);\n\n const mappedMessages: HCSMessageWithTimestamp[] = result.messages.map(\n (sdkMessage) => {\n const timestamp = sdkMessage?.created?.getTime() || 0;\n\n return {\n ...sdkMessage,\n timestamp: timestamp,\n data: sdkMessage.data || '',\n sequence_number: sdkMessage.sequence_number,\n p: 'hcs-10' as const,\n } as HCSMessageWithTimestamp;\n }\n );\n mappedMessages.sort(\n (a: { timestamp: number }, b: { timestamp: number }) =>\n a.timestamp - b.timestamp\n );\n return { messages: mappedMessages };\n } catch (error) {\n this.logger.error(`Error getting messages from topic ${topicId}:`, error);\n return { messages: [] };\n }\n }\n\n /**\n * Get message stream from a topic\n */\n public async getMessageStream(topicId: string): Promise<{\n messages: HCSMessage[];\n }> {\n if (topicId && typeof topicId === 'object' && 'toString' in topicId) {\n topicId = (topicId as unknown as { toString: () => string })?.toString();\n }\n\n if (!topicId || typeof topicId !== 'string') {\n throw new Error(\n `Invalid topic ID provided to getMessageStream: ${JSON.stringify(\n topicId\n )}`\n );\n }\n\n return this.standardClient.getMessageStream(topicId) as Promise<{\n messages: HCSMessage[];\n }>;\n }\n\n /**\n * Get message content\n */\n public async getMessageContent(inscriptionIdOrData: string): Promise<string> {\n try {\n const content = await this.standardClient.getMessageContent(\n inscriptionIdOrData\n );\n return content as string;\n } catch (error) {\n this.logger.error(\n `Error retrieving message content for: ${inscriptionIdOrData}`,\n error\n );\n throw new Error(\n `Failed to retrieve message content: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Get the standard client instance (for compatibility)\n */\n public getStandardClient(): HCS10Client {\n return this.standardClient;\n }\n\n /**\n * Load profile picture from URL or file path\n */\n private async loadProfilePicture(\n profilePicture: string | { url?: string; path?: string; filename?: string }\n ): Promise<{ buffer: Buffer; filename: string } | null> {\n try {\n if (!profilePicture) {\n return null;\n }\n\n if (typeof profilePicture === 'string') {\n const isUrl =\n profilePicture.startsWith('http://') ||\n profilePicture.startsWith('https://');\n\n if (isUrl) {\n this.logger.info(\n `Loading profile picture from URL: ${profilePicture}`\n );\n const response = await axios.get(profilePicture, {\n responseType: 'arraybuffer',\n });\n const buffer = Buffer.from(response.data);\n const urlPathname = new URL(profilePicture).pathname;\n const filename = path.basename(urlPathname) || 'profile.png';\n return { buffer, filename };\n } else {\n if (!fs.existsSync(profilePicture)) {\n this.logger.warn(\n `Profile picture file not found: ${profilePicture}`\n );\n return null;\n }\n this.logger.info(\n `Loading profile picture from file: ${profilePicture}`\n );\n const buffer = fs.readFileSync(profilePicture);\n const filename = path.basename(profilePicture);\n return { buffer, filename };\n }\n } else if (profilePicture.url) {\n this.logger.info(\n `Loading profile picture from URL: ${profilePicture.url}`\n );\n const response = await axios.get(profilePicture.url, {\n responseType: 'arraybuffer',\n });\n const buffer = Buffer.from(response.data);\n const filename = profilePicture.filename || 'profile.png';\n return { buffer, filename };\n } else if (profilePicture.path) {\n if (!fs.existsSync(profilePicture.path)) {\n this.logger.warn(\n `Profile picture file not found: ${profilePicture.path}`\n );\n return null;\n }\n this.logger.info(\n `Loading profile picture from file: ${profilePicture.path}`\n );\n const buffer = fs.readFileSync(profilePicture.path);\n const filename =\n profilePicture.filename || path.basename(profilePicture.path);\n return { buffer, filename };\n }\n\n return null;\n } catch (error) {\n this.logger.error('Failed to load profile picture:', error);\n return null;\n }\n }\n\n private async pollForNewSequence(topicId: string, prevMax: number): Promise<number | undefined> {\n const maxAttempts = 10\n const delayMs = 1000\n for (let i = 0; i < maxAttempts; i++) {\n try {\n const res = await this.getMessages(topicId)\n const maxSeq = res.messages.reduce((m, msg) => Math.max(m, msg.sequence_number || 0), prevMax)\n if (maxSeq > prevMax) return maxSeq\n } catch {}\n await new Promise((r) => setTimeout(r, delayMs))\n }\n return undefined\n }\n\n /**\n * Create and register an agent\n */\n private async createAndRegisterAgent(\n data: AgentRegistrationData\n ): Promise<AgentRegistrationResult> {\n const builder = new AgentBuilder()\n .setName(data.name)\n .setBio(data.bio || '')\n .setCapabilities(\n data.capabilities || [StandardAIAgentCapability.TEXT_GENERATION]\n )\n .setType(data.type || 'autonomous')\n .setModel(data.model || 'agent-model-2024')\n .setNetwork(this.getNetwork())\n .setInboundTopicType(StandardInboundTopicType.PUBLIC);\n\n if (data.alias) {\n builder.setAlias(data.alias);\n }\n\n if (data.creator) {\n builder.setCreator(data.creator);\n }\n\n if (data?.feeConfig) {\n builder.setInboundTopicType(StandardInboundTopicType.FEE_BASED);\n builder.setFeeConfig(data.feeConfig);\n }\n\n if (data.existingProfilePictureTopicId) {\n builder.setExistingProfilePicture(data.existingProfilePictureTopicId);\n } else if (data.pfpBuffer && data.pfpFileName) {\n if (data.pfpBuffer.byteLength === 0) {\n this.logger.warn(\n 'Provided PFP buffer is empty. Skipping profile picture.'\n );\n } else {\n this.logger.info(\n `Setting profile picture: ${data.pfpFileName} (${data.pfpBuffer.byteLength} bytes)`\n );\n builder.setProfilePicture(data.pfpBuffer, data.pfpFileName);\n }\n } else {\n this.logger.warn(\n 'Profile picture not provided. Agent creation might fail if required by the underlying SDK builder.'\n );\n }\n\n if (data.socials) {\n Object.entries(data.socials).forEach(([platform, handle]) => {\n builder.addSocial(platform as SocialPlatform, handle);\n });\n }\n\n if (data.properties) {\n Object.entries(data.properties).forEach(([key, value]) => {\n builder.addProperty(key, value);\n });\n }\n\n try {\n const hasFees = Boolean(data?.feeConfig);\n const result = await this.standardClient.createAndRegisterAgent(builder, {\n initialBalance: hasFees ? 50 : 10,\n });\n return result;\n } catch (error) {\n this.logger.error('Error during agent creation/registration:', error);\n throw new Error(\n `Failed to create/register agent: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Register a new HCS-10 agent\n * Note: This performs multiple transactions and requires directExecution mode\n */\n public async registerAgent(params: RegisterAgentParams): Promise<this> {\n this.clearNotes();\n\n if (this.hederaKit.operationalMode === 'returnBytes') {\n throw new Error(\n 'Agent registration requires multiple transactions and cannot be performed in returnBytes mode. ' +\n 'Please use autonomous mode.'\n );\n }\n\n try {\n let profilePictureData: { buffer: Buffer; filename: string } | null =\n null;\n if (params.profilePicture) {\n profilePictureData = await this.loadProfilePicture(\n params.profilePicture\n );\n }\n\n const registrationData: AgentRegistrationData = {\n name: params.name,\n ...(params.bio !== undefined && { bio: params.bio }),\n ...(params.alias !== undefined && { alias: params.alias }),\n ...(params.type !== undefined && { type: params.type }),\n ...(params.model !== undefined && { model: params.model }),\n ...(params.capabilities !== undefined && {\n capabilities: params.capabilities,\n }),\n ...(params.creator !== undefined && { creator: params.creator }),\n ...(params.socials !== undefined && { socials: params.socials }),\n ...(params.properties !== undefined && {\n properties: params.properties,\n }),\n ...(params.existingProfilePictureTopicId !== undefined && {\n existingProfilePictureTopicId: params.existingProfilePictureTopicId,\n }),\n ...(profilePictureData?.buffer !== undefined && {\n pfpBuffer: profilePictureData.buffer,\n }),\n ...(profilePictureData?.filename !== undefined && {\n pfpFileName: profilePictureData.filename,\n }),\n };\n\n if (params.hbarFee && params.hbarFee > 0) {\n const feeConfigBuilder = new FeeConfigBuilder({\n network: this.network,\n logger: this.sdkLogger,\n });\n\n const { accountId: collectorAccountId } = this.getAccountAndSigner();\n if (!collectorAccountId) {\n throw new Error('Could not determine account ID for fee collection.');\n }\n this.addNote(\n `Setting the operator account (${collectorAccountId}) as the fee collector since no specific collector was provided.`\n );\n\n const effectiveExemptIds =\n params.exemptAccountIds?.filter(\n (id: string) => id !== collectorAccountId && id.startsWith('0.0')\n ) || [];\n\n registrationData.feeConfig = feeConfigBuilder.addHbarFee(\n params.hbarFee,\n collectorAccountId,\n effectiveExemptIds\n );\n }\n\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const browserClient = SignerProviderRegistry.getBrowserHCSClient(this.network as NetworkString) as\n | { create: (builder: unknown, opts?: Record<string, unknown>) => Promise<unknown> }\n | null;\n\n if (browserClient) {\n try {\n const aBuilder = new AgentBuilder()\n .setNetwork(this.network)\n .setName(registrationData.name)\n .setAlias(registrationData.alias || `${registrationData.name}-${Date.now()}`)\n .setBio(registrationData.bio || '')\n .setType(registrationData.type || 'autonomous')\n .setModel(registrationData.model || 'agent-model-2024');\n\n if (registrationData.capabilities?.length) {\n aBuilder.setCapabilities(registrationData.capabilities as unknown as number[]);\n }\n if (registrationData.creator) aBuilder.setCreator(registrationData.creator);\n if (registrationData.existingProfilePictureTopicId) {\n aBuilder.setExistingProfilePicture(registrationData.existingProfilePictureTopicId);\n }\n if (registrationData.socials) {\n Object.entries(registrationData.socials).forEach(([platform, handle]) => {\n if (handle && typeof handle === 'string') {\n aBuilder.addSocial(platform as SocialPlatform, handle);\n }\n });\n }\n if (registrationData.properties) {\n Object.entries(registrationData.properties).forEach(([key, value]) => {\n if (value != null) aBuilder.addProperty(key, value as unknown as string);\n });\n }\n\n const resp = await browserClient.create(aBuilder, {\n progressCallback: (_: unknown) => {},\n updateAccountMemo: true,\n });\n\n this.executeResult = {\n success: true,\n transactionId: undefined,\n receipt: undefined,\n scheduleId: undefined,\n rawResult: { result: resp, name: registrationData.name },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n\n return this;\n } catch (walletErr) {\n if (preferWallet) {\n throw new Error(`wallet_registration_failed: ${walletErr instanceof Error ? walletErr.message : String(walletErr)}`);\n }\n }\n } else if (preferWallet) {\n throw new Error('wallet_unavailable: BrowserHCSClient factory not provided');\n }\n\n const result = await this.createAndRegisterAgent(registrationData);\n\n this.executeResult = {\n success: true,\n transactionId: result.transactionId,\n receipt: undefined,\n scheduleId: undefined,\n rawResult: {\n ...result,\n name: params.name,\n accountId:\n result?.metadata?.accountId ||\n result.state?.agentMetadata?.accountId,\n },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n } catch (error) {\n this.logger.error('Failed to register agent:', error);\n throw error;\n }\n\n return this;\n }\n\n /**\n * Initiate a connection to another agent\n */\n public async initiateConnection(\n params: InitiateConnectionParams\n ): Promise<this> {\n this.clearNotes();\n\n try {\n const targetProfile = await this.getAgentProfile(params.targetAccountId);\n\n if (!targetProfile.success || !targetProfile.topicInfo?.inboundTopic) {\n throw new Error(\n `Could not retrieve inbound topic for target account ${params.targetAccountId}`\n );\n }\n\n const targetInboundTopicId = targetProfile.topicInfo.inboundTopic;\n let memo: string;\n if (params.memo !== undefined) {\n memo = params.memo;\n } else {\n memo = params.disableMonitor ? 'false' : 'true';\n this.addNote(\n `No custom memo was provided. Using default memo '${memo}' based on monitoring preference.`\n );\n }\n if (!params.disableMonitor) {\n this.addNote(\n `Monitoring will be enabled for this connection request as disableMonitor was not specified.`\n );\n }\n\n const result = await this.submitConnectionRequest(\n targetInboundTopicId,\n memo\n );\n\n this.executeResult = {\n success: true,\n transactionId:\n 'transactionId' in result\n ? (\n result as { transactionId?: { toString(): string } }\n ).transactionId?.toString()\n : undefined,\n receipt: result,\n scheduleId: undefined,\n rawResult: {\n targetAccountId: params.targetAccountId,\n targetInboundTopicId,\n connectionRequestSent: true,\n monitoringEnabled: !params.disableMonitor,\n ...result,\n },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n } catch (error) {\n this.logger.error('Failed to initiate connection:', error);\n throw error;\n }\n\n return this;\n }\n\n /**\n * Accept a connection request\n * Note: This performs multiple transactions and requires directExecution mode\n */\n public async acceptConnection(params: AcceptConnectionParams): Promise<this> {\n this.clearNotes();\n\n if (this.hederaKit.operationalMode === 'returnBytes') {\n throw new Error(\n 'Accepting connections requires multiple transactions and cannot be performed in returnBytes mode. ' +\n 'Please use autonomous mode.'\n );\n }\n\n try {\n const currentAgent = this.stateManager?.getCurrentAgent();\n if (!currentAgent) {\n throw new Error(\n 'Cannot accept connection request. No agent is currently active. Please register or select an agent first.'\n );\n }\n\n const connectionsManager = this.stateManager?.getConnectionsManager();\n if (!connectionsManager) {\n throw new Error(NOT_INITIALIZED_ERROR);\n }\n\n await connectionsManager.fetchConnectionData(currentAgent.accountId);\n\n const allRequests = [\n ...connectionsManager.getPendingRequests(),\n ...connectionsManager.getConnectionsNeedingConfirmation(),\n ];\n\n const request = allRequests.find(\n (r) =>\n r.uniqueRequestKey === params.requestKey ||\n r.connectionRequestId?.toString() === params.requestKey ||\n r.inboundRequestId?.toString() === params.requestKey\n );\n\n if (!request) {\n throw new Error(\n `Request with key ${params.requestKey} not found or no longer pending.`\n );\n }\n\n if (!request.needsConfirmation || !request.inboundRequestId) {\n throw new Error(\n `Request with key ${params.requestKey} is not an inbound request that can be accepted.`\n );\n }\n\n const targetAccountId = request.targetAccountId;\n const inboundRequestId = request.inboundRequestId;\n\n let feeConfig: FeeConfigBuilderInterface | undefined;\n\n if (params.hbarFee && params.hbarFee > 0) {\n const feeConfigBuilder = new FeeConfigBuilder({\n network: this.network,\n logger: this.sdkLogger,\n });\n\n const { accountId: collectorAccountId } = this.getAccountAndSigner();\n if (!collectorAccountId) {\n throw new Error('Could not determine account ID for fee collection.');\n }\n this.addNote(\n `Setting the operator account (${collectorAccountId}) as the fee collector since no specific collector was provided.`\n );\n\n const effectiveExemptIds =\n params.exemptAccountIds?.filter(\n (id: string) => id !== collectorAccountId && id.startsWith('0.0')\n ) || [];\n\n feeConfig = feeConfigBuilder.addHbarFee(\n params.hbarFee,\n collectorAccountId,\n effectiveExemptIds\n );\n }\n\n const inboundTopicId = await this.getInboundTopicId();\n const confirmationResult = await this.handleConnectionRequest(\n inboundTopicId,\n targetAccountId,\n inboundRequestId,\n feeConfig\n );\n\n let connectionTopicId = confirmationResult?.connectionTopicId;\n\n if (\n connectionTopicId &&\n typeof connectionTopicId === 'object' &&\n 'toString' in connectionTopicId\n ) {\n connectionTopicId = (\n connectionTopicId as unknown as { toString: () => string }\n )?.toString();\n }\n\n if (!connectionTopicId || typeof connectionTopicId !== 'string') {\n try {\n const refreshed = await this.stateManager?.getConnectionsManager()?.fetchConnectionData(currentAgent.accountId);\n const established = (refreshed || []).find(\n (c: unknown) => (c as { targetAccountId?: string; status?: string }).targetAccountId === targetAccountId &&\n (c as { status?: string }).status === 'established'\n ) as { connectionTopicId?: string } | undefined;\n if (established?.connectionTopicId) {\n connectionTopicId = established.connectionTopicId;\n }\n } catch (e) {\n this.logger.debug('Could not refresh connections after acceptance to derive topic id:', e);\n }\n }\n\n if (!connectionTopicId || typeof connectionTopicId !== 'string') {\n throw new Error(\n `Failed to create connection topic. Got: ${JSON.stringify(\n connectionTopicId\n )}`\n );\n }\n\n if (this.stateManager) {\n const targetAgentName =\n request.targetAgentName || `Agent ${targetAccountId}`;\n if (!request.targetAgentName) {\n this.addNote(\n `No agent name was provided in the connection request, using default name 'Agent ${targetAccountId}'.`\n );\n }\n\n let targetInboundTopicId = request.targetInboundTopicId || '';\n if (!targetInboundTopicId) {\n try {\n const targetProfile = await this.getAgentProfile(targetAccountId);\n if (\n targetProfile.success &&\n targetProfile.topicInfo?.inboundTopic\n ) {\n targetInboundTopicId = targetProfile.topicInfo.inboundTopic;\n }\n } catch (profileError) {\n this.logger.warn(\n `Could not fetch profile for ${targetAccountId}:`,\n profileError\n );\n }\n }\n\n const newConnection = {\n connectionId: `conn-${Date.now()}`,\n targetAccountId: targetAccountId,\n targetAgentName: targetAgentName,\n targetInboundTopicId: targetInboundTopicId,\n connectionTopicId: connectionTopicId,\n status: 'established' as const,\n created: new Date(),\n };\n this.stateManager.addActiveConnection(newConnection);\n\n connectionsManager.markConnectionRequestProcessed(\n request.targetInboundTopicId || '',\n inboundRequestId\n );\n }\n\n this.executeResult = {\n success: true,\n transactionId: undefined,\n receipt: undefined,\n scheduleId: undefined,\n rawResult: {\n targetAccountId,\n connectionTopicId,\n feeConfigured: !!params.hbarFee,\n hbarFee: params.hbarFee || 0,\n confirmationResult,\n },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n } catch (error) {\n this.logger.error('Failed to accept connection:', error);\n throw error;\n }\n\n return this;\n }\n\n /**\n * Send a message using HCS (for operations that need direct topic access)\n */\n public async sendHCS10Message(params: SendMessageParams): Promise<this> {\n this.clearNotes();\n\n try {\n const result = await this.sendMessage(params.topicId, params.message);\n\n this.executeResult = {\n success: true,\n transactionId: result.transactionId,\n receipt: result.receipt,\n scheduleId: undefined,\n rawResult: result,\n } as unknown as ExecuteResult & { rawResult?: unknown };\n\n this.addNote(`Message sent to topic ${params.topicId}.`);\n } catch (error) {\n this.logger.error('Failed to send message:', error);\n throw error;\n }\n\n return this;\n }\n\n /**\n * Send a message to a connected account with optional response monitoring\n */\n public async sendMessageToConnection(\n params: SendMessageToConnectionParams\n ): Promise<this> {\n this.clearNotes();\n\n if (!this.stateManager) {\n throw new Error(\n 'StateManager is required to send messages to connections'\n );\n }\n\n try {\n const currentAgent = this.stateManager.getCurrentAgent();\n if (!currentAgent) {\n throw new Error(\n 'Cannot send message. No agent is currently active. Please register or select an agent first.'\n );\n }\n\n let connection: ActiveConnection | undefined;\n\n const identifier = params.targetIdentifier;\n\n if (identifier.includes('@')) {\n const parts = identifier.split('@');\n if (parts.length === 2) {\n const accountId = parts[1];\n connection = this.stateManager.getConnectionByIdentifier(accountId);\n\n if (!connection) {\n this.addNote(\n `Could not find connection using request key '${identifier}', extracted account ID '${accountId}'.`\n );\n }\n }\n }\n\n if (!connection) {\n connection = this.stateManager.getConnectionByIdentifier(identifier);\n }\n\n if (\n !connection &&\n !identifier.startsWith('0.0.') &&\n /^\\d+$/.test(identifier)\n ) {\n const accountIdWithPrefix = `0.0.${identifier}`;\n connection =\n this.stateManager.getConnectionByIdentifier(accountIdWithPrefix);\n if (connection) {\n this.addNote(\n `Found connection using account ID with prefix: ${accountIdWithPrefix}`\n );\n }\n }\n\n if (!connection && /^[1-9]\\d*$/.test(identifier)) {\n const connections = this.stateManager.listConnections();\n const index = parseInt(identifier) - 1;\n if (index >= 0 && index < connections.length) {\n connection = connections[index];\n if (connection) {\n this.addNote(\n `Found connection by index ${identifier}: ${connection.targetAccountId}`\n );\n }\n }\n }\n\n if (!connection) {\n const connections = this.stateManager.listConnections();\n const availableIds = connections.map(\n (c, i) =>\n `${i + 1}. ${c.targetAccountId} (Topic: ${c.connectionTopicId})`\n );\n\n let errorMsg = `Connection not found for identifier: \"${identifier}\"\\n`;\n errorMsg += `Available connections:\\n${\n availableIds.join('\\n') || 'No active connections'\n }`;\n errorMsg += `\\n\\nYou can use:\\n`;\n errorMsg += `- Connection number (e.g., \"1\", \"2\")\\n`;\n errorMsg += `- Account ID (e.g., \"0.0.6412936\")\\n`;\n errorMsg += `- Connection topic ID\\n`;\n errorMsg += `Use 'list_connections' to see all active connections.`;\n\n throw new Error(errorMsg);\n }\n\n let connectionTopicId = connection.connectionTopicId;\n if (\n connectionTopicId &&\n typeof connectionTopicId === 'object' &&\n 'toString' in connectionTopicId\n ) {\n connectionTopicId = (\n connectionTopicId as unknown as { toString: () => string }\n )?.toString();\n }\n\n if (!connectionTopicId || typeof connectionTopicId !== 'string') {\n throw new Error(\n `Invalid connection topic ID for ${\n connection.targetAccountId\n }: ${JSON.stringify(\n connectionTopicId\n )} (type: ${typeof connectionTopicId})`\n );\n }\n\n const targetAgentName = connection.targetAgentName;\n\n const operatorId = `${currentAgent.inboundTopicId}@${currentAgent.accountId}`;\n\n let baseSeq = 0\n try {\n const prev = await this.getMessages(connectionTopicId)\n baseSeq = prev.messages.reduce((max, m) => Math.max(max, m.sequence_number || 0), 0)\n } catch {}\n\n const messageResult = await this.sendMessage(\n connectionTopicId,\n params.message,\n `Agent message from ${currentAgent.name}`\n );\n\n const effectiveSeq = messageResult.sequenceNumber ?? baseSeq\n if (effectiveSeq === 0) {\n throw new Error('Failed to send message');\n }\n\n let reply: string | null = null;\n if (!params.disableMonitoring) {\n reply = await this.monitorResponses(\n connectionTopicId,\n operatorId,\n effectiveSeq\n );\n } else {\n this.addNote(\n `Message sent successfully. Response monitoring was disabled.`\n );\n }\n\n this.executeResult = {\n success: true,\n transactionId: messageResult.transactionId,\n receipt: messageResult.receipt,\n scheduleId: undefined,\n rawResult: {\n targetAgentName,\n targetAccountId: connection.targetAccountId,\n connectionTopicId,\n sequenceNumber: messageResult.sequenceNumber,\n reply,\n monitoringEnabled: !params.disableMonitoring,\n message: params.message,\n messageResult,\n },\n };\n } catch (error) {\n this.logger.error('Failed to send message to connection:', error);\n throw error;\n }\n\n return this;\n }\n\n /**\n * Monitor responses on a topic after sending a message\n */\n private async monitorResponses(\n topicId: string,\n operatorId: string,\n sequenceNumber: number\n ): Promise<string | null> {\n const maxAttempts = 30;\n let attempts = 0;\n\n while (attempts < maxAttempts) {\n try {\n const messages = await this.getMessageStream(topicId);\n\n for (const message of messages.messages) {\n if (\n message.sequence_number < sequenceNumber ||\n message.operator_id === operatorId\n ) {\n continue;\n }\n const content = await this.getMessageContent(message.data || '');\n return content;\n }\n } catch (error) {\n this.logger.error(`Error monitoring responses: ${error}`);\n }\n await new Promise((resolve) => setTimeout(resolve, 4000));\n attempts++;\n }\n return null;\n }\n\n /**\n * Start passive monitoring for incoming connection requests\n * This method monitors continuously in the background\n */\n public async startPassiveConnectionMonitoring(): Promise<this> {\n this.clearNotes();\n\n if (!this.stateManager) {\n throw new Error('StateManager is required for passive monitoring');\n }\n\n const inboundTopicId = await this.getInboundTopicId();\n this.logger.info(\n `Starting passive connection monitoring on topic ${inboundTopicId}...`\n );\n\n this.executeResult = {\n success: true,\n transactionId: undefined,\n receipt: undefined,\n scheduleId: undefined,\n rawResult: {\n inboundTopicId,\n message: `Started monitoring inbound topic ${inboundTopicId} for connection requests in the background.`,\n },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n\n return this;\n }\n\n /**\n * Monitor for incoming connection requests\n */\n public async monitorConnections(params: {\n acceptAll?: boolean;\n targetAccountId?: string;\n monitorDurationSeconds?: number;\n hbarFees?: Array<{ amount: number; collectorAccount?: string }>;\n tokenFees?: Array<{\n amount: number;\n tokenId: string;\n collectorAccount?: string;\n }>;\n exemptAccountIds?: string[];\n defaultCollectorAccount?: string;\n }): Promise<this> {\n this.clearNotes();\n\n const {\n acceptAll = false,\n targetAccountId,\n monitorDurationSeconds = 120,\n hbarFees = [],\n tokenFees = [],\n exemptAccountIds = [],\n defaultCollectorAccount,\n } = params;\n\n if (!this.stateManager) {\n throw new Error('StateManager is required for connection monitoring');\n }\n\n const currentAgent = this.stateManager.getCurrentAgent();\n if (!currentAgent) {\n throw new Error(\n 'Cannot monitor for connections. No agent is currently active.'\n );\n }\n\n const inboundTopicId = await this.getInboundTopicId();\n const endTime = Date.now() + monitorDurationSeconds * 1000;\n const pollIntervalMs = 3000;\n let connectionRequestsFound = 0;\n let acceptedConnections = 0;\n const processedRequestIds = new Set<number>();\n\n while (Date.now() < endTime) {\n try {\n const messagesResult = await this.getMessages(inboundTopicId);\n const connectionRequests = messagesResult.messages.filter(\n (msg) =>\n msg.op === 'connection_request' &&\n typeof msg.sequence_number === 'number'\n );\n\n for (const request of connectionRequests) {\n const connectionRequestId = request.sequence_number;\n if (\n !connectionRequestId ||\n processedRequestIds.has(connectionRequestId)\n ) {\n continue;\n }\n\n const requestingAccountId = request.operator_id?.split('@')[1];\n if (!requestingAccountId) {\n continue;\n }\n\n connectionRequestsFound++;\n\n if (targetAccountId && requestingAccountId !== targetAccountId) {\n this.logger.info(\n `Skipping request from ${requestingAccountId} (not target account)`\n );\n continue;\n }\n\n if (acceptAll || targetAccountId === requestingAccountId) {\n this.logger.info(\n `Accepting connection request from ${requestingAccountId}`\n );\n\n let feeConfig;\n if (hbarFees.length > 0 || tokenFees.length > 0) {\n const builder = new FeeConfigBuilder({\n network: this.network,\n logger: this.sdkLogger,\n });\n\n for (const fee of hbarFees) {\n const collectorAccount =\n fee.collectorAccount ||\n defaultCollectorAccount ||\n this.getOperatorId();\n builder.addHbarFee(\n fee.amount,\n collectorAccount,\n exemptAccountIds\n );\n }\n\n for (const fee of tokenFees) {\n const collectorAccount =\n fee.collectorAccount ||\n defaultCollectorAccount ||\n this.getOperatorId();\n builder.addTokenFee(\n fee.amount,\n fee.tokenId,\n collectorAccount,\n undefined,\n exemptAccountIds\n );\n }\n\n feeConfig = builder;\n }\n\n await this.handleConnectionRequest(\n inboundTopicId,\n requestingAccountId,\n connectionRequestId,\n feeConfig\n );\n\n processedRequestIds.add(connectionRequestId);\n acceptedConnections++;\n }\n }\n } catch (error) {\n this.logger.error('Error during connection monitoring:', error);\n }\n\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n }\n\n this.executeResult = {\n success: true,\n transactionId: undefined,\n receipt: undefined,\n scheduleId: undefined,\n rawResult: {\n connectionRequestsFound,\n acceptedConnections,\n monitorDurationSeconds,\n processedRequestIds: Array.from(processedRequestIds),\n },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n\n this.addNote(\n `Monitoring completed. Found ${connectionRequestsFound} requests, accepted ${acceptedConnections}.`\n );\n\n return this;\n }\n\n /**\n * Manage connection requests (list, view, or reject)\n */\n public async manageConnectionRequests(params: {\n action: 'list' | 'view' | 'reject';\n requestKey?: string;\n }): Promise<this> {\n this.clearNotes();\n\n if (!this.stateManager) {\n throw new Error(\n 'StateManager is required for managing connection requests'\n );\n }\n\n const currentAgent = this.stateManager.getCurrentAgent();\n if (!currentAgent) {\n throw new Error(\n 'Cannot manage connection requests. No agent is currently active.'\n );\n }\n\n const connectionsManager = this.stateManager.getConnectionsManager();\n if (!connectionsManager) {\n throw new Error(NOT_INITIALIZED_ERROR);\n }\n\n try {\n const { accountId } = this.getAccountAndSigner();\n await connectionsManager.fetchConnectionData(accountId);\n\n const pendingRequests = connectionsManager.getPendingRequests();\n const needsConfirmation =\n connectionsManager.getConnectionsNeedingConfirmation();\n const allRequests = [...pendingRequests, ...needsConfirmation];\n\n switch (params.action) {\n case 'list':\n this.executeResult = {\n success: true,\n transactionId: undefined,\n receipt: undefined,\n scheduleId: undefined,\n rawResult: {\n requests: allRequests.map((request, index) => ({\n index: index + 1,\n type: request.needsConfirmation ? 'incoming' : 'outgoing',\n requestKey:\n request.uniqueRequestKey ||\n `${\n request.connectionRequestId ||\n request.inboundRequestId ||\n 'unknown'\n }`,\n targetAccountId: request.targetAccountId,\n targetAgentName:\n request.targetAgentName || `Agent ${request.targetAccountId}`,\n created: request.created.toISOString(),\n memo: request.memo,\n bio: request.profileInfo?.bio,\n })),\n },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n break;\n\n case 'view': {\n if (!params.requestKey) {\n throw new Error('Request key is required for viewing a request');\n }\n const viewRequest = allRequests.find(\n (r) =>\n r.uniqueRequestKey === params.requestKey ||\n r.connectionRequestId?.toString() === params.requestKey ||\n r.inboundRequestId?.toString() === params.requestKey\n );\n if (!viewRequest) {\n throw new Error(`Request with key ${params.requestKey} not found`);\n }\n this.executeResult = {\n success: true,\n transactionId: undefined,\n receipt: undefined,\n scheduleId: undefined,\n rawResult: {\n request: {\n type: viewRequest.needsConfirmation ? 'incoming' : 'outgoing',\n requestKey:\n viewRequest.uniqueRequestKey ||\n `${\n viewRequest.connectionRequestId ||\n viewRequest.inboundRequestId ||\n 'unknown'\n }`,\n targetAccountId: viewRequest.targetAccountId,\n targetAgentName:\n viewRequest.targetAgentName ||\n `Agent ${viewRequest.targetAccountId}`,\n created: viewRequest.created.toISOString(),\n memo: viewRequest.memo,\n profileInfo: viewRequest.profileInfo,\n },\n },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n break;\n }\n\n case 'reject': {\n if (!params.requestKey) {\n throw new Error('Request key is required for rejecting a request');\n }\n const rejectRequest = allRequests.find(\n (r) =>\n r.uniqueRequestKey === params.requestKey ||\n r.connectionRequestId?.toString() === params.requestKey ||\n r.inboundRequestId?.toString() === params.requestKey\n );\n if (!rejectRequest) {\n throw new Error(`Request with key ${params.requestKey} not found`);\n }\n if (rejectRequest.inboundRequestId) {\n connectionsManager.markConnectionRequestProcessed(\n rejectRequest.targetInboundTopicId || '',\n rejectRequest.inboundRequestId\n );\n } else if (rejectRequest.connectionRequestId) {\n connectionsManager.markConnectionRequestProcessed(\n rejectRequest.originTopicId || '',\n rejectRequest.connectionRequestId\n );\n }\n this.executeResult = {\n success: true,\n transactionId: undefined,\n receipt: undefined,\n scheduleId: undefined,\n rawResult: {\n rejectedRequest: {\n requestKey: params.requestKey,\n targetAccountId: rejectRequest.targetAccountId,\n targetAgentName:\n rejectRequest.targetAgentName ||\n `Agent ${rejectRequest.targetAccountId}`,\n },\n },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n break;\n }\n }\n } catch (error) {\n this.logger.error('Failed to manage connection requests:', error);\n throw error;\n }\n\n return this;\n }\n\n /**\n * List unapproved connection requests\n */\n public async listUnapprovedConnectionRequests(): Promise<this> {\n this.clearNotes();\n\n if (!this.stateManager) {\n throw new Error(\n 'StateManager is required for listing connection requests'\n );\n }\n\n const currentAgent = this.stateManager.getCurrentAgent();\n if (!currentAgent) {\n throw new Error(\n 'Cannot list connection requests. No agent is currently active.'\n );\n }\n\n try {\n const inboundTopicId = await this.getInboundTopicId();\n const messages = await this.getMessages(inboundTopicId);\n\n const unapprovedRequests = messages.messages\n .filter(\n (msg): msg is HCSMessageWithTimestamp & { op: string } =>\n msg.op === 'connection_request'\n )\n .map((msg) => ({\n requestId: msg.sequence_number,\n fromAccountId: msg.operator_id?.split('@')[1] || 'unknown',\n timestamp: msg.timestamp || new Date(msg?.created || '').getTime(),\n memo: msg.m || '',\n data: msg.data,\n }))\n .filter(\n (req): req is typeof req & { fromAccountId: string } =>\n req.fromAccountId !== 'unknown'\n );\n\n this.executeResult = {\n success: true,\n transactionId: undefined,\n receipt: undefined,\n scheduleId: undefined,\n rawResult: {\n requests: unapprovedRequests,\n count: unapprovedRequests.length,\n },\n } as unknown as ExecuteResult & { rawResult?: unknown };\n\n if (unapprovedRequests.length === 0) {\n this.addNote('No unapproved connection requests found.');\n } else {\n this.addNote(\n `Found ${unapprovedRequests.length} unapproved connection request(s).`\n );\n }\n } catch (error) {\n this.logger.error(\n 'Failed to list unapproved connection requests:',\n error\n );\n throw error;\n }\n\n return this;\n }\n\n /**\n * List connections with enhanced details\n */\n public async listConnections(\n params: {\n includeDetails?: boolean;\n showPending?: boolean;\n } = {}\n ): Promise<this> {\n this.clearNotes();\n\n if (!this.stateManager) {\n throw new Error('StateManager is required to list connections');\n }\n\n const includeDetails = params.includeDetails ?? true;\n const showPending = params.showPending ?? true;\n\n try {\n const connections = await this.getEnhancedConnections();\n\n if (connections.length === 0) {\n this.executeResult = {\n success: true,\n rawResult: {\n connections: [],\n message: 'There are currently no active connections.',\n },\n } as ExecuteResult & { rawResult?: unknown };\n return this;\n }\n\n const activeConnections = connections.filter(\n (c): c is Connection => (c as Connection).status === 'established'\n );\n const pendingConnections = connections.filter(\n (c): c is Connection => (c as Connection).isPending\n );\n const needsConfirmation = connections.filter(\n (c): c is Connection => (c as Connection).needsConfirmation\n );\n\n let output = '';\n\n if (activeConnections.length > 0) {\n output += `🟢 Active Connections (${activeConnections.length}):\\n`;\n activeConnections.forEach((conn, index) => {\n output += this.formatConnection(conn, index, includeDetails);\n });\n output += '\\n';\n }\n\n if (showPending && needsConfirmation.length > 0) {\n output += `🟠 Connections Needing Confirmation (${needsConfirmation.length}):\\n`;\n needsConfirmation.forEach((conn, index) => {\n output += this.formatConnection(conn, index, includeDetails);\n });\n output += '\\n';\n }\n\n if (showPending && pendingConnections.length > 0) {\n output += `⚪ Pending Connection Requests (${pendingConnections.length}):\\n`;\n pendingConnections.forEach((conn, index) => {\n output += this.formatConnection(conn, index, includeDetails);\n });\n }\n\n this.executeResult = {\n success: true,\n rawResult: {\n connections,\n formattedOutput: output.trim(),\n activeCount: activeConnections.length,\n pendingCount: pendingConnections.length,\n needsConfirmationCount: needsConfirmation.length,\n },\n } as ExecuteResult & { rawResult?: unknown };\n } catch (error) {\n this.logger.error('Failed to list connections:', error);\n this.executeResult = {\n success: false,\n error: `Failed to list connections: ${\n error instanceof Error ? error.message : String(error)\n }`,\n } as ExecuteResult & { rawResult?: unknown };\n }\n\n return this;\n }\n\n private formatConnection(\n conn: unknown,\n index: number,\n includeDetails: boolean\n ): string {\n const connection = conn as {\n profileInfo?: { display_name?: string; bio?: string };\n targetAgentName?: string;\n targetAccountId?: string;\n isPending?: boolean;\n connectionTopicId?: string;\n status?: string;\n created?: Date;\n lastActivity?: Date;\n };\n\n let output = `${index + 1}. ${\n connection.profileInfo?.display_name ||\n connection.targetAgentName ||\n 'Unknown Agent'\n } (${connection.targetAccountId})\\n`;\n const displayTopicId = connection.isPending\n ? '(Pending Request)'\n : connection.connectionTopicId;\n output += ` Topic: ${displayTopicId}\\n`;\n const statusText = connection.status || 'unknown';\n output += ` Status: ${statusText}\\n`;\n\n if (includeDetails) {\n if (connection.profileInfo?.bio) {\n output += ` Bio: ${connection.profileInfo.bio.substring(0, 100)}${\n connection.profileInfo.bio.length > 100 ? '...' : ''\n }\\n`;\n }\n\n if (connection.created) {\n const createdLabel = connection.isPending\n ? 'Request sent'\n : 'Connection established';\n output += ` ${createdLabel}: ${connection.created.toLocaleString()}\\n`;\n }\n\n if (connection.lastActivity) {\n output += ` Last activity: ${connection.lastActivity.toLocaleString()}\\n`;\n }\n }\n\n return output;\n }\n\n private async getEnhancedConnections(): Promise<unknown[]> {\n try {\n const { accountId } = this.getAccountAndSigner();\n if (!accountId) {\n return this.stateManager!.listConnections();\n }\n\n const connectionManager = this.stateManager!.getConnectionsManager();\n if (!connectionManager) {\n this.logger.error(NOT_INITIALIZED_ERROR);\n return this.stateManager!.listConnections();\n }\n\n const connections = await connectionManager.fetchConnectionData(\n accountId\n );\n\n for (const connection of connections) {\n this.stateManager!.addActiveConnection(\n connection as unknown as ActiveConnection\n );\n }\n\n return connections;\n } catch (error) {\n this.logger.error('Failed to get enhanced connections:', error);\n return this.stateManager!.listConnections();\n }\n }\n\n /**\n * Check messages on a connection\n */\n public async checkMessages(params: {\n targetIdentifier: string;\n fetchLatest?: boolean;\n lastMessagesCount?: number;\n }): Promise<this> {\n this.clearNotes();\n\n if (!this.stateManager) {\n throw new Error('StateManager is required to check messages');\n }\n\n const connection = this.stateManager.getConnectionByIdentifier(\n params.targetIdentifier\n );\n\n if (!connection) {\n this.executeResult = {\n success: false,\n error: `Could not find an active connection matching identifier \"${params.targetIdentifier}\". Use 'list_connections' to see active connections.`,\n } as ExecuteResult & { rawResult?: unknown };\n return this;\n }\n\n const connectionTopicId = connection.connectionTopicId || '';\n\n if (!connectionTopicId || !connectionTopicId.match(/^\\d+\\.\\d+\\.\\d+$/)) {\n this.logger.error(\n `Invalid connection topic ID format: ${connectionTopicId}`\n );\n this.executeResult = {\n success: false,\n error: `Invalid connection topic ID format: ${connectionTopicId}. Expected format: 0.0.XXXXX`,\n } as ExecuteResult & { rawResult?: unknown };\n return this;\n }\n\n const targetAgentName = connection.targetAgentName;\n const lastProcessedTimestamp =\n this.stateManager.getLastTimestamp(connectionTopicId);\n\n this.logger.info(\n `Checking messages for connection with ${targetAgentName} (${connection.targetAccountId}) on topic ${connectionTopicId} (fetchLatest: ${params.fetchLatest}, lastCount: ${params.lastMessagesCount}, since: ${lastProcessedTimestamp})`\n );\n\n try {\n const result = await this.getMessages(connectionTopicId);\n const allMessages = result.messages;\n\n if (!allMessages || allMessages.length === 0) {\n this.executeResult = {\n success: true,\n rawResult: {\n messages: [],\n message: `No messages found on connection topic ${connectionTopicId}.`,\n },\n } as ExecuteResult & { rawResult?: unknown };\n return this;\n }\n\n let messagesToProcess: HCSMessageWithTimestamp[] = [];\n let latestTimestampNanos = lastProcessedTimestamp;\n const isFetchingLatest = params.fetchLatest === true;\n\n if (isFetchingLatest) {\n this.logger.info('Fetching latest messages regardless of timestamp.');\n const count = params.lastMessagesCount ?? 1;\n messagesToProcess = allMessages.slice(-count);\n } else {\n this.logger.info(\n `Filtering for messages newer than ${lastProcessedTimestamp}`\n );\n messagesToProcess = allMessages.filter(\n (msg: HCSMessageWithTimestamp) => {\n const msgTimestampNanos = msg.timestamp * 1_000_000;\n return msgTimestampNanos > lastProcessedTimestamp;\n }\n );\n\n if (messagesToProcess.length > 0) {\n latestTimestampNanos = messagesToProcess.reduce(\n (maxTs, msg) => Math.max(maxTs, msg.timestamp * 1_000_000),\n lastProcessedTimestamp\n );\n }\n }\n\n if (messagesToProcess.length === 0) {\n const message = isFetchingLatest\n ? `Could not retrieve the latest message(s). No messages found on topic ${connectionTopicId}.`\n : `No new messages found for connection with ${targetAgentName} since last check.`;\n\n this.executeResult = {\n success: true,\n rawResult: {\n messages: [],\n message,\n },\n } as ExecuteResult & { rawResult?: unknown };\n return this;\n }\n\n this.logger.info(`Processing ${messagesToProcess.length} message(s).`);\n\n let outputString = isFetchingLatest\n ? `Latest message(s) from ${targetAgentName}:\\n`\n : `New messages from ${targetAgentName}:\\n`;\n\n const processedMessages: Array<{\n timestamp: number;\n sequenceNumber: number;\n content: string | undefined;\n raw: HCSMessageWithTimestamp;\n }> = [];\n\n for (const msg of messagesToProcess) {\n let content = msg.data;\n try {\n if (typeof content === 'string' && content.startsWith('hcs://')) {\n this.logger.debug(`Resolving inscribed message: ${content}`);\n content = await this.getMessageContent(content);\n this.logger.debug(`Resolved content length: ${content?.length}`);\n }\n\n let displayContent = content;\n try {\n const parsed = JSON.parse(content || '{}');\n if (\n parsed.p === 'hcs-10' &&\n parsed.op === 'message' &&\n parsed.data\n ) {\n const senderOpId = parsed.operator_id || 'unknown_sender';\n displayContent = `[${senderOpId}]: ${parsed.data}`;\n } else {\n displayContent = content;\n }\n } catch {\n displayContent = content;\n }\n\n const messageDate = new Date(msg.timestamp);\n outputString += `\\n[${messageDate.toLocaleString()}] (Seq: ${\n msg.sequence_number\n })\\n${displayContent}\\n`;\n\n processedMessages.push({\n timestamp: msg.timestamp,\n sequenceNumber: msg.sequence_number,\n content: displayContent,\n raw: msg,\n });\n } catch (error) {\n const errorMsg = `Error processing message (Seq: ${\n msg.sequence_number\n }): ${error instanceof Error ? error.message : String(error)}`;\n this.logger.error(errorMsg);\n outputString += `\\n[Error processing message Seq: ${msg.sequence_number}]\\n`;\n }\n }\n\n if (!isFetchingLatest && latestTimestampNanos > lastProcessedTimestamp) {\n this.logger.debug(\n `Updating timestamp for topic ${connectionTopicId} to ${latestTimestampNanos}`\n );\n this.stateManager.updateTimestamp(\n connectionTopicId,\n latestTimestampNanos\n );\n }\n\n this.executeResult = {\n success: true,\n rawResult: {\n messages: processedMessages,\n formattedOutput: outputString.trim(),\n targetAgentName,\n connectionTopicId,\n },\n } as ExecuteResult & { rawResult?: unknown };\n } catch (error) {\n this.logger.error(\n `Failed to check messages for topic ${connectionTopicId}: ${error}`\n );\n this.executeResult = {\n success: false,\n error: `Error checking messages for ${targetAgentName}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n } as ExecuteResult & { rawResult?: unknown };\n }\n\n return this;\n }\n\n /**\n * Find registrations using the configured registry\n */\n public async findRegistrations(params: {\n accountId?: string;\n tags?: number[];\n }): Promise<this> {\n this.clearNotes();\n\n try {\n const options: {\n network: StandardNetworkType;\n accountId?: string;\n tags?: number[];\n } = {\n network: this.network,\n };\n\n if (params.accountId) {\n options.accountId = params.accountId;\n }\n\n if (params.tags && params.tags.length > 0) {\n options.tags = params.tags;\n }\n\n const result = await this.standardClient.findRegistrations(options);\n\n if (!result.success || result.error) {\n this.executeResult = {\n success: false,\n error: `Error finding registrations: ${\n result.error || 'Unknown error'\n }`,\n } as ExecuteResult & { rawResult?: unknown };\n return this;\n }\n\n if (!result.registrations || result.registrations.length === 0) {\n this.executeResult = {\n success: true,\n rawResult: {\n registrations: [],\n message: 'No registrations found matching the criteria.',\n },\n } as ExecuteResult & { rawResult?: unknown };\n return this;\n }\n\n const formattedRegistrations = result.registrations\n .map((reg: unknown): string => {\n const registration = reg as {\n agent?: { name?: string; capabilities?: string[] };\n accountId?: string;\n };\n const agentName = registration.agent?.name || 'Unknown Agent';\n const accountId = registration.accountId || 'Unknown Account';\n const capabilities =\n registration.agent?.capabilities?.join(', ') || 'None';\n\n return `Agent: ${agentName} (${accountId}), Capabilities: ${capabilities}`;\n })\n .join('\\\\n');\n\n this.executeResult = {\n success: true,\n rawResult: {\n registrations: result.registrations,\n formattedOutput: `Found ${result.registrations.length} registration(s):\\\\n${formattedRegistrations}`,\n },\n } as ExecuteResult & { rawResult?: unknown };\n } catch (error) {\n this.logger.error('Error during FindRegistrations execution:', error);\n this.executeResult = {\n success: false,\n error: `Failed to search registrations: ${\n error instanceof Error ? error.message : String(error)\n }`,\n } as ExecuteResult & { rawResult?: unknown };\n }\n\n return this;\n }\n\n /**\n * Retrieve detailed profile information for an agent\n */\n public async retrieveProfile(params: {\n accountId: string;\n disableCache?: boolean;\n }): Promise<this> {\n this.clearNotes();\n\n try {\n const profileResponse = await this.standardClient.retrieveProfile(\n params.accountId,\n params.disableCache || false\n );\n\n if (!profileResponse.success) {\n this.executeResult = {\n success: false,\n error: `Failed to retrieve profile: ${\n profileResponse.error || 'Unknown error'\n }`,\n } as ExecuteResult & { rawResult?: unknown };\n return this;\n }\n\n const profile = profileResponse.profile;\n const topicInfo = profileResponse.topicInfo;\n\n let profileDetails = `Profile for ${params.accountId}:\\n`;\n profileDetails += `Name: ${profile.name || 'Unknown'}\\n`;\n profileDetails += `Bio: ${profile.bio || 'No bio provided'}\\n`;\n profileDetails += `Type: ${profile.type || 'Unknown'}\\n`;\n profileDetails += `Model: ${profile.model || 'Unknown'}\\n`;\n\n if (profile.capabilities && profile.capabilities.length > 0) {\n profileDetails += `Capabilities: ${profile.capabilities.join(', ')}\\n`;\n } else {\n profileDetails += `Capabilities: None listed\\n`;\n }\n\n if (topicInfo) {\n profileDetails += `Inbound Topic: ${\n topicInfo.inboundTopic || 'Unknown'\n }\\n`;\n profileDetails += `Outbound Topic: ${\n topicInfo.outboundTopic || 'Unknown'\n }\\n`;\n profileDetails += `Profile Topic: ${\n topicInfo.profileTopicId || 'Unknown'\n }\\n`;\n }\n\n if (profile.social && Object.keys(profile.social).length > 0) {\n profileDetails += `Social: ${Object.entries(profile.social)\n .map(\n ([platform, handle]: [string, unknown]): string =>\n `${platform}: ${handle}`\n )\n .join(', ')}\\n`;\n }\n\n if (profile.properties && Object.keys(profile.properties).length > 0) {\n profileDetails += `Properties: ${JSON.stringify(profile.properties)}\\n`;\n }\n\n this.executeResult = {\n success: true,\n rawResult: {\n profileDetails,\n rawProfile: profileResponse,\n },\n } as ExecuteResult & { rawResult?: unknown };\n } catch (error) {\n this.logger.error(\n `Unexpected error retrieving profile for ${params.accountId}:`,\n error\n );\n this.executeResult = {\n success: false,\n error: `Unexpected error retrieving profile for ${params.accountId}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n } as ExecuteResult & { rawResult?: unknown };\n }\n\n return this;\n }\n\n /**\n * Override execute to return stored HCS10 operation results\n */\n public override async execute(): Promise<ExecuteResult> {\n if (this.executeResult) {\n return {\n success: this.executeResult.success,\n transactionId: this.executeResult.transactionId,\n receipt: this.executeResult.receipt,\n scheduleId: this.executeResult.scheduleId,\n error: this.executeResult.error,\n rawResult: this.executeResult.rawResult,\n notes: this.notes,\n } as ExecuteResult & { rawResult?: unknown; notes?: string[] };\n }\n\n return {\n success: false,\n error: 'No operation result available. Call a builder method first.',\n };\n }\n}\n"],"names":["SDKLogger","HCS10Client","path","StandardAIAgentCapability","StandardInboundTopicType"],"mappings":"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"}
@@ -1,22 +1,24 @@
1
- function generateDefaultMetadata(params) {
2
- const defaultName = params.fileName?.replace(/\.[^/.]+$/, "") || "Hashinal NFT";
3
- let defaultType = "media";
4
- if (params.mimeType?.startsWith("image/")) {
5
- defaultType = "image";
6
- } else if (params.mimeType?.startsWith("video/")) {
7
- defaultType = "video";
8
- } else if (params.mimeType?.startsWith("audio/")) {
9
- defaultType = "audio";
10
- }
1
+ function getStringProp(obj, key) {
2
+ if (!obj || typeof obj !== "object") return void 0;
3
+ const val = obj[key];
4
+ return typeof val === "string" && val.trim() ? val : void 0;
5
+ }
6
+ function extractTopicIds(inscription, result) {
7
+ const jsonTopicId = getStringProp(inscription, "jsonTopicId");
8
+ const imageTopicId = getStringProp(inscription, "topic_id") || getStringProp(inscription, "topicId") || getStringProp(result, "topicId") || getStringProp(result, "topic_id");
11
9
  return {
12
- name: params.name || defaultName,
13
- creator: params.creator || params.operatorAccount,
14
- description: params.description || `${defaultType.charAt(0).toUpperCase() + defaultType.slice(1)} NFT inscribed as Hashinal`,
15
- type: params.type || defaultType,
16
- image: ""
10
+ jsonTopicId,
11
+ topicId: imageTopicId
17
12
  };
18
13
  }
14
+ function buildInscriptionLinks(ids, network, fileStandard = "1") {
15
+ const chosen = ids.jsonTopicId || ids.topicId;
16
+ const hrl = chosen ? `hcs://${fileStandard}/${chosen}` : void 0;
17
+ const cdnUrl = ids.jsonTopicId ? `https://kiloscribe.com/api/inscription-cdn/${ids.jsonTopicId}?network=${network}` : void 0;
18
+ return { hrl, cdnUrl, topicId: chosen };
19
+ }
19
20
  export {
20
- generateDefaultMetadata
21
+ buildInscriptionLinks,
22
+ extractTopicIds
21
23
  };
22
24
  //# sourceMappingURL=standards-agent-kit.es50.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es50.js","sources":["../../src/utils/metadata-defaults.ts"],"sourcesContent":["/**\n * Generates default metadata for NFT inscription\n */\nexport function generateDefaultMetadata(params: {\n name?: string;\n creator?: string;\n description?: string;\n type?: string;\n fileName?: string;\n mimeType?: string;\n operatorAccount: string;\n}): {\n name: string;\n creator: string;\n description: string;\n type: string;\n image: string;\n} {\n const defaultName = params.fileName?.replace(/\\.[^/.]+$/, '') || 'Hashinal NFT';\n let defaultType = 'media';\n if (params.mimeType?.startsWith('image/')) {\n defaultType = 'image';\n } else if (params.mimeType?.startsWith('video/')) {\n defaultType = 'video';\n } else if (params.mimeType?.startsWith('audio/')) {\n defaultType = 'audio';\n }\n\n return {\n name: params.name || defaultName,\n creator: params.creator || params.operatorAccount,\n description: params.description || `${defaultType.charAt(0).toUpperCase() + defaultType.slice(1)} NFT inscribed as Hashinal`,\n type: params.type || defaultType,\n image: '',\n };\n}"],"names":[],"mappings":"AAGO,SAAS,wBAAwB,QActC;AACA,QAAM,cAAc,OAAO,UAAU,QAAQ,aAAa,EAAE,KAAK;AACjE,MAAI,cAAc;AAClB,MAAI,OAAO,UAAU,WAAW,QAAQ,GAAG;AACzC,kBAAc;AAAA,EAChB,WAAW,OAAO,UAAU,WAAW,QAAQ,GAAG;AAChD,kBAAc;AAAA,EAChB,WAAW,OAAO,UAAU,WAAW,QAAQ,GAAG;AAChD,kBAAc;AAAA,EAChB;AAEA,SAAO;AAAA,IACL,MAAM,OAAO,QAAQ;AAAA,IACrB,SAAS,OAAO,WAAW,OAAO;AAAA,IAClC,aAAa,OAAO,eAAe,GAAG,YAAY,OAAO,CAAC,EAAE,YAAA,IAAgB,YAAY,MAAM,CAAC,CAAC;AAAA,IAChG,MAAM,OAAO,QAAQ;AAAA,IACrB,OAAO;AAAA,EAAA;AAEX;"}
1
+ {"version":3,"file":"standards-agent-kit.es50.js","sources":["../../src/utils/inscription-utils.ts"],"sourcesContent":["export type NetworkType = 'mainnet' | 'testnet';\n\nexport interface TopicIds {\n jsonTopicId?: string;\n topicId?: string;\n}\n\nfunction getStringProp(obj: unknown, key: string): string | undefined {\n if (!obj || typeof obj !== 'object') return undefined;\n const val = (obj as Record<string, unknown>)[key];\n return typeof val === 'string' && val.trim() ? val : undefined;\n}\n\n/**\n * Extract topic ids from an inscription and/or result object without using any.\n * - Prefers jsonTopicId when present (for CDN linking)\n * - Collects topic_id/topicId from either inscription or result\n */\nexport function extractTopicIds(\n inscription: unknown,\n result?: unknown\n): TopicIds {\n const jsonTopicId = getStringProp(inscription, 'jsonTopicId');\n\n const imageTopicId =\n getStringProp(inscription, 'topic_id') ||\n getStringProp(inscription, 'topicId') ||\n getStringProp(result, 'topicId') ||\n getStringProp(result, 'topic_id');\n\n return {\n jsonTopicId: jsonTopicId,\n topicId: imageTopicId,\n };\n}\n\n/**\n * Build HRL/CDN URLs from extracted topic ids.\n * - HRL prefers jsonTopicId, falls back to topicId\n * - CDN URL only provided when jsonTopicId is present\n */\nexport function buildInscriptionLinks(\n ids: TopicIds,\n network: NetworkType,\n fileStandard: string = '1'\n): { hrl?: string; cdnUrl?: string; topicId?: string } {\n const chosen = ids.jsonTopicId || ids.topicId;\n const hrl = chosen ? `hcs://${fileStandard}/${chosen}` : undefined;\n const cdnUrl = ids.jsonTopicId\n ? `https://kiloscribe.com/api/inscription-cdn/${ids.jsonTopicId}?network=${network}`\n : undefined;\n return { hrl, cdnUrl, topicId: chosen };\n}\n"],"names":[],"mappings":"AAOA,SAAS,cAAc,KAAc,KAAiC;AACpE,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,MAAO,IAAgC,GAAG;AAChD,SAAO,OAAO,QAAQ,YAAY,IAAI,KAAA,IAAS,MAAM;AACvD;AAOO,SAAS,gBACd,aACA,QACU;AACV,QAAM,cAAc,cAAc,aAAa,aAAa;AAE5D,QAAM,eACJ,cAAc,aAAa,UAAU,KACrC,cAAc,aAAa,SAAS,KACpC,cAAc,QAAQ,SAAS,KAC/B,cAAc,QAAQ,UAAU;AAElC,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,EAAA;AAEb;AAOO,SAAS,sBACd,KACA,SACA,eAAuB,KAC8B;AACrD,QAAM,SAAS,IAAI,eAAe,IAAI;AACtC,QAAM,MAAM,SAAS,SAAS,YAAY,IAAI,MAAM,KAAK;AACzD,QAAM,SAAS,IAAI,cACf,8CAA8C,IAAI,WAAW,YAAY,OAAO,KAChF;AACJ,SAAO,EAAE,KAAK,QAAQ,SAAS,OAAA;AACjC;"}
@@ -1,57 +1,57 @@
1
- function createInscriptionSuccess(params) {
2
- const { hrl, topicId, standard, cdnUrl, transactionId, metadata } = params;
3
- return {
4
- success: true,
5
- type: "inscription",
6
- title: `${standard} Hashinal Inscription Complete`,
7
- message: `Successfully inscribed "${metadata.name || "your content"}" as a ${standard} Hashinal. The content is now ready for NFT minting.`,
8
- inscription: {
9
- hrl,
10
- topicId,
11
- standard,
12
- cdnUrl,
13
- transactionId
14
- },
15
- metadata,
16
- nextSteps: {
17
- primary: "CRITICAL: When minting NFTs, use ONLY the mintingMetadata value as a single string in the metadata array. Do NOT create JSON objects.",
18
- context: 'The metadata parameter for minting should be exactly: ["' + hrl + '"] - just the HRL string in an array, nothing else.',
19
- mintingMetadata: hrl
1
+ import { ContentResolverRegistry } from "@hashgraphonline/standards-sdk";
2
+ async function resolveContent(input, providedMimeType, providedFileName) {
3
+ const trimmedInput = input.trim();
4
+ const resolver = ContentResolverRegistry.getResolver();
5
+ if (!resolver) {
6
+ return handleDirectContent(
7
+ trimmedInput,
8
+ providedMimeType,
9
+ providedFileName
10
+ );
11
+ }
12
+ const referenceId = resolver.extractReferenceId(trimmedInput);
13
+ if (referenceId) {
14
+ try {
15
+ const resolution = await resolver.resolveReference(referenceId);
16
+ return {
17
+ buffer: resolution.content,
18
+ mimeType: resolution.metadata?.mimeType || providedMimeType,
19
+ fileName: resolution.metadata?.fileName || providedFileName,
20
+ wasReference: true
21
+ };
22
+ } catch (error) {
23
+ const errorMsg = error instanceof Error ? error.message : "Unknown error resolving reference";
24
+ throw new Error(`Reference resolution failed: ${errorMsg}`);
20
25
  }
21
- };
26
+ }
27
+ return handleDirectContent(trimmedInput, providedMimeType, providedFileName);
22
28
  }
23
- function createInscriptionQuote(params) {
24
- const { totalCostHbar, validUntil, breakdown, content } = params;
25
- return {
26
- success: true,
27
- type: "quote",
28
- title: "Inscription Cost Quote",
29
- message: `Estimated cost to inscribe "${content.name || "your content"}" is ${totalCostHbar} HBAR.`,
30
- quote: {
31
- totalCostHbar,
32
- validUntil,
33
- breakdown
34
- },
35
- content
36
- };
37
- }
38
- function createInscriptionError(params) {
39
- const { code, details, suggestions } = params;
40
- return {
41
- success: false,
42
- type: "error",
43
- title: "Inscription Failed",
44
- message: `Unable to complete inscription: ${details}`,
45
- error: {
46
- code,
47
- details,
48
- suggestions
29
+ function handleDirectContent(input, providedMimeType, providedFileName) {
30
+ const isValidBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(input);
31
+ if (isValidBase64) {
32
+ try {
33
+ const buffer2 = Buffer.from(input, "base64");
34
+ return {
35
+ buffer: buffer2,
36
+ mimeType: providedMimeType,
37
+ fileName: providedFileName,
38
+ wasReference: false
39
+ };
40
+ } catch (error) {
41
+ throw new Error(
42
+ "Failed to decode base64 data. Please ensure the data is properly encoded."
43
+ );
49
44
  }
45
+ }
46
+ const buffer = Buffer.from(input, "utf8");
47
+ return {
48
+ buffer,
49
+ mimeType: providedMimeType || "text/plain",
50
+ fileName: providedFileName,
51
+ wasReference: false
50
52
  };
51
53
  }
52
54
  export {
53
- createInscriptionError,
54
- createInscriptionQuote,
55
- createInscriptionSuccess
55
+ resolveContent
56
56
  };
57
57
  //# sourceMappingURL=standards-agent-kit.es51.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es51.js","sources":["../../src/types/inscription-response.ts"],"sourcesContent":["/**\n * Structured response interface for inscription tools\n * Provides a consistent, user-friendly format for inscription results\n */\n\nexport interface InscriptionSuccessResponse {\n success: true;\n type: 'inscription';\n title: string;\n message: string;\n inscription: {\n /** The HRL (Hashinal Reference Link) for minting - e.g., \"hcs://1/0.0.123456\" */\n hrl: string;\n /** Topic ID where the inscription was stored */\n topicId: string;\n /** Type of Hashinal - Static (HCS-5) or Dynamic (HCS-6) */\n standard: 'Static' | 'Dynamic';\n /** CDN URL for direct access to the inscribed content */\n cdnUrl?: string;\n /** Transaction ID of the inscription */\n transactionId?: string;\n };\n metadata: {\n /** Name/title of the inscribed content */\n name?: string;\n /** Creator of the content */\n creator?: string;\n /** Description of the content */\n description?: string;\n /** Content type (image, text, etc.) */\n type?: string;\n /** Additional attributes */\n attributes?: Array<{ trait_type: string; value: string | number }>;\n };\n nextSteps: {\n /** Primary action the user should take next */\n primary: string;\n /** Additional context or options */\n context?: string;\n /** Specific metadata value to use for minting */\n mintingMetadata: string;\n };\n /** HashLink block data (only present when withHashLinkBlocks=true) */\n hashLinkBlock?: {\n /** Block topic ID on HCS */\n blockId: string;\n /** HashLink reference to the block */\n hashLink: string;\n /** Template topic ID */\n template: string;\n /** Block attributes for rendering */\n attributes: BlockAttributes;\n };\n}\n\nexport interface InscriptionQuoteResponse {\n success: true;\n type: 'quote';\n title: string;\n message: string;\n quote: {\n /** Total cost in HBAR */\n totalCostHbar: string;\n /** When the quote expires */\n validUntil: string;\n /** Cost breakdown details */\n breakdown?: CostBreakdown;\n };\n content: {\n /** Name of the content to be inscribed */\n name?: string;\n /** Creator of the content */\n creator?: string;\n /** Type of content */\n type?: string;\n };\n}\n\nexport interface InscriptionErrorResponse {\n success: false;\n type: 'error';\n title: string;\n message: string;\n error: {\n /** Error code for programmatic handling */\n code: string;\n /** Detailed error message */\n details: string;\n /** Suggestions for fixing the error */\n suggestions?: string[];\n };\n}\n\nexport type InscriptionResponse =\n | InscriptionSuccessResponse\n | InscriptionQuoteResponse\n | InscriptionErrorResponse;\n\n/**\n * Helper function to create a successful inscription response\n */\nexport function createInscriptionSuccess(params: {\n hrl: string;\n topicId: string;\n standard: 'Static' | 'Dynamic';\n cdnUrl?: string;\n transactionId?: string;\n metadata: {\n name?: string;\n creator?: string;\n description?: string;\n type?: string;\n attributes?: Array<{ trait_type: string; value: string | number }>;\n };\n}): InscriptionSuccessResponse {\n const { hrl, topicId, standard, cdnUrl, transactionId, metadata } = params;\n\n return {\n success: true,\n type: 'inscription',\n title: `${standard} Hashinal Inscription Complete`,\n message: `Successfully inscribed \"${\n metadata.name || 'your content'\n }\" as a ${standard} Hashinal. The content is now ready for NFT minting.`,\n inscription: {\n hrl,\n topicId,\n standard,\n cdnUrl,\n transactionId,\n },\n metadata,\n nextSteps: {\n primary: 'CRITICAL: When minting NFTs, use ONLY the mintingMetadata value as a single string in the metadata array. Do NOT create JSON objects.',\n context:\n 'The metadata parameter for minting should be exactly: [\"' + hrl + '\"] - just the HRL string in an array, nothing else.',\n mintingMetadata: hrl,\n },\n };\n}\n\n/**\n * Block attributes for HashLink rendering\n */\ninterface BlockAttributes {\n /** Display name */\n name?: string;\n /** Description text */\n description?: string;\n /** Image URL */\n image?: string;\n /** Content type */\n contentType?: string;\n /** Size in bytes */\n size?: number;\n /** Custom metadata */\n metadata?: Record<string, string | number | boolean>;\n}\n\n/**\n * Transfer details in cost breakdown\n */\ninterface TransferDetails {\n to: string;\n amount: string;\n description: string;\n}\n\n/**\n * Cost breakdown details for inscription quote\n */\ninterface CostBreakdown {\n transfers: TransferDetails[];\n baseFee?: number;\n sizeFee?: number;\n networkFee?: number;\n serviceFee?: number;\n totalFee?: number;\n currency?: string;\n}\n\n/**\n * Helper function to create a quote response\n */\nexport function createInscriptionQuote(params: {\n totalCostHbar: string;\n validUntil: string;\n breakdown?: CostBreakdown;\n content: {\n name?: string;\n creator?: string;\n type?: string;\n };\n}): InscriptionQuoteResponse {\n const { totalCostHbar, validUntil, breakdown, content } = params;\n\n return {\n success: true,\n type: 'quote',\n title: 'Inscription Cost Quote',\n message: `Estimated cost to inscribe \"${\n content.name || 'your content'\n }\" is ${totalCostHbar} HBAR.`,\n quote: {\n totalCostHbar,\n validUntil,\n breakdown,\n },\n content,\n };\n}\n\n/**\n * Helper function to create an error response\n */\nexport function createInscriptionError(params: {\n code: string;\n details: string;\n suggestions?: string[];\n}): InscriptionErrorResponse {\n const { code, details, suggestions } = params;\n\n return {\n success: false,\n type: 'error',\n title: 'Inscription Failed',\n message: `Unable to complete inscription: ${details}`,\n error: {\n code,\n details,\n suggestions,\n },\n };\n}\n"],"names":[],"mappings":"AAqGO,SAAS,yBAAyB,QAaV;AAC7B,QAAM,EAAE,KAAK,SAAS,UAAU,QAAQ,eAAe,aAAa;AAEpE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO,GAAG,QAAQ;AAAA,IAClB,SAAS,2BACP,SAAS,QAAQ,cACnB,UAAU,QAAQ;AAAA,IAClB,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SACE,6DAA6D,MAAM;AAAA,MACrE,iBAAiB;AAAA,IAAA;AAAA,EACnB;AAEJ;AA6CO,SAAS,uBAAuB,QASV;AAC3B,QAAM,EAAE,eAAe,YAAY,WAAW,YAAY;AAE1D,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS,+BACP,QAAQ,QAAQ,cAClB,QAAQ,aAAa;AAAA,IACrB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEJ;AAKO,SAAS,uBAAuB,QAIV;AAC3B,QAAM,EAAE,MAAM,SAAS,YAAA,IAAgB;AAEvC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS,mCAAmC,OAAO;AAAA,IACnD,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"standards-agent-kit.es51.js","sources":["../../src/utils/content-resolver.ts"],"sourcesContent":["import { ContentResolverRegistry } from '@hashgraphonline/standards-sdk';\n\nexport interface ContentResolutionResult {\n buffer: Buffer;\n mimeType?: string;\n fileName?: string;\n wasReference?: boolean;\n}\n\n/**\n * Resolves content from various input formats (content-ref, base64, plain text)\n */\nexport async function resolveContent(\n input: string,\n providedMimeType?: string,\n providedFileName?: string\n): Promise<ContentResolutionResult> {\n const trimmedInput = input.trim();\n\n const resolver = ContentResolverRegistry.getResolver();\n\n if (!resolver) {\n return handleDirectContent(\n trimmedInput,\n providedMimeType,\n providedFileName\n );\n }\n\n const referenceId = resolver.extractReferenceId(trimmedInput);\n\n if (referenceId) {\n try {\n const resolution = await resolver.resolveReference(referenceId);\n\n return {\n buffer: resolution.content,\n mimeType: resolution.metadata?.mimeType || providedMimeType,\n fileName: resolution.metadata?.fileName || providedFileName,\n wasReference: true,\n };\n } catch (error) {\n const errorMsg =\n error instanceof Error\n ? error.message\n : 'Unknown error resolving reference';\n throw new Error(`Reference resolution failed: ${errorMsg}`);\n }\n }\n\n return handleDirectContent(trimmedInput, providedMimeType, providedFileName);\n}\n\n/**\n * Handles direct content (base64 or plain text)\n */\nfunction handleDirectContent(\n input: string,\n providedMimeType?: string,\n providedFileName?: string\n): ContentResolutionResult {\n const isValidBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(input);\n\n if (isValidBase64) {\n try {\n const buffer = Buffer.from(input, 'base64');\n return {\n buffer,\n mimeType: providedMimeType,\n fileName: providedFileName,\n wasReference: false,\n };\n } catch (error) {\n throw new Error(\n 'Failed to decode base64 data. Please ensure the data is properly encoded.'\n );\n }\n }\n\n const buffer = Buffer.from(input, 'utf8');\n return {\n buffer,\n mimeType: providedMimeType || 'text/plain',\n fileName: providedFileName,\n wasReference: false,\n };\n}\n"],"names":["buffer"],"mappings":";AAYA,eAAsB,eACpB,OACA,kBACA,kBACkC;AAClC,QAAM,eAAe,MAAM,KAAA;AAE3B,QAAM,WAAW,wBAAwB,YAAA;AAEzC,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,cAAc,SAAS,mBAAmB,YAAY;AAE5D,MAAI,aAAa;AACf,QAAI;AACF,YAAM,aAAa,MAAM,SAAS,iBAAiB,WAAW;AAE9D,aAAO;AAAA,QACL,QAAQ,WAAW;AAAA,QACnB,UAAU,WAAW,UAAU,YAAY;AAAA,QAC3C,UAAU,WAAW,UAAU,YAAY;AAAA,QAC3C,cAAc;AAAA,MAAA;AAAA,IAElB,SAAS,OAAO;AACd,YAAM,WACJ,iBAAiB,QACb,MAAM,UACN;AACN,YAAM,IAAI,MAAM,gCAAgC,QAAQ,EAAE;AAAA,IAC5D;AAAA,EACF;AAEA,SAAO,oBAAoB,cAAc,kBAAkB,gBAAgB;AAC7E;AAKA,SAAS,oBACP,OACA,kBACA,kBACyB;AACzB,QAAM,gBAAgB,yBAAyB,KAAK,KAAK;AAEzD,MAAI,eAAe;AACjB,QAAI;AACF,YAAMA,UAAS,OAAO,KAAK,OAAO,QAAQ;AAC1C,aAAO;AAAA,QACL,QAAAA;AAAAA,QACA,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAc;AAAA,MAAA;AAAA,IAElB,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAEA,QAAM,SAAS,OAAO,KAAK,OAAO,MAAM;AACxC,SAAO;AAAA,IACL;AAAA,IACA,UAAU,oBAAoB;AAAA,IAC9B,UAAU;AAAA,IACV,cAAc;AAAA,EAAA;AAElB;"}
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ const contentRefSchema = z.string().regex(/^content-ref:[a-zA-Z0-9_-]+$/, 'Content reference must be in format "content-ref:[alphanumeric-id]"').describe('Content reference in format "content-ref:[id]"');
3
+ export {
4
+ contentRefSchema
5
+ };
6
+ //# sourceMappingURL=standards-agent-kit.es52.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-agent-kit.es52.js","sources":["../../src/validation/content-ref-schemas.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Validates content reference format\n */\nexport const contentRefSchema = z\n .string()\n .regex(/^content-ref:[a-zA-Z0-9_-]+$/, 'Content reference must be in format \"content-ref:[alphanumeric-id]\"')\n .describe('Content reference in format \"content-ref:[id]\"');\n\n/**\n * Validates content reference or returns error for dumber models\n */\nexport function validateContentRef(input: string): string {\n try {\n return contentRefSchema.parse(input);\n } catch (error) {\n throw new Error(`Invalid content reference format. Expected \"content-ref:[alphanumeric-id]\" but got \"${input}\"`);\n }\n}"],"names":[],"mappings":";AAKO,MAAM,mBAAmB,EAC7B,SACA,MAAM,gCAAgC,qEAAqE,EAC3G,SAAS,gDAAgD;"}
@@ -0,0 +1,43 @@
1
+ import { z } from "zod";
2
+ const hip412FileSchema = z.object({
3
+ uri: z.string().describe("URI of the file"),
4
+ checksum: z.string().optional().describe("SHA-256 checksum of the file"),
5
+ is_default_file: z.boolean().optional().describe("Whether this is the default file"),
6
+ type: z.string().describe("MIME type of the file")
7
+ });
8
+ const hip412AttributeSchema = z.object({
9
+ trait_type: z.string().describe("The trait type"),
10
+ value: z.union([z.string(), z.number()]).describe("The trait value"),
11
+ display_type: z.string().optional().describe("Display type for the attribute")
12
+ });
13
+ const hip412MetadataSchema = z.object({
14
+ name: z.string().describe("Token name (required by HIP-412)"),
15
+ description: z.string().describe("Human readable description (required by HIP-412)"),
16
+ image: z.string().describe("Preview image URI (required by HIP-412)"),
17
+ type: z.string().describe("MIME type (required by HIP-412)"),
18
+ creator: z.string().optional().describe("Creator name or comma-separated names"),
19
+ creatorDID: z.string().optional().describe("Decentralized identifier for creator"),
20
+ checksum: z.string().optional().describe("SHA-256 checksum of the image"),
21
+ format: z.string().optional().default("HIP412@2.0.0").describe("Metadata format version"),
22
+ files: z.array(hip412FileSchema).optional().describe("Array of files for multi-file NFTs"),
23
+ attributes: z.array(hip412AttributeSchema).optional().describe("NFT attributes/traits"),
24
+ properties: z.record(z.unknown()).optional().describe("Additional properties")
25
+ });
26
+ function validateHIP412Metadata(metadata) {
27
+ try {
28
+ return hip412MetadataSchema.parse(metadata);
29
+ } catch (error) {
30
+ if (error instanceof z.ZodError) {
31
+ const issues = error.errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("; ");
32
+ throw new Error(`HIP-412 metadata validation failed: ${issues}`);
33
+ }
34
+ throw error;
35
+ }
36
+ }
37
+ export {
38
+ hip412AttributeSchema,
39
+ hip412FileSchema,
40
+ hip412MetadataSchema,
41
+ validateHIP412Metadata
42
+ };
43
+ //# sourceMappingURL=standards-agent-kit.es53.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-agent-kit.es53.js","sources":["../../src/validation/hip412-schemas.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * HIP-412 file schema for multi-file NFTs\n */\nexport const hip412FileSchema = z.object({\n uri: z.string().describe('URI of the file'),\n checksum: z.string().optional().describe('SHA-256 checksum of the file'),\n is_default_file: z.boolean().optional().describe('Whether this is the default file'),\n type: z.string().describe('MIME type of the file'),\n});\n\n/**\n * HIP-412 attribute schema for NFT traits\n */\nexport const hip412AttributeSchema = z.object({\n trait_type: z.string().describe('The trait type'),\n value: z.union([z.string(), z.number()]).describe('The trait value'),\n display_type: z.string().optional().describe('Display type for the attribute'),\n});\n\n/**\n * HIP-412 compliant metadata schema for Hedera NFTs\n */\nexport const hip412MetadataSchema = z.object({\n name: z.string().describe('Token name (required by HIP-412)'),\n description: z.string().describe('Human readable description (required by HIP-412)'),\n image: z.string().describe('Preview image URI (required by HIP-412)'),\n type: z.string().describe('MIME type (required by HIP-412)'),\n creator: z.string().optional().describe('Creator name or comma-separated names'),\n creatorDID: z.string().optional().describe('Decentralized identifier for creator'),\n checksum: z.string().optional().describe('SHA-256 checksum of the image'),\n format: z.string().optional().default('HIP412@2.0.0').describe('Metadata format version'),\n files: z.array(hip412FileSchema).optional().describe('Array of files for multi-file NFTs'),\n attributes: z.array(hip412AttributeSchema).optional().describe('NFT attributes/traits'),\n properties: z.record(z.unknown()).optional().describe('Additional properties'),\n});\n\n/**\n * Validates metadata against HIP-412 standard\n */\nexport function validateHIP412Metadata(metadata: unknown): z.infer<typeof hip412MetadataSchema> {\n try {\n return hip412MetadataSchema.parse(metadata);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const issues = error.errors.map(err => `${err.path.join('.')}: ${err.message}`).join('; ');\n throw new Error(`HIP-412 metadata validation failed: ${issues}`);\n }\n throw error;\n }\n}"],"names":[],"mappings":";AAKO,MAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,KAAK,EAAE,SAAS,SAAS,iBAAiB;AAAA,EAC1C,UAAU,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,8BAA8B;AAAA,EACvE,iBAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,SAAS,kCAAkC;AAAA,EACnF,MAAM,EAAE,OAAA,EAAS,SAAS,uBAAuB;AACnD,CAAC;AAKM,MAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,YAAY,EAAE,SAAS,SAAS,gBAAgB;AAAA,EAChD,OAAO,EAAE,MAAM,CAAC,EAAE,OAAA,GAAU,EAAE,OAAA,CAAQ,CAAC,EAAE,SAAS,iBAAiB;AAAA,EACnE,cAAc,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,gCAAgC;AAC/E,CAAC;AAKM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,MAAM,EAAE,SAAS,SAAS,kCAAkC;AAAA,EAC5D,aAAa,EAAE,SAAS,SAAS,kDAAkD;AAAA,EACnF,OAAO,EAAE,SAAS,SAAS,yCAAyC;AAAA,EACpE,MAAM,EAAE,SAAS,SAAS,iCAAiC;AAAA,EAC3D,SAAS,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,uCAAuC;AAAA,EAC/E,YAAY,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,sCAAsC;AAAA,EACjF,UAAU,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,+BAA+B;AAAA,EACxE,QAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,cAAc,EAAE,SAAS,yBAAyB;AAAA,EACxF,OAAO,EAAE,MAAM,gBAAgB,EAAE,SAAA,EAAW,SAAS,oCAAoC;AAAA,EACzF,YAAY,EAAE,MAAM,qBAAqB,EAAE,SAAA,EAAW,SAAS,uBAAuB;AAAA,EACtF,YAAY,EAAE,OAAO,EAAE,QAAA,CAAS,EAAE,WAAW,SAAS,uBAAuB;AAC/E,CAAC;AAKM,SAAS,uBAAuB,UAAyD;AAC9F,MAAI;AACF,WAAO,qBAAqB,MAAM,QAAQ;AAAA,EAC5C,SAAS,OAAO;AACd,QAAI,iBAAiB,EAAE,UAAU;AAC/B,YAAM,SAAS,MAAM,OAAO,IAAI,CAAA,QAAO,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,OAAO,EAAE,EAAE,KAAK,IAAI;AACzF,YAAM,IAAI,MAAM,uCAAuC,MAAM,EAAE;AAAA,IACjE;AACA,UAAM;AAAA,EACR;AACF;"}
@@ -0,0 +1,22 @@
1
+ function generateDefaultMetadata(params) {
2
+ const defaultName = params.fileName?.replace(/\.[^/.]+$/, "") || "Hashinal NFT";
3
+ let defaultType = "media";
4
+ if (params.mimeType?.startsWith("image/")) {
5
+ defaultType = "image";
6
+ } else if (params.mimeType?.startsWith("video/")) {
7
+ defaultType = "video";
8
+ } else if (params.mimeType?.startsWith("audio/")) {
9
+ defaultType = "audio";
10
+ }
11
+ return {
12
+ name: params.name || defaultName,
13
+ creator: params.creator || params.operatorAccount,
14
+ description: params.description || `${defaultType.charAt(0).toUpperCase() + defaultType.slice(1)} NFT inscribed as Hashinal`,
15
+ type: params.type || defaultType,
16
+ image: ""
17
+ };
18
+ }
19
+ export {
20
+ generateDefaultMetadata
21
+ };
22
+ //# sourceMappingURL=standards-agent-kit.es54.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-agent-kit.es54.js","sources":["../../src/utils/metadata-defaults.ts"],"sourcesContent":["/**\n * Generates default metadata for NFT inscription\n */\nexport function generateDefaultMetadata(params: {\n name?: string;\n creator?: string;\n description?: string;\n type?: string;\n fileName?: string;\n mimeType?: string;\n operatorAccount: string;\n}): {\n name: string;\n creator: string;\n description: string;\n type: string;\n image: string;\n} {\n const defaultName = params.fileName?.replace(/\\.[^/.]+$/, '') || 'Hashinal NFT';\n let defaultType = 'media';\n if (params.mimeType?.startsWith('image/')) {\n defaultType = 'image';\n } else if (params.mimeType?.startsWith('video/')) {\n defaultType = 'video';\n } else if (params.mimeType?.startsWith('audio/')) {\n defaultType = 'audio';\n }\n\n return {\n name: params.name || defaultName,\n creator: params.creator || params.operatorAccount,\n description: params.description || `${defaultType.charAt(0).toUpperCase() + defaultType.slice(1)} NFT inscribed as Hashinal`,\n type: params.type || defaultType,\n image: '',\n };\n}"],"names":[],"mappings":"AAGO,SAAS,wBAAwB,QActC;AACA,QAAM,cAAc,OAAO,UAAU,QAAQ,aAAa,EAAE,KAAK;AACjE,MAAI,cAAc;AAClB,MAAI,OAAO,UAAU,WAAW,QAAQ,GAAG;AACzC,kBAAc;AAAA,EAChB,WAAW,OAAO,UAAU,WAAW,QAAQ,GAAG;AAChD,kBAAc;AAAA,EAChB,WAAW,OAAO,UAAU,WAAW,QAAQ,GAAG;AAChD,kBAAc;AAAA,EAChB;AAEA,SAAO;AAAA,IACL,MAAM,OAAO,QAAQ;AAAA,IACrB,SAAS,OAAO,WAAW,OAAO;AAAA,IAClC,aAAa,OAAO,eAAe,GAAG,YAAY,OAAO,CAAC,EAAE,YAAA,IAAgB,YAAY,MAAM,CAAC,CAAC;AAAA,IAChG,MAAM,OAAO,QAAQ;AAAA,IACrB,OAAO;AAAA,EAAA;AAEX;"}