@hashgraphonline/standards-sdk 0.0.57 → 0.0.59
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/es/hcs-10/agent-builder.d.ts +1 -2
- package/dist/es/hcs-10/agent-builder.d.ts.map +1 -1
- package/dist/es/hcs-10/base-client.d.ts +2 -1
- package/dist/es/hcs-10/base-client.d.ts.map +1 -1
- package/dist/es/hcs-10/browser.d.ts +1 -1
- package/dist/es/hcs-10/browser.d.ts.map +1 -1
- package/dist/es/hcs-10/index.d.ts +1 -0
- package/dist/es/hcs-10/index.d.ts.map +1 -1
- package/dist/es/hcs-10/registrations.d.ts +1 -60
- package/dist/es/hcs-10/registrations.d.ts.map +1 -1
- package/dist/es/hcs-10/sdk.d.ts +3 -32
- package/dist/es/hcs-10/sdk.d.ts.map +1 -1
- package/dist/es/hcs-10/types.d.ts +89 -6
- package/dist/es/hcs-10/types.d.ts.map +1 -1
- package/dist/es/hcs-11/index.d.ts +1 -1
- package/dist/es/hcs-11/index.d.ts.map +1 -1
- package/dist/es/inscribe/types.d.ts +1 -1
- package/dist/es/inscribe/types.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +7 -7
- package/dist/es/standards-sdk.es10.js +14 -11
- package/dist/es/standards-sdk.es10.js.map +1 -1
- package/dist/es/standards-sdk.es100.js +142 -38
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +86 -13
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +79 -56
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +25 -1282
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +5 -31
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +158 -5
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +22 -158
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +2 -2
- package/dist/es/standards-sdk.es109.js +2 -2
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es12.js +7 -739
- package/dist/es/standards-sdk.es12.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +722 -52
- package/dist/es/standards-sdk.es13.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +67 -20
- package/dist/es/standards-sdk.es14.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +18 -156
- package/dist/es/standards-sdk.es15.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +138 -385
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es17.js +385 -211
- package/dist/es/standards-sdk.es17.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +233 -7
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es2.js +1 -1
- package/dist/es/standards-sdk.es26.js +9 -9
- package/dist/es/standards-sdk.es3.js +1 -1
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es5.js +16 -12
- package/dist/es/standards-sdk.es5.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es7.js.map +1 -1
- package/dist/es/standards-sdk.es8.js +10 -5
- package/dist/es/standards-sdk.es8.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +185 -74
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +433 -18
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es9.js +1 -1
- package/dist/es/standards-sdk.es9.js.map +1 -1
- package/dist/es/standards-sdk.es90.js +21 -144
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +130 -82
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +14 -191
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +21 -430
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +19 -15
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +13 -131
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +35 -9
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +11 -22
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +49 -17
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +1283 -15
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/dist/umd/hcs-10/agent-builder.d.ts +1 -2
- package/dist/umd/hcs-10/agent-builder.d.ts.map +1 -1
- package/dist/umd/hcs-10/base-client.d.ts +2 -1
- package/dist/umd/hcs-10/base-client.d.ts.map +1 -1
- package/dist/umd/hcs-10/browser.d.ts +1 -1
- package/dist/umd/hcs-10/browser.d.ts.map +1 -1
- package/dist/umd/hcs-10/index.d.ts +1 -0
- package/dist/umd/hcs-10/index.d.ts.map +1 -1
- package/dist/umd/hcs-10/registrations.d.ts +1 -60
- package/dist/umd/hcs-10/registrations.d.ts.map +1 -1
- package/dist/umd/hcs-10/sdk.d.ts +3 -32
- package/dist/umd/hcs-10/sdk.d.ts.map +1 -1
- package/dist/umd/hcs-10/types.d.ts +89 -6
- package/dist/umd/hcs-10/types.d.ts.map +1 -1
- package/dist/umd/hcs-11/index.d.ts +1 -1
- package/dist/umd/hcs-11/index.d.ts.map +1 -1
- package/dist/umd/inscribe/types.d.ts +1 -1
- package/dist/umd/inscribe/types.d.ts.map +1 -1
- package/dist/umd/standards-sdk.umd.js +1 -1
- package/dist/umd/standards-sdk.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es10.js","sources":["../../src/hcs-10/browser.ts"],"sourcesContent":["import {\n KeyList,\n PublicKey,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TransactionReceipt,\n PrivateKey,\n Hbar,\n} from '@hashgraph/sdk';\nimport { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport { Logger, LogLevel } from '../utils/logger';\nimport {\n InscriptionSDK,\n RetrievedInscriptionResult,\n} from '@kiloscribe/inscription-sdk';\nimport { HCS10BaseClient } from './base-client';\nimport * as mime from 'mime-types';\nimport {\n HCSClientConfig,\n NetworkType,\n RegistrationResponse,\n AgentConfig,\n CreateAgentResponse,\n InscribePfpResponse,\n StoreHCS11ProfileResponse,\n AgentRegistrationResult,\n HandleConnectionRequestResponse,\n WaitForConnectionConfirmationResponse,\n RegistrationProgressCallback,\n AgentCreationState,\n GetAccountAndSignerResponse,\n} from './types';\nimport { HCS11Client, AIAgentMetadata } from '../hcs-11';\nimport { ProgressReporter } from '../utils/progress-reporter';\nimport { Transaction } from '@hashgraph/sdk';\nimport { AgentBuilder } from './agent-builder';\nimport { inscribeWithSigner } from '../inscribe/inscriber';\nimport { Hcs10MemoType } from './base-client';\n\nconst isBrowser = typeof window !== 'undefined';\n\nexport type BrowserHCSClientConfig = {\n network: 'mainnet' | 'testnet';\n hwc: HashinalsWalletConnectSDK;\n logLevel?: LogLevel;\n prettyPrint?: boolean;\n guardedRegistryTopicId?: string;\n guardedRegistryBaseUrl?: string;\n feeAmount?: number;\n};\n\ninterface AgentMetadata {\n name: string;\n description: string;\n version?: string;\n type?: string;\n logo?: string;\n socials?: SocialLinks;\n}\n\ninterface SocialLinks {\n twitter?: string;\n discord?: string;\n github?: string;\n website?: string;\n}\n\nexport type BrowserAgentConfig = Omit<\n AgentConfig<BrowserHCSClient>,\n 'privateKey'\n> & {\n client: BrowserHCSClient;\n};\n\nexport type RegisteredAgent = {\n outboundTopicId: string;\n inboundTopicId: string;\n pfpTopicId: string;\n profileTopicId: string;\n error?: string;\n success: boolean;\n state: AgentCreationState;\n};\n\nexport class BrowserHCSClient extends HCS10BaseClient {\n private hwc: HashinalsWalletConnectSDK;\n protected declare logger: Logger;\n private guardedRegistryBaseUrl: string;\n private hcs11Client: HCS11Client | null = null;\n\n constructor(config: BrowserHCSClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n prettyPrint: config.prettyPrint,\n feeAmount: config.feeAmount,\n });\n\n this.hwc = config.hwc;\n this.guardedRegistryBaseUrl =\n config.guardedRegistryBaseUrl || 'https://moonscape.tech';\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-Browser',\n prettyPrint: config.prettyPrint,\n });\n\n if (isBrowser) {\n try {\n const { accountId, signer } = this.getAccountAndSigner();\n\n this.hcs11Client = new HCS11Client({\n network: config.network,\n auth: {\n operatorId: accountId,\n signer: signer as any,\n },\n logLevel: config.logLevel,\n });\n } catch (err) {\n this.logger.warn(`Failed to initialize HCS11Client: ${err}`);\n }\n } else {\n this.logger.error(\n 'BrowserHCSClient initialized in server environment - browser-specific features will not be available. Use HCS10Client instead.'\n );\n }\n }\n\n async sendMessage(\n connectionTopicId: string,\n data: string,\n memo?: string,\n submitKey?: PrivateKey\n ): Promise<TransactionReceipt> {\n this.logger.info('Sending message');\n const operatorId = await this.getOperatorId();\n\n const payload = {\n p: 'hcs-10',\n op: 'message',\n operator_id: operatorId,\n data,\n m: memo,\n };\n\n const submissionCheck = await this.canSubmitToTopic(\n connectionTopicId,\n this.hwc.getAccountInfo().accountId\n );\n\n const payloadString = JSON.stringify(payload);\n const isLargePayload = Buffer.from(payloadString).length > 1000;\n\n if (isLargePayload) {\n this.logger.info(\n 'Message payload exceeds 1000 bytes, storing via inscription'\n );\n try {\n const contentBuffer = Buffer.from(data);\n const fileName = `message-${Date.now()}.json`;\n const inscriptionResult = await this.inscribeFile(\n contentBuffer,\n fileName\n );\n\n if (inscriptionResult?.topic_id) {\n payload.data = `hcs://1/${inscriptionResult.topic_id}`;\n this.logger.info(\n `Large message inscribed with topic ID: ${inscriptionResult.topic_id}`\n );\n } else {\n throw new Error('Failed to inscribe large message content');\n }\n } catch (error) {\n this.logger.error('Error inscribing large message:', error);\n throw new Error(\n `Failed to handle large message: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n return await this.submitPayload(\n connectionTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n }\n\n async submitConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n operatorId: string,\n memo: string,\n ttl: number = 60\n ): Promise<TransactionReceipt | undefined> {\n this.logger.info('Submitting connection request');\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n requesting_account_id: requestingAccountId,\n operator_id: operatorId,\n m: memo,\n };\n\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage\n );\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveOutboundConnectTopic(\n requestingAccountId\n );\n\n if (!outboundTopic?.outboundTopic) {\n this.logger.error(\n `Failed to retrieve outbound topic for account ID: ${requestingAccountId}`\n );\n throw new Error(\n `Failed to retrieve outbound topic for account ID: ${requestingAccountId}`\n );\n }\n\n this.logger.info(\n `Retrieved outbound topic ID: ${outboundTopic.outboundTopic} for account ID: ${requestingAccountId}`\n );\n const responseSequenceNumber = response?.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n await this.submitPayload(outboundTopic.outboundTopic, {\n ...connectionRequestMessage,\n outbound_topic_id: inboundTopicId,\n connection_request_id: responseSequenceNumber,\n });\n\n return response;\n }\n\n async getPublicKey(accountId: string): Promise<PublicKey> {\n return await this.mirrorNode.getPublicKey(accountId);\n }\n\n async handleConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n connectionId: number,\n connectionMemo: string = 'Connection accepted. Looking forward to collaborating!',\n ttl: number = 60\n ): Promise<HandleConnectionRequestResponse> {\n this.logger.info('Handling connection request');\n const userAccountId = this.hwc.getAccountInfo().accountId;\n if (!userAccountId) {\n throw new Error('Failed to retrieve user account ID');\n }\n\n const requesterKey = await this.mirrorNode.getPublicKey(\n requestingAccountId\n );\n const accountKey = await this.mirrorNode.getPublicKey(userAccountId);\n\n if (!accountKey) {\n throw new Error('Failed to retrieve public key');\n }\n\n const thresholdKey = new KeyList([accountKey, requesterKey], 1);\n const memo = this._generateHcs10Memo(Hcs10MemoType.CONNECTION, {\n ttl,\n inboundTopicId,\n connectionId,\n });\n\n const transaction = new TopicCreateTransaction()\n .setTopicMemo(memo)\n .setAdminKey(thresholdKey)\n .setSubmitKey(thresholdKey);\n\n this.logger.debug('Executing topic creation transaction');\n const txResponse = await this.hwc.executeTransactionWithErrorHandling(\n transaction,\n false\n );\n if (txResponse.error) {\n this.logger.error(txResponse.error);\n throw new Error(txResponse.error);\n }\n\n const resultReceipt = txResponse.result;\n if (!resultReceipt?.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n throw new Error('Failed to create topic: topicId is null');\n }\n\n const connectionTopicId = resultReceipt.topicId.toString();\n const operatorId = `${inboundTopicId}@${userAccountId}`;\n const confirmedConnectionSequenceNumber = await this.confirmConnection(\n inboundTopicId,\n connectionTopicId,\n requestingAccountId,\n connectionId,\n operatorId,\n connectionMemo\n );\n\n return {\n connectionTopicId,\n confirmedConnectionSequenceNumber,\n operatorId,\n };\n }\n\n async confirmConnection(\n inboundTopicId: string,\n connectionTopicId: string,\n connectedAccountId: string,\n connectionId: number,\n operatorId: string,\n memo: string\n ): Promise<number> {\n this.logger.info('Confirming connection');\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n connected_account_id: connectedAccountId,\n operator_id: operatorId,\n connection_id: connectionId,\n m: memo,\n };\n\n const transactionResponse = await this.submitPayload(\n inboundTopicId,\n payload\n );\n if (!transactionResponse?.topicSequenceNumber) {\n this.logger.error(\n 'Failed to confirm connection: sequence number is null'\n );\n throw new Error('Failed to confirm connection: sequence number is null');\n }\n return transactionResponse.topicSequenceNumber.toNumber();\n }\n\n /**\n * Creates an agent directly, but does not register.\n * We highly recommend calling createAndRegisterAgent instead.\n *\n * @param pfpBuffer - The buffer containing the PFP image.\n * @param pfpFileName - The name of the file containing the PFP image.\n * @param agentName - The name of the agent.\n * @param agentDescription - The description of the agent.\n * @param capabilities - The capabilities of the agent.\n * @param metadata - The metadata of the agent.\n * @param existingPfpTopicId - The topic ID of the existing PFP.\n * @param options - Optional configuration options.\n * @returns A promise that resolves to the agent creation state.\n */\n async createAgent(\n pfpBuffer: Buffer,\n pfpFileName: string,\n agentName: string,\n agentDescription: string,\n capabilities: number[],\n metadata: AgentMetadata,\n existingPfpTopicId?: string,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n existingState?: AgentCreationState;\n ttl?: number;\n }\n ): Promise<RegisteredAgent> {\n try {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'AgentCreate',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n let state =\n options?.existingState ||\n ({\n currentStage: 'init',\n completedPercentage: 0,\n createdResources: [],\n } as AgentCreationState);\n\n if (!state.outboundTopicId) {\n state.currentStage = 'topics';\n progressReporter.preparing('Creating agent outbound topic', 0, {\n state,\n });\n\n const outboundMemo = this._generateHcs10Memo(Hcs10MemoType.OUTBOUND, {\n ttl: options?.ttl,\n });\n const outboundResult = await this.createTopic(outboundMemo, true, true);\n\n if (!outboundResult.success || !outboundResult.topicId) {\n state.error =\n outboundResult.error || 'Failed to create outbound topic';\n progressReporter.failed(\n `Failed to create outbound topic: ${state.error}`,\n { state }\n );\n return {\n outboundTopicId: '',\n inboundTopicId: '',\n pfpTopicId: '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n state.outboundTopicId = outboundResult.topicId;\n if (state.createdResources) {\n state.createdResources.push(`outbound:${state.outboundTopicId}`);\n }\n progressReporter.preparing('Outbound topic created', 20, { state });\n } else {\n progressReporter.preparing('Using existing outbound topic', 20, {\n state,\n });\n }\n\n const accountId = this.hwc.getAccountInfo().accountId;\n if (!accountId) {\n throw new Error('Failed to retrieve user account ID');\n }\n\n if (!state.inboundTopicId) {\n const inboundMemo = this._generateHcs10Memo(Hcs10MemoType.INBOUND, {\n accountId,\n ttl: options?.ttl,\n });\n const inboundResult = await this.createTopic(inboundMemo, true, true);\n\n if (!inboundResult.success || !inboundResult.topicId) {\n state.error = inboundResult.error || 'Failed to create inbound topic';\n progressReporter.failed(\n `Failed to create inbound topic: ${state.error}`,\n { state }\n );\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: '',\n pfpTopicId: '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n state.inboundTopicId = inboundResult.topicId;\n if (state.createdResources) {\n state.createdResources.push(`inbound:${state.inboundTopicId}`);\n }\n progressReporter.preparing('Inbound topic created', 40, { state });\n } else {\n progressReporter.preparing('Using existing inbound topic', 40, {\n state,\n });\n }\n\n if (!state.pfpTopicId && !existingPfpTopicId) {\n state.currentStage = 'pfp';\n progressReporter.preparing('Creating agent profile picture', 40, {\n state,\n });\n\n const pfpProgress = progressReporter.createSubProgress({\n minPercent: 40,\n maxPercent: 60,\n logPrefix: 'PFP',\n });\n\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName, {\n progressCallback: (data) => {\n pfpProgress.report({\n stage: data.stage,\n message: data.message,\n progressPercent: data.progressPercent || 0,\n details: { ...data.details, state },\n });\n },\n });\n\n if (!pfpResult.success) {\n state.error = pfpResult.error || 'Failed to inscribe profile picture';\n progressReporter.failed(\n `Failed to inscribe profile picture: ${state.error}`,\n { state }\n );\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: state.inboundTopicId || '',\n pfpTopicId: '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n state.pfpTopicId = pfpResult.pfpTopicId;\n state.completedPercentage = 60;\n if (state.createdResources) {\n state.createdResources.push(`pfp:${state.pfpTopicId}`);\n }\n\n progressReporter.preparing('Profile picture created', 60, { state });\n } else {\n state.pfpTopicId = existingPfpTopicId || state.pfpTopicId;\n progressReporter.preparing(\n `Using existing profile picture: ${state.pfpTopicId}`,\n 60,\n {\n state,\n }\n );\n }\n\n if (!state.profileTopicId) {\n state.currentStage = 'profile';\n progressReporter.preparing('Creating agent profile', 60, { state });\n\n const profileProgress = progressReporter.createSubProgress({\n minPercent: 60,\n maxPercent: 100,\n logPrefix: 'Profile',\n });\n\n if (!this.hcs11Client) {\n state.error = 'HCS11Client is not available in this environment';\n progressReporter.failed(state.error, { state });\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: state.inboundTopicId || '',\n pfpTopicId: state.pfpTopicId || '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n const storeProfileResult = await this.storeHCS11Profile(\n agentName,\n agentDescription,\n state.inboundTopicId!,\n state.outboundTopicId!,\n capabilities,\n metadata,\n undefined,\n undefined,\n state.pfpTopicId,\n {\n progressCallback: (data) => {\n profileProgress.report({\n stage: data.stage,\n message: data.message,\n progressPercent: data.progressPercent || 0,\n details: { ...data.details, state },\n });\n },\n }\n );\n\n if (!storeProfileResult.success) {\n state.error =\n storeProfileResult.error || 'Failed to store agent profile';\n progressReporter.failed(\n `Failed to store agent profile: ${state.error}`,\n { state }\n );\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: state.inboundTopicId || '',\n pfpTopicId: state.pfpTopicId || '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n state.profileTopicId = storeProfileResult.profileTopicId;\n if (state.createdResources) {\n state.createdResources.push(`profile:${state.profileTopicId}`);\n }\n\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n } else {\n progressReporter.preparing('Using existing agent profile', 100, {\n state,\n });\n if (state.currentStage !== 'complete') {\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n }\n }\n\n progressReporter.completed('Agent successfully created', {\n inboundTopicId: state.inboundTopicId,\n outboundTopicId: state.outboundTopicId,\n pfpTopicId: state.pfpTopicId,\n profileTopicId: state.profileTopicId,\n state,\n });\n\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: state.inboundTopicId || '',\n pfpTopicId: state.pfpTopicId || '',\n profileTopicId: state.profileTopicId || '',\n success: true,\n state,\n };\n } catch (error: any) {\n this.logger.error(`Error creating agent: ${error.message}`);\n return {\n outboundTopicId: '',\n inboundTopicId: '',\n pfpTopicId: '',\n profileTopicId: '',\n success: false,\n error: `Error creating agent: ${error.message}`,\n state: {\n currentStage: 'init',\n completedPercentage: 0,\n error: error.message,\n },\n };\n }\n }\n\n private initializeRegistrationState(\n inboundTopicId: string,\n existingState?: AgentCreationState\n ): AgentCreationState {\n const state = existingState || {\n inboundTopicId,\n currentStage: 'registration',\n completedPercentage: 0,\n createdResources: [],\n };\n\n if (\n state.currentStage !== 'registration' &&\n state.currentStage !== 'complete'\n ) {\n state.currentStage = 'registration';\n }\n\n return state;\n }\n\n private updateStateForCompletedRegistration(\n state: AgentCreationState,\n inboundTopicId: string\n ): void {\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n if (state.createdResources) {\n state.createdResources.push(`registration:${inboundTopicId}`);\n }\n }\n\n async registerAgentWithGuardedRegistry(\n accountId: string,\n network: string = this.network,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n maxAttempts?: number;\n delayMs?: number;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n this.logger.info('Registering agent with guarded registry');\n\n const agentProfile = await this.retrieveProfile(accountId);\n const inboundTopicId = agentProfile.topicInfo.inboundTopic;\n const state = this.initializeRegistrationState(\n inboundTopicId,\n options?.existingState\n );\n const progressReporter = new ProgressReporter({\n module: 'AgentRegistration',\n logger: this.logger,\n callback: options?.progressCallback,\n });\n\n progressReporter.preparing('Preparing agent registration', 10, {\n inboundTopicId,\n accountId,\n });\n\n const registrationResult = await this.executeRegistration(\n accountId,\n network as string,\n this.guardedRegistryBaseUrl,\n this.logger\n );\n\n if (!registrationResult.success) {\n return {\n ...registrationResult,\n state,\n };\n }\n\n progressReporter.submitting('Submitting registration to registry', 30, {\n transactionId: registrationResult.transactionId,\n });\n\n if (registrationResult.transaction) {\n const transaction = Transaction.fromBytes(\n Buffer.from(registrationResult.transaction, 'base64')\n );\n\n this.logger.info(`Processing registration transaction`);\n const txResult = await this.hwc.executeTransactionWithErrorHandling(\n transaction as any,\n true\n );\n\n if (txResult.error) {\n return {\n ...registrationResult,\n error: txResult.error,\n success: false,\n state,\n };\n }\n\n this.logger.info(`Successfully processed registration transaction`);\n }\n\n progressReporter.confirming('Confirming registration transaction', 60, {\n accountId,\n inboundTopicId,\n transactionId: registrationResult.transactionId,\n });\n\n const maxAttempts = options?.maxAttempts ?? 60;\n const delayMs = options?.delayMs ?? 2000;\n\n const confirmed = await this.waitForRegistrationConfirmation(\n registrationResult.transactionId!,\n network,\n this.guardedRegistryBaseUrl,\n maxAttempts,\n delayMs,\n this.logger\n );\n\n this.updateStateForCompletedRegistration(state, inboundTopicId);\n\n progressReporter.completed('Agent registration complete', {\n transactionId: registrationResult.transactionId,\n inboundTopicId,\n state,\n confirmed,\n });\n\n return {\n ...registrationResult,\n confirmed,\n state,\n };\n } catch (error: any) {\n this.logger.error(`Registration error: ${error.message}`);\n return {\n error: `Error during registration: ${error.message}`,\n success: false,\n state: {\n currentStage: 'registration',\n completedPercentage: 0,\n error: error.message,\n },\n };\n }\n }\n\n async createAndRegisterAgent(\n builder: AgentBuilder,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n maxAttempts?: number;\n delayMs?: number;\n existingState?: AgentCreationState;\n baseUrl?: string;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n const config = builder.build();\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'AgentCreateRegister',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n let state =\n options?.existingState ||\n ({\n currentStage: 'init',\n completedPercentage: 0,\n createdResources: [],\n } as AgentCreationState);\n\n state.agentMetadata = config.metadata;\n\n progressReporter.preparing('Starting agent creation process', 0, {\n state,\n });\n\n if (\n state.currentStage !== 'complete' ||\n !state.inboundTopicId ||\n !state.outboundTopicId ||\n !state.profileTopicId\n ) {\n const agentResult = await this.createAgent(\n config.pfpBuffer || Buffer.from([]),\n config.pfpFileName || 'default.png',\n config.name,\n config.description,\n config.capabilities,\n config.metadata,\n config.existingPfpTopicId,\n {\n progressCallback: (progress) => {\n const adjustedPercent = (progress.progressPercent || 0) * 0.3;\n progressReporter.report({\n stage: progress.stage,\n message: progress.message,\n progressPercent: adjustedPercent,\n details: {\n ...progress.details,\n state: progress.details?.state || state,\n },\n });\n },\n existingState: state,\n }\n );\n\n if (!agentResult.success) {\n throw new Error(\n agentResult.error || 'Failed to create agent with topics'\n );\n }\n\n state = agentResult.state;\n state.agentMetadata = config.metadata;\n }\n\n progressReporter.preparing(\n `Agent creation status: ${state.currentStage}, ${state.completedPercentage}%`,\n 30,\n { state }\n );\n\n const { accountId } = this.getAccountAndSigner();\n\n if (\n state.currentStage !== 'complete' ||\n !state.createdResources?.includes(\n `registration:${state.inboundTopicId}`\n )\n ) {\n if (options?.baseUrl) {\n this.guardedRegistryBaseUrl = options.baseUrl;\n }\n\n const registrationResult = await this.registerAgentWithGuardedRegistry(\n accountId,\n config.network,\n {\n progressCallback: (progress) => {\n const adjustedPercent =\n 30 + (progress.progressPercent || 0) * 0.7;\n progressReporter.report({\n stage: progress.stage,\n message: progress.message,\n progressPercent: adjustedPercent,\n details: {\n ...progress.details,\n state: progress.details?.state || state,\n },\n });\n },\n maxAttempts: options?.maxAttempts,\n delayMs: options?.delayMs,\n existingState: state,\n }\n );\n\n if (!registrationResult.success) {\n throw new Error(\n registrationResult.error || 'Failed to register agent with registry'\n );\n }\n\n state = registrationResult.state;\n }\n\n progressReporter.completed('Agent creation and registration complete', {\n state,\n });\n\n return {\n success: true,\n state,\n metadata: {\n accountId,\n operatorId: `${state.inboundTopicId}@${accountId}`,\n inboundTopicId: state.inboundTopicId!,\n outboundTopicId: state.outboundTopicId!,\n profileTopicId: state.profileTopicId!,\n pfpTopicId: state.pfpTopicId!,\n privateKey: null,\n ...state.agentMetadata,\n },\n };\n } catch (error: any) {\n throw new Error(`Failed to create and register agent: ${error.message}`);\n }\n }\n\n async storeHCS11Profile(\n agentName: string,\n agentDescription: string,\n inboundTopicId: string,\n outboundTopicId: string,\n capabilities: number[] = [],\n metadata: Record<string, any> = {},\n pfpBuffer?: Buffer,\n pfpFileName?: string,\n existingPfpTopicId?: string,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n }\n ): Promise<StoreHCS11ProfileResponse> {\n try {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'StoreHCS11Profile',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n progressReporter.preparing('Preparing agent profile data', 0);\n\n let pfpTopicId = existingPfpTopicId;\n\n if (!pfpTopicId && pfpBuffer && pfpFileName) {\n const pfpProgress = progressReporter.createSubProgress({\n minPercent: 0,\n maxPercent: 60,\n logPrefix: 'PFP',\n });\n\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName, {\n progressCallback: (data) => {\n pfpProgress.report({\n stage: data.stage,\n message: data.message,\n progressPercent: data.progressPercent || 0,\n details: data.details,\n });\n },\n });\n\n if (!pfpResult.success) {\n progressReporter.failed(\n 'Failed to inscribe profile picture, continuing without PFP'\n );\n } else {\n pfpTopicId = pfpResult.pfpTopicId;\n }\n } else if (existingPfpTopicId) {\n progressReporter.preparing(\n `Using existing profile picture: ${existingPfpTopicId}`,\n 30\n );\n } else {\n progressReporter.preparing('No profile picture provided', 30);\n }\n\n const agentType = this.hcs11Client?.getAgentTypeFromMetadata({\n type: metadata.type || 'autonomous',\n } as AIAgentMetadata);\n\n progressReporter.preparing('Building agent profile', 65);\n\n const formattedSocials = [];\n if (metadata.socials) {\n if (metadata.socials.twitter) {\n formattedSocials.push({\n platform: 'twitter',\n handle: metadata.socials.twitter,\n });\n }\n if (metadata.socials.discord) {\n formattedSocials.push({\n platform: 'discord',\n handle: metadata.socials.discord,\n });\n }\n if (metadata.socials.github) {\n formattedSocials.push({\n platform: 'github',\n handle: metadata.socials.github,\n });\n }\n if (metadata.socials.website) {\n formattedSocials.push({\n platform: 'website',\n handle: metadata.socials.website,\n });\n }\n if (metadata.socials.x) {\n formattedSocials.push({\n platform: 'twitter',\n handle: metadata.socials.x,\n });\n }\n if (metadata.socials.linkedin) {\n formattedSocials.push({\n platform: 'linkedin',\n handle: metadata.socials.linkedin,\n });\n }\n if (metadata.socials.youtube) {\n formattedSocials.push({\n platform: 'youtube',\n handle: metadata.socials.youtube,\n });\n }\n if (metadata.socials.telegram) {\n formattedSocials.push({\n platform: 'telegram',\n handle: metadata.socials.telegram,\n });\n }\n }\n\n if (!this.hcs11Client) {\n progressReporter.failed(\n 'HCS11Client is not available in this environment'\n );\n return {\n profileTopicId: '',\n success: false,\n error: 'HCS11Client is not available in this environment',\n transactionId: '',\n };\n }\n\n const profile = this.hcs11Client.createAIAgentProfile(\n agentName,\n agentType!,\n capabilities,\n metadata.model || 'unknown',\n {\n alias: agentName.toLowerCase().replace(/\\s+/g, '_'),\n bio: agentDescription,\n profileImage: pfpTopicId ? `hcs://1/${pfpTopicId}` : undefined,\n socials: formattedSocials.length > 0 ? formattedSocials : undefined,\n properties: {\n description: agentDescription,\n version: metadata.version || '1.0.0',\n creator: metadata.creator || 'Unknown',\n supported_languages: metadata.supported_languages || ['en'],\n permissions: metadata.permissions || [],\n model_details: metadata.model_details,\n training: metadata.training,\n capabilities_description: metadata.capabilities_description,\n ...metadata,\n },\n inboundTopicId,\n outboundTopicId,\n creator: metadata.creator,\n }\n );\n\n const profileProgress = progressReporter.createSubProgress({\n minPercent: 65,\n maxPercent: 100,\n logPrefix: 'Profile',\n });\n\n const profileResult = await this.hcs11Client.createAndInscribeProfile(\n profile,\n true,\n {\n progressCallback: (profileData) => {\n profileProgress.report({\n stage: profileData.stage,\n message: profileData.message,\n progressPercent: profileData.progressPercent || 0,\n details: profileData.details,\n });\n },\n }\n );\n\n if (!profileResult.success) {\n progressReporter.failed('Failed to inscribe profile');\n return {\n profileTopicId: '',\n success: false,\n error: profileResult.error || 'Failed to inscribe profile',\n transactionId: profileResult.transactionId || '',\n };\n }\n\n progressReporter.completed('Profile stored successfully', {\n profileTopicId: profileResult.profileTopicId,\n });\n\n return {\n profileTopicId: profileResult.profileTopicId,\n pfpTopicId,\n success: true,\n transactionId: profileResult.transactionId || '',\n };\n } catch (error: any) {\n this.logger.error(`Error storing HCS11 profile: ${error.message}`);\n return {\n profileTopicId: '',\n success: false,\n error: error.message,\n transactionId: '',\n };\n }\n }\n\n async createTopic(\n memo: string,\n adminKey?: boolean,\n submitKey?: boolean\n ): Promise<{\n success: boolean;\n topicId?: string;\n error?: string;\n }> {\n this.logger.info('Creating topic');\n const { accountId, signer } = this.getAccountAndSigner();\n\n const transaction = new TopicCreateTransaction().setTopicMemo(memo);\n\n const publicKey = await this.mirrorNode.getPublicKey(accountId);\n\n if (adminKey && publicKey) {\n transaction.setAdminKey(publicKey);\n transaction.setAutoRenewAccountId(accountId);\n }\n\n if (submitKey && publicKey) {\n transaction.setSubmitKey(publicKey);\n }\n\n const transactionResponse =\n await this.hwc.executeTransactionWithErrorHandling(\n transaction as any,\n false\n );\n\n const error = transactionResponse.error;\n\n if (error) {\n this.logger.error(error);\n return {\n success: false,\n error,\n };\n }\n\n const resultReceipt = transactionResponse.result;\n\n if (!resultReceipt?.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n return {\n success: false,\n error: 'Failed to create topic: topicId is null',\n };\n }\n\n return {\n success: true,\n topicId: resultReceipt.topicId.toString(),\n };\n }\n\n public async submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee?: boolean\n ): Promise<TransactionReceipt> {\n this.logger.debug(`Submitting payload to topic ${topicId}`);\n\n let message: string;\n if (typeof payload === 'string') {\n message = payload;\n } else {\n message = JSON.stringify(payload);\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(topicId)\n .setMessage(message);\n\n let transactionResponse: {\n result?: TransactionReceipt;\n error?: string;\n };\n\n if (requiresFee) {\n this.logger.info(\n 'Topic requires fee payment, setting max transaction fee'\n );\n transaction.setMaxTransactionFee(new Hbar(this.feeAmount));\n transaction.setTransactionMemo('HIP-991 Fee Payment');\n }\n\n if (submitKey) {\n const { accountId, signer } = this.getAccountAndSigner();\n transaction.freezeWithSigner(signer as any);\n const signedTransaction = await transaction.sign(submitKey);\n transactionResponse = await this.hwc.executeTransactionWithErrorHandling(\n signedTransaction,\n true\n );\n } else {\n transactionResponse = await this.hwc.executeTransactionWithErrorHandling(\n transaction,\n false\n );\n }\n\n if (transactionResponse?.error) {\n this.logger.error(\n `Failed to submit payload: ${transactionResponse.error}`\n );\n throw new Error(`Failed to submit payload: ${transactionResponse.error}`);\n }\n\n if (!transactionResponse?.result) {\n this.logger.error(\n 'Failed to submit message: receipt is null or undefined'\n );\n throw new Error('Failed to submit message: receipt is null or undefined');\n }\n\n this.logger.debug('Payload submitted successfully via HWC');\n return transactionResponse.result;\n }\n\n async inscribeFile(\n buffer: Buffer,\n fileName: string\n ): Promise<RetrievedInscriptionResult> {\n const { accountId, signer } = this.getAccountAndSigner();\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const sdk = await InscriptionSDK.createWithAuth({\n type: 'client',\n accountId: accountId,\n signer: signer as any,\n network: this.network as 'testnet' | 'mainnet',\n });\n\n const result = await sdk.inscribe(\n {\n file: {\n type: 'base64',\n base64: buffer.toString('base64'),\n fileName,\n mimeType,\n },\n holderId: accountId.toString(),\n mode: 'file',\n network: this.network as 'testnet' | 'mainnet',\n },\n signer as any\n );\n\n if (!result.transactionId || !result.jobId) {\n this.logger.error('Failed to inscribe, no transaction ID or job ID.');\n throw new Error('Failed to inscribe, no transaction ID or job ID.');\n }\n\n if (result.transactionId && result.jobId) {\n this.logger.info(\n `Transaction ID: ${result.transactionId}, Job ID: ${result.jobId}`\n );\n }\n\n const status = await sdk.waitForInscription(result.jobId, 30, 4000, true);\n return status;\n }\n\n getAccountAndSigner(): GetAccountAndSignerResponse {\n const accountInfo = this.hwc.getAccountInfo();\n const accountId = accountInfo.accountId.toString();\n const signer = this.hwc.dAppConnector.signers.find((s) => {\n return s.getAccountId().toString() === accountId;\n });\n\n if (!signer) {\n this.logger.error('Failed to find signer');\n throw new Error('Failed to find signer');\n }\n\n return { accountId, signer: signer as any };\n }\n\n /**\n * Inscribes a profile picture (PFP) on HCS-11.\n *\n * @param buffer - The buffer containing the PFP image.\n * @param fileName - The name of the file containing the PFP image.\n * @param options - Optional configuration options.\n * @returns A promise that resolves to the topic ID of the inscribed PFP.\n */\n async inscribePfp(\n buffer: Buffer,\n fileName: string,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n }\n ): Promise<InscribePfpResponse> {\n try {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'PFP-Inscription',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n if (!this.hcs11Client) {\n progressReporter.failed(\n 'HCS11Client is not available in this environment'\n );\n return {\n pfpTopicId: '',\n success: false,\n error: 'HCS11Client is not available in this environment',\n transactionId: '',\n };\n }\n\n progressReporter.preparing('Preparing to inscribe profile picture', 10);\n this.logger.info('Inscribing profile picture using HCS-11 client');\n\n const wrappedProgressCallback = (data: any) => {\n progressReporter.report({\n stage: data.stage || 'confirming',\n message: data.message || 'Processing PFP inscription',\n progressPercent: data.progressPercent || 50,\n details: data.details,\n });\n };\n\n const imageResult = await this.hcs11Client.inscribeImage(\n buffer,\n fileName,\n { progressCallback: wrappedProgressCallback }\n );\n\n if (!imageResult.success) {\n progressReporter.failed(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n this.logger.error(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n return {\n pfpTopicId: '',\n success: false,\n error: imageResult.error || 'Failed to inscribe profile picture',\n transactionId: imageResult.transactionId || '',\n };\n }\n\n progressReporter.completed('Successfully inscribed profile picture', {\n pfpTopicId: imageResult.imageTopicId,\n });\n\n this.logger.info(\n `Successfully inscribed profile picture with topic ID: ${imageResult.imageTopicId}`\n );\n return {\n pfpTopicId: imageResult.imageTopicId,\n success: true,\n transactionId: imageResult.transactionId || '',\n };\n } catch (error: any) {\n this.logger.error(`Error inscribing profile picture: ${error.message}`);\n return {\n pfpTopicId: '',\n success: false,\n error: error.message,\n transactionId: '',\n };\n }\n }\n}\n"],"names":["mime.lookup"],"mappings":";;;;;;;;AAuCA,MAAM,YAAY,OAAO,WAAW;AA6C7B,MAAM,yBAAyB,gBAAgB;AAAA,EAMpD,YAAY,QAAgC;AACpC,UAAA;AAAA,MACJ,SAAS,OAAO;AAAA,MAChB,UAAU,OAAO;AAAA,MACjB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,IAAA,CACnB;AARH,SAAQ,cAAkC;AAUxC,SAAK,MAAM,OAAO;AACb,SAAA,yBACH,OAAO,0BAA0B;AAC9B,SAAA,SAAS,OAAO,YAAY;AAAA,MAC/B,OAAO,OAAO,YAAY;AAAA,MAC1B,QAAQ;AAAA,MACR,aAAa,OAAO;AAAA,IAAA,CACrB;AAED,QAAI,WAAW;AACT,UAAA;AACF,cAAM,EAAE,WAAW,WAAW,KAAK,oBAAoB;AAElD,aAAA,cAAc,IAAI,YAAY;AAAA,UACjC,SAAS,OAAO;AAAA,UAChB,MAAM;AAAA,YACJ,YAAY;AAAA,YACZ;AAAA,UACF;AAAA,UACA,UAAU,OAAO;AAAA,QAAA,CAClB;AAAA,eACM,KAAK;AACZ,aAAK,OAAO,KAAK,qCAAqC,GAAG,EAAE;AAAA,MAAA;AAAA,IAC7D,OACK;AACL,WAAK,OAAO;AAAA,QACV;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,YACJ,mBACA,MACA,MACA,WAC6B;AACxB,SAAA,OAAO,KAAK,iBAAiB;AAC5B,UAAA,aAAa,MAAM,KAAK,cAAc;AAE5C,UAAM,UAAU;AAAA,MACd,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,aAAa;AAAA,MACb;AAAA,MACA,GAAG;AAAA,IACL;AAEM,UAAA,kBAAkB,MAAM,KAAK;AAAA,MACjC;AAAA,MACA,KAAK,IAAI,iBAAiB;AAAA,IAC5B;AAEM,UAAA,gBAAgB,KAAK,UAAU,OAAO;AAC5C,UAAM,iBAAiB,OAAO,KAAK,aAAa,EAAE,SAAS;AAE3D,QAAI,gBAAgB;AAClB,WAAK,OAAO;AAAA,QACV;AAAA,MACF;AACI,UAAA;AACI,cAAA,gBAAgB,OAAO,KAAK,IAAI;AACtC,cAAM,WAAW,WAAW,KAAK,IAAA,CAAK;AAChC,cAAA,oBAAoB,MAAM,KAAK;AAAA,UACnC;AAAA,UACA;AAAA,QACF;AAEA,YAAI,mBAAmB,UAAU;AACvB,kBAAA,OAAO,WAAW,kBAAkB,QAAQ;AACpD,eAAK,OAAO;AAAA,YACV,0CAA0C,kBAAkB,QAAQ;AAAA,UACtE;AAAA,QAAA,OACK;AACC,gBAAA,IAAI,MAAM,0CAA0C;AAAA,QAAA;AAAA,eAErD,OAAO;AACT,aAAA,OAAO,MAAM,mCAAmC,KAAK;AAC1D,cAAM,IAAI;AAAA,UACR,mCACE,iBAAiB,QAAQ,MAAM,UAAU,eAC3C;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAGF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,EAAA;AAAA,EAGF,MAAM,wBACJ,gBACA,qBACA,YACA,MACA,MAAc,IAC2B;AACpC,SAAA,OAAO,KAAK,+BAA+B;AAChD,UAAM,2BAA2B;AAAA,MAC/B,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,uBAAuB;AAAA,MACvB,aAAa;AAAA,MACb,GAAG;AAAA,IACL;AAEM,UAAA,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AACA,SAAK,OAAO;AAAA,MACV,6CAA6C,cAAc;AAAA,IAC7D;AAEM,UAAA,gBAAgB,MAAM,KAAK;AAAA,MAC/B;AAAA,IACF;AAEI,QAAA,CAAC,eAAe,eAAe;AACjC,WAAK,OAAO;AAAA,QACV,qDAAqD,mBAAmB;AAAA,MAC1E;AACA,YAAM,IAAI;AAAA,QACR,qDAAqD,mBAAmB;AAAA,MAC1E;AAAA,IAAA;AAGF,SAAK,OAAO;AAAA,MACV,gCAAgC,cAAc,aAAa,oBAAoB,mBAAmB;AAAA,IACpG;AACM,UAAA,yBAAyB,UAAU,qBAAqB,SAAS;AAEvE,QAAI,CAAC,wBAAwB;AACrB,YAAA,IAAI,MAAM,wCAAwC;AAAA,IAAA;AAGpD,UAAA,KAAK,cAAc,cAAc,eAAe;AAAA,MACpD,GAAG;AAAA,MACH,mBAAmB;AAAA,MACnB,uBAAuB;AAAA,IAAA,CACxB;AAEM,WAAA;AAAA,EAAA;AAAA,EAGT,MAAM,aAAa,WAAuC;AACxD,WAAO,MAAM,KAAK,WAAW,aAAa,SAAS;AAAA,EAAA;AAAA,EAGrD,MAAM,wBACJ,gBACA,qBACA,cACA,iBAAyB,0DACzB,MAAc,IAC4B;AACrC,SAAA,OAAO,KAAK,6BAA6B;AAC9C,UAAM,gBAAgB,KAAK,IAAI,eAAiB,EAAA;AAChD,QAAI,CAAC,eAAe;AACZ,YAAA,IAAI,MAAM,oCAAoC;AAAA,IAAA;AAGhD,UAAA,eAAe,MAAM,KAAK,WAAW;AAAA,MACzC;AAAA,IACF;AACA,UAAM,aAAa,MAAM,KAAK,WAAW,aAAa,aAAa;AAEnE,QAAI,CAAC,YAAY;AACT,YAAA,IAAI,MAAM,+BAA+B;AAAA,IAAA;AAGjD,UAAM,eAAe,IAAI,QAAQ,CAAC,YAAY,YAAY,GAAG,CAAC;AAC9D,UAAM,OAAO,KAAK,mBAAmB,cAAc,YAAY;AAAA,MAC7D;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAEK,UAAA,cAAc,IAAI,uBACrB,EAAA,aAAa,IAAI,EACjB,YAAY,YAAY,EACxB,aAAa,YAAY;AAEvB,SAAA,OAAO,MAAM,sCAAsC;AAClD,UAAA,aAAa,MAAM,KAAK,IAAI;AAAA,MAChC;AAAA,MACA;AAAA,IACF;AACA,QAAI,WAAW,OAAO;AACf,WAAA,OAAO,MAAM,WAAW,KAAK;AAC5B,YAAA,IAAI,MAAM,WAAW,KAAK;AAAA,IAAA;AAGlC,UAAM,gBAAgB,WAAW;AAC7B,QAAA,CAAC,eAAe,SAAS;AACtB,WAAA,OAAO,MAAM,yCAAyC;AACrD,YAAA,IAAI,MAAM,yCAAyC;AAAA,IAAA;AAGrD,UAAA,oBAAoB,cAAc,QAAQ,SAAS;AACzD,UAAM,aAAa,GAAG,cAAc,IAAI,aAAa;AAC/C,UAAA,oCAAoC,MAAM,KAAK;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEO,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAAA,EAGF,MAAM,kBACJ,gBACA,mBACA,oBACA,cACA,YACA,MACiB;AACZ,SAAA,OAAO,KAAK,uBAAuB;AACxC,UAAM,UAAU;AAAA,MACd,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,aAAa;AAAA,MACb,eAAe;AAAA,MACf,GAAG;AAAA,IACL;AAEM,UAAA,sBAAsB,MAAM,KAAK;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AACI,QAAA,CAAC,qBAAqB,qBAAqB;AAC7C,WAAK,OAAO;AAAA,QACV;AAAA,MACF;AACM,YAAA,IAAI,MAAM,uDAAuD;AAAA,IAAA;AAElE,WAAA,oBAAoB,oBAAoB,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiB1D,MAAM,YACJ,WACA,aACA,WACA,kBACA,cACA,UACA,oBACA,SAK0B;AACtB,QAAA;AACF,YAAM,mBAAmB,SAAS;AAC5B,YAAA,mBAAmB,IAAI,iBAAiB;AAAA,QAC5C,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU;AAAA,MAAA,CACX;AAEG,UAAA,QACF,SAAS,iBACR;AAAA,QACC,cAAc;AAAA,QACd,qBAAqB;AAAA,QACrB,kBAAkB,CAAA;AAAA,MACpB;AAEE,UAAA,CAAC,MAAM,iBAAiB;AAC1B,cAAM,eAAe;AACJ,yBAAA,UAAU,iCAAiC,GAAG;AAAA,UAC7D;AAAA,QAAA,CACD;AAED,cAAM,eAAe,KAAK,mBAAmB,cAAc,UAAU;AAAA,UACnE,KAAK,SAAS;AAAA,QAAA,CACf;AACD,cAAM,iBAAiB,MAAM,KAAK,YAAY,cAAc,MAAM,IAAI;AAEtE,YAAI,CAAC,eAAe,WAAW,CAAC,eAAe,SAAS;AAChD,gBAAA,QACJ,eAAe,SAAS;AACT,2BAAA;AAAA,YACf,oCAAoC,MAAM,KAAK;AAAA,YAC/C,EAAE,MAAM;AAAA,UACV;AACO,iBAAA;AAAA,YACL,iBAAiB;AAAA,YACjB,gBAAgB;AAAA,YAChB,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,SAAS;AAAA,YACT,OAAO,MAAM;AAAA,YACb;AAAA,UACF;AAAA,QAAA;AAGF,cAAM,kBAAkB,eAAe;AACvC,YAAI,MAAM,kBAAkB;AAC1B,gBAAM,iBAAiB,KAAK,YAAY,MAAM,eAAe,EAAE;AAAA,QAAA;AAEjE,yBAAiB,UAAU,0BAA0B,IAAI,EAAE,OAAO;AAAA,MAAA,OAC7D;AACY,yBAAA,UAAU,iCAAiC,IAAI;AAAA,UAC9D;AAAA,QAAA,CACD;AAAA,MAAA;AAGH,YAAM,YAAY,KAAK,IAAI,eAAiB,EAAA;AAC5C,UAAI,CAAC,WAAW;AACR,cAAA,IAAI,MAAM,oCAAoC;AAAA,MAAA;AAGlD,UAAA,CAAC,MAAM,gBAAgB;AACzB,cAAM,cAAc,KAAK,mBAAmB,cAAc,SAAS;AAAA,UACjE;AAAA,UACA,KAAK,SAAS;AAAA,QAAA,CACf;AACD,cAAM,gBAAgB,MAAM,KAAK,YAAY,aAAa,MAAM,IAAI;AAEpE,YAAI,CAAC,cAAc,WAAW,CAAC,cAAc,SAAS;AAC9C,gBAAA,QAAQ,cAAc,SAAS;AACpB,2BAAA;AAAA,YACf,mCAAmC,MAAM,KAAK;AAAA,YAC9C,EAAE,MAAM;AAAA,UACV;AACO,iBAAA;AAAA,YACL,iBAAiB,MAAM,mBAAmB;AAAA,YAC1C,gBAAgB;AAAA,YAChB,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,SAAS;AAAA,YACT,OAAO,MAAM;AAAA,YACb;AAAA,UACF;AAAA,QAAA;AAGF,cAAM,iBAAiB,cAAc;AACrC,YAAI,MAAM,kBAAkB;AAC1B,gBAAM,iBAAiB,KAAK,WAAW,MAAM,cAAc,EAAE;AAAA,QAAA;AAE/D,yBAAiB,UAAU,yBAAyB,IAAI,EAAE,OAAO;AAAA,MAAA,OAC5D;AACY,yBAAA,UAAU,gCAAgC,IAAI;AAAA,UAC7D;AAAA,QAAA,CACD;AAAA,MAAA;AAGH,UAAI,CAAC,MAAM,cAAc,CAAC,oBAAoB;AAC5C,cAAM,eAAe;AACJ,yBAAA,UAAU,kCAAkC,IAAI;AAAA,UAC/D;AAAA,QAAA,CACD;AAEK,cAAA,cAAc,iBAAiB,kBAAkB;AAAA,UACrD,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,WAAW;AAAA,QAAA,CACZ;AAED,cAAM,YAAY,MAAM,KAAK,YAAY,WAAW,aAAa;AAAA,UAC/D,kBAAkB,CAAC,SAAS;AAC1B,wBAAY,OAAO;AAAA,cACjB,OAAO,KAAK;AAAA,cACZ,SAAS,KAAK;AAAA,cACd,iBAAiB,KAAK,mBAAmB;AAAA,cACzC,SAAS,EAAE,GAAG,KAAK,SAAS,MAAM;AAAA,YAAA,CACnC;AAAA,UAAA;AAAA,QACH,CACD;AAEG,YAAA,CAAC,UAAU,SAAS;AAChB,gBAAA,QAAQ,UAAU,SAAS;AAChB,2BAAA;AAAA,YACf,uCAAuC,MAAM,KAAK;AAAA,YAClD,EAAE,MAAM;AAAA,UACV;AACO,iBAAA;AAAA,YACL,iBAAiB,MAAM,mBAAmB;AAAA,YAC1C,gBAAgB,MAAM,kBAAkB;AAAA,YACxC,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,SAAS;AAAA,YACT,OAAO,MAAM;AAAA,YACb;AAAA,UACF;AAAA,QAAA;AAGF,cAAM,aAAa,UAAU;AAC7B,cAAM,sBAAsB;AAC5B,YAAI,MAAM,kBAAkB;AAC1B,gBAAM,iBAAiB,KAAK,OAAO,MAAM,UAAU,EAAE;AAAA,QAAA;AAGvD,yBAAiB,UAAU,2BAA2B,IAAI,EAAE,OAAO;AAAA,MAAA,OAC9D;AACC,cAAA,aAAa,sBAAsB,MAAM;AAC9B,yBAAA;AAAA,UACf,mCAAmC,MAAM,UAAU;AAAA,UACnD;AAAA,UACA;AAAA,YACE;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAGE,UAAA,CAAC,MAAM,gBAAgB;AACzB,cAAM,eAAe;AACrB,yBAAiB,UAAU,0BAA0B,IAAI,EAAE,OAAO;AAE5D,cAAA,kBAAkB,iBAAiB,kBAAkB;AAAA,UACzD,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,WAAW;AAAA,QAAA,CACZ;AAEG,YAAA,CAAC,KAAK,aAAa;AACrB,gBAAM,QAAQ;AACd,2BAAiB,OAAO,MAAM,OAAO,EAAE,OAAO;AACvC,iBAAA;AAAA,YACL,iBAAiB,MAAM,mBAAmB;AAAA,YAC1C,gBAAgB,MAAM,kBAAkB;AAAA,YACxC,YAAY,MAAM,cAAc;AAAA,YAChC,gBAAgB;AAAA,YAChB,SAAS;AAAA,YACT,OAAO,MAAM;AAAA,YACb;AAAA,UACF;AAAA,QAAA;AAGI,cAAA,qBAAqB,MAAM,KAAK;AAAA,UACpC;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN;AAAA,YACE,kBAAkB,CAAC,SAAS;AAC1B,8BAAgB,OAAO;AAAA,gBACrB,OAAO,KAAK;AAAA,gBACZ,SAAS,KAAK;AAAA,gBACd,iBAAiB,KAAK,mBAAmB;AAAA,gBACzC,SAAS,EAAE,GAAG,KAAK,SAAS,MAAM;AAAA,cAAA,CACnC;AAAA,YAAA;AAAA,UACH;AAAA,QAEJ;AAEI,YAAA,CAAC,mBAAmB,SAAS;AACzB,gBAAA,QACJ,mBAAmB,SAAS;AACb,2BAAA;AAAA,YACf,kCAAkC,MAAM,KAAK;AAAA,YAC7C,EAAE,MAAM;AAAA,UACV;AACO,iBAAA;AAAA,YACL,iBAAiB,MAAM,mBAAmB;AAAA,YAC1C,gBAAgB,MAAM,kBAAkB;AAAA,YACxC,YAAY,MAAM,cAAc;AAAA,YAChC,gBAAgB;AAAA,YAChB,SAAS;AAAA,YACT,OAAO,MAAM;AAAA,YACb;AAAA,UACF;AAAA,QAAA;AAGF,cAAM,iBAAiB,mBAAmB;AAC1C,YAAI,MAAM,kBAAkB;AAC1B,gBAAM,iBAAiB,KAAK,WAAW,MAAM,cAAc,EAAE;AAAA,QAAA;AAG/D,cAAM,eAAe;AACrB,cAAM,sBAAsB;AAAA,MAAA,OACvB;AACY,yBAAA,UAAU,gCAAgC,KAAK;AAAA,UAC9D;AAAA,QAAA,CACD;AACG,YAAA,MAAM,iBAAiB,YAAY;AACrC,gBAAM,eAAe;AACrB,gBAAM,sBAAsB;AAAA,QAAA;AAAA,MAC9B;AAGF,uBAAiB,UAAU,8BAA8B;AAAA,QACvD,gBAAgB,MAAM;AAAA,QACtB,iBAAiB,MAAM;AAAA,QACvB,YAAY,MAAM;AAAA,QAClB,gBAAgB,MAAM;AAAA,QACtB;AAAA,MAAA,CACD;AAEM,aAAA;AAAA,QACL,iBAAiB,MAAM,mBAAmB;AAAA,QAC1C,gBAAgB,MAAM,kBAAkB;AAAA,QACxC,YAAY,MAAM,cAAc;AAAA,QAChC,gBAAgB,MAAM,kBAAkB;AAAA,QACxC,SAAS;AAAA,QACT;AAAA,MACF;AAAA,aACO,OAAY;AACnB,WAAK,OAAO,MAAM,yBAAyB,MAAM,OAAO,EAAE;AACnD,aAAA;AAAA,QACL,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,SAAS;AAAA,QACT,OAAO,yBAAyB,MAAM,OAAO;AAAA,QAC7C,OAAO;AAAA,UACL,cAAc;AAAA,UACd,qBAAqB;AAAA,UACrB,OAAO,MAAM;AAAA,QAAA;AAAA,MAEjB;AAAA,IAAA;AAAA,EACF;AAAA,EAGM,4BACN,gBACA,eACoB;AACpB,UAAM,QAAQ,iBAAiB;AAAA,MAC7B;AAAA,MACA,cAAc;AAAA,MACd,qBAAqB;AAAA,MACrB,kBAAkB,CAAA;AAAA,IACpB;AAEA,QACE,MAAM,iBAAiB,kBACvB,MAAM,iBAAiB,YACvB;AACA,YAAM,eAAe;AAAA,IAAA;AAGhB,WAAA;AAAA,EAAA;AAAA,EAGD,oCACN,OACA,gBACM;AACN,UAAM,eAAe;AACrB,UAAM,sBAAsB;AAC5B,QAAI,MAAM,kBAAkB;AAC1B,YAAM,iBAAiB,KAAK,gBAAgB,cAAc,EAAE;AAAA,IAAA;AAAA,EAC9D;AAAA,EAGF,MAAM,iCACJ,WACA,UAAkB,KAAK,SACvB,SAMkC;AAC9B,QAAA;AACG,WAAA,OAAO,KAAK,yCAAyC;AAE1D,YAAM,eAAe,MAAM,KAAK,gBAAgB,SAAS;AACnD,YAAA,iBAAiB,aAAa,UAAU;AAC9C,YAAM,QAAQ,KAAK;AAAA,QACjB;AAAA,QACA,SAAS;AAAA,MACX;AACM,YAAA,mBAAmB,IAAI,iBAAiB;AAAA,QAC5C,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,SAAS;AAAA,MAAA,CACpB;AAEgB,uBAAA,UAAU,gCAAgC,IAAI;AAAA,QAC7D;AAAA,QACA;AAAA,MAAA,CACD;AAEK,YAAA,qBAAqB,MAAM,KAAK;AAAA,QACpC;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAEI,UAAA,CAAC,mBAAmB,SAAS;AACxB,eAAA;AAAA,UACL,GAAG;AAAA,UACH;AAAA,QACF;AAAA,MAAA;AAGe,uBAAA,WAAW,uCAAuC,IAAI;AAAA,QACrE,eAAe,mBAAmB;AAAA,MAAA,CACnC;AAED,UAAI,mBAAmB,aAAa;AAClC,cAAM,cAAc,YAAY;AAAA,UAC9B,OAAO,KAAK,mBAAmB,aAAa,QAAQ;AAAA,QACtD;AAEK,aAAA,OAAO,KAAK,qCAAqC;AAChD,cAAA,WAAW,MAAM,KAAK,IAAI;AAAA,UAC9B;AAAA,UACA;AAAA,QACF;AAEA,YAAI,SAAS,OAAO;AACX,iBAAA;AAAA,YACL,GAAG;AAAA,YACH,OAAO,SAAS;AAAA,YAChB,SAAS;AAAA,YACT;AAAA,UACF;AAAA,QAAA;AAGG,aAAA,OAAO,KAAK,iDAAiD;AAAA,MAAA;AAGnD,uBAAA,WAAW,uCAAuC,IAAI;AAAA,QACrE;AAAA,QACA;AAAA,QACA,eAAe,mBAAmB;AAAA,MAAA,CACnC;AAEK,YAAA,cAAc,SAAS,eAAe;AACtC,YAAA,UAAU,SAAS,WAAW;AAE9B,YAAA,YAAY,MAAM,KAAK;AAAA,QAC3B,mBAAmB;AAAA,QACnB;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACP;AAEK,WAAA,oCAAoC,OAAO,cAAc;AAE9D,uBAAiB,UAAU,+BAA+B;AAAA,QACxD,eAAe,mBAAmB;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAEM,aAAA;AAAA,QACL,GAAG;AAAA,QACH;AAAA,QACA;AAAA,MACF;AAAA,aACO,OAAY;AACnB,WAAK,OAAO,MAAM,uBAAuB,MAAM,OAAO,EAAE;AACjD,aAAA;AAAA,QACL,OAAO,8BAA8B,MAAM,OAAO;AAAA,QAClD,SAAS;AAAA,QACT,OAAO;AAAA,UACL,cAAc;AAAA,UACd,qBAAqB;AAAA,UACrB,OAAO,MAAM;AAAA,QAAA;AAAA,MAEjB;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,uBACJ,SACA,SAOkC;AAC9B,QAAA;AACI,YAAA,SAAS,QAAQ,MAAM;AAC7B,YAAM,mBAAmB,SAAS;AAC5B,YAAA,mBAAmB,IAAI,iBAAiB;AAAA,QAC5C,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU;AAAA,MAAA,CACX;AAEG,UAAA,QACF,SAAS,iBACR;AAAA,QACC,cAAc;AAAA,QACd,qBAAqB;AAAA,QACrB,kBAAkB,CAAA;AAAA,MACpB;AAEF,YAAM,gBAAgB,OAAO;AAEZ,uBAAA,UAAU,mCAAmC,GAAG;AAAA,QAC/D;AAAA,MAAA,CACD;AAGC,UAAA,MAAM,iBAAiB,cACvB,CAAC,MAAM,kBACP,CAAC,MAAM,mBACP,CAAC,MAAM,gBACP;AACM,cAAA,cAAc,MAAM,KAAK;AAAA,UAC7B,OAAO,aAAa,OAAO,KAAK,CAAA,CAAE;AAAA,UAClC,OAAO,eAAe;AAAA,UACtB,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,UACP;AAAA,YACE,kBAAkB,CAAC,aAAa;AACxB,oBAAA,mBAAmB,SAAS,mBAAmB,KAAK;AAC1D,+BAAiB,OAAO;AAAA,gBACtB,OAAO,SAAS;AAAA,gBAChB,SAAS,SAAS;AAAA,gBAClB,iBAAiB;AAAA,gBACjB,SAAS;AAAA,kBACP,GAAG,SAAS;AAAA,kBACZ,OAAO,SAAS,SAAS,SAAS;AAAA,gBAAA;AAAA,cACpC,CACD;AAAA,YACH;AAAA,YACA,eAAe;AAAA,UAAA;AAAA,QAEnB;AAEI,YAAA,CAAC,YAAY,SAAS;AACxB,gBAAM,IAAI;AAAA,YACR,YAAY,SAAS;AAAA,UACvB;AAAA,QAAA;AAGF,gBAAQ,YAAY;AACpB,cAAM,gBAAgB,OAAO;AAAA,MAAA;AAGd,uBAAA;AAAA,QACf,0BAA0B,MAAM,YAAY,KAAK,MAAM,mBAAmB;AAAA,QAC1E;AAAA,QACA,EAAE,MAAM;AAAA,MACV;AAEA,YAAM,EAAE,UAAA,IAAc,KAAK,oBAAoB;AAE/C,UACE,MAAM,iBAAiB,cACvB,CAAC,MAAM,kBAAkB;AAAA,QACvB,gBAAgB,MAAM,cAAc;AAAA,MAAA,GAEtC;AACA,YAAI,SAAS,SAAS;AACpB,eAAK,yBAAyB,QAAQ;AAAA,QAAA;AAGlC,cAAA,qBAAqB,MAAM,KAAK;AAAA,UACpC;AAAA,UACA,OAAO;AAAA,UACP;AAAA,YACE,kBAAkB,CAAC,aAAa;AAC9B,oBAAM,kBACJ,MAAM,SAAS,mBAAmB,KAAK;AACzC,+BAAiB,OAAO;AAAA,gBACtB,OAAO,SAAS;AAAA,gBAChB,SAAS,SAAS;AAAA,gBAClB,iBAAiB;AAAA,gBACjB,SAAS;AAAA,kBACP,GAAG,SAAS;AAAA,kBACZ,OAAO,SAAS,SAAS,SAAS;AAAA,gBAAA;AAAA,cACpC,CACD;AAAA,YACH;AAAA,YACA,aAAa,SAAS;AAAA,YACtB,SAAS,SAAS;AAAA,YAClB,eAAe;AAAA,UAAA;AAAA,QAEnB;AAEI,YAAA,CAAC,mBAAmB,SAAS;AAC/B,gBAAM,IAAI;AAAA,YACR,mBAAmB,SAAS;AAAA,UAC9B;AAAA,QAAA;AAGF,gBAAQ,mBAAmB;AAAA,MAAA;AAG7B,uBAAiB,UAAU,4CAA4C;AAAA,QACrE;AAAA,MAAA,CACD;AAEM,aAAA;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,UAAU;AAAA,UACR;AAAA,UACA,YAAY,GAAG,MAAM,cAAc,IAAI,SAAS;AAAA,UAChD,gBAAgB,MAAM;AAAA,UACtB,iBAAiB,MAAM;AAAA,UACvB,gBAAgB,MAAM;AAAA,UACtB,YAAY,MAAM;AAAA,UAClB,YAAY;AAAA,UACZ,GAAG,MAAM;AAAA,QAAA;AAAA,MAEb;AAAA,aACO,OAAY;AACnB,YAAM,IAAI,MAAM,wCAAwC,MAAM,OAAO,EAAE;AAAA,IAAA;AAAA,EACzE;AAAA,EAGF,MAAM,kBACJ,WACA,kBACA,gBACA,iBACA,eAAyB,IACzB,WAAgC,CAAA,GAChC,WACA,aACA,oBACA,SAGoC;AAChC,QAAA;AACF,YAAM,mBAAmB,SAAS;AAC5B,YAAA,mBAAmB,IAAI,iBAAiB;AAAA,QAC5C,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU;AAAA,MAAA,CACX;AAEgB,uBAAA,UAAU,gCAAgC,CAAC;AAE5D,UAAI,aAAa;AAEb,UAAA,CAAC,cAAc,aAAa,aAAa;AACrC,cAAA,cAAc,iBAAiB,kBAAkB;AAAA,UACrD,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,WAAW;AAAA,QAAA,CACZ;AAED,cAAM,YAAY,MAAM,KAAK,YAAY,WAAW,aAAa;AAAA,UAC/D,kBAAkB,CAAC,SAAS;AAC1B,wBAAY,OAAO;AAAA,cACjB,OAAO,KAAK;AAAA,cACZ,SAAS,KAAK;AAAA,cACd,iBAAiB,KAAK,mBAAmB;AAAA,cACzC,SAAS,KAAK;AAAA,YAAA,CACf;AAAA,UAAA;AAAA,QACH,CACD;AAEG,YAAA,CAAC,UAAU,SAAS;AACL,2BAAA;AAAA,YACf;AAAA,UACF;AAAA,QAAA,OACK;AACL,uBAAa,UAAU;AAAA,QAAA;AAAA,iBAEhB,oBAAoB;AACZ,yBAAA;AAAA,UACf,mCAAmC,kBAAkB;AAAA,UACrD;AAAA,QACF;AAAA,MAAA,OACK;AACY,yBAAA,UAAU,+BAA+B,EAAE;AAAA,MAAA;AAGxD,YAAA,YAAY,KAAK,aAAa,yBAAyB;AAAA,QAC3D,MAAM,SAAS,QAAQ;AAAA,MAAA,CACL;AAEH,uBAAA,UAAU,0BAA0B,EAAE;AAEvD,YAAM,mBAAmB,CAAC;AAC1B,UAAI,SAAS,SAAS;AAChB,YAAA,SAAS,QAAQ,SAAS;AAC5B,2BAAiB,KAAK;AAAA,YACpB,UAAU;AAAA,YACV,QAAQ,SAAS,QAAQ;AAAA,UAAA,CAC1B;AAAA,QAAA;AAEC,YAAA,SAAS,QAAQ,SAAS;AAC5B,2BAAiB,KAAK;AAAA,YACpB,UAAU;AAAA,YACV,QAAQ,SAAS,QAAQ;AAAA,UAAA,CAC1B;AAAA,QAAA;AAEC,YAAA,SAAS,QAAQ,QAAQ;AAC3B,2BAAiB,KAAK;AAAA,YACpB,UAAU;AAAA,YACV,QAAQ,SAAS,QAAQ;AAAA,UAAA,CAC1B;AAAA,QAAA;AAEC,YAAA,SAAS,QAAQ,SAAS;AAC5B,2BAAiB,KAAK;AAAA,YACpB,UAAU;AAAA,YACV,QAAQ,SAAS,QAAQ;AAAA,UAAA,CAC1B;AAAA,QAAA;AAEC,YAAA,SAAS,QAAQ,GAAG;AACtB,2BAAiB,KAAK;AAAA,YACpB,UAAU;AAAA,YACV,QAAQ,SAAS,QAAQ;AAAA,UAAA,CAC1B;AAAA,QAAA;AAEC,YAAA,SAAS,QAAQ,UAAU;AAC7B,2BAAiB,KAAK;AAAA,YACpB,UAAU;AAAA,YACV,QAAQ,SAAS,QAAQ;AAAA,UAAA,CAC1B;AAAA,QAAA;AAEC,YAAA,SAAS,QAAQ,SAAS;AAC5B,2BAAiB,KAAK;AAAA,YACpB,UAAU;AAAA,YACV,QAAQ,SAAS,QAAQ;AAAA,UAAA,CAC1B;AAAA,QAAA;AAEC,YAAA,SAAS,QAAQ,UAAU;AAC7B,2BAAiB,KAAK;AAAA,YACpB,UAAU;AAAA,YACV,QAAQ,SAAS,QAAQ;AAAA,UAAA,CAC1B;AAAA,QAAA;AAAA,MACH;AAGE,UAAA,CAAC,KAAK,aAAa;AACJ,yBAAA;AAAA,UACf;AAAA,QACF;AACO,eAAA;AAAA,UACL,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,OAAO;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MAAA;AAGI,YAAA,UAAU,KAAK,YAAY;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,SAAS;AAAA,QAClB;AAAA,UACE,OAAO,UAAU,YAAA,EAAc,QAAQ,QAAQ,GAAG;AAAA,UAClD,KAAK;AAAA,UACL,cAAc,aAAa,WAAW,UAAU,KAAK;AAAA,UACrD,SAAS,iBAAiB,SAAS,IAAI,mBAAmB;AAAA,UAC1D,YAAY;AAAA,YACV,aAAa;AAAA,YACb,SAAS,SAAS,WAAW;AAAA,YAC7B,SAAS,SAAS,WAAW;AAAA,YAC7B,qBAAqB,SAAS,uBAAuB,CAAC,IAAI;AAAA,YAC1D,aAAa,SAAS,eAAe,CAAC;AAAA,YACtC,eAAe,SAAS;AAAA,YACxB,UAAU,SAAS;AAAA,YACnB,0BAA0B,SAAS;AAAA,YACnC,GAAG;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,SAAS;AAAA,QAAA;AAAA,MAEtB;AAEM,YAAA,kBAAkB,iBAAiB,kBAAkB;AAAA,QACzD,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA,CACZ;AAEK,YAAA,gBAAgB,MAAM,KAAK,YAAY;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,UACE,kBAAkB,CAAC,gBAAgB;AACjC,4BAAgB,OAAO;AAAA,cACrB,OAAO,YAAY;AAAA,cACnB,SAAS,YAAY;AAAA,cACrB,iBAAiB,YAAY,mBAAmB;AAAA,cAChD,SAAS,YAAY;AAAA,YAAA,CACtB;AAAA,UAAA;AAAA,QACH;AAAA,MAEJ;AAEI,UAAA,CAAC,cAAc,SAAS;AAC1B,yBAAiB,OAAO,4BAA4B;AAC7C,eAAA;AAAA,UACL,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,OAAO,cAAc,SAAS;AAAA,UAC9B,eAAe,cAAc,iBAAiB;AAAA,QAChD;AAAA,MAAA;AAGF,uBAAiB,UAAU,+BAA+B;AAAA,QACxD,gBAAgB,cAAc;AAAA,MAAA,CAC/B;AAEM,aAAA;AAAA,QACL,gBAAgB,cAAc;AAAA,QAC9B;AAAA,QACA,SAAS;AAAA,QACT,eAAe,cAAc,iBAAiB;AAAA,MAChD;AAAA,aACO,OAAY;AACnB,WAAK,OAAO,MAAM,gCAAgC,MAAM,OAAO,EAAE;AAC1D,aAAA;AAAA,QACL,gBAAgB;AAAA,QAChB,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,QACb,eAAe;AAAA,MACjB;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAM,YACJ,MACA,UACA,WAKC;AACI,SAAA,OAAO,KAAK,gBAAgB;AACjC,UAAM,EAAE,WAAW,WAAW,KAAK,oBAAoB;AAEvD,UAAM,cAAc,IAAI,yBAAyB,aAAa,IAAI;AAElE,UAAM,YAAY,MAAM,KAAK,WAAW,aAAa,SAAS;AAE9D,QAAI,YAAY,WAAW;AACzB,kBAAY,YAAY,SAAS;AACjC,kBAAY,sBAAsB,SAAS;AAAA,IAAA;AAG7C,QAAI,aAAa,WAAW;AAC1B,kBAAY,aAAa,SAAS;AAAA,IAAA;AAG9B,UAAA,sBACJ,MAAM,KAAK,IAAI;AAAA,MACb;AAAA,MACA;AAAA,IACF;AAEF,UAAM,QAAQ,oBAAoB;AAElC,QAAI,OAAO;AACJ,WAAA,OAAO,MAAM,KAAK;AAChB,aAAA;AAAA,QACL,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IAAA;AAGF,UAAM,gBAAgB,oBAAoB;AAEtC,QAAA,CAAC,eAAe,SAAS;AACtB,WAAA,OAAO,MAAM,yCAAyC;AACpD,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IAAA;AAGK,WAAA;AAAA,MACL,SAAS;AAAA,MACT,SAAS,cAAc,QAAQ,SAAS;AAAA,IAC1C;AAAA,EAAA;AAAA,EAGF,MAAa,cACX,SACA,SACA,WACA,aAC6B;AAC7B,SAAK,OAAO,MAAM,+BAA+B,OAAO,EAAE;AAEtD,QAAA;AACA,QAAA,OAAO,YAAY,UAAU;AACrB,gBAAA;AAAA,IAAA,OACL;AACK,gBAAA,KAAK,UAAU,OAAO;AAAA,IAAA;AAG5B,UAAA,cAAc,IAAI,8BAA8B,EACnD,WAAW,OAAO,EAClB,WAAW,OAAO;AAEjB,QAAA;AAKJ,QAAI,aAAa;AACf,WAAK,OAAO;AAAA,QACV;AAAA,MACF;AACA,kBAAY,qBAAqB,IAAI,KAAK,KAAK,SAAS,CAAC;AACzD,kBAAY,mBAAmB,qBAAqB;AAAA,IAAA;AAGtD,QAAI,WAAW;AACb,YAAM,EAAE,WAAW,WAAW,KAAK,oBAAoB;AACvD,kBAAY,iBAAiB,MAAa;AAC1C,YAAM,oBAAoB,MAAM,YAAY,KAAK,SAAS;AACpC,4BAAA,MAAM,KAAK,IAAI;AAAA,QACnC;AAAA,QACA;AAAA,MACF;AAAA,IAAA,OACK;AACiB,4BAAA,MAAM,KAAK,IAAI;AAAA,QACnC;AAAA,QACA;AAAA,MACF;AAAA,IAAA;AAGF,QAAI,qBAAqB,OAAO;AAC9B,WAAK,OAAO;AAAA,QACV,6BAA6B,oBAAoB,KAAK;AAAA,MACxD;AACA,YAAM,IAAI,MAAM,6BAA6B,oBAAoB,KAAK,EAAE;AAAA,IAAA;AAGtE,QAAA,CAAC,qBAAqB,QAAQ;AAChC,WAAK,OAAO;AAAA,QACV;AAAA,MACF;AACM,YAAA,IAAI,MAAM,wDAAwD;AAAA,IAAA;AAGrE,SAAA,OAAO,MAAM,wCAAwC;AAC1D,WAAO,oBAAoB;AAAA,EAAA;AAAA,EAG7B,MAAM,aACJ,QACA,UACqC;AACrC,UAAM,EAAE,WAAW,WAAW,KAAK,oBAAoB;AAEvD,UAAM,WAAWA,iBAAAA,OAAY,QAAQ,KAAK;AAEpC,UAAA,MAAM,MAAM,eAAe,eAAe;AAAA,MAC9C,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,SAAS,KAAK;AAAA,IAAA,CACf;AAEK,UAAA,SAAS,MAAM,IAAI;AAAA,MACvB;AAAA,QACE,MAAM;AAAA,UACJ,MAAM;AAAA,UACN,QAAQ,OAAO,SAAS,QAAQ;AAAA,UAChC;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU,UAAU,SAAS;AAAA,QAC7B,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AAEA,QAAI,CAAC,OAAO,iBAAiB,CAAC,OAAO,OAAO;AACrC,WAAA,OAAO,MAAM,kDAAkD;AAC9D,YAAA,IAAI,MAAM,kDAAkD;AAAA,IAAA;AAGhE,QAAA,OAAO,iBAAiB,OAAO,OAAO;AACxC,WAAK,OAAO;AAAA,QACV,mBAAmB,OAAO,aAAa,aAAa,OAAO,KAAK;AAAA,MAClE;AAAA,IAAA;AAGI,UAAA,SAAS,MAAM,IAAI,mBAAmB,OAAO,OAAO,IAAI,KAAM,IAAI;AACjE,WAAA;AAAA,EAAA;AAAA,EAGT,sBAAmD;AAC3C,UAAA,cAAc,KAAK,IAAI,eAAe;AACtC,UAAA,YAAY,YAAY,UAAU,SAAS;AACjD,UAAM,SAAS,KAAK,IAAI,cAAc,QAAQ,KAAK,CAAC,MAAM;AACxD,aAAO,EAAE,eAAe,SAAe,MAAA;AAAA,IAAA,CACxC;AAED,QAAI,CAAC,QAAQ;AACN,WAAA,OAAO,MAAM,uBAAuB;AACnC,YAAA,IAAI,MAAM,uBAAuB;AAAA,IAAA;AAGlC,WAAA,EAAE,WAAW,OAAsB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW5C,MAAM,YACJ,QACA,UACA,SAG8B;AAC1B,QAAA;AACF,YAAM,mBAAmB,SAAS;AAC5B,YAAA,mBAAmB,IAAI,iBAAiB;AAAA,QAC5C,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU;AAAA,MAAA,CACX;AAEG,UAAA,CAAC,KAAK,aAAa;AACJ,yBAAA;AAAA,UACf;AAAA,QACF;AACO,eAAA;AAAA,UACL,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,OAAO;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MAAA;AAGe,uBAAA,UAAU,yCAAyC,EAAE;AACjE,WAAA,OAAO,KAAK,gDAAgD;AAE3D,YAAA,0BAA0B,CAAC,SAAc;AAC7C,yBAAiB,OAAO;AAAA,UACtB,OAAO,KAAK,SAAS;AAAA,UACrB,SAAS,KAAK,WAAW;AAAA,UACzB,iBAAiB,KAAK,mBAAmB;AAAA,UACzC,SAAS,KAAK;AAAA,QAAA,CACf;AAAA,MACH;AAEM,YAAA,cAAc,MAAM,KAAK,YAAY;AAAA,QACzC;AAAA,QACA;AAAA,QACA,EAAE,kBAAkB,wBAAwB;AAAA,MAC9C;AAEI,UAAA,CAAC,YAAY,SAAS;AACP,yBAAA;AAAA,UACf,uCAAuC,YAAY,KAAK;AAAA,QAC1D;AACA,aAAK,OAAO;AAAA,UACV,uCAAuC,YAAY,KAAK;AAAA,QAC1D;AACO,eAAA;AAAA,UACL,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,OAAO,YAAY,SAAS;AAAA,UAC5B,eAAe,YAAY,iBAAiB;AAAA,QAC9C;AAAA,MAAA;AAGF,uBAAiB,UAAU,0CAA0C;AAAA,QACnE,YAAY,YAAY;AAAA,MAAA,CACzB;AAED,WAAK,OAAO;AAAA,QACV,yDAAyD,YAAY,YAAY;AAAA,MACnF;AACO,aAAA;AAAA,QACL,YAAY,YAAY;AAAA,QACxB,SAAS;AAAA,QACT,eAAe,YAAY,iBAAiB;AAAA,MAC9C;AAAA,aACO,OAAY;AACnB,WAAK,OAAO,MAAM,qCAAqC,MAAM,OAAO,EAAE;AAC/D,aAAA;AAAA,QACL,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,QACb,eAAe;AAAA,MACjB;AAAA,IAAA;AAAA,EACF;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es10.js","sources":["../../src/hcs-10/browser.ts"],"sourcesContent":["import {\n KeyList,\n PublicKey,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TransactionReceipt,\n PrivateKey,\n Hbar,\n} from '@hashgraph/sdk';\nimport { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport { Logger, LogLevel } from '../utils/logger';\nimport {\n InscriptionSDK,\n RetrievedInscriptionResult,\n} from '@kiloscribe/inscription-sdk';\nimport { HCS10BaseClient } from './base-client';\nimport * as mime from 'mime-types';\nimport {\n HCSClientConfig,\n NetworkType,\n RegistrationResponse,\n AgentConfig,\n CreateAgentResponse,\n InscribePfpResponse,\n StoreHCS11ProfileResponse,\n AgentRegistrationResult,\n HandleConnectionRequestResponse,\n WaitForConnectionConfirmationResponse,\n RegistrationProgressCallback,\n AgentCreationState,\n GetAccountAndSignerResponse,\n} from './types';\nimport { HCS11Client, AIAgentMetadata } from '../hcs-11';\nimport { ProgressReporter } from '../utils/progress-reporter';\nimport { Transaction } from '@hashgraph/sdk';\nimport { AgentBuilder } from './agent-builder';\nimport { inscribeWithSigner } from '../inscribe/inscriber';\nimport { Hcs10MemoType } from './base-client';\n\nconst isBrowser = typeof window !== 'undefined';\n\nexport type BrowserHCSClientConfig = {\n network: 'mainnet' | 'testnet';\n hwc: HashinalsWalletConnectSDK;\n logLevel?: LogLevel;\n prettyPrint?: boolean;\n guardedRegistryTopicId?: string;\n guardedRegistryBaseUrl?: string;\n feeAmount?: number;\n};\n\ninterface AgentMetadata {\n name: string;\n description: string;\n version?: string;\n type?: string;\n logo?: string;\n socials?: SocialLinks;\n}\n\ninterface SocialLinks {\n twitter?: string;\n discord?: string;\n github?: string;\n website?: string;\n}\n\nexport type BrowserAgentConfig = Omit<\n AgentConfig<BrowserHCSClient>,\n 'privateKey'\n> & {\n client: BrowserHCSClient;\n};\n\nexport type RegisteredAgent = {\n outboundTopicId: string;\n inboundTopicId: string;\n pfpTopicId: string;\n profileTopicId: string;\n error?: string;\n success: boolean;\n state: AgentCreationState;\n};\n\nexport class BrowserHCSClient extends HCS10BaseClient {\n private hwc: HashinalsWalletConnectSDK;\n protected declare logger: Logger;\n private guardedRegistryBaseUrl: string;\n private hcs11Client: HCS11Client | null = null;\n\n constructor(config: BrowserHCSClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n prettyPrint: config.prettyPrint,\n feeAmount: config.feeAmount,\n });\n\n this.hwc = config.hwc;\n this.guardedRegistryBaseUrl =\n config.guardedRegistryBaseUrl || 'https://moonscape.tech';\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-Browser',\n prettyPrint: config.prettyPrint,\n });\n\n if (isBrowser) {\n try {\n const { accountId, signer } = this.getAccountAndSigner();\n\n this.hcs11Client = new HCS11Client({\n network: config.network,\n auth: {\n operatorId: accountId,\n signer: signer as any,\n },\n logLevel: config.logLevel,\n });\n } catch (err) {\n this.logger.warn(`Failed to initialize HCS11Client: ${err}`);\n }\n } else {\n this.logger.error(\n 'BrowserHCSClient initialized in server environment - browser-specific features will not be available. Use HCS10Client instead.'\n );\n }\n }\n\n async sendMessage(\n connectionTopicId: string,\n data: string,\n memo?: string,\n submitKey?: PrivateKey\n ): Promise<TransactionReceipt> {\n this.logger.info('Sending message');\n const operatorId = await this.getOperatorId();\n\n const payload = {\n p: 'hcs-10',\n op: 'message',\n operator_id: operatorId,\n data,\n m: memo,\n };\n\n const submissionCheck = await this.canSubmitToTopic(\n connectionTopicId,\n this.hwc.getAccountInfo().accountId\n );\n\n const payloadString = JSON.stringify(payload);\n const isLargePayload = Buffer.from(payloadString).length > 1000;\n\n if (isLargePayload) {\n this.logger.info(\n 'Message payload exceeds 1000 bytes, storing via inscription'\n );\n try {\n const contentBuffer = Buffer.from(data);\n const fileName = `message-${Date.now()}.json`;\n const inscriptionResult = await this.inscribeFile(\n contentBuffer,\n fileName\n );\n\n if (inscriptionResult?.topic_id) {\n payload.data = `hcs://1/${inscriptionResult.topic_id}`;\n this.logger.info(\n `Large message inscribed with topic ID: ${inscriptionResult.topic_id}`\n );\n } else {\n throw new Error('Failed to inscribe large message content');\n }\n } catch (error) {\n this.logger.error('Error inscribing large message:', error);\n throw new Error(\n `Failed to handle large message: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n return await this.submitPayload(\n connectionTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n }\n\n async submitConnectionRequest(\n inboundTopicId: string,\n memo: string\n ): Promise<TransactionReceipt | undefined> {\n this.logger.info('Submitting connection request');\n const accountResponse = this.getAccountAndSigner();\n if (!accountResponse.accountId) {\n throw new Error('Failed to retrieve user account ID');\n }\n const operatorId = await this.getOperatorId();\n const accountId = accountResponse.accountId;\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: operatorId,\n m: memo,\n };\n\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage\n );\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveOutboundConnectTopic(accountId);\n\n if (!outboundTopic?.outboundTopic) {\n this.logger.error(\n `Failed to retrieve outbound topic for account ID: ${accountId}`\n );\n throw new Error(\n `Failed to retrieve outbound topic for account ID: ${accountId}`\n );\n }\n\n this.logger.info(\n `Retrieved outbound topic ID: ${outboundTopic.outboundTopic} for account ID: ${accountId}`\n );\n const responseSequenceNumber = response?.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n await this.submitPayload(outboundTopic.outboundTopic, {\n ...connectionRequestMessage,\n outbound_topic_id: inboundTopicId,\n connection_request_id: responseSequenceNumber,\n });\n\n return response;\n }\n\n async getPublicKey(accountId: string): Promise<PublicKey> {\n return await this.mirrorNode.getPublicKey(accountId);\n }\n\n async handleConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n connectionId: number,\n connectionMemo: string = 'Connection accepted. Looking forward to collaborating!',\n ttl: number = 60\n ): Promise<HandleConnectionRequestResponse> {\n this.logger.info('Handling connection request');\n const userAccountId = this.hwc.getAccountInfo().accountId;\n if (!userAccountId) {\n throw new Error('Failed to retrieve user account ID');\n }\n\n const requesterKey = await this.mirrorNode.getPublicKey(\n requestingAccountId\n );\n const accountKey = await this.mirrorNode.getPublicKey(userAccountId);\n\n if (!accountKey) {\n throw new Error('Failed to retrieve public key');\n }\n\n const thresholdKey = new KeyList([accountKey, requesterKey], 1);\n const memo = this._generateHcs10Memo(Hcs10MemoType.CONNECTION, {\n ttl,\n inboundTopicId,\n connectionId,\n });\n\n const transaction = new TopicCreateTransaction()\n .setTopicMemo(memo)\n .setAdminKey(thresholdKey)\n .setSubmitKey(thresholdKey);\n\n this.logger.debug('Executing topic creation transaction');\n const txResponse = await this.hwc.executeTransactionWithErrorHandling(\n transaction,\n false\n );\n if (txResponse.error) {\n this.logger.error(txResponse.error);\n throw new Error(txResponse.error);\n }\n\n const resultReceipt = txResponse.result;\n if (!resultReceipt?.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n throw new Error('Failed to create topic: topicId is null');\n }\n\n const connectionTopicId = resultReceipt.topicId.toString();\n const operatorId = `${inboundTopicId}@${userAccountId}`;\n const confirmedConnectionSequenceNumber = await this.confirmConnection(\n inboundTopicId,\n connectionTopicId,\n requestingAccountId,\n connectionId,\n operatorId,\n connectionMemo\n );\n\n return {\n connectionTopicId,\n confirmedConnectionSequenceNumber,\n operatorId,\n };\n }\n\n async confirmConnection(\n inboundTopicId: string,\n connectionTopicId: string,\n connectedAccountId: string,\n connectionId: number,\n operatorId: string,\n memo: string\n ): Promise<number> {\n this.logger.info('Confirming connection');\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n connected_account_id: connectedAccountId,\n operator_id: operatorId,\n connection_id: connectionId,\n m: memo,\n };\n\n const transactionResponse = await this.submitPayload(\n inboundTopicId,\n payload\n );\n if (!transactionResponse?.topicSequenceNumber) {\n this.logger.error(\n 'Failed to confirm connection: sequence number is null'\n );\n throw new Error('Failed to confirm connection: sequence number is null');\n }\n return transactionResponse.topicSequenceNumber.toNumber();\n }\n\n /**\n * Creates an agent directly, but does not register.\n * We highly recommend calling createAndRegisterAgent instead.\n *\n * @param pfpBuffer - The buffer containing the PFP image.\n * @param pfpFileName - The name of the file containing the PFP image.\n * @param agentName - The name of the agent.\n * @param agentDescription - The description of the agent.\n * @param capabilities - The capabilities of the agent.\n * @param metadata - The metadata of the agent.\n * @param existingPfpTopicId - The topic ID of the existing PFP.\n * @param options - Optional configuration options.\n * @returns A promise that resolves to the agent creation state.\n */\n async createAgent(\n pfpBuffer: Buffer,\n pfpFileName: string,\n agentName: string,\n agentDescription: string,\n capabilities: number[],\n metadata: AgentMetadata,\n existingPfpTopicId?: string,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n existingState?: AgentCreationState;\n ttl?: number;\n }\n ): Promise<RegisteredAgent> {\n try {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'AgentCreate',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n let state =\n options?.existingState ||\n ({\n currentStage: 'init',\n completedPercentage: 0,\n createdResources: [],\n } as AgentCreationState);\n\n if (!state.outboundTopicId) {\n state.currentStage = 'topics';\n progressReporter.preparing('Creating agent outbound topic', 0, {\n state,\n });\n\n const outboundMemo = this._generateHcs10Memo(Hcs10MemoType.OUTBOUND, {\n ttl: options?.ttl,\n });\n const outboundResult = await this.createTopic(outboundMemo, true, true);\n\n if (!outboundResult.success || !outboundResult.topicId) {\n state.error =\n outboundResult.error || 'Failed to create outbound topic';\n progressReporter.failed(\n `Failed to create outbound topic: ${state.error}`,\n { state }\n );\n return {\n outboundTopicId: '',\n inboundTopicId: '',\n pfpTopicId: '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n state.outboundTopicId = outboundResult.topicId;\n if (state.createdResources) {\n state.createdResources.push(`outbound:${state.outboundTopicId}`);\n }\n progressReporter.preparing('Outbound topic created', 20, { state });\n } else {\n progressReporter.preparing('Using existing outbound topic', 20, {\n state,\n });\n }\n\n const accountId = this.hwc.getAccountInfo().accountId;\n if (!accountId) {\n throw new Error('Failed to retrieve user account ID');\n }\n\n if (!state.inboundTopicId) {\n const inboundMemo = this._generateHcs10Memo(Hcs10MemoType.INBOUND, {\n accountId,\n ttl: options?.ttl,\n });\n const inboundResult = await this.createTopic(inboundMemo, true, true);\n\n if (!inboundResult.success || !inboundResult.topicId) {\n state.error = inboundResult.error || 'Failed to create inbound topic';\n progressReporter.failed(\n `Failed to create inbound topic: ${state.error}`,\n { state }\n );\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: '',\n pfpTopicId: '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n state.inboundTopicId = inboundResult.topicId;\n if (state.createdResources) {\n state.createdResources.push(`inbound:${state.inboundTopicId}`);\n }\n progressReporter.preparing('Inbound topic created', 40, { state });\n } else {\n progressReporter.preparing('Using existing inbound topic', 40, {\n state,\n });\n }\n\n if (!state.pfpTopicId && !existingPfpTopicId) {\n state.currentStage = 'pfp';\n progressReporter.preparing('Creating agent profile picture', 40, {\n state,\n });\n\n const pfpProgress = progressReporter.createSubProgress({\n minPercent: 40,\n maxPercent: 60,\n logPrefix: 'PFP',\n });\n\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName, {\n progressCallback: (data) => {\n pfpProgress.report({\n stage: data.stage,\n message: data.message,\n progressPercent: data.progressPercent || 0,\n details: { ...data.details, state },\n });\n },\n });\n\n if (!pfpResult.success) {\n state.error = pfpResult.error || 'Failed to inscribe profile picture';\n progressReporter.failed(\n `Failed to inscribe profile picture: ${state.error}`,\n { state }\n );\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: state.inboundTopicId || '',\n pfpTopicId: '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n state.pfpTopicId = pfpResult.pfpTopicId;\n state.completedPercentage = 60;\n if (state.createdResources) {\n state.createdResources.push(`pfp:${state.pfpTopicId}`);\n }\n\n progressReporter.preparing('Profile picture created', 60, { state });\n } else {\n state.pfpTopicId = existingPfpTopicId || state.pfpTopicId;\n progressReporter.preparing(\n `Using existing profile picture: ${state.pfpTopicId}`,\n 60,\n {\n state,\n }\n );\n }\n\n if (!state.profileTopicId) {\n state.currentStage = 'profile';\n progressReporter.preparing('Creating agent profile', 60, { state });\n\n const profileProgress = progressReporter.createSubProgress({\n minPercent: 60,\n maxPercent: 100,\n logPrefix: 'Profile',\n });\n\n if (!this.hcs11Client) {\n state.error = 'HCS11Client is not available in this environment';\n progressReporter.failed(state.error, { state });\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: state.inboundTopicId || '',\n pfpTopicId: state.pfpTopicId || '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n const storeProfileResult = await this.storeHCS11Profile(\n agentName,\n agentDescription,\n state.inboundTopicId!,\n state.outboundTopicId!,\n capabilities,\n metadata,\n undefined,\n undefined,\n state.pfpTopicId,\n {\n progressCallback: (data) => {\n profileProgress.report({\n stage: data.stage,\n message: data.message,\n progressPercent: data.progressPercent || 0,\n details: { ...data.details, state },\n });\n },\n }\n );\n\n if (!storeProfileResult.success) {\n state.error =\n storeProfileResult.error || 'Failed to store agent profile';\n progressReporter.failed(\n `Failed to store agent profile: ${state.error}`,\n { state }\n );\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: state.inboundTopicId || '',\n pfpTopicId: state.pfpTopicId || '',\n profileTopicId: '',\n success: false,\n error: state.error,\n state,\n };\n }\n\n state.profileTopicId = storeProfileResult.profileTopicId;\n if (state.createdResources) {\n state.createdResources.push(`profile:${state.profileTopicId}`);\n }\n\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n } else {\n progressReporter.preparing('Using existing agent profile', 100, {\n state,\n });\n if (state.currentStage !== 'complete') {\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n }\n }\n\n progressReporter.completed('Agent successfully created', {\n inboundTopicId: state.inboundTopicId,\n outboundTopicId: state.outboundTopicId,\n pfpTopicId: state.pfpTopicId,\n profileTopicId: state.profileTopicId,\n state,\n });\n\n return {\n outboundTopicId: state.outboundTopicId || '',\n inboundTopicId: state.inboundTopicId || '',\n pfpTopicId: state.pfpTopicId || '',\n profileTopicId: state.profileTopicId || '',\n success: true,\n state,\n };\n } catch (error: any) {\n this.logger.error(`Error creating agent: ${error.message}`);\n return {\n outboundTopicId: '',\n inboundTopicId: '',\n pfpTopicId: '',\n profileTopicId: '',\n success: false,\n error: `Error creating agent: ${error.message}`,\n state: {\n currentStage: 'init',\n completedPercentage: 0,\n error: error.message,\n },\n };\n }\n }\n\n private initializeRegistrationState(\n inboundTopicId: string,\n existingState?: AgentCreationState\n ): AgentCreationState {\n const state = existingState || {\n inboundTopicId,\n currentStage: 'registration',\n completedPercentage: 0,\n createdResources: [],\n };\n\n if (\n state.currentStage !== 'registration' &&\n state.currentStage !== 'complete'\n ) {\n state.currentStage = 'registration';\n }\n\n return state;\n }\n\n private updateStateForCompletedRegistration(\n state: AgentCreationState,\n inboundTopicId: string\n ): void {\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n if (state.createdResources) {\n state.createdResources.push(`registration:${inboundTopicId}`);\n }\n }\n\n async registerAgentWithGuardedRegistry(\n accountId: string,\n network: string = this.network,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n maxAttempts?: number;\n delayMs?: number;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n this.logger.info('Registering agent with guarded registry');\n\n const agentProfile = await this.retrieveProfile(accountId);\n const inboundTopicId = agentProfile.topicInfo.inboundTopic;\n const state = this.initializeRegistrationState(\n inboundTopicId,\n options?.existingState\n );\n const progressReporter = new ProgressReporter({\n module: 'AgentRegistration',\n logger: this.logger,\n callback: options?.progressCallback,\n });\n\n progressReporter.preparing('Preparing agent registration', 10, {\n inboundTopicId,\n accountId,\n });\n\n const registrationResult = await this.executeRegistration(\n accountId,\n network as string,\n this.guardedRegistryBaseUrl,\n this.logger\n );\n\n if (!registrationResult.success) {\n return {\n ...registrationResult,\n state,\n };\n }\n\n progressReporter.submitting('Submitting registration to registry', 30, {\n transactionId: registrationResult.transactionId,\n });\n\n if (registrationResult.transaction) {\n const transaction = Transaction.fromBytes(\n Buffer.from(registrationResult.transaction, 'base64')\n );\n\n this.logger.info(`Processing registration transaction`);\n const txResult = await this.hwc.executeTransactionWithErrorHandling(\n transaction as any,\n true\n );\n\n if (txResult.error) {\n return {\n ...registrationResult,\n error: txResult.error,\n success: false,\n state,\n };\n }\n\n this.logger.info(`Successfully processed registration transaction`);\n }\n\n progressReporter.confirming('Confirming registration transaction', 60, {\n accountId,\n inboundTopicId,\n transactionId: registrationResult.transactionId,\n });\n\n const maxAttempts = options?.maxAttempts ?? 60;\n const delayMs = options?.delayMs ?? 2000;\n\n const confirmed = await this.waitForRegistrationConfirmation(\n registrationResult.transactionId!,\n network,\n this.guardedRegistryBaseUrl,\n maxAttempts,\n delayMs,\n this.logger\n );\n\n this.updateStateForCompletedRegistration(state, inboundTopicId);\n\n progressReporter.completed('Agent registration complete', {\n transactionId: registrationResult.transactionId,\n inboundTopicId,\n state,\n confirmed,\n });\n\n return {\n ...registrationResult,\n confirmed,\n state,\n };\n } catch (error: any) {\n this.logger.error(`Registration error: ${error.message}`);\n return {\n error: `Error during registration: ${error.message}`,\n success: false,\n state: {\n currentStage: 'registration',\n completedPercentage: 0,\n error: error.message,\n },\n };\n }\n }\n\n async createAndRegisterAgent(\n builder: AgentBuilder,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n maxAttempts?: number;\n delayMs?: number;\n existingState?: AgentCreationState;\n baseUrl?: string;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n const config = builder.build();\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'AgentCreateRegister',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n let state =\n options?.existingState ||\n ({\n currentStage: 'init',\n completedPercentage: 0,\n createdResources: [],\n } as AgentCreationState);\n\n state.agentMetadata = config.metadata;\n\n progressReporter.preparing('Starting agent creation process', 0, {\n state,\n });\n\n if (\n state.currentStage !== 'complete' ||\n !state.inboundTopicId ||\n !state.outboundTopicId ||\n !state.profileTopicId\n ) {\n const agentResult = await this.createAgent(\n config.pfpBuffer || Buffer.from([]),\n config.pfpFileName || 'default.png',\n config.name,\n config.description,\n config.capabilities,\n config.metadata,\n config.existingPfpTopicId,\n {\n progressCallback: (progress) => {\n const adjustedPercent = (progress.progressPercent || 0) * 0.3;\n progressReporter.report({\n stage: progress.stage,\n message: progress.message,\n progressPercent: adjustedPercent,\n details: {\n ...progress.details,\n state: progress.details?.state || state,\n },\n });\n },\n existingState: state,\n }\n );\n\n if (!agentResult.success) {\n throw new Error(\n agentResult.error || 'Failed to create agent with topics'\n );\n }\n\n state = agentResult.state;\n state.agentMetadata = config.metadata;\n }\n\n progressReporter.preparing(\n `Agent creation status: ${state.currentStage}, ${state.completedPercentage}%`,\n 30,\n { state }\n );\n\n const { accountId } = this.getAccountAndSigner();\n\n if (\n state.currentStage !== 'complete' ||\n !state.createdResources?.includes(\n `registration:${state.inboundTopicId}`\n )\n ) {\n if (options?.baseUrl) {\n this.guardedRegistryBaseUrl = options.baseUrl;\n }\n\n const registrationResult = await this.registerAgentWithGuardedRegistry(\n accountId,\n config.network,\n {\n progressCallback: (progress) => {\n const adjustedPercent =\n 30 + (progress.progressPercent || 0) * 0.7;\n progressReporter.report({\n stage: progress.stage,\n message: progress.message,\n progressPercent: adjustedPercent,\n details: {\n ...progress.details,\n state: progress.details?.state || state,\n },\n });\n },\n maxAttempts: options?.maxAttempts,\n delayMs: options?.delayMs,\n existingState: state,\n }\n );\n\n if (!registrationResult.success) {\n throw new Error(\n registrationResult.error || 'Failed to register agent with registry'\n );\n }\n\n state = registrationResult.state;\n }\n\n progressReporter.completed('Agent creation and registration complete', {\n state,\n });\n\n return {\n success: true,\n state,\n metadata: {\n accountId,\n operatorId: `${state.inboundTopicId}@${accountId}`,\n inboundTopicId: state.inboundTopicId!,\n outboundTopicId: state.outboundTopicId!,\n profileTopicId: state.profileTopicId!,\n pfpTopicId: state.pfpTopicId!,\n privateKey: null,\n ...state.agentMetadata,\n },\n };\n } catch (error: any) {\n throw new Error(`Failed to create and register agent: ${error.message}`);\n }\n }\n\n async storeHCS11Profile(\n agentName: string,\n agentDescription: string,\n inboundTopicId: string,\n outboundTopicId: string,\n capabilities: number[] = [],\n metadata: Record<string, any> = {},\n pfpBuffer?: Buffer,\n pfpFileName?: string,\n existingPfpTopicId?: string,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n }\n ): Promise<StoreHCS11ProfileResponse> {\n try {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'StoreHCS11Profile',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n progressReporter.preparing('Preparing agent profile data', 0);\n\n let pfpTopicId = existingPfpTopicId;\n\n if (!pfpTopicId && pfpBuffer && pfpFileName) {\n const pfpProgress = progressReporter.createSubProgress({\n minPercent: 0,\n maxPercent: 60,\n logPrefix: 'PFP',\n });\n\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName, {\n progressCallback: (data) => {\n pfpProgress.report({\n stage: data.stage,\n message: data.message,\n progressPercent: data.progressPercent || 0,\n details: data.details,\n });\n },\n });\n\n if (!pfpResult.success) {\n progressReporter.failed(\n 'Failed to inscribe profile picture, continuing without PFP'\n );\n } else {\n pfpTopicId = pfpResult.pfpTopicId;\n }\n } else if (existingPfpTopicId) {\n progressReporter.preparing(\n `Using existing profile picture: ${existingPfpTopicId}`,\n 30\n );\n } else {\n progressReporter.preparing('No profile picture provided', 30);\n }\n\n const agentType = this.hcs11Client?.getAgentTypeFromMetadata({\n type: metadata.type || 'autonomous',\n } as AIAgentMetadata);\n\n progressReporter.preparing('Building agent profile', 65);\n\n const formattedSocials = [];\n if (metadata.socials) {\n if (metadata.socials.twitter) {\n formattedSocials.push({\n platform: 'twitter',\n handle: metadata.socials.twitter,\n });\n }\n if (metadata.socials.discord) {\n formattedSocials.push({\n platform: 'discord',\n handle: metadata.socials.discord,\n });\n }\n if (metadata.socials.github) {\n formattedSocials.push({\n platform: 'github',\n handle: metadata.socials.github,\n });\n }\n if (metadata.socials.website) {\n formattedSocials.push({\n platform: 'website',\n handle: metadata.socials.website,\n });\n }\n if (metadata.socials.x) {\n formattedSocials.push({\n platform: 'twitter',\n handle: metadata.socials.x,\n });\n }\n if (metadata.socials.linkedin) {\n formattedSocials.push({\n platform: 'linkedin',\n handle: metadata.socials.linkedin,\n });\n }\n if (metadata.socials.youtube) {\n formattedSocials.push({\n platform: 'youtube',\n handle: metadata.socials.youtube,\n });\n }\n if (metadata.socials.telegram) {\n formattedSocials.push({\n platform: 'telegram',\n handle: metadata.socials.telegram,\n });\n }\n }\n\n if (!this.hcs11Client) {\n progressReporter.failed(\n 'HCS11Client is not available in this environment'\n );\n return {\n profileTopicId: '',\n success: false,\n error: 'HCS11Client is not available in this environment',\n transactionId: '',\n };\n }\n\n const profile = this.hcs11Client.createAIAgentProfile(\n agentName,\n agentType!,\n capabilities,\n metadata.model || 'unknown',\n {\n alias: agentName.toLowerCase().replace(/\\s+/g, '_'),\n bio: agentDescription,\n profileImage: pfpTopicId ? `hcs://1/${pfpTopicId}` : undefined,\n socials: formattedSocials.length > 0 ? formattedSocials : undefined,\n properties: {\n description: agentDescription,\n version: metadata.version || '1.0.0',\n creator: metadata.creator || 'Unknown',\n supported_languages: metadata.supported_languages || ['en'],\n permissions: metadata.permissions || [],\n model_details: metadata.model_details,\n training: metadata.training,\n capabilities_description: metadata.capabilities_description,\n ...metadata,\n },\n inboundTopicId,\n outboundTopicId,\n creator: metadata.creator,\n }\n );\n\n const profileProgress = progressReporter.createSubProgress({\n minPercent: 65,\n maxPercent: 100,\n logPrefix: 'Profile',\n });\n\n const profileResult = await this.hcs11Client.createAndInscribeProfile(\n profile,\n true,\n {\n progressCallback: (profileData) => {\n profileProgress.report({\n stage: profileData.stage,\n message: profileData.message,\n progressPercent: profileData.progressPercent || 0,\n details: profileData.details,\n });\n },\n }\n );\n\n if (!profileResult.success) {\n progressReporter.failed('Failed to inscribe profile');\n return {\n profileTopicId: '',\n success: false,\n error: profileResult.error || 'Failed to inscribe profile',\n transactionId: profileResult.transactionId || '',\n };\n }\n\n progressReporter.completed('Profile stored successfully', {\n profileTopicId: profileResult.profileTopicId,\n });\n\n return {\n profileTopicId: profileResult.profileTopicId,\n pfpTopicId,\n success: true,\n transactionId: profileResult.transactionId || '',\n };\n } catch (error: any) {\n this.logger.error(`Error storing HCS11 profile: ${error.message}`);\n return {\n profileTopicId: '',\n success: false,\n error: error.message,\n transactionId: '',\n };\n }\n }\n\n async createTopic(\n memo: string,\n adminKey?: boolean,\n submitKey?: boolean\n ): Promise<{\n success: boolean;\n topicId?: string;\n error?: string;\n }> {\n this.logger.info('Creating topic');\n const { accountId, signer } = this.getAccountAndSigner();\n\n const transaction = new TopicCreateTransaction().setTopicMemo(memo);\n\n const publicKey = await this.mirrorNode.getPublicKey(accountId);\n\n if (adminKey && publicKey) {\n transaction.setAdminKey(publicKey);\n transaction.setAutoRenewAccountId(accountId);\n }\n\n if (submitKey && publicKey) {\n transaction.setSubmitKey(publicKey);\n }\n\n const transactionResponse =\n await this.hwc.executeTransactionWithErrorHandling(\n transaction as any,\n false\n );\n\n const error = transactionResponse.error;\n\n if (error) {\n this.logger.error(error);\n return {\n success: false,\n error,\n };\n }\n\n const resultReceipt = transactionResponse.result;\n\n if (!resultReceipt?.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n return {\n success: false,\n error: 'Failed to create topic: topicId is null',\n };\n }\n\n return {\n success: true,\n topicId: resultReceipt.topicId.toString(),\n };\n }\n\n public async submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee?: boolean\n ): Promise<TransactionReceipt> {\n this.logger.debug(`Submitting payload to topic ${topicId}`);\n\n let message: string;\n if (typeof payload === 'string') {\n message = payload;\n } else {\n message = JSON.stringify(payload);\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(topicId)\n .setMessage(message);\n\n let transactionResponse: {\n result?: TransactionReceipt;\n error?: string;\n };\n\n if (requiresFee) {\n this.logger.info(\n 'Topic requires fee payment, setting max transaction fee'\n );\n transaction.setMaxTransactionFee(new Hbar(this.feeAmount));\n transaction.setTransactionMemo('HIP-991 Fee Payment');\n }\n\n if (submitKey) {\n const { accountId, signer } = this.getAccountAndSigner();\n transaction.freezeWithSigner(signer as any);\n const signedTransaction = await transaction.sign(submitKey);\n transactionResponse = await this.hwc.executeTransactionWithErrorHandling(\n signedTransaction,\n true\n );\n } else {\n transactionResponse = await this.hwc.executeTransactionWithErrorHandling(\n transaction,\n false\n );\n }\n\n if (transactionResponse?.error) {\n this.logger.error(\n `Failed to submit payload: ${transactionResponse.error}`\n );\n throw new Error(`Failed to submit payload: ${transactionResponse.error}`);\n }\n\n if (!transactionResponse?.result) {\n this.logger.error(\n 'Failed to submit message: receipt is null or undefined'\n );\n throw new Error('Failed to submit message: receipt is null or undefined');\n }\n\n this.logger.debug('Payload submitted successfully via HWC');\n return transactionResponse.result;\n }\n\n async inscribeFile(\n buffer: Buffer,\n fileName: string\n ): Promise<RetrievedInscriptionResult> {\n const { accountId, signer } = this.getAccountAndSigner();\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const sdk = await InscriptionSDK.createWithAuth({\n type: 'client',\n accountId: accountId,\n signer: signer as any,\n network: this.network as 'testnet' | 'mainnet',\n });\n\n const result = await sdk.inscribe(\n {\n file: {\n type: 'base64',\n base64: buffer.toString('base64'),\n fileName,\n mimeType,\n },\n holderId: accountId.toString(),\n mode: 'file',\n network: this.network as 'testnet' | 'mainnet',\n },\n signer as any\n );\n\n if (!result.transactionId || !result.jobId) {\n this.logger.error('Failed to inscribe, no transaction ID or job ID.');\n throw new Error('Failed to inscribe, no transaction ID or job ID.');\n }\n\n if (result.transactionId && result.jobId) {\n this.logger.info(\n `Transaction ID: ${result.transactionId}, Job ID: ${result.jobId}`\n );\n }\n\n const status = await sdk.waitForInscription(result.jobId, 30, 4000, true);\n return status;\n }\n\n getAccountAndSigner(): GetAccountAndSignerResponse {\n const accountInfo = this.hwc.getAccountInfo();\n const accountId = accountInfo.accountId.toString();\n const signer = this.hwc.dAppConnector.signers.find((s) => {\n return s.getAccountId().toString() === accountId;\n });\n\n if (!signer) {\n this.logger.error('Failed to find signer');\n throw new Error('Failed to find signer');\n }\n\n return { accountId, signer: signer as any };\n }\n\n /**\n * Inscribes a profile picture (PFP) on HCS-11.\n *\n * @param buffer - The buffer containing the PFP image.\n * @param fileName - The name of the file containing the PFP image.\n * @param options - Optional configuration options.\n * @returns A promise that resolves to the topic ID of the inscribed PFP.\n */\n async inscribePfp(\n buffer: Buffer,\n fileName: string,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n }\n ): Promise<InscribePfpResponse> {\n try {\n const progressCallback = options?.progressCallback;\n const progressReporter = new ProgressReporter({\n module: 'PFP-Inscription',\n logger: this.logger,\n callback: progressCallback as any,\n });\n\n if (!this.hcs11Client) {\n progressReporter.failed(\n 'HCS11Client is not available in this environment'\n );\n return {\n pfpTopicId: '',\n success: false,\n error: 'HCS11Client is not available in this environment',\n transactionId: '',\n };\n }\n\n progressReporter.preparing('Preparing to inscribe profile picture', 10);\n this.logger.info('Inscribing profile picture using HCS-11 client');\n\n const wrappedProgressCallback = (data: any) => {\n progressReporter.report({\n stage: data.stage || 'confirming',\n message: data.message || 'Processing PFP inscription',\n progressPercent: data.progressPercent || 50,\n details: data.details,\n });\n };\n\n const imageResult = await this.hcs11Client.inscribeImage(\n buffer,\n fileName,\n { progressCallback: wrappedProgressCallback }\n );\n\n if (!imageResult.success) {\n progressReporter.failed(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n this.logger.error(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n return {\n pfpTopicId: '',\n success: false,\n error: imageResult.error || 'Failed to inscribe profile picture',\n transactionId: imageResult.transactionId || '',\n };\n }\n\n progressReporter.completed('Successfully inscribed profile picture', {\n pfpTopicId: imageResult.imageTopicId,\n });\n\n this.logger.info(\n `Successfully inscribed profile picture with topic ID: ${imageResult.imageTopicId}`\n );\n return {\n pfpTopicId: imageResult.imageTopicId,\n success: true,\n transactionId: imageResult.transactionId || '',\n };\n } catch (error: any) {\n this.logger.error(`Error inscribing profile picture: ${error.message}`);\n return {\n pfpTopicId: '',\n success: false,\n error: error.message,\n transactionId: '',\n };\n }\n }\n}\n"],"names":["mime.lookup"],"mappings":"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"}
|
|
@@ -1,47 +1,151 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
import { version } from "./standards-sdk.es87.js";
|
|
2
|
+
import { defineProperties } from "./standards-sdk.es103.js";
|
|
3
|
+
function stringify(value) {
|
|
4
|
+
if (value == null) {
|
|
5
|
+
return "null";
|
|
6
|
+
}
|
|
7
|
+
if (Array.isArray(value)) {
|
|
8
|
+
return "[ " + value.map(stringify).join(", ") + " ]";
|
|
9
|
+
}
|
|
10
|
+
if (value instanceof Uint8Array) {
|
|
11
|
+
const HEX = "0123456789abcdef";
|
|
12
|
+
let result = "0x";
|
|
13
|
+
for (let i = 0; i < value.length; i++) {
|
|
14
|
+
result += HEX[value[i] >> 4];
|
|
15
|
+
result += HEX[value[i] & 15];
|
|
16
|
+
}
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
if (typeof value === "object" && typeof value.toJSON === "function") {
|
|
20
|
+
return stringify(value.toJSON());
|
|
21
|
+
}
|
|
22
|
+
switch (typeof value) {
|
|
23
|
+
case "boolean":
|
|
24
|
+
case "symbol":
|
|
25
|
+
return value.toString();
|
|
26
|
+
case "bigint":
|
|
27
|
+
return BigInt(value).toString();
|
|
28
|
+
case "number":
|
|
29
|
+
return value.toString();
|
|
30
|
+
case "string":
|
|
31
|
+
return JSON.stringify(value);
|
|
32
|
+
case "object": {
|
|
33
|
+
const keys = Object.keys(value);
|
|
34
|
+
keys.sort();
|
|
35
|
+
return "{ " + keys.map((k) => `${stringify(k)}: ${stringify(value[k])}`).join(", ") + " }";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return `[ COULD NOT SERIALIZE ]`;
|
|
39
|
+
}
|
|
40
|
+
function isError(error, code) {
|
|
41
|
+
return error && error.code === code;
|
|
42
|
+
}
|
|
43
|
+
function makeError(message, code, info) {
|
|
44
|
+
let shortMessage = message;
|
|
45
|
+
{
|
|
46
|
+
const details = [];
|
|
47
|
+
if (info) {
|
|
48
|
+
if ("message" in info || "code" in info || "name" in info) {
|
|
49
|
+
throw new Error(`value will overwrite populated values: ${stringify(info)}`);
|
|
50
|
+
}
|
|
51
|
+
for (const key in info) {
|
|
52
|
+
if (key === "shortMessage") {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const value = info[key];
|
|
56
|
+
details.push(key + "=" + stringify(value));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
details.push(`code=${code}`);
|
|
60
|
+
details.push(`version=${version}`);
|
|
61
|
+
if (details.length) {
|
|
62
|
+
message += " (" + details.join(", ") + ")";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
let error;
|
|
66
|
+
switch (code) {
|
|
67
|
+
case "INVALID_ARGUMENT":
|
|
68
|
+
error = new TypeError(message);
|
|
69
|
+
break;
|
|
70
|
+
case "NUMERIC_FAULT":
|
|
71
|
+
case "BUFFER_OVERRUN":
|
|
72
|
+
error = new RangeError(message);
|
|
73
|
+
break;
|
|
74
|
+
default:
|
|
75
|
+
error = new Error(message);
|
|
76
|
+
}
|
|
77
|
+
defineProperties(error, { code });
|
|
78
|
+
if (info) {
|
|
79
|
+
Object.assign(error, info);
|
|
80
|
+
}
|
|
81
|
+
if (error.shortMessage == null) {
|
|
82
|
+
defineProperties(error, { shortMessage });
|
|
83
|
+
}
|
|
84
|
+
return error;
|
|
85
|
+
}
|
|
86
|
+
function assert(check, message, code, info) {
|
|
87
|
+
if (!check) {
|
|
88
|
+
throw makeError(message, code, info);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function assertArgument(check, message, name, value) {
|
|
92
|
+
assert(check, message, "INVALID_ARGUMENT", { argument: name, value });
|
|
93
|
+
}
|
|
94
|
+
function assertArgumentCount(count, expectedCount, message) {
|
|
95
|
+
if (message == null) {
|
|
96
|
+
message = "";
|
|
97
|
+
}
|
|
98
|
+
if (message) {
|
|
99
|
+
message = ": " + message;
|
|
100
|
+
}
|
|
101
|
+
assert(count >= expectedCount, "missing argument" + message, "MISSING_ARGUMENT", {
|
|
102
|
+
count,
|
|
103
|
+
expectedCount
|
|
104
|
+
});
|
|
105
|
+
assert(count <= expectedCount, "too many arguments" + message, "UNEXPECTED_ARGUMENT", {
|
|
106
|
+
count,
|
|
107
|
+
expectedCount
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
["NFD", "NFC", "NFKD", "NFKC"].reduce((accum, form) => {
|
|
111
|
+
try {
|
|
112
|
+
if ("test".normalize(form) !== "test") {
|
|
113
|
+
throw new Error("bad");
|
|
114
|
+
}
|
|
115
|
+
;
|
|
116
|
+
if (form === "NFD") {
|
|
117
|
+
const check = String.fromCharCode(233).normalize("NFD");
|
|
118
|
+
const expected = String.fromCharCode(101, 769);
|
|
119
|
+
if (check !== expected) {
|
|
120
|
+
throw new Error("broken");
|
|
29
121
|
}
|
|
30
|
-
value = toTwos(value, 8 * WordSize);
|
|
31
|
-
} else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {
|
|
32
|
-
this._throwError("value out-of-bounds", _value);
|
|
33
122
|
}
|
|
34
|
-
|
|
123
|
+
accum.push(form);
|
|
124
|
+
} catch (error) {
|
|
125
|
+
}
|
|
126
|
+
return accum;
|
|
127
|
+
}, []);
|
|
128
|
+
function assertPrivate(givenGuard, guard, className) {
|
|
129
|
+
if (className == null) {
|
|
130
|
+
className = "";
|
|
35
131
|
}
|
|
36
|
-
|
|
37
|
-
let
|
|
38
|
-
if (
|
|
39
|
-
|
|
132
|
+
if (givenGuard !== guard) {
|
|
133
|
+
let method = className, operation = "new";
|
|
134
|
+
if (className) {
|
|
135
|
+
method += ".";
|
|
136
|
+
operation += " " + className;
|
|
40
137
|
}
|
|
41
|
-
|
|
138
|
+
assert(false, `private constructor; use ${method}from* methods`, "UNSUPPORTED_OPERATION", {
|
|
139
|
+
operation
|
|
140
|
+
});
|
|
42
141
|
}
|
|
43
142
|
}
|
|
44
143
|
export {
|
|
45
|
-
|
|
144
|
+
assert,
|
|
145
|
+
assertArgument,
|
|
146
|
+
assertArgumentCount,
|
|
147
|
+
assertPrivate,
|
|
148
|
+
isError,
|
|
149
|
+
makeError
|
|
46
150
|
};
|
|
47
151
|
//# sourceMappingURL=standards-sdk.es100.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es100.js","sources":["../../node_modules/ethers/lib.esm/abi/coders/number.js"],"sourcesContent":["import { defineProperties, fromTwos, getBigInt, mask, toTwos } from \"../../utils/index.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n/**\n * @_ignore\n */\nexport class NumberCoder extends Coder {\n size;\n signed;\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = toTwos(value, 8 * WordSize);\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return value;\n }\n}\n//# sourceMappingURL=number.js.map"],"names":[],"mappings":";;;;;;;AAGA,MAAM,OAAO,OAAO,CAAC;AACrB,MAAM,OAAO,OAAO,CAAC;AACrB,MAAM,iBAAiB,OAAO,oEAAoE;AAI3F,MAAM,oBAAoB,MAAM;AAAA,EAGnC,YAAY,MAAM,QAAQ,WAAW;AACjC,UAAM,QAAS,SAAS,QAAQ,UAAW,OAAO;AAClD,UAAM,MAAM,MAAM,WAAW,KAAK;AAJtC;AACA;AAII,qBAAiB,MAAM,EAAE,MAAM,OAAM,GAAI,EAAE,MAAM,UAAU,QAAQ,WAAW;AAAA,EACtF;AAAA,EACI,eAAe;AACX,WAAO;AAAA,EACf;AAAA,EACI,OAAO,QAAQ,QAAQ;AACnB,QAAI,QAAQ,UAAU,MAAM,YAAY,QAAQ,KAAK,IAAI,CAAC;AAE1D,QAAI,eAAe,KAAK,gBAAgB,WAAW,CAAC;AACpD,QAAI,KAAK,QAAQ;AACb,UAAI,SAAS,KAAK,cAAe,KAAK,OAAO,IAAK,CAAC;AACnD,UAAI,QAAQ,UAAU,QAAQ,EAAE,SAAS,OAAO;AAC5C,aAAK,YAAY,uBAAuB,MAAM;AAAA,MAC9D;AACY,cAAQ,OAAO,OAAO,IAAI,QAAQ;AAAA,IAC9C,WACiB,QAAQ,QAAQ,QAAQ,KAAK,cAAc,KAAK,OAAO,CAAC,GAAG;AAChE,WAAK,YAAY,uBAAuB,MAAM;AAAA,IAC1D;AACQ,WAAO,OAAO,WAAW,KAAK;AAAA,EACtC;AAAA,EACI,OAAO,QAAQ;AACX,QAAI,QAAQ,KAAK,OAAO,UAAS,GAAI,KAAK,OAAO,CAAC;AAClD,QAAI,KAAK,QAAQ;AACb,cAAQ,SAAS,OAAO,KAAK,OAAO,CAAC;AAAA,IACjD;AACQ,WAAO;AAAA,EACf;AACA;","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es100.js","sources":["../../node_modules/ethers/lib.esm/utils/errors.js"],"sourcesContent":["/**\n * All errors in ethers include properties to ensure they are both\n * human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n * The [[isError]] function can be used to check the error ``code`` and\n * provide a type guard for the properties present on that error interface.\n *\n * @_section: api/utils/errors:Errors [about-errors]\n */\nimport { version } from \"../_version.js\";\nimport { defineProperties } from \"./properties.js\";\nfunction stringify(value) {\n if (value == null) {\n return \"null\";\n }\n if (Array.isArray(value)) {\n return \"[ \" + (value.map(stringify)).join(\", \") + \" ]\";\n }\n if (value instanceof Uint8Array) {\n const HEX = \"0123456789abcdef\";\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n result += HEX[value[i] >> 4];\n result += HEX[value[i] & 0xf];\n }\n return result;\n }\n if (typeof (value) === \"object\" && typeof (value.toJSON) === \"function\") {\n return stringify(value.toJSON());\n }\n switch (typeof (value)) {\n case \"boolean\":\n case \"symbol\":\n return value.toString();\n case \"bigint\":\n return BigInt(value).toString();\n case \"number\":\n return (value).toString();\n case \"string\":\n return JSON.stringify(value);\n case \"object\": {\n const keys = Object.keys(value);\n keys.sort();\n return \"{ \" + keys.map((k) => `${stringify(k)}: ${stringify(value[k])}`).join(\", \") + \" }\";\n }\n }\n return `[ COULD NOT SERIALIZE ]`;\n}\n/**\n * Returns true if the %%error%% matches an error thrown by ethers\n * that matches the error %%code%%.\n *\n * In TypeScript environments, this can be used to check that %%error%%\n * matches an EthersError type, which means the expected properties will\n * be set.\n *\n * @See [ErrorCodes](api:ErrorCode)\n * @example\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, \"CALL_EXCEPTION\")) {\n * // The Type Guard has validated this object\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\n/**\n * Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/**\n * Returns a new Error configured to the format ethers emits errors, with\n * the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n * for the corresponding EthersError.\n *\n * Each error in ethers includes the version of ethers, a\n * machine-readable [[ErrorCode]], and depending on %%code%%, additional\n * required properties. The error message will also include the %%message%%,\n * ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError(message, code, info) {\n let shortMessage = message;\n {\n const details = [];\n if (info) {\n if (\"message\" in info || \"code\" in info || \"name\" in info) {\n throw new Error(`value will overwrite populated values: ${stringify(info)}`);\n }\n for (const key in info) {\n if (key === \"shortMessage\") {\n continue;\n }\n const value = (info[key]);\n // try {\n details.push(key + \"=\" + stringify(value));\n // } catch (error: any) {\n // console.log(\"MMM\", error.message);\n // details.push(key + \"=[could not serialize object]\");\n // }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n let error;\n switch (code) {\n case \"INVALID_ARGUMENT\":\n error = new TypeError(message);\n break;\n case \"NUMERIC_FAULT\":\n case \"BUFFER_OVERRUN\":\n error = new RangeError(message);\n break;\n default:\n error = new Error(message);\n }\n defineProperties(error, { code });\n if (info) {\n Object.assign(error, info);\n }\n if (error.shortMessage == null) {\n defineProperties(error, { shortMessage });\n }\n return error;\n}\n/**\n * Throws an EthersError with %%message%%, %%code%% and additional error\n * %%info%% when %%check%% is falsish..\n *\n * @see [[api:makeError]]\n */\nexport function assert(check, message, code, info) {\n if (!check) {\n throw makeError(message, code, info);\n }\n}\n/**\n * A simple helper to simply ensuring provided arguments match expected\n * constraints, throwing if not.\n *\n * In TypeScript environments, the %%check%% has been asserted true, so\n * any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check, message, name, value) {\n assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\nexport function assertArgumentCount(count, expectedCount, message) {\n if (message == null) {\n message = \"\";\n }\n if (message) {\n message = \": \" + message;\n }\n assert(count >= expectedCount, \"missing argument\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n}\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\n/**\n * Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form) {\n assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n}\n/**\n * Many classes use file-scoped values to guard the constructor,\n * making it effectively private. This facilitates that pattern\n * by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n * throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard, guard, className) {\n if (className == null) {\n className = \"\";\n }\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n assert(false, `private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n}\n//# sourceMappingURL=errors.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|