@hashgraphonline/standards-sdk 0.0.125 → 0.0.126
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.
- package/dist/cjs/hcs-11/client.d.ts.map +1 -1
- package/dist/cjs/hcs-11/mcp-server-builder.d.ts +107 -2
- package/dist/cjs/hcs-11/mcp-server-builder.d.ts.map +1 -1
- package/dist/cjs/index-U-8_6nvw-CzeOzxnG.cjs +11 -0
- package/dist/cjs/{index-CHar8dVv-DHlTexOJ.cjs.map → index-U-8_6nvw-CzeOzxnG.cjs.map} +1 -1
- package/dist/cjs/index-w29ekq70.cjs +32 -0
- package/dist/cjs/index-w29ekq70.cjs.map +1 -0
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/cjs/{index-CHar8dVv-DHlTexOJ.cjs → standards-sdk.es34-ChBjKBbQ-Byois_9v.cjs} +2 -2
- package/dist/cjs/standards-sdk.es34-ChBjKBbQ-Byois_9v.cjs.map +1 -0
- package/dist/es/hcs-11/client.d.ts.map +1 -1
- package/dist/es/hcs-11/mcp-server-builder.d.ts +107 -2
- package/dist/es/hcs-11/mcp-server-builder.d.ts.map +1 -1
- package/dist/es/standards-sdk.es13.js +153 -8
- package/dist/es/standards-sdk.es13.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +2 -1
- package/dist/es/standards-sdk.es14.js.map +1 -1
- package/dist/es/standards-sdk.es26.js +15225 -896
- package/dist/es/standards-sdk.es26.js.map +1 -1
- package/dist/es/standards-sdk.es27.js +1 -1
- package/dist/es/standards-sdk.es28.js +1 -1
- package/dist/es/standards-sdk.es29.js +1 -1
- package/dist/es/standards-sdk.es30.js +1 -1
- package/dist/es/standards-sdk.es31.js +1 -1
- package/dist/es/standards-sdk.es34.js +41 -7134
- package/dist/es/standards-sdk.es34.js.map +1 -1
- package/dist/es/standards-sdk.es35.js +7134 -41
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +7138 -0
- package/dist/es/standards-sdk.es36.js.map +1 -0
- package/dist/umd/hcs-11/client.d.ts.map +1 -1
- package/dist/umd/hcs-11/mcp-server-builder.d.ts +107 -2
- package/dist/umd/hcs-11/mcp-server-builder.d.ts.map +1 -1
- package/dist/umd/standards-sdk.umd.js +54 -24
- package/dist/umd/standards-sdk.umd.js.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/index-6LoriFtz.cjs +0 -11
- package/dist/cjs/index-6LoriFtz.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es13.js","sources":["../../src/hcs-11/mcp-server-builder.ts"],"sourcesContent":["import {\n ProfileType,\n MCPServerConfig,\n MCPServerDetails,\n MCPServerConnectionInfo,\n MCPServerVerification,\n MCPServerHost,\n MCPServerResource,\n MCPServerTool,\n MCPServerCapability,\n SocialPlatform,\n VerificationType,\n SocialLink,\n} from './types';\nimport { Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\n\n/**\n * MCPServerBuilder is a builder class for creating MCP server configurations.\n * It provides a fluent interface for setting various properties of the MCP server.\n *\n * Example usage:\n * ```typescript\n * const mcpBuilder = new MCPServerBuilder();\n * mcpBuilder.setName('My MCP Server');\n * mcpBuilder.setDescription('This is my MCP server for AI integration');\n * mcpBuilder.setVersion('2024-06-01');\n * mcpBuilder.setConnectionInfo('https://mcp.example.com', 'sse');\n * mcpBuilder.setServices([MCPServerCapability.TOOL_PROVIDER, MCPServerCapability.API_INTEGRATION]);\n * mcpBuilder.setNetworkType('mainnet');\n * mcpBuilder.addVerificationDNS('example.com', 'mcp-verify');\n * const serverConfig = mcpBuilder.build();\n * ```\n */\nexport class MCPServerBuilder {\n private config: Partial<MCPServerConfig> = {\n mcpServer: {} as MCPServerDetails,\n };\n private socials: SocialLink[] = [];\n private logger: Logger;\n\n constructor() {\n this.logger = Logger.getInstance({\n module: 'MCPServerBuilder',\n });\n }\n\n /**\n * Sets the display name of the MCP server\n */\n setName(name: string): this {\n this.config.name = name;\n return this;\n }\n\n /**\n * Sets the alias for the MCP server\n */\n setAlias(alias: string): this {\n this.config.alias = alias;\n return this;\n }\n\n /**\n * Sets the bio/description for the MCP server profile\n */\n setBio(bio: string): this {\n this.config.bio = bio;\n return this;\n }\n\n /**\n * @deprecated Use setBio instead\n */\n setDescription(description: string): this {\n return this.setBio(description);\n }\n\n /**\n * Sets the version of the MCP server\n */\n setVersion(version: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.version = version;\n return this;\n }\n\n /**\n * Sets the connection information for the MCP server\n */\n setConnectionInfo(url: string, transport: 'stdio' | 'sse'): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.connectionInfo = {\n url,\n transport,\n };\n return this;\n }\n\n /**\n * Sets the detailed description for the MCP server capabilities\n */\n setServerDescription(description: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.description = description;\n return this;\n }\n\n /**\n * Sets the services/capabilities provided by the MCP server\n */\n setServices(services: MCPServerCapability[]): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.services = services;\n return this;\n }\n\n /**\n * Sets the minimum host version requirements\n */\n setHostRequirements(minVersion?: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.host = { minVersion };\n return this;\n }\n\n /**\n * Sets the MCP capabilities supported by the server\n */\n setCapabilities(capabilities: string[]): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.capabilities = capabilities;\n return this;\n }\n\n /**\n * Adds a resource that the MCP server exposes\n */\n addResource(name: string, description: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n if (!this.config.mcpServer.resources) {\n this.config.mcpServer.resources = [];\n }\n this.config.mcpServer.resources.push({ name, description });\n return this;\n }\n\n /**\n * Adds a tool that the MCP server provides\n */\n addTool(name: string, description: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n if (!this.config.mcpServer.tools) {\n this.config.mcpServer.tools = [];\n }\n this.config.mcpServer.tools.push({ name, description });\n return this;\n }\n\n /**\n * Sets information about who maintains the MCP server\n */\n setMaintainer(maintainer: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.maintainer = maintainer;\n return this;\n }\n\n /**\n * Sets the URL to the source code repository\n */\n setRepository(repository: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.repository = repository;\n return this;\n }\n\n /**\n * Sets the URL to the server documentation\n */\n setDocs(docs: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.docs = docs;\n return this;\n }\n\n /**\n * Adds DNS-based verification of endpoint ownership\n */\n addVerificationDNS(domain: string, dnsField?: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.verification = {\n type: VerificationType.DNS,\n value: domain,\n dns_field: dnsField,\n };\n return this;\n }\n\n /**\n * Adds signature-based verification of endpoint ownership\n */\n addVerificationSignature(signature: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.verification = {\n type: VerificationType.SIGNATURE,\n value: signature,\n };\n return this;\n }\n\n /**\n * Adds challenge-based verification of endpoint ownership\n */\n addVerificationChallenge(challengePath?: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.verification = {\n type: VerificationType.CHALLENGE,\n value: '',\n challenge_path: challengePath,\n };\n return this;\n }\n\n /**\n * Adds a social media link to the profile\n */\n addSocial(platform: SocialPlatform, handle: string): this {\n const existingSocial = this.socials.find(s => s.platform === platform);\n\n if (!existingSocial) {\n this.socials.push({ platform, handle });\n } else {\n existingSocial.handle = handle;\n }\n\n return this;\n }\n\n /**\n * Sets the profile picture for the MCP server\n */\n setProfilePicture(pfpBuffer: Buffer, pfpFileName: string): this {\n this.config.pfpBuffer = pfpBuffer;\n this.config.pfpFileName = pfpFileName;\n return this;\n }\n\n /**\n * Sets a reference to an existing profile picture\n */\n setExistingProfilePicture(pfpTopicId: string): this {\n this.config.existingPfpTopicId = pfpTopicId;\n return this;\n }\n\n /**\n * Sets the network type (mainnet or testnet)\n */\n setNetworkType(network: NetworkType): this {\n this.config.network = network;\n return this;\n }\n\n /**\n * Sets an existing account to use for the MCP server\n */\n setExistingAccount(accountId: string, privateKey: string): this {\n this.config.existingAccount = {\n accountId,\n privateKey,\n };\n return this;\n }\n\n /**\n * Builds and validates the MCP server configuration\n */\n build(): MCPServerConfig {\n if (!this.config.name) {\n throw new Error('MCP server name is required');\n }\n\n if (!this.config.network) {\n throw new Error('Network type is required');\n }\n\n if (!this.config.mcpServer) {\n throw new Error('MCP server details are required');\n }\n\n if (!this.config.mcpServer.version) {\n throw new Error('MCP server version is required');\n }\n\n if (!this.config.mcpServer.connectionInfo) {\n throw new Error('MCP server connection info is required');\n }\n\n if (!this.config.mcpServer.services || this.config.mcpServer.services.length === 0) {\n throw new Error('At least one MCP service type is required');\n }\n\n if (!this.config.mcpServer.description) {\n throw new Error('MCP server description is required');\n }\n\n if (!this.config.bio) {\n this.logger.warn('No bio provided for MCP server profile');\n }\n\n if (!this.config.pfpBuffer && !this.config.existingPfpTopicId) {\n this.logger.warn('No profile picture provided or referenced');\n }\n\n // Include social links in the final configuration\n if (this.socials.length > 0) {\n return {\n ...this.config as MCPServerConfig,\n socials: this.socials\n };\n }\n\n return this.config as MCPServerConfig;\n }\n}"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es13.js","sources":["../../src/hcs-11/mcp-server-builder.ts"],"sourcesContent":["import {\n MCPServerConfig,\n MCPServerDetails,\n MCPServerConnectionInfo,\n MCPServerVerification,\n MCPServerHost,\n MCPServerResource,\n MCPServerTool,\n MCPServerCapability,\n SocialPlatform,\n VerificationType,\n SocialLink,\n} from './types';\nimport { Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\n\n/**\n * MCPServerBuilder is a builder class for creating MCP server configurations.\n * It provides a fluent interface for setting various properties of the MCP server.\n *\n * Example usage:\n * ```typescript\n * const mcpBuilder = new MCPServerBuilder();\n * mcpBuilder.setName('My MCP Server');\n * mcpBuilder.setServerDescription('This is my MCP server for AI integration');\n * mcpBuilder.setVersion('2024-06-01');\n * mcpBuilder.setConnectionInfo('https://mcp.example.com', 'sse');\n * mcpBuilder.setServices([MCPServerCapability.TOOL_PROVIDER, MCPServerCapability.API_INTEGRATION]);\n * mcpBuilder.setNetworkType('mainnet');\n * mcpBuilder.addVerificationDNS('example.com', 'mcp-verify');\n * const serverConfig = mcpBuilder.build();\n * ```\n */\nexport class MCPServerBuilder {\n private config: Partial<MCPServerConfig> = {\n mcpServer: {} as MCPServerDetails,\n };\n private socials: SocialLink[] = [];\n private logger: Logger;\n\n constructor() {\n this.logger = Logger.getInstance({\n module: 'MCPServerBuilder',\n });\n }\n\n /**\n * Sets the display name of the MCP server\n *\n * @param name The display name for the MCP server profile\n */\n setName(name: string): this {\n this.config.name = name;\n return this;\n }\n\n /**\n * Sets the alias for the MCP server\n *\n * @param alias Alternative identifier for the MCP server\n */\n setAlias(alias: string): this {\n this.config.alias = alias;\n return this;\n }\n\n /**\n * Sets the bio/description for the MCP server profile\n *\n * @param bio Brief description or biography for the MCP server\n */\n setBio(bio: string): this {\n this.config.bio = bio;\n return this;\n }\n\n /**\n * @deprecated Use setBio instead\n */\n setDescription(description: string): this {\n return this.setBio(description);\n }\n\n /**\n * Sets the version of the MCP server\n *\n * @param version The MCP server version (e.g., \"2024-06-01\")\n */\n setVersion(version: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.version = version;\n return this;\n }\n\n /**\n * Sets the connection information for the MCP server\n *\n * @param url Base URL for the MCP server (e.g., \"https://mcp.example.com\")\n * @param transport Transport type (\"stdio\" or \"sse\")\n */\n setConnectionInfo(url: string, transport: 'stdio' | 'sse'): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n const connectionInfo: MCPServerConnectionInfo = {\n url,\n transport,\n };\n\n this.config.mcpServer.connectionInfo = connectionInfo;\n return this;\n }\n\n /**\n * Sets the detailed description for the MCP server capabilities\n *\n * @param description Detailed description of server functionality\n */\n setServerDescription(description: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.description = description;\n return this;\n }\n\n /**\n * Sets the services/capabilities provided by the MCP server\n *\n * @param services Array of service types offered by this MCP server\n */\n setServices(services: MCPServerCapability[]): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.services = services;\n return this;\n }\n\n /**\n * Sets the minimum host version requirements\n *\n * @param minVersion Minimum host version required (e.g., \"2024-11-05\")\n */\n setHostRequirements(minVersion?: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n const hostInfo: MCPServerHost = {\n minVersion,\n };\n\n this.config.mcpServer.host = hostInfo;\n return this;\n }\n\n /**\n * Sets the MCP capabilities supported by the server\n *\n * @param capabilities Array of capability strings (e.g., [\"resources.get\", \"tools.invoke\"])\n */\n setCapabilities(capabilities: string[]): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.capabilities = capabilities;\n return this;\n }\n\n /**\n * Adds a resource that the MCP server exposes\n *\n * @param name Resource name identifier (e.g., \"hcs_topics\")\n * @param description Human-readable description of the resource\n */\n addResource(name: string, description: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n if (!this.config.mcpServer.resources) {\n this.config.mcpServer.resources = [];\n }\n\n const resource: MCPServerResource = {\n name,\n description,\n };\n\n this.config.mcpServer.resources.push(resource);\n return this;\n }\n\n /**\n * Sets all resources the MCP server exposes (replaces existing resources)\n *\n * @param resources Array of resource objects with name and description\n */\n setResources(resources: MCPServerResource[]): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n this.config.mcpServer.resources = resources;\n return this;\n }\n\n /**\n * Adds a tool that the MCP server provides\n *\n * @param name Tool name identifier (e.g., \"topic_submit\")\n * @param description Human-readable description of what the tool does\n */\n addTool(name: string, description: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n if (!this.config.mcpServer.tools) {\n this.config.mcpServer.tools = [];\n }\n\n const tool: MCPServerTool = {\n name,\n description,\n };\n\n this.config.mcpServer.tools.push(tool);\n return this;\n }\n\n /**\n * Sets all tools the MCP server provides (replaces existing tools)\n *\n * @param tools Array of tool objects with name and description\n */\n setTools(tools: MCPServerTool[]): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n this.config.mcpServer.tools = tools;\n return this;\n }\n\n /**\n * Sets information about who maintains the MCP server\n *\n * @param maintainer Organization or entity maintaining this MCP server\n */\n setMaintainer(maintainer: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.maintainer = maintainer;\n return this;\n }\n\n /**\n * Sets the URL to the source code repository\n *\n * @param repository URL to source code repository\n */\n setRepository(repository: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.repository = repository;\n return this;\n }\n\n /**\n * Sets the URL to the server documentation\n *\n * @param docs URL to server documentation\n */\n setDocs(docs: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n this.config.mcpServer.docs = docs;\n return this;\n }\n\n /**\n * Sets the verification information for the MCP server\n *\n * @param verification Complete verification object\n */\n setVerification(verification: MCPServerVerification): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n this.config.mcpServer.verification = verification;\n return this;\n }\n\n /**\n * Adds DNS-based verification of endpoint ownership\n *\n * For DNS verification, the MCP server owner must add a DNS TXT record to their domain with:\n * - Name: By default, `_hedera` or a custom name specified in `dnsField` (automatically prefixed with `_`)\n * - Value: Equal to their Hedera account ID (e.g., `0.0.12345678`)\n *\n * Example DNS record:\n * ```\n * _hedera.example.com. 3600 IN TXT \"0.0.12345678\"\n * ```\n *\n * @param domain The fully qualified domain name to check (e.g., \"example.com\")\n * @param dnsField Optional custom DNS TXT record name (defaults to \"hedera\")\n */\n addVerificationDNS(domain: string, dnsField?: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n const verification: MCPServerVerification = {\n type: VerificationType.DNS,\n value: domain,\n dns_field: dnsField,\n };\n\n this.config.mcpServer.verification = verification;\n return this;\n }\n\n /**\n * Adds signature-based verification of endpoint ownership\n *\n * For signature verification:\n * 1. The message to be signed must be the server URL exactly as it appears in the connectionInfo.url field\n * 2. The signature must be created using the ED25519 key associated with the Hedera account\n * 3. The signature must be encoded as a hexadecimal string with no `0x` prefix\n *\n * @param signature Hex-encoded ED25519 signature of the server URL\n */\n addVerificationSignature(signature: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n const verification: MCPServerVerification = {\n type: VerificationType.SIGNATURE,\n value: signature,\n };\n\n this.config.mcpServer.verification = verification;\n return this;\n }\n\n /**\n * Adds challenge-based verification of endpoint ownership\n *\n * For challenge verification:\n * 1. The MCP server must expose an endpoint that responds to HTTP GET requests\n * 2. The endpoint path defaults to \"/hedera-verification\" or can be customized with challengePath\n * 3. The server must respond with a JSON object containing:\n * ```json\n * {\n * \"accountId\": \"0.0.12345678\",\n * \"timestamp\": 1620000000000,\n * \"signature\": \"a1b2c3d4e5f6...\"\n * }\n * ```\n * 4. The signature must be an ED25519 signature of the UTF-8 encoded string `{accountId}:{timestamp}`\n *\n * @param challengePath Optional custom challenge endpoint path (defaults to \"hedera-verification\")\n */\n addVerificationChallenge(challengePath?: string): this {\n if (!this.config.mcpServer) {\n this.config.mcpServer = {} as MCPServerDetails;\n }\n\n const verification: MCPServerVerification = {\n type: VerificationType.CHALLENGE,\n value: '',\n challenge_path: challengePath,\n };\n\n this.config.mcpServer.verification = verification;\n return this;\n }\n\n /**\n * Adds a social media link to the profile\n *\n * @param platform Social media platform (e.g., \"twitter\", \"github\")\n * @param handle Username on the platform (e.g., \"@username\", \"username\")\n */\n addSocial(platform: SocialPlatform, handle: string): this {\n const existingSocial = this.socials.find(s => s.platform === platform);\n\n if (!existingSocial) {\n const socialLink: SocialLink = {\n platform,\n handle,\n };\n\n this.socials.push(socialLink);\n } else {\n existingSocial.handle = handle;\n }\n\n return this;\n }\n\n /**\n * Sets all social media links for the profile (replaces existing links)\n *\n * @param socials Array of social media links\n */\n setSocials(socials: SocialLink[]): this {\n this.socials = socials;\n return this;\n }\n\n /**\n * Sets the profile picture for the MCP server\n *\n * @param pfpBuffer Buffer containing the profile picture data\n * @param pfpFileName Filename for the profile picture including extension\n */\n setProfilePicture(pfpBuffer: Buffer, pfpFileName: string): this {\n this.config.pfpBuffer = pfpBuffer;\n this.config.pfpFileName = pfpFileName;\n return this;\n }\n\n /**\n * Sets a reference to an existing profile picture\n *\n * @param pfpTopicId Topic ID containing the profile picture (for reuse)\n */\n setExistingProfilePicture(pfpTopicId: string): this {\n this.config.existingPfpTopicId = pfpTopicId;\n return this;\n }\n\n /**\n * Sets the network type (mainnet or testnet)\n *\n * @param network Network type (\"mainnet\" or \"testnet\")\n */\n setNetworkType(network: NetworkType): this {\n this.config.network = network;\n return this;\n }\n\n /**\n * Sets an existing account to use for the MCP server\n *\n * @param accountId Hedera account ID (e.g., \"0.0.12345678\")\n * @param privateKey ED25519 private key as a string\n */\n setExistingAccount(accountId: string, privateKey: string): this {\n this.config.existingAccount = {\n accountId,\n privateKey,\n };\n return this;\n }\n\n /**\n * Builds and validates the MCP server configuration\n *\n * @returns Complete MCPServerConfig object ready for use\n * @throws Error if required fields are missing\n */\n build(): MCPServerConfig {\n if (!this.config.name) {\n throw new Error('MCP server name is required');\n }\n\n if (!this.config.network) {\n throw new Error('Network type is required');\n }\n\n if (!this.config.mcpServer) {\n throw new Error('MCP server details are required');\n }\n\n if (!this.config.mcpServer.version) {\n throw new Error('MCP server version is required');\n }\n\n if (!this.config.mcpServer.connectionInfo) {\n throw new Error('MCP server connection info is required');\n }\n\n if (\n !this.config.mcpServer.services ||\n this.config.mcpServer.services.length === 0\n ) {\n throw new Error('At least one MCP service type is required');\n }\n\n if (!this.config.mcpServer.description) {\n throw new Error('MCP server description is required');\n }\n\n if (!this.config.bio) {\n this.logger.warn('No bio provided for MCP server profile');\n }\n\n if (!this.config.pfpBuffer && !this.config.existingPfpTopicId) {\n this.logger.warn('No profile picture provided or referenced');\n }\n\n // Include social links in the final configuration\n if (this.socials.length > 0) {\n return {\n ...(this.config as MCPServerConfig),\n socials: this.socials,\n };\n }\n\n return this.config as MCPServerConfig;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -491,11 +491,12 @@ class HCS11Client {
|
|
|
491
491
|
}
|
|
492
492
|
};
|
|
493
493
|
progressReporter.submitting("Submitting profile to Hedera network", 30);
|
|
494
|
+
const privateKey = this.keyType === "ed25519" ? PrivateKey.fromStringED25519(this.auth.privateKey) : PrivateKey.fromStringECDSA(this.auth.privateKey);
|
|
494
495
|
const inscriptionResponse = this.auth.privateKey ? await inscribe(
|
|
495
496
|
input,
|
|
496
497
|
{
|
|
497
498
|
accountId: this.auth.operatorId,
|
|
498
|
-
privateKey
|
|
499
|
+
privateKey,
|
|
499
500
|
network: this.network
|
|
500
501
|
},
|
|
501
502
|
inscriptionOptions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es14.js","sources":["../../src/hcs-11/client.ts"],"sourcesContent":["import {\n AccountId,\n AccountUpdateTransaction,\n Client,\n PrivateKey,\n Status,\n Transaction,\n} from '@hashgraph/sdk';\nimport {\n inscribe,\n inscribeWithSigner,\n InscriptionInput,\n InscriptionOptions,\n} from '../inscribe';\nimport { Logger, detectKeyTypeFromString } from '../utils';\nimport * as mime from 'mime-types';\nimport { z, ZodIssue } from 'zod';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport { ProgressReporter } from '../utils/progress-reporter';\nimport { HederaMirrorNode } from '../services';\nimport { TopicInfo } from '../services/types';\nimport {\n ProfileType,\n AIAgentType,\n AIAgentCapability,\n SocialLink,\n PersonalProfile,\n AIAgentProfile,\n HCS11Profile,\n HCS11Auth,\n HCS11ClientConfig,\n TransactionResult,\n InscribeProfileResponse,\n InscribeImageResponse,\n AgentMetadata,\n InscribeImageOptions,\n InscribeProfileOptions,\n capabilityNameToCapabilityMap,\n MCPServerDetails,\n MCPServerProfile,\n MCPServerCapability,\n VerificationType,\n} from './types';\n\nconst SocialLinkSchema = z.object({\n platform: z.string().min(1),\n handle: z.string().min(1),\n});\n\nconst AIAgentDetailsSchema = z.object({\n type: z.nativeEnum(AIAgentType),\n capabilities: z.array(z.nativeEnum(AIAgentCapability)).min(1),\n model: z.string().min(1),\n creator: z.string().optional(),\n});\n\nconst MCPServerConnectionInfoSchema = z.object({\n url: z.string().min(1),\n transport: z.enum(['stdio', 'sse']),\n});\n\nconst MCPServerVerificationSchema = z.object({\n type: z.nativeEnum(VerificationType),\n value: z.string(),\n dns_field: z.string().optional(),\n challenge_path: z.string().optional(),\n});\n\nconst MCPServerHostSchema = z.object({\n minVersion: z.string().optional(),\n});\n\nconst MCPServerResourceSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n});\n\nconst MCPServerToolSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n});\n\nconst MCPServerDetailsSchema = z.object({\n version: z.string().min(1),\n connectionInfo: MCPServerConnectionInfoSchema,\n services: z.array(z.nativeEnum(MCPServerCapability)).min(1),\n description: z.string().min(1),\n verification: MCPServerVerificationSchema.optional(),\n host: MCPServerHostSchema.optional(),\n capabilities: z.array(z.string()).optional(),\n resources: z.array(MCPServerResourceSchema).optional(),\n tools: z.array(MCPServerToolSchema).optional(),\n maintainer: z.string().optional(),\n repository: z.string().optional(),\n docs: z.string().optional(),\n});\n\nconst BaseProfileSchema = z.object({\n version: z.string().min(1),\n type: z.nativeEnum(ProfileType),\n display_name: z.string().min(1),\n alias: z.string().optional(),\n bio: z.string().optional(),\n socials: z.array(SocialLinkSchema).optional(),\n profileImage: z.string().optional(),\n properties: z.record(z.any()).optional(),\n inboundTopicId: z.string().optional(),\n outboundTopicId: z.string().optional(),\n});\n\nconst PersonalProfileSchema = BaseProfileSchema.extend({\n type: z.literal(ProfileType.PERSONAL),\n language: z.string().optional(),\n timezone: z.string().optional(),\n});\n\nconst AIAgentProfileSchema = BaseProfileSchema.extend({\n type: z.literal(ProfileType.AI_AGENT),\n aiAgent: AIAgentDetailsSchema,\n});\n\nconst MCPServerProfileSchema = BaseProfileSchema.extend({\n type: z.literal(ProfileType.MCP_SERVER),\n mcpServer: MCPServerDetailsSchema,\n});\n\nconst HCS11ProfileSchema = z.union([\n PersonalProfileSchema,\n AIAgentProfileSchema,\n MCPServerProfileSchema,\n]);\n\nexport class HCS11Client {\n private client: Client;\n private auth: HCS11Auth;\n private network: string;\n private logger: Logger;\n private mirrorNode: HederaMirrorNode;\n private keyType: 'ed25519' | 'ecdsa';\n private operatorId: string;\n\n constructor(config: HCS11ClientConfig) {\n this.client =\n config.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n this.auth = config.auth;\n this.network = config.network;\n this.operatorId = config.auth.operatorId;\n\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-11',\n silent: config.silent,\n });\n\n this.mirrorNode = new HederaMirrorNode(\n this.network as 'mainnet' | 'testnet',\n this.logger,\n );\n\n if (this.auth.privateKey) {\n if (config.keyType) {\n this.keyType = config.keyType;\n this.initializeOperatorWithKeyType();\n } else {\n try {\n const keyDetection = detectKeyTypeFromString(this.auth.privateKey);\n this.keyType = keyDetection.detectedType;\n this.client.setOperator(this.operatorId, keyDetection.privateKey);\n } catch (error) {\n this.logger.warn(\n 'Failed to detect key type from private key format, will query mirror node',\n );\n this.keyType = 'ed25519';\n }\n\n this.initializeOperator();\n }\n }\n }\n\n public getClient(): Client {\n return this.client;\n }\n\n public getOperatorId(): string {\n return this.auth.operatorId;\n }\n\n public async initializeOperator() {\n const account = await this.mirrorNode.requestAccount(this.operatorId);\n const keyType = account?.key?._type;\n\n if (keyType && keyType.includes('ECDSA')) {\n this.keyType = 'ecdsa';\n } else if (keyType && keyType.includes('ED25519')) {\n this.keyType = 'ed25519';\n } else {\n this.keyType = 'ed25519';\n }\n\n this.initializeOperatorWithKeyType();\n }\n\n private initializeOperatorWithKeyType() {\n if (!this.auth.privateKey) {\n return;\n }\n\n const PK =\n this.keyType === 'ecdsa'\n ? PrivateKey.fromStringECDSA(this.auth.privateKey)\n : PrivateKey.fromStringED25519(this.auth.privateKey);\n\n this.client.setOperator(this.operatorId, PK);\n }\n\n public createPersonalProfile(\n displayName: string,\n options?: {\n alias?: string;\n bio?: string;\n socials?: SocialLink[];\n profileImage?: string;\n language?: string;\n timezone?: string;\n properties?: Record<string, any>;\n inboundTopicId?: string;\n outboundTopicId?: string;\n },\n ): PersonalProfile {\n return {\n version: '1.0',\n type: ProfileType.PERSONAL,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n };\n }\n\n public createAIAgentProfile(\n displayName: string,\n agentType: AIAgentType,\n capabilities: AIAgentCapability[],\n model: string,\n options?: {\n alias?: string;\n bio?: string;\n socials?: SocialLink[];\n profileImage?: string;\n properties?: Record<string, any>;\n inboundTopicId?: string;\n outboundTopicId?: string;\n creator?: string;\n },\n ): AIAgentProfile {\n const validation = this.validateProfile({\n version: '1.0',\n type: ProfileType.AI_AGENT,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n aiAgent: {\n type: agentType,\n capabilities,\n model,\n creator: options?.creator,\n },\n });\n\n if (!validation.valid) {\n throw new Error(\n `Invalid AI Agent Profile: ${validation.errors.join(', ')}`,\n );\n }\n\n return {\n version: '1.0',\n type: ProfileType.AI_AGENT,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n aiAgent: {\n type: agentType,\n capabilities,\n model,\n creator: options?.creator,\n },\n };\n }\n\n /**\n * Creates an MCP server profile.\n *\n * @param displayName - The display name for the MCP server\n * @param serverDetails - The MCP server details\n * @param options - Additional profile options\n * @returns An MCPServerProfile object\n */\n public createMCPServerProfile(\n displayName: string,\n serverDetails: MCPServerDetails,\n options?: {\n alias?: string;\n bio?: string;\n socials?: SocialLink[];\n profileImage?: string;\n properties?: Record<string, any>;\n inboundTopicId?: string;\n outboundTopicId?: string;\n },\n ): MCPServerProfile {\n const validation = this.validateProfile({\n version: '1.0',\n type: ProfileType.MCP_SERVER,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n mcpServer: serverDetails,\n });\n\n if (!validation.valid) {\n throw new Error(\n `Invalid MCP Server Profile: ${validation.errors.join(', ')}`,\n );\n }\n\n return {\n version: '1.0',\n type: ProfileType.MCP_SERVER,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n mcpServer: serverDetails,\n };\n }\n\n public validateProfile(profile: unknown): {\n valid: boolean;\n errors: string[];\n } {\n const result = HCS11ProfileSchema.safeParse(profile);\n\n if (result.success) {\n return { valid: true, errors: [] };\n }\n\n const formattedErrors = result.error.errors.map((err: ZodIssue) => {\n const path = err.path.join('.');\n let message = err.message;\n\n if (err.code === 'invalid_type') {\n message = `Expected ${err.expected}, got ${err.received}`;\n } else if (err.code === 'invalid_enum_value') {\n const validOptions = (err as any).options?.join(', ');\n message = `Invalid value. Valid options are: ${validOptions}`;\n } else if (err.code === 'too_small' && err.type === 'string') {\n message = 'Cannot be empty';\n }\n\n return `${path}: ${message}`;\n });\n\n return { valid: false, errors: formattedErrors };\n }\n\n public profileToJSONString(profile: HCS11Profile): string {\n return JSON.stringify(profile);\n }\n\n public parseProfileFromString(profileStr: string): HCS11Profile | null {\n try {\n const parsedProfile = JSON.parse(profileStr);\n const validation = this.validateProfile(parsedProfile);\n if (!validation.valid) {\n this.logger.error('Invalid profile format:', validation.errors);\n return null;\n }\n return parsedProfile as HCS11Profile;\n } catch (error) {\n this.logger.error('Error parsing profile:');\n return null;\n }\n }\n\n public setProfileForAccountMemo(\n topicId: string,\n topicStandard: 1 | 2 | 7 = 1,\n ): string {\n return `hcs-11:hcs://${topicStandard}/${topicId}`;\n }\n\n private async executeTransaction<T>(\n transaction: Transaction,\n ): Promise<TransactionResult<T>> {\n try {\n if (this.auth.privateKey) {\n const signedTx = await transaction.signWithOperator(this.client);\n const response = await signedTx.execute(this.client);\n const receipt = await response.getReceipt(this.client);\n\n if (receipt.status.toString() !== Status.Success.toString()) {\n return {\n success: false,\n error: `Transaction failed: ${receipt.status.toString()}`,\n };\n }\n\n return {\n success: true,\n result: receipt as T,\n };\n }\n\n if (!this.auth.signer) {\n throw new Error('No valid authentication method provided');\n }\n\n const signer = this.auth.signer;\n const frozenTransaction = await transaction.freezeWithSigner(signer);\n const response = await frozenTransaction.executeWithSigner(signer);\n const receipt = await response.getReceiptWithSigner(signer);\n\n if (receipt.status.toString() !== Status.Success.toString()) {\n return {\n success: false,\n error: `Transaction failed: ${receipt.status.toString()}: ${Status.Success.toString()}`,\n };\n }\n\n return {\n success: true,\n result: receipt as T,\n };\n } catch (error) {\n return {\n success: false,\n error:\n error instanceof Error\n ? error.message\n : 'Unknown error during transaction execution',\n };\n }\n }\n\n public async inscribeImage(\n buffer: Buffer,\n fileName: string,\n options?: InscribeImageOptions,\n ): Promise<InscribeImageResponse> {\n try {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'HCS11-Image',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n progressReporter.preparing('Preparing to inscribe image', 0);\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const waitForConfirmation = options?.waitForConfirmation ?? true;\n\n let inscriptionResponse;\n if (this.auth.signer) {\n if ('accountId' in this.auth.signer) {\n progressReporter.preparing('Using signer for inscription', 10);\n\n inscriptionResponse = await inscribeWithSigner(\n {\n type: 'buffer',\n buffer,\n fileName,\n mimeType,\n },\n this.auth.signer as DAppSigner,\n {\n network: this.network as 'mainnet' | 'testnet',\n waitForConfirmation,\n waitMaxAttempts: 150,\n waitIntervalMs: 4000,\n logging: {\n level: 'debug',\n },\n progressCallback: (data: any) => {\n const adjustedPercent = 10 + (data.progressPercent || 0) * 0.8;\n progressReporter.report({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: data.details,\n });\n },\n },\n );\n } else {\n progressReporter.failed(\n 'Signer must be a DAppSigner for inscription',\n );\n throw new Error('Signer must be a DAppSigner for inscription');\n }\n } else {\n if (!this.auth.privateKey) {\n progressReporter.failed('Private key is required for inscription');\n this.logger.error('Private key is required for inscription');\n throw new Error('Private key is required for inscription');\n }\n\n progressReporter.preparing('Using private key for inscription', 10);\n\n inscriptionResponse = await inscribe(\n {\n type: 'buffer',\n buffer,\n fileName,\n mimeType,\n },\n {\n accountId: this.auth.operatorId,\n privateKey: this.auth.privateKey,\n network: this.network as 'mainnet' | 'testnet',\n },\n {\n waitForConfirmation,\n waitMaxAttempts: 150,\n waitIntervalMs: 2000,\n logging: {\n level: 'debug',\n },\n progressCallback: (data: any) => {\n const adjustedPercent = 10 + (data.progressPercent || 0) * 0.8;\n progressReporter.report({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: data.details,\n });\n },\n },\n );\n }\n\n if (inscriptionResponse.confirmed) {\n progressReporter.completed('Image inscription completed', {\n topic_id: inscriptionResponse.inscription.topic_id,\n });\n return {\n imageTopicId: inscriptionResponse.inscription.topic_id || '',\n transactionId: inscriptionResponse.result.jobId,\n success: true,\n };\n } else {\n progressReporter.verifying('Waiting for inscription confirmation', 50, {\n jobId: inscriptionResponse.result.jobId,\n });\n return {\n imageTopicId: '',\n transactionId: inscriptionResponse.result.jobId,\n success: false,\n error: 'Inscription not confirmed',\n };\n }\n } catch (error: any) {\n this.logger.error('Error inscribing image:', error);\n return {\n imageTopicId: '',\n transactionId: '',\n success: false,\n error: error.message || 'Error inscribing image',\n };\n }\n }\n\n public async inscribeProfile(\n profile: HCS11Profile,\n options?: InscribeProfileOptions,\n ): Promise<InscribeProfileResponse> {\n this.logger.info('Inscribing HCS-11 profile');\n\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'HCS11-Profile',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n progressReporter.preparing('Validating profile data', 5);\n\n const validation = this.validateProfile(profile);\n if (!validation.valid) {\n progressReporter.failed(\n `Invalid profile: ${validation.errors.join(', ')}`,\n );\n return {\n profileTopicId: '',\n transactionId: '',\n success: false,\n error: `Invalid profile: ${validation.errors.join(', ')}`,\n };\n }\n\n progressReporter.preparing('Formatting profile for inscription', 15);\n\n const profileJson = this.profileToJSONString(profile);\n const fileName = `profile-${profile.display_name\n .toLowerCase()\n .replace(/\\s+/g, '-')}.json`;\n\n try {\n const contentBuffer = Buffer.from(profileJson, 'utf-8');\n const contentType = 'application/json';\n\n progressReporter.preparing('Preparing profile for inscription', 20);\n\n const input: InscriptionInput = {\n type: 'buffer',\n buffer: contentBuffer,\n fileName,\n mimeType: contentType,\n };\n\n const inscriptionOptions: InscriptionOptions = {\n waitForConfirmation: true,\n mode: 'file',\n network: this.network as 'mainnet' | 'testnet',\n waitMaxAttempts: 100,\n waitIntervalMs: 2000,\n progressCallback: (data: any) => {\n const adjustedPercent =\n 20 + Number(data?.progressPercent || 0) * 0.75;\n progressReporter?.report({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: data.details,\n });\n },\n };\n\n progressReporter.submitting('Submitting profile to Hedera network', 30);\n\n const inscriptionResponse = this.auth.privateKey\n ? await inscribe(\n input,\n {\n accountId: this.auth.operatorId,\n privateKey: this.auth.privateKey,\n network: this.network as 'mainnet' | 'testnet',\n },\n inscriptionOptions,\n )\n : await inscribeWithSigner(\n input,\n this.auth.signer as DAppSigner,\n inscriptionOptions,\n );\n\n if (\n !inscriptionResponse.confirmed ||\n !inscriptionResponse.inscription.topic_id\n ) {\n progressReporter.failed('Failed to inscribe profile content');\n return {\n profileTopicId: '',\n transactionId: '',\n success: false,\n error: 'Failed to inscribe profile content',\n };\n }\n\n const topicId = inscriptionResponse.inscription.topic_id;\n\n progressReporter.completed('Profile inscription completed', {\n topicId,\n transactionId: inscriptionResponse.result.transactionId,\n });\n\n return {\n profileTopicId: topicId,\n transactionId: inscriptionResponse.result.transactionId,\n success: true,\n };\n } catch (error: any) {\n progressReporter.failed(\n `Error inscribing profile: ${error.message || 'Unknown error'}`,\n );\n return {\n profileTopicId: '',\n transactionId: '',\n success: false,\n error: error.message || 'Unknown error during inscription',\n };\n }\n }\n\n public async updateAccountMemoWithProfile(\n accountId: string | AccountId,\n profileTopicId: string,\n ): Promise<TransactionResult> {\n try {\n this.logger.info(\n `Updating account memo for ${accountId} with profile ${profileTopicId}`,\n );\n const memo = this.setProfileForAccountMemo(profileTopicId);\n\n const transaction = new AccountUpdateTransaction()\n .setAccountMemo(memo)\n .setAccountId(accountId);\n\n return this.executeTransaction(transaction);\n } catch (error) {\n this.logger.error(\n `Error updating account memo: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n );\n return {\n success: false,\n error:\n error instanceof Error\n ? error.message\n : 'Unknown error updating account memo',\n };\n }\n }\n\n /**\n * Creates and inscribes a profile.\n *\n * @param profile - The profile to create and inscribe.\n * @param updateAccountMemo - Whether to update the account memo with the profile.\n * @param options - Optional configuration options.\n * @returns A promise that resolves to the inscription result.\n */\n public async createAndInscribeProfile(\n profile: HCS11Profile,\n updateAccountMemo = true,\n options?: InscribeProfileOptions,\n ): Promise<InscribeProfileResponse> {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'HCS11-ProfileCreation',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n progressReporter.preparing('Starting profile creation process', 0);\n\n const inscriptionProgress = progressReporter.createSubProgress({\n minPercent: 0,\n maxPercent: 80,\n logPrefix: 'Inscription',\n });\n\n const inscriptionResult = await this.inscribeProfile(profile, {\n ...options,\n progressCallback: (data: any) => {\n inscriptionProgress.report({\n stage: data.stage,\n message: data.message,\n progressPercent: data.progressPercent,\n details: data.details,\n });\n },\n });\n\n if (!inscriptionResult?.success) {\n progressReporter.failed('Profile inscription failed', {\n error: inscriptionResult?.error,\n });\n return inscriptionResult;\n }\n\n progressReporter.confirming('Profile inscribed, updating account memo', 85);\n\n if (updateAccountMemo) {\n const memoResult = await this.updateAccountMemoWithProfile(\n this.auth.operatorId,\n inscriptionResult.profileTopicId,\n );\n\n if (!memoResult.success) {\n progressReporter.failed('Failed to update account memo', {\n error: memoResult?.error,\n });\n return {\n ...inscriptionResult,\n success: false,\n error: memoResult?.error,\n };\n }\n }\n\n progressReporter.completed('Profile creation completed successfully', {\n profileTopicId: inscriptionResult.profileTopicId,\n transactionId: inscriptionResult.transactionId,\n });\n\n return inscriptionResult;\n }\n\n /**\n * Gets the capabilities from the capability names.\n *\n * @param capabilityNames - The capability names to get the capabilities for.\n * @returns The capabilities.\n */\n public async getCapabilitiesFromTags(\n capabilityNames: string[],\n ): Promise<number[]> {\n const capabilities: number[] = [];\n\n if (capabilityNames.length === 0) {\n return [AIAgentCapability.TEXT_GENERATION];\n }\n\n for (const capabilityName of capabilityNames) {\n const capability =\n capabilityNameToCapabilityMap[capabilityName.toLowerCase()];\n if (capability !== undefined && !capabilities.includes(capability)) {\n capabilities.push(capability);\n }\n }\n\n if (capabilities.length === 0) {\n capabilities.push(AIAgentCapability.TEXT_GENERATION);\n }\n\n return capabilities;\n }\n\n /**\n * Gets the agent type from the metadata.\n *\n * @param metadata - The metadata of the agent.\n * @returns The agent type.\n */\n public getAgentTypeFromMetadata(metadata: AgentMetadata): AIAgentType {\n if (metadata.type === 'autonomous') {\n return AIAgentType.AUTONOMOUS;\n } else {\n return AIAgentType.MANUAL;\n }\n }\n\n /**\n * Fetches a profile from the account memo.\n *\n * @param accountId - The account ID of the agent to fetch the profile for.\n * @param network - The network to use for the fetch.\n * @returns A promise that resolves to the profile.\n */\n public async fetchProfileByAccountId(\n accountId: string | AccountId,\n network?: string,\n ): Promise<{\n success: boolean;\n profile?: HCS11Profile;\n error?: string;\n topicInfo?: TopicInfo;\n }> {\n try {\n this.logger.info(\n `Fetching profile for account ${accountId.toString()} on ${\n this.network\n }`,\n );\n\n const memo = await this.mirrorNode.getAccountMemo(accountId.toString());\n\n this.logger.info(`Got account memo: ${memo}`);\n\n if (!memo?.startsWith('hcs-11:')) {\n return {\n success: false,\n error: `Account ${accountId.toString()} does not have a valid HCS-11 memo`,\n };\n }\n\n this.logger.info(`Found HCS-11 memo: ${memo}`);\n\n const protocolReference = memo.substring(7);\n\n if (protocolReference?.startsWith('hcs://')) {\n const hcsFormat = protocolReference.match(/hcs:\\/\\/(\\d+)\\/(.+)/);\n\n if (!hcsFormat) {\n return {\n success: false,\n error: `Invalid HCS protocol reference format: ${protocolReference}`,\n };\n }\n\n const [_, protocolId, profileTopicId] = hcsFormat;\n const networkParam = network || this.network || 'mainnet';\n\n this.logger.info(\n `Retrieving profile from Kiloscribe CDN: ${profileTopicId}`,\n );\n const cdnUrl = `https://kiloscribe.com/api/inscription-cdn/${profileTopicId}?network=${networkParam}`;\n\n try {\n const response = await fetch(cdnUrl);\n\n if (!response.ok) {\n return {\n success: false,\n error: `Failed to fetch profile from Kiloscribe CDN: ${response.statusText}`,\n };\n }\n\n const profileData = await response.json();\n\n if (!profileData) {\n return {\n success: false,\n error: `No profile data found for topic ${profileTopicId}`,\n };\n }\n\n return {\n success: true,\n profile: profileData,\n topicInfo: {\n inboundTopic: profileData.inboundTopicId,\n outboundTopic: profileData.outboundTopicId,\n profileTopicId,\n },\n };\n } catch (cdnError: any) {\n this.logger.error(\n `Error retrieving from Kiloscribe CDN: ${cdnError.message}`,\n );\n return {\n success: false,\n error: `Error retrieving from Kiloscribe CDN: ${cdnError.message}`,\n };\n }\n } else if (protocolReference.startsWith('ipfs://')) {\n this.logger.warn('IPFS protocol references are not fully supported');\n const response = await fetch(\n `https://ipfs.io/ipfs/${protocolReference.replace('ipfs://', '')}`,\n );\n const profileData = await response.json();\n return {\n success: true,\n profile: profileData,\n topicInfo: {\n inboundTopic: profileData.inboundTopicId,\n outboundTopic: profileData.outboundTopicId,\n profileTopicId: profileData.profileTopicId,\n },\n };\n } else if (protocolReference.startsWith('ar://')) {\n const arTxId = protocolReference.replace('ar://', '');\n const response = await fetch(`https://arweave.net/${arTxId}`);\n\n if (!response.ok) {\n return {\n success: false,\n error: `Failed to fetch profile from Arweave ${arTxId}: ${response.statusText}`,\n };\n }\n\n const profileData = await response.json();\n\n return {\n success: true,\n profile: profileData,\n topicInfo: {\n inboundTopic: profileData.inboundTopicId,\n outboundTopic: profileData.outboundTopicId,\n profileTopicId: profileData.profileTopicId,\n },\n };\n } else {\n return {\n success: false,\n error: `Invalid protocol reference format: ${protocolReference}`,\n };\n }\n } catch (error: any) {\n this.logger.error(`Error fetching profile: ${error.message}`);\n return {\n success: false,\n error: `Error fetching profile: ${error.message}`,\n };\n }\n }\n}\n"],"names":["response","receipt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es14.js","sources":["../../src/hcs-11/client.ts"],"sourcesContent":["import {\n AccountId,\n AccountUpdateTransaction,\n Client,\n PrivateKey,\n Status,\n Transaction,\n} from '@hashgraph/sdk';\nimport {\n inscribe,\n inscribeWithSigner,\n InscriptionInput,\n InscriptionOptions,\n} from '../inscribe';\nimport { Logger, detectKeyTypeFromString } from '../utils';\nimport * as mime from 'mime-types';\nimport { z, ZodIssue } from 'zod';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport { ProgressReporter } from '../utils/progress-reporter';\nimport { HederaMirrorNode } from '../services';\nimport { TopicInfo } from '../services/types';\nimport {\n ProfileType,\n AIAgentType,\n AIAgentCapability,\n SocialLink,\n PersonalProfile,\n AIAgentProfile,\n HCS11Profile,\n HCS11Auth,\n HCS11ClientConfig,\n TransactionResult,\n InscribeProfileResponse,\n InscribeImageResponse,\n AgentMetadata,\n InscribeImageOptions,\n InscribeProfileOptions,\n capabilityNameToCapabilityMap,\n MCPServerDetails,\n MCPServerProfile,\n MCPServerCapability,\n VerificationType,\n} from './types';\n\nconst SocialLinkSchema = z.object({\n platform: z.string().min(1),\n handle: z.string().min(1),\n});\n\nconst AIAgentDetailsSchema = z.object({\n type: z.nativeEnum(AIAgentType),\n capabilities: z.array(z.nativeEnum(AIAgentCapability)).min(1),\n model: z.string().min(1),\n creator: z.string().optional(),\n});\n\nconst MCPServerConnectionInfoSchema = z.object({\n url: z.string().min(1),\n transport: z.enum(['stdio', 'sse']),\n});\n\nconst MCPServerVerificationSchema = z.object({\n type: z.nativeEnum(VerificationType),\n value: z.string(),\n dns_field: z.string().optional(),\n challenge_path: z.string().optional(),\n});\n\nconst MCPServerHostSchema = z.object({\n minVersion: z.string().optional(),\n});\n\nconst MCPServerResourceSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n});\n\nconst MCPServerToolSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n});\n\nconst MCPServerDetailsSchema = z.object({\n version: z.string().min(1),\n connectionInfo: MCPServerConnectionInfoSchema,\n services: z.array(z.nativeEnum(MCPServerCapability)).min(1),\n description: z.string().min(1),\n verification: MCPServerVerificationSchema.optional(),\n host: MCPServerHostSchema.optional(),\n capabilities: z.array(z.string()).optional(),\n resources: z.array(MCPServerResourceSchema).optional(),\n tools: z.array(MCPServerToolSchema).optional(),\n maintainer: z.string().optional(),\n repository: z.string().optional(),\n docs: z.string().optional(),\n});\n\nconst BaseProfileSchema = z.object({\n version: z.string().min(1),\n type: z.nativeEnum(ProfileType),\n display_name: z.string().min(1),\n alias: z.string().optional(),\n bio: z.string().optional(),\n socials: z.array(SocialLinkSchema).optional(),\n profileImage: z.string().optional(),\n properties: z.record(z.any()).optional(),\n inboundTopicId: z.string().optional(),\n outboundTopicId: z.string().optional(),\n});\n\nconst PersonalProfileSchema = BaseProfileSchema.extend({\n type: z.literal(ProfileType.PERSONAL),\n language: z.string().optional(),\n timezone: z.string().optional(),\n});\n\nconst AIAgentProfileSchema = BaseProfileSchema.extend({\n type: z.literal(ProfileType.AI_AGENT),\n aiAgent: AIAgentDetailsSchema,\n});\n\nconst MCPServerProfileSchema = BaseProfileSchema.extend({\n type: z.literal(ProfileType.MCP_SERVER),\n mcpServer: MCPServerDetailsSchema,\n});\n\nconst HCS11ProfileSchema = z.union([\n PersonalProfileSchema,\n AIAgentProfileSchema,\n MCPServerProfileSchema,\n]);\n\nexport class HCS11Client {\n private client: Client;\n private auth: HCS11Auth;\n private network: string;\n private logger: Logger;\n private mirrorNode: HederaMirrorNode;\n private keyType: 'ed25519' | 'ecdsa';\n private operatorId: string;\n\n constructor(config: HCS11ClientConfig) {\n this.client =\n config.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n this.auth = config.auth;\n this.network = config.network;\n this.operatorId = config.auth.operatorId;\n\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-11',\n silent: config.silent,\n });\n\n this.mirrorNode = new HederaMirrorNode(\n this.network as 'mainnet' | 'testnet',\n this.logger,\n );\n\n if (this.auth.privateKey) {\n if (config.keyType) {\n this.keyType = config.keyType;\n this.initializeOperatorWithKeyType();\n } else {\n try {\n const keyDetection = detectKeyTypeFromString(this.auth.privateKey);\n this.keyType = keyDetection.detectedType;\n this.client.setOperator(this.operatorId, keyDetection.privateKey);\n } catch (error) {\n this.logger.warn(\n 'Failed to detect key type from private key format, will query mirror node',\n );\n this.keyType = 'ed25519';\n }\n\n this.initializeOperator();\n }\n }\n }\n\n public getClient(): Client {\n return this.client;\n }\n\n public getOperatorId(): string {\n return this.auth.operatorId;\n }\n\n public async initializeOperator() {\n const account = await this.mirrorNode.requestAccount(this.operatorId);\n const keyType = account?.key?._type;\n\n if (keyType && keyType.includes('ECDSA')) {\n this.keyType = 'ecdsa';\n } else if (keyType && keyType.includes('ED25519')) {\n this.keyType = 'ed25519';\n } else {\n this.keyType = 'ed25519';\n }\n\n this.initializeOperatorWithKeyType();\n }\n\n private initializeOperatorWithKeyType() {\n if (!this.auth.privateKey) {\n return;\n }\n\n const PK =\n this.keyType === 'ecdsa'\n ? PrivateKey.fromStringECDSA(this.auth.privateKey)\n : PrivateKey.fromStringED25519(this.auth.privateKey);\n\n this.client.setOperator(this.operatorId, PK);\n }\n\n public createPersonalProfile(\n displayName: string,\n options?: {\n alias?: string;\n bio?: string;\n socials?: SocialLink[];\n profileImage?: string;\n language?: string;\n timezone?: string;\n properties?: Record<string, any>;\n inboundTopicId?: string;\n outboundTopicId?: string;\n },\n ): PersonalProfile {\n return {\n version: '1.0',\n type: ProfileType.PERSONAL,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n };\n }\n\n public createAIAgentProfile(\n displayName: string,\n agentType: AIAgentType,\n capabilities: AIAgentCapability[],\n model: string,\n options?: {\n alias?: string;\n bio?: string;\n socials?: SocialLink[];\n profileImage?: string;\n properties?: Record<string, any>;\n inboundTopicId?: string;\n outboundTopicId?: string;\n creator?: string;\n },\n ): AIAgentProfile {\n const validation = this.validateProfile({\n version: '1.0',\n type: ProfileType.AI_AGENT,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n aiAgent: {\n type: agentType,\n capabilities,\n model,\n creator: options?.creator,\n },\n });\n\n if (!validation.valid) {\n throw new Error(\n `Invalid AI Agent Profile: ${validation.errors.join(', ')}`,\n );\n }\n\n return {\n version: '1.0',\n type: ProfileType.AI_AGENT,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n aiAgent: {\n type: agentType,\n capabilities,\n model,\n creator: options?.creator,\n },\n };\n }\n\n /**\n * Creates an MCP server profile.\n *\n * @param displayName - The display name for the MCP server\n * @param serverDetails - The MCP server details\n * @param options - Additional profile options\n * @returns An MCPServerProfile object\n */\n public createMCPServerProfile(\n displayName: string,\n serverDetails: MCPServerDetails,\n options?: {\n alias?: string;\n bio?: string;\n socials?: SocialLink[];\n profileImage?: string;\n properties?: Record<string, any>;\n inboundTopicId?: string;\n outboundTopicId?: string;\n },\n ): MCPServerProfile {\n const validation = this.validateProfile({\n version: '1.0',\n type: ProfileType.MCP_SERVER,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n mcpServer: serverDetails,\n });\n\n if (!validation.valid) {\n throw new Error(\n `Invalid MCP Server Profile: ${validation.errors.join(', ')}`,\n );\n }\n\n return {\n version: '1.0',\n type: ProfileType.MCP_SERVER,\n display_name: displayName,\n alias: options?.alias,\n bio: options?.bio,\n socials: options?.socials,\n profileImage: options?.profileImage,\n properties: options?.properties,\n inboundTopicId: options?.inboundTopicId,\n outboundTopicId: options?.outboundTopicId,\n mcpServer: serverDetails,\n };\n }\n\n public validateProfile(profile: unknown): {\n valid: boolean;\n errors: string[];\n } {\n const result = HCS11ProfileSchema.safeParse(profile);\n\n if (result.success) {\n return { valid: true, errors: [] };\n }\n\n const formattedErrors = result.error.errors.map((err: ZodIssue) => {\n const path = err.path.join('.');\n let message = err.message;\n\n if (err.code === 'invalid_type') {\n message = `Expected ${err.expected}, got ${err.received}`;\n } else if (err.code === 'invalid_enum_value') {\n const validOptions = (err as any).options?.join(', ');\n message = `Invalid value. Valid options are: ${validOptions}`;\n } else if (err.code === 'too_small' && err.type === 'string') {\n message = 'Cannot be empty';\n }\n\n return `${path}: ${message}`;\n });\n\n return { valid: false, errors: formattedErrors };\n }\n\n public profileToJSONString(profile: HCS11Profile): string {\n return JSON.stringify(profile);\n }\n\n public parseProfileFromString(profileStr: string): HCS11Profile | null {\n try {\n const parsedProfile = JSON.parse(profileStr);\n const validation = this.validateProfile(parsedProfile);\n if (!validation.valid) {\n this.logger.error('Invalid profile format:', validation.errors);\n return null;\n }\n return parsedProfile as HCS11Profile;\n } catch (error) {\n this.logger.error('Error parsing profile:');\n return null;\n }\n }\n\n public setProfileForAccountMemo(\n topicId: string,\n topicStandard: 1 | 2 | 7 = 1,\n ): string {\n return `hcs-11:hcs://${topicStandard}/${topicId}`;\n }\n\n private async executeTransaction<T>(\n transaction: Transaction,\n ): Promise<TransactionResult<T>> {\n try {\n if (this.auth.privateKey) {\n const signedTx = await transaction.signWithOperator(this.client);\n const response = await signedTx.execute(this.client);\n const receipt = await response.getReceipt(this.client);\n\n if (receipt.status.toString() !== Status.Success.toString()) {\n return {\n success: false,\n error: `Transaction failed: ${receipt.status.toString()}`,\n };\n }\n\n return {\n success: true,\n result: receipt as T,\n };\n }\n\n if (!this.auth.signer) {\n throw new Error('No valid authentication method provided');\n }\n\n const signer = this.auth.signer;\n const frozenTransaction = await transaction.freezeWithSigner(signer);\n const response = await frozenTransaction.executeWithSigner(signer);\n const receipt = await response.getReceiptWithSigner(signer);\n\n if (receipt.status.toString() !== Status.Success.toString()) {\n return {\n success: false,\n error: `Transaction failed: ${receipt.status.toString()}: ${Status.Success.toString()}`,\n };\n }\n\n return {\n success: true,\n result: receipt as T,\n };\n } catch (error) {\n return {\n success: false,\n error:\n error instanceof Error\n ? error.message\n : 'Unknown error during transaction execution',\n };\n }\n }\n\n public async inscribeImage(\n buffer: Buffer,\n fileName: string,\n options?: InscribeImageOptions,\n ): Promise<InscribeImageResponse> {\n try {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'HCS11-Image',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n progressReporter.preparing('Preparing to inscribe image', 0);\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const waitForConfirmation = options?.waitForConfirmation ?? true;\n\n let inscriptionResponse;\n if (this.auth.signer) {\n if ('accountId' in this.auth.signer) {\n progressReporter.preparing('Using signer for inscription', 10);\n\n inscriptionResponse = await inscribeWithSigner(\n {\n type: 'buffer',\n buffer,\n fileName,\n mimeType,\n },\n this.auth.signer as DAppSigner,\n {\n network: this.network as 'mainnet' | 'testnet',\n waitForConfirmation,\n waitMaxAttempts: 150,\n waitIntervalMs: 4000,\n logging: {\n level: 'debug',\n },\n progressCallback: (data: any) => {\n const adjustedPercent = 10 + (data.progressPercent || 0) * 0.8;\n progressReporter.report({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: data.details,\n });\n },\n },\n );\n } else {\n progressReporter.failed(\n 'Signer must be a DAppSigner for inscription',\n );\n throw new Error('Signer must be a DAppSigner for inscription');\n }\n } else {\n if (!this.auth.privateKey) {\n progressReporter.failed('Private key is required for inscription');\n this.logger.error('Private key is required for inscription');\n throw new Error('Private key is required for inscription');\n }\n\n progressReporter.preparing('Using private key for inscription', 10);\n\n inscriptionResponse = await inscribe(\n {\n type: 'buffer',\n buffer,\n fileName,\n mimeType,\n },\n {\n accountId: this.auth.operatorId,\n privateKey: this.auth.privateKey,\n network: this.network as 'mainnet' | 'testnet',\n },\n {\n waitForConfirmation,\n waitMaxAttempts: 150,\n waitIntervalMs: 2000,\n logging: {\n level: 'debug',\n },\n progressCallback: (data: any) => {\n const adjustedPercent = 10 + (data.progressPercent || 0) * 0.8;\n progressReporter.report({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: data.details,\n });\n },\n },\n );\n }\n\n if (inscriptionResponse.confirmed) {\n progressReporter.completed('Image inscription completed', {\n topic_id: inscriptionResponse.inscription.topic_id,\n });\n return {\n imageTopicId: inscriptionResponse.inscription.topic_id || '',\n transactionId: inscriptionResponse.result.jobId,\n success: true,\n };\n } else {\n progressReporter.verifying('Waiting for inscription confirmation', 50, {\n jobId: inscriptionResponse.result.jobId,\n });\n return {\n imageTopicId: '',\n transactionId: inscriptionResponse.result.jobId,\n success: false,\n error: 'Inscription not confirmed',\n };\n }\n } catch (error: any) {\n this.logger.error('Error inscribing image:', error);\n return {\n imageTopicId: '',\n transactionId: '',\n success: false,\n error: error.message || 'Error inscribing image',\n };\n }\n }\n\n public async inscribeProfile(\n profile: HCS11Profile,\n options?: InscribeProfileOptions,\n ): Promise<InscribeProfileResponse> {\n this.logger.info('Inscribing HCS-11 profile');\n\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'HCS11-Profile',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n progressReporter.preparing('Validating profile data', 5);\n\n const validation = this.validateProfile(profile);\n if (!validation.valid) {\n progressReporter.failed(\n `Invalid profile: ${validation.errors.join(', ')}`,\n );\n return {\n profileTopicId: '',\n transactionId: '',\n success: false,\n error: `Invalid profile: ${validation.errors.join(', ')}`,\n };\n }\n\n progressReporter.preparing('Formatting profile for inscription', 15);\n\n const profileJson = this.profileToJSONString(profile);\n const fileName = `profile-${profile.display_name\n .toLowerCase()\n .replace(/\\s+/g, '-')}.json`;\n\n try {\n const contentBuffer = Buffer.from(profileJson, 'utf-8');\n const contentType = 'application/json';\n\n progressReporter.preparing('Preparing profile for inscription', 20);\n\n const input: InscriptionInput = {\n type: 'buffer',\n buffer: contentBuffer,\n fileName,\n mimeType: contentType,\n };\n\n const inscriptionOptions: InscriptionOptions = {\n waitForConfirmation: true,\n mode: 'file',\n network: this.network as 'mainnet' | 'testnet',\n waitMaxAttempts: 100,\n waitIntervalMs: 2000,\n progressCallback: (data: any) => {\n const adjustedPercent =\n 20 + Number(data?.progressPercent || 0) * 0.75;\n progressReporter?.report({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: data.details,\n });\n },\n };\n\n progressReporter.submitting('Submitting profile to Hedera network', 30);\n\n const privateKey =\n this.keyType === 'ed25519'\n ? PrivateKey.fromStringED25519(this.auth.privateKey as string)\n : PrivateKey.fromStringECDSA(this.auth.privateKey as string);\n\n const inscriptionResponse = this.auth.privateKey\n ? await inscribe(\n input,\n {\n accountId: this.auth.operatorId,\n privateKey,\n network: this.network as 'mainnet' | 'testnet',\n },\n inscriptionOptions,\n )\n : await inscribeWithSigner(\n input,\n this.auth.signer as DAppSigner,\n inscriptionOptions,\n );\n\n if (\n !inscriptionResponse.confirmed ||\n !inscriptionResponse.inscription.topic_id\n ) {\n progressReporter.failed('Failed to inscribe profile content');\n return {\n profileTopicId: '',\n transactionId: '',\n success: false,\n error: 'Failed to inscribe profile content',\n };\n }\n\n const topicId = inscriptionResponse.inscription.topic_id;\n\n progressReporter.completed('Profile inscription completed', {\n topicId,\n transactionId: inscriptionResponse.result.transactionId,\n });\n\n return {\n profileTopicId: topicId,\n transactionId: inscriptionResponse.result.transactionId,\n success: true,\n };\n } catch (error: any) {\n progressReporter.failed(\n `Error inscribing profile: ${error.message || 'Unknown error'}`,\n );\n return {\n profileTopicId: '',\n transactionId: '',\n success: false,\n error: error.message || 'Unknown error during inscription',\n };\n }\n }\n\n public async updateAccountMemoWithProfile(\n accountId: string | AccountId,\n profileTopicId: string,\n ): Promise<TransactionResult> {\n try {\n this.logger.info(\n `Updating account memo for ${accountId} with profile ${profileTopicId}`,\n );\n const memo = this.setProfileForAccountMemo(profileTopicId);\n\n const transaction = new AccountUpdateTransaction()\n .setAccountMemo(memo)\n .setAccountId(accountId);\n\n return this.executeTransaction(transaction);\n } catch (error) {\n this.logger.error(\n `Error updating account memo: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n );\n return {\n success: false,\n error:\n error instanceof Error\n ? error.message\n : 'Unknown error updating account memo',\n };\n }\n }\n\n /**\n * Creates and inscribes a profile.\n *\n * @param profile - The profile to create and inscribe.\n * @param updateAccountMemo - Whether to update the account memo with the profile.\n * @param options - Optional configuration options.\n * @returns A promise that resolves to the inscription result.\n */\n public async createAndInscribeProfile(\n profile: HCS11Profile,\n updateAccountMemo = true,\n options?: InscribeProfileOptions,\n ): Promise<InscribeProfileResponse> {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'HCS11-ProfileCreation',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n progressReporter.preparing('Starting profile creation process', 0);\n\n const inscriptionProgress = progressReporter.createSubProgress({\n minPercent: 0,\n maxPercent: 80,\n logPrefix: 'Inscription',\n });\n\n const inscriptionResult = await this.inscribeProfile(profile, {\n ...options,\n progressCallback: (data: any) => {\n inscriptionProgress.report({\n stage: data.stage,\n message: data.message,\n progressPercent: data.progressPercent,\n details: data.details,\n });\n },\n });\n\n if (!inscriptionResult?.success) {\n progressReporter.failed('Profile inscription failed', {\n error: inscriptionResult?.error,\n });\n return inscriptionResult;\n }\n\n progressReporter.confirming('Profile inscribed, updating account memo', 85);\n\n if (updateAccountMemo) {\n const memoResult = await this.updateAccountMemoWithProfile(\n this.auth.operatorId,\n inscriptionResult.profileTopicId,\n );\n\n if (!memoResult.success) {\n progressReporter.failed('Failed to update account memo', {\n error: memoResult?.error,\n });\n return {\n ...inscriptionResult,\n success: false,\n error: memoResult?.error,\n };\n }\n }\n\n progressReporter.completed('Profile creation completed successfully', {\n profileTopicId: inscriptionResult.profileTopicId,\n transactionId: inscriptionResult.transactionId,\n });\n\n return inscriptionResult;\n }\n\n /**\n * Gets the capabilities from the capability names.\n *\n * @param capabilityNames - The capability names to get the capabilities for.\n * @returns The capabilities.\n */\n public async getCapabilitiesFromTags(\n capabilityNames: string[],\n ): Promise<number[]> {\n const capabilities: number[] = [];\n\n if (capabilityNames.length === 0) {\n return [AIAgentCapability.TEXT_GENERATION];\n }\n\n for (const capabilityName of capabilityNames) {\n const capability =\n capabilityNameToCapabilityMap[capabilityName.toLowerCase()];\n if (capability !== undefined && !capabilities.includes(capability)) {\n capabilities.push(capability);\n }\n }\n\n if (capabilities.length === 0) {\n capabilities.push(AIAgentCapability.TEXT_GENERATION);\n }\n\n return capabilities;\n }\n\n /**\n * Gets the agent type from the metadata.\n *\n * @param metadata - The metadata of the agent.\n * @returns The agent type.\n */\n public getAgentTypeFromMetadata(metadata: AgentMetadata): AIAgentType {\n if (metadata.type === 'autonomous') {\n return AIAgentType.AUTONOMOUS;\n } else {\n return AIAgentType.MANUAL;\n }\n }\n\n /**\n * Fetches a profile from the account memo.\n *\n * @param accountId - The account ID of the agent to fetch the profile for.\n * @param network - The network to use for the fetch.\n * @returns A promise that resolves to the profile.\n */\n public async fetchProfileByAccountId(\n accountId: string | AccountId,\n network?: string,\n ): Promise<{\n success: boolean;\n profile?: HCS11Profile;\n error?: string;\n topicInfo?: TopicInfo;\n }> {\n try {\n this.logger.info(\n `Fetching profile for account ${accountId.toString()} on ${\n this.network\n }`,\n );\n\n const memo = await this.mirrorNode.getAccountMemo(accountId.toString());\n\n this.logger.info(`Got account memo: ${memo}`);\n\n if (!memo?.startsWith('hcs-11:')) {\n return {\n success: false,\n error: `Account ${accountId.toString()} does not have a valid HCS-11 memo`,\n };\n }\n\n this.logger.info(`Found HCS-11 memo: ${memo}`);\n\n const protocolReference = memo.substring(7);\n\n if (protocolReference?.startsWith('hcs://')) {\n const hcsFormat = protocolReference.match(/hcs:\\/\\/(\\d+)\\/(.+)/);\n\n if (!hcsFormat) {\n return {\n success: false,\n error: `Invalid HCS protocol reference format: ${protocolReference}`,\n };\n }\n\n const [_, protocolId, profileTopicId] = hcsFormat;\n const networkParam = network || this.network || 'mainnet';\n\n this.logger.info(\n `Retrieving profile from Kiloscribe CDN: ${profileTopicId}`,\n );\n const cdnUrl = `https://kiloscribe.com/api/inscription-cdn/${profileTopicId}?network=${networkParam}`;\n\n try {\n const response = await fetch(cdnUrl);\n\n if (!response.ok) {\n return {\n success: false,\n error: `Failed to fetch profile from Kiloscribe CDN: ${response.statusText}`,\n };\n }\n\n const profileData = await response.json();\n\n if (!profileData) {\n return {\n success: false,\n error: `No profile data found for topic ${profileTopicId}`,\n };\n }\n\n return {\n success: true,\n profile: profileData,\n topicInfo: {\n inboundTopic: profileData.inboundTopicId,\n outboundTopic: profileData.outboundTopicId,\n profileTopicId,\n },\n };\n } catch (cdnError: any) {\n this.logger.error(\n `Error retrieving from Kiloscribe CDN: ${cdnError.message}`,\n );\n return {\n success: false,\n error: `Error retrieving from Kiloscribe CDN: ${cdnError.message}`,\n };\n }\n } else if (protocolReference.startsWith('ipfs://')) {\n this.logger.warn('IPFS protocol references are not fully supported');\n const response = await fetch(\n `https://ipfs.io/ipfs/${protocolReference.replace('ipfs://', '')}`,\n );\n const profileData = await response.json();\n return {\n success: true,\n profile: profileData,\n topicInfo: {\n inboundTopic: profileData.inboundTopicId,\n outboundTopic: profileData.outboundTopicId,\n profileTopicId: profileData.profileTopicId,\n },\n };\n } else if (protocolReference.startsWith('ar://')) {\n const arTxId = protocolReference.replace('ar://', '');\n const response = await fetch(`https://arweave.net/${arTxId}`);\n\n if (!response.ok) {\n return {\n success: false,\n error: `Failed to fetch profile from Arweave ${arTxId}: ${response.statusText}`,\n };\n }\n\n const profileData = await response.json();\n\n return {\n success: true,\n profile: profileData,\n topicInfo: {\n inboundTopic: profileData.inboundTopicId,\n outboundTopic: profileData.outboundTopicId,\n profileTopicId: profileData.profileTopicId,\n },\n };\n } else {\n return {\n success: false,\n error: `Invalid protocol reference format: ${protocolReference}`,\n };\n }\n } catch (error: any) {\n this.logger.error(`Error fetching profile: ${error.message}`);\n return {\n success: false,\n error: `Error fetching profile: ${error.message}`,\n };\n }\n }\n}\n"],"names":["response","receipt"],"mappings":"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"}
|