@hashgraphonline/standards-sdk 0.1.162 → 0.1.163

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.
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es75.js","sources":["../../src/hcs-2/client.ts"],"sourcesContent":["import {\n Client,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n PrivateKey,\n TopicId,\n TransactionReceipt,\n AccountId,\n PublicKey,\n} from '@hashgraph/sdk';\nimport { HCS2BaseClient } from './base-client';\nimport {\n HCS2ClientConfig,\n HCS2Message,\n HCS2Operation,\n HCS2RegistryType,\n TopicRegistrationResponse,\n RegistryOperationResponse,\n TopicRegistry,\n CreateRegistryOptions,\n RegisterEntryOptions,\n UpdateEntryOptions,\n DeleteEntryOptions,\n MigrateTopicOptions,\n QueryRegistryOptions,\n RegistryEntry,\n} from './types';\nimport { NetworkType } from '../utils/types';\nimport {\n NodeOperatorResolver,\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { buildMessageTx } from '../common/tx/tx-utils';\nimport { buildHcs2CreateRegistryTx } from './tx';\n\n/**\n * SDK client configuration for HCS-2\n */\nexport interface SDKHCS2ClientConfig extends HCS2ClientConfig {\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n}\n\n/**\n * SDK client for HCS-2 operations\n */\nexport class HCS2Client extends HCS2BaseClient {\n private static readonly operationAnalyticsCode: Record<\n HCS2Operation,\n number\n > = {\n [HCS2Operation.REGISTER]: 0,\n [HCS2Operation.UPDATE]: 1,\n [HCS2Operation.DELETE]: 2,\n [HCS2Operation.MIGRATE]: 3,\n };\n\n private client: Client;\n private operatorId: AccountId;\n private operatorCtx: NodeOperatorContext;\n private readonly registryTypeCache = new Map<string, HCS2RegistryType>();\n\n /**\n * Create a new HCS-2 client\n * @param config Client configuration\n */\n constructor(config: SDKHCS2ClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n silent: config.silent,\n mirrorNodeUrl: config.mirrorNodeUrl,\n logger: config.logger,\n });\n\n this.operatorId =\n typeof config.operatorId === 'string'\n ? AccountId.fromString(config.operatorId)\n : config.operatorId;\n\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: this.createClient(config.network),\n });\n this.client = this.operatorCtx.client;\n }\n\n /**\n * Initialize the Hedera client with operator information\n */\n private async ensureInitialized(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n /**\n * Create a Hedera client for the specified network\n * @param network The network to connect to\n * @returns The Hedera client\n */\n private createClient(network: NetworkType): Client {\n if (network === 'mainnet') {\n return Client.forMainnet();\n } else {\n return Client.forTestnet();\n }\n }\n\n /**\n * Create a new registry topic\n * @param options Registry creation options\n * @returns Promise resolving to the transaction result\n */\n async createRegistry(\n options: CreateRegistryOptions = {},\n ): Promise<TopicRegistrationResponse> {\n try {\n await this.ensureInitialized();\n const registryType = options.registryType ?? HCS2RegistryType.INDEXED;\n const ttl = options.ttl ?? 86400; // Default TTL: 24 hours\n\n const memo = this.generateRegistryMemo(registryType, ttl);\n\n let adminKeyPrivate: PrivateKey | undefined;\n let adminPublicKey: PublicKey | undefined;\n if (options.adminKey) {\n if (typeof options.adminKey === 'string') {\n try {\n adminPublicKey = PublicKey.fromString(options.adminKey);\n } catch {\n const keyBytes = Buffer.from(\n options.adminKey.replace(/^0x/i, ''),\n 'hex',\n );\n adminPublicKey =\n this.operatorCtx.keyType === 'ed25519'\n ? PublicKey.fromBytesED25519(keyBytes)\n : PublicKey.fromBytesECDSA(keyBytes);\n }\n } else if (typeof options.adminKey === 'boolean') {\n adminPublicKey = this.operatorCtx.operatorKey.publicKey;\n } else {\n adminPublicKey = options.adminKey.publicKey;\n adminKeyPrivate = options.adminKey;\n }\n }\n\n let submitKeyPrivate: PrivateKey | undefined;\n let submitPublicKey: PublicKey | undefined;\n if (options.submitKey) {\n if (typeof options.submitKey === 'string') {\n try {\n submitPublicKey = PublicKey.fromString(options.submitKey);\n } catch {\n const keyBytes = Buffer.from(\n options.submitKey.replace(/^0x/i, ''),\n 'hex',\n );\n submitPublicKey =\n this.operatorCtx.keyType === 'ed25519'\n ? PublicKey.fromBytesED25519(keyBytes)\n : PublicKey.fromBytesECDSA(keyBytes);\n }\n } else if (typeof options.submitKey === 'boolean') {\n submitPublicKey = this.operatorCtx.operatorKey.publicKey;\n } else {\n submitPublicKey = options.submitKey.publicKey;\n submitKeyPrivate = options.submitKey;\n }\n }\n\n const transaction = buildHcs2CreateRegistryTx({\n registryType,\n ttl,\n adminKey: adminPublicKey,\n submitKey: submitPublicKey,\n operatorPublicKey: this.operatorCtx.operatorKey.publicKey,\n });\n\n const frozenTx = await transaction.freezeWith(this.client);\n\n if (adminKeyPrivate) {\n await frozenTx.sign(adminKeyPrivate);\n }\n\n if (submitKeyPrivate) {\n await frozenTx.sign(submitKeyPrivate);\n }\n\n const txResponse = await frozenTx.execute(this.client);\n\n const receipt = await txResponse.getReceipt(this.client);\n const topicId = receipt.topicId;\n\n if (!topicId) {\n throw new Error('Failed to create registry: No topic ID in receipt');\n }\n\n const topicIdStr = topicId.toString();\n this.registryTypeCache.set(topicIdStr, registryType);\n\n this.logger.info(\n `Created registry topic: ${topicIdStr} (${registryType === HCS2RegistryType.INDEXED ? 'Indexed' : 'Non-indexed'}, TTL: ${ttl}s)`,\n );\n\n return {\n success: true,\n topicId: topicIdStr,\n transactionId: txResponse.transactionId.toString(),\n };\n } catch (error) {\n this.logger.error(`Failed to create registry: ${error}`);\n return {\n success: false,\n error: `Failed to create registry: ${error}`,\n };\n }\n }\n\n /**\n * Register a new entry in the registry\n * @param registryTopicId The topic ID of the registry\n * @param options Registration options\n * @param protocol Optional protocol version (defaults to 'hcs-2')\n * @returns Promise resolving to the operation result\n */\n async registerEntry(\n registryTopicId: string,\n options: RegisterEntryOptions,\n protocol: string = 'hcs-2',\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const message = this.createRegisterMessage(\n options.targetTopicId,\n options.metadata,\n options.memo,\n protocol,\n );\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.REGISTER, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Registered entry in registry ${registryTopicId} pointing to topic ${options.targetTopicId} using protocol ${protocol}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to register entry: ${error}`);\n return {\n success: false,\n error: `Failed to register entry: ${error}`,\n };\n }\n }\n\n /**\n * Update an existing entry in the registry (indexed registries only)\n * @param registryTopicId The topic ID of the registry\n * @param options Update options\n * @returns Promise resolving to the operation result\n */\n async updateEntry(\n registryTopicId: string,\n options: UpdateEntryOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);\n\n if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {\n throw new Error(\n 'Update operation is only valid for indexed registries',\n );\n }\n\n const message = this.createUpdateMessage(\n options.targetTopicId,\n options.uid,\n options.metadata,\n options.memo,\n );\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.UPDATE, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Updated entry with UID ${options.uid} in registry ${registryTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to update entry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Delete an entry from the registry (indexed registries only)\n * @param registryTopicId The topic ID of the registry\n * @param options Delete options\n * @returns Promise resolving to the operation result\n */\n async deleteEntry(\n registryTopicId: string,\n options: DeleteEntryOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);\n\n if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {\n throw new Error(\n 'Delete operation is only valid for indexed registries',\n );\n }\n\n const message = this.createDeleteMessage(options.uid, options.memo);\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.DELETE, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Deleted entry with UID ${options.uid} from registry ${registryTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to delete entry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Migrate a registry to a new topic\n * @param registryTopicId The topic ID of the registry\n * @param options Migration options\n * @returns Promise resolving to the operation result\n */\n async migrateRegistry(\n registryTopicId: string,\n options: MigrateTopicOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const message = this.createMigrateMessage(\n options.targetTopicId,\n options.metadata,\n options.memo,\n );\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.MIGRATE, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Migrated registry ${registryTopicId} to ${options.targetTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to migrate registry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get all entries from a registry\n * @param topicId The topic ID of the registry\n * @param options Query options\n * @returns Promise resolving to the registry information\n */\n async getRegistry(\n topicId: string,\n options: QueryRegistryOptions = {},\n ): Promise<TopicRegistry> {\n try {\n await this.ensureInitialized();\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n this.logger.debug(\n `Retrieved topic info for ${topicId}: ${JSON.stringify(topicInfo)}`,\n );\n\n const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);\n\n if (!memoInfo) {\n throw new Error(\n `Topic ${topicId} is not an HCS-2 registry (invalid memo format)`,\n );\n }\n\n this.logger.debug(\n `Retrieving messages for topic ${topicId} with limit ${options.limit ?? 100}`,\n );\n const rawMessagesResult = (await this.mirrorNode.getTopicMessages(\n topicId,\n {\n sequenceNumber:\n options.skip && options.skip > 0 ? `gt:${options.skip}` : undefined,\n limit: options.limit ?? 100,\n order: options.order ?? 'asc',\n },\n )) as any[];\n\n const rawMessages = options.limit\n ? rawMessagesResult.slice(0, options.limit)\n : rawMessagesResult;\n\n this.logger.debug(\n `Retrieved ${rawMessagesResult.length} messages, using ${rawMessages.length} after applying limit.`,\n );\n\n const entries: RegistryEntry[] = [];\n let latestEntry: RegistryEntry | undefined;\n\n for (const msg of rawMessages) {\n try {\n const message: HCS2Message = {\n p: 'hcs-2',\n op: msg.op,\n t_id: msg.t_id,\n uid: msg.uid,\n metadata: msg.metadata,\n m: msg.m,\n } as HCS2Message;\n\n const { valid, errors } = this.validateMessage(message);\n if (!valid) {\n this.logger.warn(`Invalid HCS-2 message: ${errors.join(', ')}`);\n continue;\n }\n\n const entry: RegistryEntry = {\n topicId,\n sequence: msg.sequence_number,\n timestamp: msg.consensus_timestamp,\n payer: msg.payer_account_id || msg.payer || '',\n message,\n consensus_timestamp: msg.consensus_timestamp,\n registry_type: memoInfo.registryType,\n };\n\n entries.push(entry);\n\n if (\n memoInfo.registryType === HCS2RegistryType.NON_INDEXED ||\n !latestEntry ||\n entry.timestamp > latestEntry.timestamp\n ) {\n latestEntry = entry;\n }\n } catch (error) {\n this.logger.warn(`Error processing message: ${error}`);\n }\n }\n\n this.logger.debug(\n `Processed ${entries.length} valid entries for registry ${topicId}`,\n );\n\n const registry: TopicRegistry = {\n topicId,\n registryType: memoInfo.registryType,\n ttl: memoInfo.ttl,\n entries:\n memoInfo.registryType === HCS2RegistryType.INDEXED\n ? entries\n : latestEntry\n ? [latestEntry]\n : [],\n latestEntry,\n };\n\n return registry;\n } catch (error) {\n this.logger.error(`Failed to get registry: ${error}`);\n throw error;\n }\n }\n\n private buildAnalyticsMemo(\n operation: HCS2Operation,\n registryType: HCS2RegistryType,\n ): string {\n const opCode = HCS2Client.operationAnalyticsCode[operation];\n return `hcs-2:op:${opCode}:${registryType}`;\n }\n\n private async resolveRegistryType(\n topicId: string,\n ): Promise<HCS2RegistryType> {\n const cached = this.registryTypeCache.get(topicId);\n if (cached !== undefined) {\n return cached;\n }\n\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);\n if (!memoInfo) {\n throw new Error(\n `Topic ${topicId} is not an HCS-2 registry (invalid memo format)`,\n );\n }\n\n this.registryTypeCache.set(topicId, memoInfo.registryType);\n return memoInfo.registryType;\n }\n\n /**\n * Submit a message to a topic\n * @param topicId The topic ID to submit to\n * @param payload The message payload\n * @returns Promise resolving to the transaction receipt\n */\n async submitMessage(\n topicId: string,\n payload: HCS2Message,\n analyticsMemo?: string,\n ): Promise<TransactionReceipt> {\n try {\n await this.ensureInitialized();\n const { valid, errors } = this.validateMessage(payload);\n if (!valid) {\n throw new Error(`Invalid HCS-2 message: ${errors.join(', ')}`);\n }\n\n const transaction = buildMessageTx({\n topicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo,\n });\n\n const txResponse = await transaction.execute(this.client);\n\n const receipt = await txResponse.getReceipt(this.client);\n\n return receipt;\n } catch (error) {\n this.logger.error(`Failed to submit message: ${error}`);\n throw error;\n }\n }\n\n /**\n * @param topicId The topic ID to query\n * @returns Promise resolving to the topic information\n */\n public async getTopicInfo(topicId: string): Promise<any> {\n return this.mirrorNode.getTopicInfo(topicId);\n }\n\n /**\n * Close the client and release resources\n */\n public close(): void {\n this.logger.info('HCS-2 client closed.');\n }\n\n /**\n * Get the configured key type (ed25519 or ecdsa)\n */\n public getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n /**\n * Get the configured operator private key\n */\n public getOperatorKey(): PrivateKey {\n return this.operatorCtx.operatorKey;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es75.js","sources":["../../src/hcs-2/client.ts"],"sourcesContent":["import {\n Client,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n PrivateKey,\n TopicId,\n TransactionReceipt,\n AccountId,\n PublicKey,\n} from '@hashgraph/sdk';\nimport { randomUUID } from 'crypto';\nimport { HCS2BaseClient } from './base-client';\nimport {\n HCS2ClientConfig,\n HCS2Message,\n HCS2Operation,\n HCS2RegistryType,\n TopicRegistrationResponse,\n RegistryOperationResponse,\n TopicRegistry,\n CreateRegistryOptions,\n RegisterEntryOptions,\n UpdateEntryOptions,\n DeleteEntryOptions,\n MigrateTopicOptions,\n QueryRegistryOptions,\n RegistryEntry,\n} from './types';\nimport { NetworkType } from '../utils/types';\nimport {\n NodeOperatorResolver,\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { buildMessageTx } from '../common/tx/tx-utils';\nimport { buildHcs2CreateRegistryTx } from './tx';\nimport { inscribe } from '../inscribe/inscriber';\nimport { InscriptionSDK } from '@kiloscribe/inscription-sdk';\nimport { getTopicId } from '../utils/topic-id-utils';\n\n/** Maximum message payload size before overflow inscription is triggered. */\nconst MAX_PAYLOAD_BYTES = 1024;\n\n/** Regex that matches an HCS-1 HRL like \"hcs://1/0.0.12345\". */\nconst HCS1_HRL_PATTERN = /^hcs:\\/\\/1\\/(\\d+\\.\\d+\\.\\d+)$/;\n\n/**\n * SDK client configuration for HCS-2\n */\nexport interface SDKHCS2ClientConfig extends HCS2ClientConfig {\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n}\n\n/**\n * SDK client for HCS-2 operations\n */\nexport class HCS2Client extends HCS2BaseClient {\n private static readonly operationAnalyticsCode: Record<\n HCS2Operation,\n number\n > = {\n [HCS2Operation.REGISTER]: 0,\n [HCS2Operation.UPDATE]: 1,\n [HCS2Operation.DELETE]: 2,\n [HCS2Operation.MIGRATE]: 3,\n };\n\n private client: Client;\n private operatorId: AccountId;\n private operatorCtx: NodeOperatorContext;\n private readonly registryTypeCache = new Map<string, HCS2RegistryType>();\n private inscriptionSDK?: InscriptionSDK;\n\n /**\n * Create a new HCS-2 client\n * @param config Client configuration\n */\n constructor(config: SDKHCS2ClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n silent: config.silent,\n mirrorNodeUrl: config.mirrorNodeUrl,\n logger: config.logger,\n });\n\n this.operatorId =\n typeof config.operatorId === 'string'\n ? AccountId.fromString(config.operatorId)\n : config.operatorId;\n\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: this.createClient(config.network),\n });\n this.client = this.operatorCtx.client;\n }\n\n /**\n * Initialize the Hedera client with operator information\n */\n private async ensureInitialized(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n /**\n * Create a Hedera client for the specified network\n * @param network The network to connect to\n * @returns The Hedera client\n */\n private createClient(network: NetworkType): Client {\n if (network === 'mainnet') {\n return Client.forMainnet();\n } else {\n return Client.forTestnet();\n }\n }\n\n /**\n * Create a new registry topic\n * @param options Registry creation options\n * @returns Promise resolving to the transaction result\n */\n async createRegistry(\n options: CreateRegistryOptions = {},\n ): Promise<TopicRegistrationResponse> {\n try {\n await this.ensureInitialized();\n const registryType = options.registryType ?? HCS2RegistryType.INDEXED;\n const ttl = options.ttl ?? 86400; // Default TTL: 24 hours\n\n const memo = this.generateRegistryMemo(registryType, ttl);\n\n let adminKeyPrivate: PrivateKey | undefined;\n let adminPublicKey: PublicKey | undefined;\n if (options.adminKey) {\n if (typeof options.adminKey === 'string') {\n try {\n adminPublicKey = PublicKey.fromString(options.adminKey);\n } catch {\n const keyBytes = Buffer.from(\n options.adminKey.replace(/^0x/i, ''),\n 'hex',\n );\n adminPublicKey =\n this.operatorCtx.keyType === 'ed25519'\n ? PublicKey.fromBytesED25519(keyBytes)\n : PublicKey.fromBytesECDSA(keyBytes);\n }\n } else if (typeof options.adminKey === 'boolean') {\n adminPublicKey = this.operatorCtx.operatorKey.publicKey;\n } else {\n adminPublicKey = options.adminKey.publicKey;\n adminKeyPrivate = options.adminKey;\n }\n }\n\n let submitKeyPrivate: PrivateKey | undefined;\n let submitPublicKey: PublicKey | undefined;\n if (options.submitKey) {\n if (typeof options.submitKey === 'string') {\n try {\n submitPublicKey = PublicKey.fromString(options.submitKey);\n } catch {\n const keyBytes = Buffer.from(\n options.submitKey.replace(/^0x/i, ''),\n 'hex',\n );\n submitPublicKey =\n this.operatorCtx.keyType === 'ed25519'\n ? PublicKey.fromBytesED25519(keyBytes)\n : PublicKey.fromBytesECDSA(keyBytes);\n }\n } else if (typeof options.submitKey === 'boolean') {\n submitPublicKey = this.operatorCtx.operatorKey.publicKey;\n } else {\n submitPublicKey = options.submitKey.publicKey;\n submitKeyPrivate = options.submitKey;\n }\n }\n\n const transaction = buildHcs2CreateRegistryTx({\n registryType,\n ttl,\n adminKey: adminPublicKey,\n submitKey: submitPublicKey,\n operatorPublicKey: this.operatorCtx.operatorKey.publicKey,\n });\n\n const frozenTx = await transaction.freezeWith(this.client);\n\n if (adminKeyPrivate) {\n await frozenTx.sign(adminKeyPrivate);\n }\n\n if (submitKeyPrivate) {\n await frozenTx.sign(submitKeyPrivate);\n }\n\n const txResponse = await frozenTx.execute(this.client);\n\n const receipt = await txResponse.getReceipt(this.client);\n const topicId = receipt.topicId;\n\n if (!topicId) {\n throw new Error('Failed to create registry: No topic ID in receipt');\n }\n\n const topicIdStr = topicId.toString();\n this.registryTypeCache.set(topicIdStr, registryType);\n\n this.logger.info(\n `Created registry topic: ${topicIdStr} (${registryType === HCS2RegistryType.INDEXED ? 'Indexed' : 'Non-indexed'}, TTL: ${ttl}s)`,\n );\n\n return {\n success: true,\n topicId: topicIdStr,\n transactionId: txResponse.transactionId.toString(),\n };\n } catch (error) {\n this.logger.error(`Failed to create registry: ${error}`);\n return {\n success: false,\n error: `Failed to create registry: ${error}`,\n };\n }\n }\n\n /**\n * Register a new entry in the registry\n * @param registryTopicId The topic ID of the registry\n * @param options Registration options\n * @param protocol Optional protocol version (defaults to 'hcs-2')\n * @returns Promise resolving to the operation result\n */\n async registerEntry(\n registryTopicId: string,\n options: RegisterEntryOptions,\n protocol: string = 'hcs-2',\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const message = this.createRegisterMessage(\n options.targetTopicId,\n options.metadata,\n options.memo,\n protocol,\n );\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.REGISTER, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Registered entry in registry ${registryTopicId} pointing to topic ${options.targetTopicId} using protocol ${protocol}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to register entry: ${error}`);\n return {\n success: false,\n error: `Failed to register entry: ${error}`,\n };\n }\n }\n\n /**\n * Update an existing entry in the registry (indexed registries only)\n * @param registryTopicId The topic ID of the registry\n * @param options Update options\n * @returns Promise resolving to the operation result\n */\n async updateEntry(\n registryTopicId: string,\n options: UpdateEntryOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);\n\n if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {\n throw new Error(\n 'Update operation is only valid for indexed registries',\n );\n }\n\n const message = this.createUpdateMessage(\n options.targetTopicId,\n options.uid,\n options.metadata,\n options.memo,\n );\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.UPDATE, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Updated entry with UID ${options.uid} in registry ${registryTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to update entry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Delete an entry from the registry (indexed registries only)\n * @param registryTopicId The topic ID of the registry\n * @param options Delete options\n * @returns Promise resolving to the operation result\n */\n async deleteEntry(\n registryTopicId: string,\n options: DeleteEntryOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);\n\n if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {\n throw new Error(\n 'Delete operation is only valid for indexed registries',\n );\n }\n\n const message = this.createDeleteMessage(options.uid, options.memo);\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.DELETE, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Deleted entry with UID ${options.uid} from registry ${registryTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to delete entry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Migrate a registry to a new topic\n * @param registryTopicId The topic ID of the registry\n * @param options Migration options\n * @returns Promise resolving to the operation result\n */\n async migrateRegistry(\n registryTopicId: string,\n options: MigrateTopicOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const message = this.createMigrateMessage(\n options.targetTopicId,\n options.metadata,\n options.memo,\n );\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.MIGRATE, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Migrated registry ${registryTopicId} to ${options.targetTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to migrate registry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get all entries from a registry\n * @param topicId The topic ID of the registry\n * @param options Query options\n * @returns Promise resolving to the registry information\n */\n async getRegistry(\n topicId: string,\n options: QueryRegistryOptions = {},\n ): Promise<TopicRegistry> {\n try {\n await this.ensureInitialized();\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n this.logger.debug(\n `Retrieved topic info for ${topicId}: ${JSON.stringify(topicInfo)}`,\n );\n\n const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);\n\n if (!memoInfo) {\n throw new Error(\n `Topic ${topicId} is not an HCS-2 registry (invalid memo format)`,\n );\n }\n\n this.logger.debug(\n `Retrieving messages for topic ${topicId} with limit ${options.limit ?? 100}`,\n );\n const rawMessagesResult = (await this.mirrorNode.getTopicMessages(\n topicId,\n {\n sequenceNumber:\n options.skip && options.skip > 0 ? `gt:${options.skip}` : undefined,\n limit: options.limit ?? 100,\n order: options.order ?? 'asc',\n },\n )) as any[];\n\n const rawMessages = options.limit\n ? rawMessagesResult.slice(0, options.limit)\n : rawMessagesResult;\n\n this.logger.debug(\n `Retrieved ${rawMessagesResult.length} messages, using ${rawMessages.length} after applying limit.`,\n );\n\n const entries: RegistryEntry[] = [];\n let latestEntry: RegistryEntry | undefined;\n\n for (const msg of rawMessages) {\n try {\n let message: HCS2Message;\n\n // Build the message from the raw mirror node data\n message = {\n p: msg.p || 'hcs-2',\n op: msg.op,\n t_id: msg.t_id,\n uid: msg.uid,\n metadata: msg.metadata,\n m: msg.m,\n } as HCS2Message;\n\n // Check if metadata is an HCS-1 HRL (overflow reference)\n if (\n options.resolveOverflow &&\n typeof msg.metadata === 'string' &&\n HCS1_HRL_PATTERN.test(msg.metadata)\n ) {\n const hrlMatch = msg.metadata.match(HCS1_HRL_PATTERN);\n if (hrlMatch) {\n const refTopicId = hrlMatch[1];\n try {\n const refMessages =\n await this.mirrorNode.getTopicMessages(refTopicId);\n if (refMessages.length > 0) {\n const resolvedMsg = refMessages[0] as Record<string, unknown>;\n message = {\n p: (resolvedMsg.p as string) || 'hcs-2',\n op: resolvedMsg.op as HCS2Message['op'],\n t_id: resolvedMsg.t_id as string | undefined,\n uid: resolvedMsg.uid as string | undefined,\n metadata: resolvedMsg.metadata as string | undefined,\n m: resolvedMsg.m as string | undefined,\n } as HCS2Message;\n }\n } catch (resolveErr) {\n this.logger.warn(\n `Failed to resolve overflow ${msg.metadata}: ${resolveErr}`,\n );\n }\n }\n }\n\n const { valid, errors } = this.validateMessage(message);\n if (!valid) {\n this.logger.warn(`Invalid HCS-2 message: ${errors.join(', ')}`);\n continue;\n }\n\n const entry: RegistryEntry = {\n topicId,\n sequence: msg.sequence_number,\n timestamp: msg.consensus_timestamp,\n payer: msg.payer_account_id || msg.payer || '',\n message,\n consensus_timestamp: msg.consensus_timestamp,\n registry_type: memoInfo.registryType,\n };\n\n entries.push(entry);\n\n if (\n memoInfo.registryType === HCS2RegistryType.NON_INDEXED ||\n !latestEntry ||\n entry.timestamp > latestEntry.timestamp\n ) {\n latestEntry = entry;\n }\n } catch (error) {\n this.logger.warn(`Error processing message: ${error}`);\n }\n }\n\n this.logger.debug(\n `Processed ${entries.length} valid entries for registry ${topicId}`,\n );\n\n const registry: TopicRegistry = {\n topicId,\n registryType: memoInfo.registryType,\n ttl: memoInfo.ttl,\n entries:\n memoInfo.registryType === HCS2RegistryType.INDEXED\n ? entries\n : latestEntry\n ? [latestEntry]\n : [],\n latestEntry,\n };\n\n return registry;\n } catch (error) {\n this.logger.error(`Failed to get registry: ${error}`);\n throw error;\n }\n }\n\n private buildAnalyticsMemo(\n operation: HCS2Operation,\n registryType: HCS2RegistryType,\n ): string {\n const opCode = HCS2Client.operationAnalyticsCode[operation];\n return `hcs-2:op:${opCode}:${registryType}`;\n }\n\n private async resolveRegistryType(\n topicId: string,\n ): Promise<HCS2RegistryType> {\n const cached = this.registryTypeCache.get(topicId);\n if (cached !== undefined) {\n return cached;\n }\n\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);\n if (!memoInfo) {\n throw new Error(\n `Topic ${topicId} is not an HCS-2 registry (invalid memo format)`,\n );\n }\n\n this.registryTypeCache.set(topicId, memoInfo.registryType);\n return memoInfo.registryType;\n }\n\n /**\n * Submit a message to a topic.\n * If the serialized payload exceeds 1024 bytes, the full message is\n * inscribed via HCS-1 (using the Inscriber) and a compact overflow\n * wrapper containing the HRL reference + SHA-256 digest is submitted\n * instead.\n * @param topicId The topic ID to submit to\n * @param payload The message payload\n * @param analyticsMemo Optional analytics memo for the transaction\n * @returns Promise resolving to the transaction receipt\n */\n async submitMessage(\n topicId: string,\n payload: HCS2Message,\n analyticsMemo?: string,\n ): Promise<TransactionReceipt> {\n try {\n await this.ensureInitialized();\n const { valid, errors } = this.validateMessage(payload);\n if (!valid) {\n throw new Error(`Invalid HCS-2 message: ${errors.join(', ')}`);\n }\n\n let messageString = JSON.stringify(payload);\n\n // Overflow: inscribe via HCS-1 when payload exceeds MAX_PAYLOAD_BYTES\n if (Buffer.byteLength(messageString, 'utf8') > MAX_PAYLOAD_BYTES) {\n this.logger.info(\n `HCS-2 payload exceeds ${MAX_PAYLOAD_BYTES} bytes, inscribing via HCS-1`,\n );\n\n const contentBuffer = Buffer.from(messageString, 'utf8');\n const fileName = `hcs2-overflow-${randomUUID()}.json`;\n\n if (this.network !== 'testnet' && this.network !== 'mainnet') {\n throw new Error(\n `Overflow inscription is only supported on testnet and mainnet, but network is ${this.network}`,\n );\n }\n\n const authOptions = {\n accountId: this.operatorId.toString(),\n privateKey: this.operatorCtx.operatorKey,\n network: this.network as 'testnet' | 'mainnet',\n };\n\n if (!this.inscriptionSDK) {\n this.inscriptionSDK = await InscriptionSDK.createWithAuth({\n type: 'server',\n ...authOptions,\n });\n }\n\n const inscriptionResult = await inscribe(\n {\n type: 'buffer',\n buffer: contentBuffer,\n fileName,\n mimeType: 'application/json',\n },\n authOptions,\n {\n mode: 'file' as const,\n waitForConfirmation: true,\n waitMaxAttempts: 30,\n waitIntervalMs: 4000,\n },\n this.inscriptionSDK,\n );\n\n const inscriptionTopicId = getTopicId(inscriptionResult?.inscription);\n if (!inscriptionTopicId) {\n throw new Error(\n 'Failed to inscribe overflow HCS-2 payload: no topic ID returned',\n );\n }\n\n const hrl = `hcs://1/${inscriptionTopicId}`;\n\n // Build a standard HCS-2 message with metadata set to the HRL\n const overflowMessage: HCS2Message = {\n ...payload,\n metadata: hrl,\n } as HCS2Message;\n\n this.logger.info(\n `HCS-2 payload inscribed to ${hrl}, submitting overflow wrapper`,\n );\n messageString = JSON.stringify(overflowMessage);\n }\n\n const transaction = buildMessageTx({\n topicId,\n message: messageString,\n transactionMemo: analyticsMemo,\n });\n\n const txResponse = await transaction.execute(this.client);\n\n const receipt = await txResponse.getReceipt(this.client);\n\n return receipt;\n } catch (error) {\n this.logger.error(`Failed to submit message: ${error}`);\n throw error;\n }\n }\n\n /**\n * @param topicId The topic ID to query\n * @returns Promise resolving to the topic information\n */\n public async getTopicInfo(topicId: string): Promise<any> {\n return this.mirrorNode.getTopicInfo(topicId);\n }\n\n /**\n * Close the client and release resources\n */\n public close(): void {\n this.logger.info('HCS-2 client closed.');\n }\n\n /**\n * Get the configured key type (ed25519 or ecdsa)\n */\n public getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n /**\n * Get the configured operator private key\n */\n public getOperatorKey(): PrivateKey {\n return this.operatorCtx.operatorKey;\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hashgraphonline/standards-sdk",
3
- "version": "0.1.162",
3
+ "version": "0.1.163",
4
4
  "description": "The Hashgraph Online Standards SDK provides a complete implementation of the Hiero Consensus Standards (HCS), giving developers all the tools needed to build wonderful decentralized applications on the Hashgraph network. https://hol.org",
5
5
  "type": "module",
6
6
  "files": [