@hashgraphonline/standards-agent-kit 0.2.149 → 0.2.152

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/cjs/standards-agent-kit.cjs +1 -1
  2. package/dist/cjs/standards-agent-kit.cjs.map +1 -1
  3. package/dist/cjs/types/inscription-response.d.ts +0 -5
  4. package/dist/cjs/utils/inscription-utils.d.ts +1 -1
  5. package/dist/es/standards-agent-kit.es39.js +1 -3
  6. package/dist/es/standards-agent-kit.es39.js.map +1 -1
  7. package/dist/es/standards-agent-kit.es48.js +3 -7
  8. package/dist/es/standards-agent-kit.es48.js.map +1 -1
  9. package/dist/es/standards-agent-kit.es49.js +7 -3
  10. package/dist/es/standards-agent-kit.es49.js.map +1 -1
  11. package/dist/es/standards-agent-kit.es50.js +1 -1
  12. package/dist/es/standards-agent-kit.es50.js.map +1 -1
  13. package/dist/es/standards-agent-kit.es55.js +1 -11
  14. package/dist/es/standards-agent-kit.es55.js.map +1 -1
  15. package/dist/es/standards-agent-kit.es6.js +1 -1
  16. package/dist/es/standards-agent-kit.es7.js +1 -1
  17. package/dist/es/standards-agent-kit.es8.js +10 -0
  18. package/dist/es/standards-agent-kit.es8.js.map +1 -1
  19. package/dist/es/standards-agent-kit.es9.js +1 -1
  20. package/dist/es/types/inscription-response.d.ts +0 -5
  21. package/dist/es/utils/inscription-utils.d.ts +1 -1
  22. package/dist/umd/standards-agent-kit.umd.js +1 -1
  23. package/dist/umd/standards-agent-kit.umd.js.map +1 -1
  24. package/dist/umd/types/inscription-response.d.ts +0 -5
  25. package/dist/umd/utils/inscription-utils.d.ts +1 -1
  26. package/package.json +1 -1
  27. package/src/builders/inscriber/inscriber-builder.ts +10 -0
  28. package/src/tools/inscriber/InscribeHashinalTool.ts +1 -4
  29. package/src/types/inscription-response.ts +1 -16
  30. package/src/utils/inscription-utils.ts +2 -4
@@ -12,8 +12,6 @@ export interface InscriptionSuccessResponse {
12
12
  hrl: string;
13
13
  /** Topic ID where the inscription was stored */
14
14
  topicId: string;
15
- /** Topic ID containing the JSON metadata when available */
16
- jsonTopicId?: string;
17
15
  /** Type of Hashinal - Static (HCS-5) or Dynamic (HCS-6) */
18
16
  standard: 'Static' | 'Dynamic';
19
17
  /** CDN URL for direct access to the inscribed content */
@@ -21,8 +19,6 @@ export interface InscriptionSuccessResponse {
21
19
  /** Transaction ID of the inscription */
22
20
  transactionId?: string;
23
21
  };
24
- /** Topic ID used for metadata lookups */
25
- jsonTopicId?: string;
26
22
  metadata: {
27
23
  /** Name/title of the inscribed content */
28
24
  name?: string;
@@ -101,7 +97,6 @@ export type InscriptionResponse = InscriptionSuccessResponse | InscriptionQuoteR
101
97
  export declare function createInscriptionSuccess(params: {
102
98
  hrl: string;
103
99
  topicId: string;
104
- jsonTopicId?: string;
105
100
  standard: 'Static' | 'Dynamic';
106
101
  cdnUrl?: string;
107
102
  transactionId?: string;
@@ -9,7 +9,7 @@ export interface TopicIds {
9
9
  * - Prefers jsonTopicId when present (for CDN linking)
10
10
  * - Collects topic_id/topicId from either inscription or result
11
11
  */
12
- export declare function extractTopicIds(inscription?: RetrievedInscriptionResult, result?: unknown): TopicIds;
12
+ export declare function extractTopicIds(inscription: RetrievedInscriptionResult, result?: unknown): TopicIds;
13
13
  /**
14
14
  * Build HRL/CDN URLs from extracted topic ids.
15
15
  * - HRL prefers jsonTopicId, falls back to topicId
@@ -338,11 +338,10 @@ class InscribeHashinalTool extends BaseInscriberQueryTool {
338
338
  network,
339
339
  fileStandard
340
340
  );
341
- const txId = result.result?.transactionId ?? "unknown";
341
+ const txId = result?.inscription?.tx_id ?? "unknown";
342
342
  const successResponse = createInscriptionSuccess({
343
343
  hrl: hrl || "hcs://1/unknown",
344
344
  topicId: topicId || "unknown",
345
- jsonTopicId: ids.jsonTopicId,
346
345
  standard: fileStandard === "6" ? "Dynamic" : "Static",
347
346
  cdnUrl,
348
347
  transactionId: txId,
@@ -444,7 +443,6 @@ class InscribeHashinalTool extends BaseInscriberQueryTool {
444
443
  name: response.metadata.name || "Untitled Content",
445
444
  creator: response.metadata.creator || "",
446
445
  topicId: response.inscription.topicId,
447
- jsonTopicId: response.inscription.jsonTopicId || response.jsonTopicId,
448
446
  hrl: response.inscription.hrl,
449
447
  network
450
448
  }
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es39.js","sources":["../../src/tools/inscriber/InscribeHashinalTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseInscriberQueryTool } from './base-inscriber-tools';\nimport {\n InscriptionOptions,\n InscriptionInput,\n ContentResolverRegistry,\n Logger,\n InscriptionResult,\n} from '@hashgraphonline/standards-sdk';\nimport { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';\nimport { validateHIP412Metadata } from '../../validation/hip412-schemas';\nimport { contentRefSchema } from '../../validation/content-ref-schemas';\nimport { generateDefaultMetadata } from '../../utils/metadata-defaults';\nimport {\n extendZodSchema,\n renderConfigs,\n} from '../../lib/zod-render/schema-extension';\nimport {\n createInscriptionSuccess,\n createInscriptionQuote,\n createInscriptionError,\n createInscriptionPending,\n InscriptionResponse,\n} from '../../types/inscription-response';\nimport { FormValidatable } from '../../interfaces/FormValidatable';\nimport {\n extractTopicIds,\n buildInscriptionLinks,\n} from '../../utils/inscription-utils';\n\n/**\n * Network-specific Hashinal block configuration for HashLink blocks\n */\nconst HASHLINK_BLOCK_CONFIG = {\n testnet: {\n blockId: '0.0.6617393',\n hashLink: 'hcs://12/0.0.6617393',\n template: '0.0.6617393',\n },\n mainnet: {\n blockId: '0.0.TBD',\n hashLink: 'hcs://12/0.0.TBD',\n template: '0.0.TBD',\n },\n};\n\n/**\n * Gets the appropriate HashLink block configuration for the specified network.\n * Provides graceful fallback to testnet for unknown networks or undeployed mainnet blocks.\n *\n * @param network The network type to get configuration for\n * @returns Network-specific block configuration with blockId, hashLink, and template\n */\nfunction getHashLinkBlockId(network: 'mainnet' | 'testnet'): {\n blockId: string;\n hashLink: string;\n template: string;\n} {\n const config =\n network === 'mainnet'\n ? HASHLINK_BLOCK_CONFIG.mainnet\n : HASHLINK_BLOCK_CONFIG.testnet;\n if (!config || config.blockId === '0.0.TBD') {\n return HASHLINK_BLOCK_CONFIG.testnet;\n }\n return config;\n}\n\n/**\n * Schema for inscribing Hashinal NFT\n */\nconst inscribeHashinalSchema = extendZodSchema(\n z.object({\n url: z\n .string()\n .optional()\n .describe(\n 'The URL of the content to inscribe as Hashinal NFT (use this OR contentRef)'\n ),\n contentRef: contentRefSchema\n .optional()\n .describe(\n 'Content reference ID in format \"content-ref:[id]\" for already stored content (use this OR url)'\n ),\n base64Data: z\n .string()\n .optional()\n .describe(\n 'Base64 encoded content data (use this if neither url nor contentRef provided)'\n ),\n fileName: z\n .string()\n .optional()\n .describe(\n 'File name for the content (required when using base64Data or contentRef)'\n ),\n mimeType: z\n .string()\n .optional()\n .describe('MIME type of the content (e.g., \"image/png\", \"image/jpeg\")'),\n name: z\n .string()\n .optional()\n .describe(\n 'Display name for the NFT (e.g., \"Sunset Landscape #42\", \"Digital Abstract Art\")'\n ),\n creator: z\n .string()\n .optional()\n .describe(\n 'Creator account ID, artist name, or brand (e.g., \"0.0.123456\", \"ArtistName\", \"StudioBrand\")'\n ),\n description: z\n .string()\n .optional()\n .describe(\n 'Meaningful description of the artwork, story, or concept behind this NFT'\n ),\n type: z\n .string()\n .optional()\n .describe(\n 'Category or genre of the NFT (e.g., \"Digital Art\", \"Photography\", \"Collectible Card\")'\n ),\n attributes: extendZodSchema(\n z.array(\n z.object({\n trait_type: z.string(),\n value: z.union([z.string(), z.number()]),\n })\n )\n )\n .withRender(renderConfigs.array('NFT Attributes', 'Attribute'))\n .optional()\n .describe(\n 'Collectible traits and characteristics (e.g., \"Rarity\": \"Epic\", \"Color\": \"Blue\", \"Style\": \"Abstract\")'\n ),\n properties: z\n .record(z.unknown())\n .optional()\n .describe('Additional properties'),\n jsonFileURL: z\n .string()\n .url()\n .optional()\n .describe('URL to JSON metadata file'),\n fileStandard: z\n .enum(['1', '6'])\n .optional()\n .default('1')\n .describe(\n 'HCS file standard: 1 for static Hashinals (HCS-5), 6 for dynamic Hashinals (HCS-6)'\n ),\n tags: z.array(z.string()).optional().describe('Tags to categorize the NFT'),\n chunkSize: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Chunk size for large files'),\n waitForConfirmation: z\n .boolean()\n .optional()\n .describe('Whether to wait for inscription confirmation'),\n timeoutMs: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Timeout in milliseconds for inscription (default: no timeout - waits until completion)'\n ),\n quoteOnly: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'If true, returns a cost quote instead of executing the inscription'\n ),\n withHashLinkBlocks: z\n .boolean()\n .optional()\n .default(true)\n .describe(\n 'If true, creates interactive HashLink blocks for the inscribed content and returns block data alongside the inscription response'\n ),\n renderForm: z\n .boolean()\n .optional()\n .default(true)\n .describe(\n 'Whether to show a form to collect metadata. Set to false only if user provided complete metadata including name, description, creator, and attributes.'\n ),\n })\n).withRender({\n fieldType: 'object',\n ui: {\n label: 'Inscribe Hashinal NFT',\n description: 'Create a Hashinal inscription for NFT minting',\n },\n});\n\n/**\n * Tool for inscribing Hashinal NFTs\n */\nexport class InscribeHashinalTool\n extends BaseInscriberQueryTool\n implements FormValidatable\n{\n name = 'inscribeHashinal';\n description =\n 'Tool for inscribing Hashinal NFTs. CRITICAL: When user provides content (url/contentRef/base64Data), call with ONLY the content parameters - DO NOT auto-generate name, description, creator, or attributes. A form will be automatically shown to collect metadata from the user. Only include metadata parameters if the user explicitly provided them in their message.';\n\n getEntityResolutionPreferences(): Record<string, string> {\n return {\n name: 'literal',\n description: 'literal',\n creator: 'literal',\n attributes: 'literal',\n properties: 'literal',\n };\n }\n\n get specificInputSchema(): z.ZodObject<z.ZodRawShape> {\n const baseSchema =\n (inscribeHashinalSchema as z.ZodType & { _def?: { schema?: z.ZodType } })\n ._def?.schema || inscribeHashinalSchema;\n return baseSchema as z.ZodObject<z.ZodRawShape>;\n }\n\n private _schemaWithRenderConfig?: z.ZodObject<z.ZodRawShape>;\n\n override get schema(): z.ZodObject<z.ZodRawShape> {\n if (!this._schemaWithRenderConfig) {\n const baseSchema = this.specificInputSchema;\n const schemaWithRender = baseSchema as z.ZodObject<z.ZodRawShape> & {\n _renderConfig?: {\n fieldType: string;\n ui: { label: string; description: string };\n };\n };\n\n if (!schemaWithRender._renderConfig) {\n schemaWithRender._renderConfig = {\n fieldType: 'object',\n ui: {\n label: 'Inscribe Hashinal NFT',\n description: 'Create a Hashinal inscription for NFT minting',\n },\n };\n }\n this._schemaWithRenderConfig = baseSchema;\n }\n return this._schemaWithRenderConfig;\n }\n\n /**\n * Implementation of FormValidatable interface\n * Determines if a form should be generated for the given input\n */\n shouldGenerateForm(input: unknown): boolean {\n const logger = new Logger({ module: 'InscribeHashinalTool' });\n const inputObj = input as Record<string, unknown>;\n\n logger.info('InscribeHashinalTool: Checking if form should be generated', {\n inputKeys: Object.keys(inputObj || {}),\n hasContent: !!(\n inputObj.url ||\n inputObj.contentRef ||\n inputObj.base64Data\n ),\n renderFormProvided: 'renderForm' in inputObj,\n renderFormValue: inputObj.renderForm,\n });\n\n const hasContentSource = !!(\n inputObj.url ||\n inputObj.contentRef ||\n inputObj.base64Data\n );\n\n if (!hasContentSource) {\n logger.info('InscribeHashinalTool: No content source provided');\n return false;\n }\n\n if ('renderForm' in inputObj && inputObj.renderForm === false) {\n logger.info(\n 'InscribeHashinalTool: renderForm=false, skipping form generation'\n );\n return false;\n }\n\n const isNonEmptyString = (v: unknown): v is string => {\n if (typeof v !== 'string') {\n return false;\n }\n if (v.trim().length === 0) {\n return false;\n }\n return true;\n };\n\n const hasRequiredMetadata =\n isNonEmptyString(inputObj.name) &&\n isNonEmptyString(inputObj.description) &&\n isNonEmptyString(inputObj.creator);\n\n if (hasRequiredMetadata) {\n logger.info(\n 'InscribeHashinalTool: Required metadata present, skipping form generation'\n );\n return false;\n }\n\n logger.info(\n 'InscribeHashinalTool: Content provided, showing form for metadata collection'\n );\n return true;\n }\n\n /**\n * Implementation of FormValidatable interface\n * Returns the focused schema for form generation\n */\n getFormSchema(): z.ZodObject<z.ZodRawShape> {\n const focusedSchema = extendZodSchema(\n z.object({\n name: z\n .string()\n .min(1, 'Name is required')\n .describe(\n 'Display name for the NFT (e.g., \"Sunset Landscape #42\", \"Digital Abstract Art\")'\n ),\n\n description: z\n .string()\n .min(1, 'Description is required')\n .describe(\n 'Meaningful description of the artwork, story, or concept behind this NFT'\n ),\n\n creator: z\n .string()\n .min(1, 'Creator is required')\n .describe(\n 'Creator account ID, artist name, or brand (e.g., \"0.0.123456\", \"ArtistName\", \"StudioBrand\")'\n ),\n\n attributes: extendZodSchema(\n z.array(\n z.object({\n trait_type: z\n .string()\n .describe('Trait name (e.g., \"Rarity\", \"Color\", \"Style\")'),\n value: z\n .union([z.string(), z.number()])\n .describe('Trait value (e.g., \"Epic\", \"Blue\", 85)'),\n })\n )\n )\n .withRender(renderConfigs.array('NFT Attributes', 'Attribute'))\n .optional()\n .describe('Collectible traits and characteristics.'),\n\n type: z\n .string()\n .optional()\n .describe(\n 'Category or genre of the NFT (e.g., \"Digital Art\", \"Photography\", \"Collectible Card)'\n ),\n })\n ).withRender({\n fieldType: 'object',\n ui: {\n label: 'Complete NFT Metadata',\n description: 'Provide meaningful metadata to create a valuable NFT',\n },\n });\n\n return focusedSchema as unknown as z.ZodObject<z.ZodRawShape>;\n }\n\n protected async executeQuery(\n params: z.infer<typeof inscribeHashinalSchema>,\n _runManager?: CallbackManagerForToolRun\n ): Promise<InscriptionResponse> {\n if (!params.url && !params.contentRef && !params.base64Data) {\n return createInscriptionError({\n code: 'MISSING_CONTENT',\n details: 'No content source provided',\n suggestions: [\n 'Provide a URL to content you want to inscribe',\n 'Upload a file and use the content reference',\n 'Provide base64-encoded content data',\n ],\n });\n }\n\n const operatorAccount =\n this.inscriberBuilder[\n 'hederaKit'\n ]?.client?.operatorAccountId?.toString() || '0.0.unknown';\n\n const rawMetadata = {\n ...generateDefaultMetadata({\n name: params.name,\n creator: params.creator,\n description: params.description,\n type: params.type,\n fileName: params.fileName,\n mimeType: params.mimeType,\n operatorAccount,\n }),\n attributes: Array.isArray(params.attributes) ? params.attributes : [],\n properties:\n (params.properties as Record<string, unknown> | undefined) || {},\n };\n\n let validatedMetadata;\n try {\n validatedMetadata = validateHIP412Metadata(rawMetadata);\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n return createInscriptionError({\n code: 'METADATA_VALIDATION_FAILED',\n details: `Metadata validation error: ${errorMessage}`,\n suggestions: [\n 'Ensure all required metadata fields are provided',\n 'Check that attribute values are valid',\n 'Verify metadata follows HIP-412 standard',\n ],\n });\n }\n\n const options: InscriptionOptions = {\n mode: 'hashinal',\n metadata: validatedMetadata,\n jsonFileURL: params.jsonFileURL,\n fileStandard: params.fileStandard,\n tags: params.tags,\n chunkSize: params.chunkSize,\n waitForConfirmation: params.quoteOnly\n ? false\n : params.waitForConfirmation ?? true,\n waitMaxAttempts: 60,\n waitIntervalMs: 5000,\n network: this.inscriberBuilder['hederaKit'].client.network\n .toString()\n .includes('mainnet')\n ? 'mainnet'\n : 'testnet',\n quoteOnly: params.quoteOnly,\n };\n\n let inscriptionData: InscriptionInput;\n\n if (params.url) {\n inscriptionData = { type: 'url', url: params.url };\n } else if (params.contentRef || params.base64Data) {\n const inputData = params.contentRef || params.base64Data || '';\n const { buffer, mimeType, fileName } = await this.resolveContent(\n inputData,\n params.mimeType,\n params.fileName\n );\n\n inscriptionData = {\n type: 'buffer' as const,\n buffer,\n fileName: fileName || params.fileName || 'hashinal-content',\n mimeType: mimeType || params.mimeType,\n };\n } else {\n throw new Error('No valid input data provided for inscription');\n }\n\n if (params.quoteOnly) {\n try {\n const quote = await this.generateInscriptionQuote(\n inscriptionData,\n options\n );\n\n return createInscriptionQuote({\n totalCostHbar: quote.totalCostHbar,\n validUntil: quote.validUntil,\n breakdown: quote.breakdown,\n content: {\n name: params.name,\n creator: params.creator,\n type: params.type,\n },\n });\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to generate inscription quote';\n return createInscriptionError({\n code: 'QUOTE_GENERATION_FAILED',\n details: `Quote generation failed: ${errorMessage}`,\n suggestions: [\n 'Check network connectivity',\n 'Verify content is accessible',\n 'Try again in a moment',\n ],\n });\n }\n }\n\n try {\n let result: Awaited<ReturnType<typeof this.inscriberBuilder.inscribe>>;\n\n if (params.timeoutMs) {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(\n () =>\n reject(\n new Error(`Inscription timed out after ${params.timeoutMs}ms`)\n ),\n params.timeoutMs\n );\n });\n\n result = await Promise.race([\n this.inscriberBuilder.inscribeAuto\n ? this.inscriberBuilder.inscribeAuto(inscriptionData, options)\n : this.inscriberBuilder.inscribe(inscriptionData, options),\n timeoutPromise,\n ]);\n } else {\n result = this.inscriberBuilder.inscribeAuto\n ? await this.inscriberBuilder.inscribeAuto(inscriptionData, options)\n : await this.inscriberBuilder.inscribe(inscriptionData, options);\n }\n\n if (result.confirmed && !result.quote) {\n const ids = extractTopicIds(result.inscription, result.result);\n const network = (options.network || 'testnet') as 'mainnet' | 'testnet';\n const fileStandard = params.fileStandard || '1';\n const { hrl, topicId, cdnUrl } = buildInscriptionLinks(\n ids,\n network,\n fileStandard\n );\n\n const txId =\n (result.result as InscriptionResult)?.transactionId ?? 'unknown';\n const successResponse = createInscriptionSuccess({\n hrl: hrl || 'hcs://1/unknown',\n topicId: topicId || 'unknown',\n jsonTopicId: ids.jsonTopicId,\n standard: fileStandard === '6' ? 'Dynamic' : 'Static',\n cdnUrl,\n transactionId: txId,\n metadata: {\n name: params.name,\n creator: params.creator,\n description: params.description,\n type: params.type,\n attributes: Array.isArray(params.attributes)\n ? params.attributes\n : [],\n },\n });\n\n if (params.withHashLinkBlocks !== false) {\n try {\n const block = await this.createHashLinkBlock(successResponse);\n successResponse.hashLinkBlock = block;\n } catch (e) {\n const logger = new Logger({ module: 'InscribeHashinalTool' });\n logger.warn('Failed to create HashLink block', e);\n }\n }\n\n return successResponse;\n } else if (!result.quote && !result.confirmed) {\n const txId =\n (result.result as InscriptionResult)?.transactionId ?? 'unknown';\n return createInscriptionPending({\n transactionId: txId,\n details:\n 'Successfully submitted Hashinal inscription. Waiting for network confirmation...',\n });\n } else {\n return createInscriptionError({\n code: 'UNEXPECTED_RESULT',\n details: 'Received an unexpected inscription result state',\n suggestions: ['Try again or verify network status'],\n });\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to inscribe Hashinal NFT';\n throw new Error(`Inscription failed: ${errorMessage}`);\n }\n }\n\n /**\n * Creates HashLink block configuration for Hashinal inscriptions.\n * Automatically detects network and selects appropriate block ID configuration.\n * Uses testnet block as fallback for unknown networks or undeployed mainnet blocks.\n *\n * @param response The inscription response containing metadata and network information\n * @param _mimeType Optional MIME type (currently unused, preserved for compatibility)\n * @returns HCS12BlockResult with network-specific block configuration\n *\n * @example\n * ```typescript\n * // Testnet usage (automatic detection from client)\n * const testnetClient = Client.forTestnet();\n * const tool = new InscribeHashinalTool(testnetClient);\n * const block = await tool.createHashLinkBlock(inscriptionResponse);\n * const id = block.blockId; // '0.0.6617393'\n * const link = block.hashLink; // 'hcs://12/0.0.6617393'\n *\n * // Mainnet usage (automatic detection from client)\n * const mainnetClient = Client.forMainnet();\n * const tool = new InscribeHashinalTool(mainnetClient);\n * const block = await tool.createHashLinkBlock(inscriptionResponse);\n * const mainnetId = block.blockId; // Network-specific mainnet block ID\n *\n * // HashLink Block Response Structure:\n * {\n * blockId: string; // Hedera account ID format (e.g., '0.0.6617393')\n * hashLink: string; // HCS-12 URL format: 'hcs://12/{blockId}'\n * template: string; // Block template reference matching blockId\n * attributes: { // Metadata for client-side processing\n * name: string; // Content display name\n * creator: string; // Creator account ID\n * topicId: string; // HCS topic containing the inscription\n * hrl: string; // Hedera Resource Locator\n * network: string; // Network type: 'testnet' | 'mainnet'\n * }\n * }\n *\n * // Render function usage in HashLink blocks:\n * // The block's JavaScript render function receives this structure\n * // and can access network-specific resources through attributes.network\n * ```\n */\n private async createHashLinkBlock(\n response: ReturnType<typeof createInscriptionSuccess>,\n _mimeType?: string\n ): Promise<{\n blockId: string;\n hashLink: string;\n template: string;\n attributes: Record<string, unknown>;\n }> {\n const clientNetwork = this.inscriberBuilder['hederaKit'].client.network\n .toString()\n .includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n const cdnNetwork = response.inscription.cdnUrl?.includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n if (clientNetwork !== cdnNetwork) {\n const logger = new Logger({ module: 'InscribeHashinalTool' });\n logger.warn(\n `Network mismatch detected: client=${clientNetwork}, cdn=${cdnNetwork}. Using client network.`\n );\n }\n\n const network = clientNetwork;\n const config = getHashLinkBlockId(network);\n\n return {\n blockId: config.blockId,\n hashLink: config.hashLink,\n template: config.template,\n attributes: {\n name: response.metadata.name || 'Untitled Content',\n creator: response.metadata.creator || '',\n topicId: response.inscription.topicId,\n jsonTopicId: response.inscription.jsonTopicId || response.jsonTopicId,\n hrl: response.inscription.hrl,\n network: network,\n },\n };\n }\n\n private async resolveContent(\n input: string,\n providedMimeType?: string,\n providedFileName?: string\n ): Promise<{\n buffer: Buffer;\n mimeType?: string;\n fileName?: string;\n wasReference?: boolean;\n }> {\n const trimmedInput = input.trim();\n\n const resolver =\n this.getContentResolver() || ContentResolverRegistry.getResolver();\n\n if (!resolver) {\n return this.handleDirectContent(\n trimmedInput,\n providedMimeType,\n providedFileName\n );\n }\n\n const referenceId = resolver.extractReferenceId(trimmedInput);\n\n if (referenceId) {\n try {\n const resolution = await resolver.resolveReference(referenceId);\n\n return {\n buffer: resolution.content,\n mimeType: resolution.metadata?.mimeType || providedMimeType,\n fileName: resolution.metadata?.fileName || providedFileName,\n wasReference: true,\n };\n } catch (error) {\n const errorMsg =\n error instanceof Error\n ? error.message\n : 'Unknown error resolving reference';\n throw new Error(`Reference resolution failed: ${errorMsg}`);\n }\n }\n\n return this.handleDirectContent(\n trimmedInput,\n providedMimeType,\n providedFileName\n );\n }\n\n private handleDirectContent(\n input: string,\n providedMimeType?: string,\n providedFileName?: string\n ): {\n buffer: Buffer;\n mimeType?: string;\n fileName?: string;\n wasReference?: boolean;\n } {\n const isValidBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(input);\n\n if (isValidBase64) {\n try {\n const buffer = Buffer.from(input, 'base64');\n return {\n buffer,\n mimeType: providedMimeType,\n fileName: providedFileName,\n wasReference: false,\n };\n } catch (error) {\n throw new Error(\n 'Failed to decode base64 data. Please ensure the data is properly encoded.'\n );\n }\n }\n\n const buffer = Buffer.from(input, 'utf8');\n return {\n buffer,\n mimeType: providedMimeType || 'text/plain',\n fileName: providedFileName,\n wasReference: false,\n };\n }\n\n /**\n * Implementation of FormValidatable interface\n * Returns essential fields that should always be shown in forms\n */\n getEssentialFields(): string[] {\n return ['name', 'description', 'creator', 'attributes'];\n }\n\n /**\n * Implementation of FormValidatable interface\n * Determines if a field value should be considered empty for this tool\n */\n isFieldEmpty(fieldName: string, value: unknown): boolean {\n if (value === undefined || value === null || value === '') {\n return true;\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n if (fieldName === 'attributes' && Array.isArray(value)) {\n return value.every(\n (attr) =>\n !attr ||\n (typeof attr === 'object' && (!attr.trait_type || !attr.value))\n );\n }\n\n return false;\n }\n}\n"],"names":["buffer"],"mappings":"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"}
1
+ {"version":3,"file":"standards-agent-kit.es39.js","sources":["../../src/tools/inscriber/InscribeHashinalTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseInscriberQueryTool } from './base-inscriber-tools';\nimport {\n InscriptionOptions,\n InscriptionInput,\n ContentResolverRegistry,\n Logger,\n InscriptionResult,\n} from '@hashgraphonline/standards-sdk';\nimport { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';\nimport { validateHIP412Metadata } from '../../validation/hip412-schemas';\nimport { contentRefSchema } from '../../validation/content-ref-schemas';\nimport { generateDefaultMetadata } from '../../utils/metadata-defaults';\nimport {\n extendZodSchema,\n renderConfigs,\n} from '../../lib/zod-render/schema-extension';\nimport {\n createInscriptionSuccess,\n createInscriptionQuote,\n createInscriptionError,\n createInscriptionPending,\n InscriptionResponse,\n} from '../../types/inscription-response';\nimport { FormValidatable } from '../../interfaces/FormValidatable';\nimport {\n extractTopicIds,\n buildInscriptionLinks,\n} from '../../utils/inscription-utils';\n\n/**\n * Network-specific Hashinal block configuration for HashLink blocks\n */\nconst HASHLINK_BLOCK_CONFIG = {\n testnet: {\n blockId: '0.0.6617393',\n hashLink: 'hcs://12/0.0.6617393',\n template: '0.0.6617393',\n },\n mainnet: {\n blockId: '0.0.TBD',\n hashLink: 'hcs://12/0.0.TBD',\n template: '0.0.TBD',\n },\n};\n\n/**\n * Gets the appropriate HashLink block configuration for the specified network.\n * Provides graceful fallback to testnet for unknown networks or undeployed mainnet blocks.\n *\n * @param network The network type to get configuration for\n * @returns Network-specific block configuration with blockId, hashLink, and template\n */\nfunction getHashLinkBlockId(network: 'mainnet' | 'testnet'): {\n blockId: string;\n hashLink: string;\n template: string;\n} {\n const config =\n network === 'mainnet'\n ? HASHLINK_BLOCK_CONFIG.mainnet\n : HASHLINK_BLOCK_CONFIG.testnet;\n if (!config || config.blockId === '0.0.TBD') {\n return HASHLINK_BLOCK_CONFIG.testnet;\n }\n return config;\n}\n\n/**\n * Schema for inscribing Hashinal NFT\n */\nconst inscribeHashinalSchema = extendZodSchema(\n z.object({\n url: z\n .string()\n .optional()\n .describe(\n 'The URL of the content to inscribe as Hashinal NFT (use this OR contentRef)'\n ),\n contentRef: contentRefSchema\n .optional()\n .describe(\n 'Content reference ID in format \"content-ref:[id]\" for already stored content (use this OR url)'\n ),\n base64Data: z\n .string()\n .optional()\n .describe(\n 'Base64 encoded content data (use this if neither url nor contentRef provided)'\n ),\n fileName: z\n .string()\n .optional()\n .describe(\n 'File name for the content (required when using base64Data or contentRef)'\n ),\n mimeType: z\n .string()\n .optional()\n .describe('MIME type of the content (e.g., \"image/png\", \"image/jpeg\")'),\n name: z\n .string()\n .optional()\n .describe(\n 'Display name for the NFT (e.g., \"Sunset Landscape #42\", \"Digital Abstract Art\")'\n ),\n creator: z\n .string()\n .optional()\n .describe(\n 'Creator account ID, artist name, or brand (e.g., \"0.0.123456\", \"ArtistName\", \"StudioBrand\")'\n ),\n description: z\n .string()\n .optional()\n .describe(\n 'Meaningful description of the artwork, story, or concept behind this NFT'\n ),\n type: z\n .string()\n .optional()\n .describe(\n 'Category or genre of the NFT (e.g., \"Digital Art\", \"Photography\", \"Collectible Card\")'\n ),\n attributes: extendZodSchema(\n z.array(\n z.object({\n trait_type: z.string(),\n value: z.union([z.string(), z.number()]),\n })\n )\n )\n .withRender(renderConfigs.array('NFT Attributes', 'Attribute'))\n .optional()\n .describe(\n 'Collectible traits and characteristics (e.g., \"Rarity\": \"Epic\", \"Color\": \"Blue\", \"Style\": \"Abstract\")'\n ),\n properties: z\n .record(z.unknown())\n .optional()\n .describe('Additional properties'),\n jsonFileURL: z\n .string()\n .url()\n .optional()\n .describe('URL to JSON metadata file'),\n fileStandard: z\n .enum(['1', '6'])\n .optional()\n .default('1')\n .describe(\n 'HCS file standard: 1 for static Hashinals (HCS-5), 6 for dynamic Hashinals (HCS-6)'\n ),\n tags: z.array(z.string()).optional().describe('Tags to categorize the NFT'),\n chunkSize: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Chunk size for large files'),\n waitForConfirmation: z\n .boolean()\n .optional()\n .describe('Whether to wait for inscription confirmation'),\n timeoutMs: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Timeout in milliseconds for inscription (default: no timeout - waits until completion)'\n ),\n quoteOnly: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'If true, returns a cost quote instead of executing the inscription'\n ),\n withHashLinkBlocks: z\n .boolean()\n .optional()\n .default(true)\n .describe(\n 'If true, creates interactive HashLink blocks for the inscribed content and returns block data alongside the inscription response'\n ),\n renderForm: z\n .boolean()\n .optional()\n .default(true)\n .describe(\n 'Whether to show a form to collect metadata. Set to false only if user provided complete metadata including name, description, creator, and attributes.'\n ),\n })\n).withRender({\n fieldType: 'object',\n ui: {\n label: 'Inscribe Hashinal NFT',\n description: 'Create a Hashinal inscription for NFT minting',\n },\n});\n\n/**\n * Tool for inscribing Hashinal NFTs\n */\nexport class InscribeHashinalTool\n extends BaseInscriberQueryTool\n implements FormValidatable\n{\n name = 'inscribeHashinal';\n description =\n 'Tool for inscribing Hashinal NFTs. CRITICAL: When user provides content (url/contentRef/base64Data), call with ONLY the content parameters - DO NOT auto-generate name, description, creator, or attributes. A form will be automatically shown to collect metadata from the user. Only include metadata parameters if the user explicitly provided them in their message.';\n\n getEntityResolutionPreferences(): Record<string, string> {\n return {\n name: 'literal',\n description: 'literal',\n creator: 'literal',\n attributes: 'literal',\n properties: 'literal',\n };\n }\n\n get specificInputSchema(): z.ZodObject<z.ZodRawShape> {\n const baseSchema =\n (inscribeHashinalSchema as z.ZodType & { _def?: { schema?: z.ZodType } })\n ._def?.schema || inscribeHashinalSchema;\n return baseSchema as z.ZodObject<z.ZodRawShape>;\n }\n\n private _schemaWithRenderConfig?: z.ZodObject<z.ZodRawShape>;\n\n override get schema(): z.ZodObject<z.ZodRawShape> {\n if (!this._schemaWithRenderConfig) {\n const baseSchema = this.specificInputSchema;\n const schemaWithRender = baseSchema as z.ZodObject<z.ZodRawShape> & {\n _renderConfig?: {\n fieldType: string;\n ui: { label: string; description: string };\n };\n };\n\n if (!schemaWithRender._renderConfig) {\n schemaWithRender._renderConfig = {\n fieldType: 'object',\n ui: {\n label: 'Inscribe Hashinal NFT',\n description: 'Create a Hashinal inscription for NFT minting',\n },\n };\n }\n this._schemaWithRenderConfig = baseSchema;\n }\n return this._schemaWithRenderConfig;\n }\n\n /**\n * Implementation of FormValidatable interface\n * Determines if a form should be generated for the given input\n */\n shouldGenerateForm(input: unknown): boolean {\n const logger = new Logger({ module: 'InscribeHashinalTool' });\n const inputObj = input as Record<string, unknown>;\n\n logger.info('InscribeHashinalTool: Checking if form should be generated', {\n inputKeys: Object.keys(inputObj || {}),\n hasContent: !!(\n inputObj.url ||\n inputObj.contentRef ||\n inputObj.base64Data\n ),\n renderFormProvided: 'renderForm' in inputObj,\n renderFormValue: inputObj.renderForm,\n });\n\n const hasContentSource = !!(\n inputObj.url ||\n inputObj.contentRef ||\n inputObj.base64Data\n );\n\n if (!hasContentSource) {\n logger.info('InscribeHashinalTool: No content source provided');\n return false;\n }\n\n if ('renderForm' in inputObj && inputObj.renderForm === false) {\n logger.info(\n 'InscribeHashinalTool: renderForm=false, skipping form generation'\n );\n return false;\n }\n\n const isNonEmptyString = (v: unknown): v is string => {\n if (typeof v !== 'string') {\n return false;\n }\n if (v.trim().length === 0) {\n return false;\n }\n return true;\n };\n\n const hasRequiredMetadata =\n isNonEmptyString(inputObj.name) &&\n isNonEmptyString(inputObj.description) &&\n isNonEmptyString(inputObj.creator);\n\n if (hasRequiredMetadata) {\n logger.info(\n 'InscribeHashinalTool: Required metadata present, skipping form generation'\n );\n return false;\n }\n\n logger.info(\n 'InscribeHashinalTool: Content provided, showing form for metadata collection'\n );\n return true;\n }\n\n /**\n * Implementation of FormValidatable interface\n * Returns the focused schema for form generation\n */\n getFormSchema(): z.ZodObject<z.ZodRawShape> {\n const focusedSchema = extendZodSchema(\n z.object({\n name: z\n .string()\n .min(1, 'Name is required')\n .describe(\n 'Display name for the NFT (e.g., \"Sunset Landscape #42\", \"Digital Abstract Art\")'\n ),\n\n description: z\n .string()\n .min(1, 'Description is required')\n .describe(\n 'Meaningful description of the artwork, story, or concept behind this NFT'\n ),\n\n creator: z\n .string()\n .min(1, 'Creator is required')\n .describe(\n 'Creator account ID, artist name, or brand (e.g., \"0.0.123456\", \"ArtistName\", \"StudioBrand\")'\n ),\n\n attributes: extendZodSchema(\n z.array(\n z.object({\n trait_type: z\n .string()\n .describe('Trait name (e.g., \"Rarity\", \"Color\", \"Style\")'),\n value: z\n .union([z.string(), z.number()])\n .describe('Trait value (e.g., \"Epic\", \"Blue\", 85)'),\n })\n )\n )\n .withRender(renderConfigs.array('NFT Attributes', 'Attribute'))\n .optional()\n .describe('Collectible traits and characteristics.'),\n\n type: z\n .string()\n .optional()\n .describe(\n 'Category or genre of the NFT (e.g., \"Digital Art\", \"Photography\", \"Collectible Card)'\n ),\n })\n ).withRender({\n fieldType: 'object',\n ui: {\n label: 'Complete NFT Metadata',\n description: 'Provide meaningful metadata to create a valuable NFT',\n },\n });\n\n return focusedSchema as unknown as z.ZodObject<z.ZodRawShape>;\n }\n\n protected async executeQuery(\n params: z.infer<typeof inscribeHashinalSchema>,\n _runManager?: CallbackManagerForToolRun\n ): Promise<InscriptionResponse> {\n if (!params.url && !params.contentRef && !params.base64Data) {\n return createInscriptionError({\n code: 'MISSING_CONTENT',\n details: 'No content source provided',\n suggestions: [\n 'Provide a URL to content you want to inscribe',\n 'Upload a file and use the content reference',\n 'Provide base64-encoded content data',\n ],\n });\n }\n\n const operatorAccount =\n this.inscriberBuilder[\n 'hederaKit'\n ]?.client?.operatorAccountId?.toString() || '0.0.unknown';\n\n const rawMetadata = {\n ...generateDefaultMetadata({\n name: params.name,\n creator: params.creator,\n description: params.description,\n type: params.type,\n fileName: params.fileName,\n mimeType: params.mimeType,\n operatorAccount,\n }),\n attributes: Array.isArray(params.attributes) ? params.attributes : [],\n properties:\n (params.properties as Record<string, unknown> | undefined) || {},\n };\n\n let validatedMetadata;\n try {\n validatedMetadata = validateHIP412Metadata(rawMetadata);\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n return createInscriptionError({\n code: 'METADATA_VALIDATION_FAILED',\n details: `Metadata validation error: ${errorMessage}`,\n suggestions: [\n 'Ensure all required metadata fields are provided',\n 'Check that attribute values are valid',\n 'Verify metadata follows HIP-412 standard',\n ],\n });\n }\n\n const options: InscriptionOptions = {\n mode: 'hashinal',\n metadata: validatedMetadata,\n jsonFileURL: params.jsonFileURL,\n fileStandard: params.fileStandard,\n tags: params.tags,\n chunkSize: params.chunkSize,\n waitForConfirmation: params.quoteOnly\n ? false\n : params.waitForConfirmation ?? true,\n waitMaxAttempts: 60,\n waitIntervalMs: 5000,\n network: this.inscriberBuilder['hederaKit'].client.network\n .toString()\n .includes('mainnet')\n ? 'mainnet'\n : 'testnet',\n quoteOnly: params.quoteOnly,\n };\n\n let inscriptionData: InscriptionInput;\n\n if (params.url) {\n inscriptionData = { type: 'url', url: params.url };\n } else if (params.contentRef || params.base64Data) {\n const inputData = params.contentRef || params.base64Data || '';\n const { buffer, mimeType, fileName } = await this.resolveContent(\n inputData,\n params.mimeType,\n params.fileName\n );\n\n inscriptionData = {\n type: 'buffer' as const,\n buffer,\n fileName: fileName || params.fileName || 'hashinal-content',\n mimeType: mimeType || params.mimeType,\n };\n } else {\n throw new Error('No valid input data provided for inscription');\n }\n\n if (params.quoteOnly) {\n try {\n const quote = await this.generateInscriptionQuote(\n inscriptionData,\n options\n );\n\n return createInscriptionQuote({\n totalCostHbar: quote.totalCostHbar,\n validUntil: quote.validUntil,\n breakdown: quote.breakdown,\n content: {\n name: params.name,\n creator: params.creator,\n type: params.type,\n },\n });\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to generate inscription quote';\n return createInscriptionError({\n code: 'QUOTE_GENERATION_FAILED',\n details: `Quote generation failed: ${errorMessage}`,\n suggestions: [\n 'Check network connectivity',\n 'Verify content is accessible',\n 'Try again in a moment',\n ],\n });\n }\n }\n\n try {\n let result: Awaited<ReturnType<typeof this.inscriberBuilder.inscribe>>;\n\n if (params.timeoutMs) {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(\n () =>\n reject(\n new Error(`Inscription timed out after ${params.timeoutMs}ms`)\n ),\n params.timeoutMs\n );\n });\n\n result = await Promise.race([\n this.inscriberBuilder.inscribeAuto\n ? this.inscriberBuilder.inscribeAuto(inscriptionData, options)\n : this.inscriberBuilder.inscribe(inscriptionData, options),\n timeoutPromise,\n ]);\n } else {\n result = this.inscriberBuilder.inscribeAuto\n ? await this.inscriberBuilder.inscribeAuto(inscriptionData, options)\n : await this.inscriberBuilder.inscribe(inscriptionData, options);\n }\n\n if (result.confirmed && !result.quote) {\n const ids = extractTopicIds(result.inscription, result.result);\n const network = (options.network || 'testnet') as 'mainnet' | 'testnet';\n const fileStandard = params.fileStandard || '1';\n const { hrl, topicId, cdnUrl } = buildInscriptionLinks(\n ids,\n network,\n fileStandard\n );\n\n const txId = result?.inscription?.tx_id ?? 'unknown';\n const successResponse = createInscriptionSuccess({\n hrl: hrl || 'hcs://1/unknown',\n topicId: topicId || 'unknown',\n standard: fileStandard === '6' ? 'Dynamic' : 'Static',\n cdnUrl,\n transactionId: txId,\n metadata: {\n name: params.name,\n creator: params.creator,\n description: params.description,\n type: params.type,\n attributes: Array.isArray(params.attributes)\n ? params.attributes\n : [],\n },\n });\n\n if (params.withHashLinkBlocks !== false) {\n try {\n const block = await this.createHashLinkBlock(successResponse);\n successResponse.hashLinkBlock = block;\n } catch (e) {\n const logger = new Logger({ module: 'InscribeHashinalTool' });\n logger.warn('Failed to create HashLink block', e);\n }\n }\n\n return successResponse;\n } else if (!result.quote && !result.confirmed) {\n const txId =\n (result.result as InscriptionResult)?.transactionId ?? 'unknown';\n return createInscriptionPending({\n transactionId: txId,\n details:\n 'Successfully submitted Hashinal inscription. Waiting for network confirmation...',\n });\n } else {\n return createInscriptionError({\n code: 'UNEXPECTED_RESULT',\n details: 'Received an unexpected inscription result state',\n suggestions: ['Try again or verify network status'],\n });\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to inscribe Hashinal NFT';\n throw new Error(`Inscription failed: ${errorMessage}`);\n }\n }\n\n /**\n * Creates HashLink block configuration for Hashinal inscriptions.\n * Automatically detects network and selects appropriate block ID configuration.\n * Uses testnet block as fallback for unknown networks or undeployed mainnet blocks.\n *\n * @param response The inscription response containing metadata and network information\n * @param _mimeType Optional MIME type (currently unused, preserved for compatibility)\n * @returns HCS12BlockResult with network-specific block configuration\n *\n * @example\n * ```typescript\n * // Testnet usage (automatic detection from client)\n * const testnetClient = Client.forTestnet();\n * const tool = new InscribeHashinalTool(testnetClient);\n * const block = await tool.createHashLinkBlock(inscriptionResponse);\n * const id = block.blockId; // '0.0.6617393'\n * const link = block.hashLink; // 'hcs://12/0.0.6617393'\n *\n * // Mainnet usage (automatic detection from client)\n * const mainnetClient = Client.forMainnet();\n * const tool = new InscribeHashinalTool(mainnetClient);\n * const block = await tool.createHashLinkBlock(inscriptionResponse);\n * const mainnetId = block.blockId; // Network-specific mainnet block ID\n *\n * // HashLink Block Response Structure:\n * {\n * blockId: string; // Hedera account ID format (e.g., '0.0.6617393')\n * hashLink: string; // HCS-12 URL format: 'hcs://12/{blockId}'\n * template: string; // Block template reference matching blockId\n * attributes: { // Metadata for client-side processing\n * name: string; // Content display name\n * creator: string; // Creator account ID\n * topicId: string; // HCS topic containing the inscription\n * hrl: string; // Hedera Resource Locator\n * network: string; // Network type: 'testnet' | 'mainnet'\n * }\n * }\n *\n * // Render function usage in HashLink blocks:\n * // The block's JavaScript render function receives this structure\n * // and can access network-specific resources through attributes.network\n * ```\n */\n private async createHashLinkBlock(\n response: ReturnType<typeof createInscriptionSuccess>,\n _mimeType?: string\n ): Promise<{\n blockId: string;\n hashLink: string;\n template: string;\n attributes: Record<string, unknown>;\n }> {\n const clientNetwork = this.inscriberBuilder['hederaKit'].client.network\n .toString()\n .includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n const cdnNetwork = response.inscription.cdnUrl?.includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n if (clientNetwork !== cdnNetwork) {\n const logger = new Logger({ module: 'InscribeHashinalTool' });\n logger.warn(\n `Network mismatch detected: client=${clientNetwork}, cdn=${cdnNetwork}. Using client network.`\n );\n }\n\n const network = clientNetwork;\n const config = getHashLinkBlockId(network);\n\n return {\n blockId: config.blockId,\n hashLink: config.hashLink,\n template: config.template,\n attributes: {\n name: response.metadata.name || 'Untitled Content',\n creator: response.metadata.creator || '',\n topicId: response.inscription.topicId,\n hrl: response.inscription.hrl,\n network: network,\n },\n };\n }\n\n private async resolveContent(\n input: string,\n providedMimeType?: string,\n providedFileName?: string\n ): Promise<{\n buffer: Buffer;\n mimeType?: string;\n fileName?: string;\n wasReference?: boolean;\n }> {\n const trimmedInput = input.trim();\n\n const resolver =\n this.getContentResolver() || ContentResolverRegistry.getResolver();\n\n if (!resolver) {\n return this.handleDirectContent(\n trimmedInput,\n providedMimeType,\n providedFileName\n );\n }\n\n const referenceId = resolver.extractReferenceId(trimmedInput);\n\n if (referenceId) {\n try {\n const resolution = await resolver.resolveReference(referenceId);\n\n return {\n buffer: resolution.content,\n mimeType: resolution.metadata?.mimeType || providedMimeType,\n fileName: resolution.metadata?.fileName || providedFileName,\n wasReference: true,\n };\n } catch (error) {\n const errorMsg =\n error instanceof Error\n ? error.message\n : 'Unknown error resolving reference';\n throw new Error(`Reference resolution failed: ${errorMsg}`);\n }\n }\n\n return this.handleDirectContent(\n trimmedInput,\n providedMimeType,\n providedFileName\n );\n }\n\n private handleDirectContent(\n input: string,\n providedMimeType?: string,\n providedFileName?: string\n ): {\n buffer: Buffer;\n mimeType?: string;\n fileName?: string;\n wasReference?: boolean;\n } {\n const isValidBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(input);\n\n if (isValidBase64) {\n try {\n const buffer = Buffer.from(input, 'base64');\n return {\n buffer,\n mimeType: providedMimeType,\n fileName: providedFileName,\n wasReference: false,\n };\n } catch (error) {\n throw new Error(\n 'Failed to decode base64 data. Please ensure the data is properly encoded.'\n );\n }\n }\n\n const buffer = Buffer.from(input, 'utf8');\n return {\n buffer,\n mimeType: providedMimeType || 'text/plain',\n fileName: providedFileName,\n wasReference: false,\n };\n }\n\n /**\n * Implementation of FormValidatable interface\n * Returns essential fields that should always be shown in forms\n */\n getEssentialFields(): string[] {\n return ['name', 'description', 'creator', 'attributes'];\n }\n\n /**\n * Implementation of FormValidatable interface\n * Determines if a field value should be considered empty for this tool\n */\n isFieldEmpty(fieldName: string, value: unknown): boolean {\n if (value === undefined || value === null || value === '') {\n return true;\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n if (fieldName === 'attributes' && Array.isArray(value)) {\n return value.every(\n (attr) =>\n !attr ||\n (typeof attr === 'object' && (!attr.trait_type || !attr.value))\n );\n }\n\n return false;\n }\n}\n"],"names":["buffer"],"mappings":"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"}
@@ -1,11 +1,7 @@
1
- class CodedError extends Error {
2
- constructor(code, message) {
3
- super(message);
4
- this.code = code;
5
- Object.setPrototypeOf(this, CodedError.prototype);
6
- }
1
+ function encryptMessage(message) {
2
+ return message;
7
3
  }
8
4
  export {
9
- CodedError
5
+ encryptMessage
10
6
  };
11
7
  //# sourceMappingURL=standards-agent-kit.es48.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es48.js","sources":["../../src/utils/CodedError.ts"],"sourcesContent":["export class CodedError extends Error {\n code: string;\n constructor(code: string, message: string) {\n super(message);\n this.code = code;\n Object.setPrototypeOf(this, CodedError.prototype);\n }\n}\n"],"names":[],"mappings":"AAAO,MAAM,mBAAmB,MAAM;AAAA,EAEpC,YAAY,MAAc,SAAiB;AACzC,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AACF;"}
1
+ {"version":3,"file":"standards-agent-kit.es48.js","sources":["../../src/utils/Encryption.ts"],"sourcesContent":["\n/**\n * Placeholder for encryption functionality.\n * Currently, encryption is disabled. The useEncryption flag is false by default.\n * TODO: Implement actual encryption/decryption logic.\n */\n\nexport function encryptMessage(message: string): string {\n return message; // currently returns plaintext.\n}\n\nexport function decryptMessage(encryptedMessage: string): string {\n return encryptedMessage;\n}\n"],"names":[],"mappings":"AAOO,SAAS,eAAe,SAAyB;AACpD,SAAO;AACX;"}
@@ -1,7 +1,11 @@
1
- function encryptMessage(message) {
2
- return message;
1
+ class CodedError extends Error {
2
+ constructor(code, message) {
3
+ super(message);
4
+ this.code = code;
5
+ Object.setPrototypeOf(this, CodedError.prototype);
6
+ }
3
7
  }
4
8
  export {
5
- encryptMessage
9
+ CodedError
6
10
  };
7
11
  //# sourceMappingURL=standards-agent-kit.es49.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es49.js","sources":["../../src/utils/Encryption.ts"],"sourcesContent":["\n/**\n * Placeholder for encryption functionality.\n * Currently, encryption is disabled. The useEncryption flag is false by default.\n * TODO: Implement actual encryption/decryption logic.\n */\n\nexport function encryptMessage(message: string): string {\n return message; // currently returns plaintext.\n}\n\nexport function decryptMessage(encryptedMessage: string): string {\n return encryptedMessage;\n}\n"],"names":[],"mappings":"AAOO,SAAS,eAAe,SAAyB;AACpD,SAAO;AACX;"}
1
+ {"version":3,"file":"standards-agent-kit.es49.js","sources":["../../src/utils/CodedError.ts"],"sourcesContent":["export class CodedError extends Error {\n code: string;\n constructor(code: string, message: string) {\n super(message);\n this.code = code;\n Object.setPrototypeOf(this, CodedError.prototype);\n }\n}\n"],"names":[],"mappings":"AAAO,MAAM,mBAAmB,MAAM;AAAA,EAEpC,YAAY,MAAc,SAAiB;AACzC,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EAClD;AACF;"}
@@ -4,7 +4,7 @@ function getStringProp(obj, key) {
4
4
  return typeof val === "string" && val.trim() ? val : void 0;
5
5
  }
6
6
  function extractTopicIds(inscription, result) {
7
- const jsonTopicId = inscription?.jsonTopicId || getStringProp(inscription, "json_topic_id") || getStringProp(result, "jsonTopicId");
7
+ const jsonTopicId = inscription.jsonTopicId || getStringProp(inscription, "json_topic_id");
8
8
  const imageTopicId = getStringProp(inscription, "topic_id") || getStringProp(inscription, "topicId") || getStringProp(result, "topicId") || getStringProp(result, "topic_id");
9
9
  return {
10
10
  jsonTopicId,
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es50.js","sources":["../../src/utils/inscription-utils.ts"],"sourcesContent":["import { RetrievedInscriptionResult } from '@kiloscribe/inscription-sdk';\n\nexport type NetworkType = 'mainnet' | 'testnet';\n\nexport interface TopicIds {\n jsonTopicId?: string;\n topicId?: string;\n}\n\nfunction getStringProp(obj: unknown, key: string): string | undefined {\n if (!obj || typeof obj !== 'object') return undefined;\n const val = (obj as Record<string, unknown>)[key];\n return typeof val === 'string' && val.trim() ? val : undefined;\n}\n\n/**\n * Extract topic ids from an inscription and/or result object without using any.\n * - Prefers jsonTopicId when present (for CDN linking)\n * - Collects topic_id/topicId from either inscription or result\n */\nexport function extractTopicIds(\n inscription?: RetrievedInscriptionResult,\n result?: unknown\n): TopicIds {\n const jsonTopicId =\n inscription?.jsonTopicId ||\n getStringProp(inscription, 'json_topic_id') ||\n getStringProp(result, 'jsonTopicId');\n\n const imageTopicId =\n getStringProp(inscription, 'topic_id') ||\n getStringProp(inscription, 'topicId') ||\n getStringProp(result, 'topicId') ||\n getStringProp(result, 'topic_id');\n\n return {\n jsonTopicId: jsonTopicId,\n topicId: imageTopicId,\n };\n}\n\n/**\n * Build HRL/CDN URLs from extracted topic ids.\n * - HRL prefers jsonTopicId, falls back to topicId\n * - CDN URL only provided when jsonTopicId is present\n */\nexport function buildInscriptionLinks(\n ids: TopicIds,\n network: NetworkType,\n fileStandard: string = '1'\n): { hrl?: string; cdnUrl?: string; topicId?: string } {\n const chosen = ids.jsonTopicId || ids.topicId;\n const hrl = chosen ? `hcs://${fileStandard}/${chosen}` : undefined;\n const cdnUrl = ids.jsonTopicId\n ? `https://kiloscribe.com/api/inscription-cdn/${ids.jsonTopicId}?network=${network}`\n : undefined;\n return { hrl, cdnUrl, topicId: chosen };\n}\n"],"names":[],"mappings":"AASA,SAAS,cAAc,KAAc,KAAiC;AACpE,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,MAAO,IAAgC,GAAG;AAChD,SAAO,OAAO,QAAQ,YAAY,IAAI,KAAA,IAAS,MAAM;AACvD;AAOO,SAAS,gBACd,aACA,QACU;AACV,QAAM,cACJ,aAAa,eACb,cAAc,aAAa,eAAe,KAC1C,cAAc,QAAQ,aAAa;AAErC,QAAM,eACJ,cAAc,aAAa,UAAU,KACrC,cAAc,aAAa,SAAS,KACpC,cAAc,QAAQ,SAAS,KAC/B,cAAc,QAAQ,UAAU;AAElC,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,EAAA;AAEb;AAOO,SAAS,sBACd,KACA,SACA,eAAuB,KAC8B;AACrD,QAAM,SAAS,IAAI,eAAe,IAAI;AACtC,QAAM,MAAM,SAAS,SAAS,YAAY,IAAI,MAAM,KAAK;AACzD,QAAM,SAAS,IAAI,cACf,8CAA8C,IAAI,WAAW,YAAY,OAAO,KAChF;AACJ,SAAO,EAAE,KAAK,QAAQ,SAAS,OAAA;AACjC;"}
1
+ {"version":3,"file":"standards-agent-kit.es50.js","sources":["../../src/utils/inscription-utils.ts"],"sourcesContent":["import { RetrievedInscriptionResult } from '@kiloscribe/inscription-sdk';\n\nexport type NetworkType = 'mainnet' | 'testnet';\n\nexport interface TopicIds {\n jsonTopicId?: string;\n topicId?: string;\n}\n\nfunction getStringProp(obj: unknown, key: string): string | undefined {\n if (!obj || typeof obj !== 'object') return undefined;\n const val = (obj as Record<string, unknown>)[key];\n return typeof val === 'string' && val.trim() ? val : undefined;\n}\n\n/**\n * Extract topic ids from an inscription and/or result object without using any.\n * - Prefers jsonTopicId when present (for CDN linking)\n * - Collects topic_id/topicId from either inscription or result\n */\nexport function extractTopicIds(\n inscription: RetrievedInscriptionResult,\n result?: unknown\n): TopicIds {\n const jsonTopicId =\n inscription.jsonTopicId || getStringProp(inscription, 'json_topic_id');\n\n const imageTopicId =\n getStringProp(inscription, 'topic_id') ||\n getStringProp(inscription, 'topicId') ||\n getStringProp(result, 'topicId') ||\n getStringProp(result, 'topic_id');\n\n return {\n jsonTopicId: jsonTopicId,\n topicId: imageTopicId,\n };\n}\n\n/**\n * Build HRL/CDN URLs from extracted topic ids.\n * - HRL prefers jsonTopicId, falls back to topicId\n * - CDN URL only provided when jsonTopicId is present\n */\nexport function buildInscriptionLinks(\n ids: TopicIds,\n network: NetworkType,\n fileStandard: string = '1'\n): { hrl?: string; cdnUrl?: string; topicId?: string } {\n const chosen = ids.jsonTopicId || ids.topicId;\n const hrl = chosen ? `hcs://${fileStandard}/${chosen}` : undefined;\n const cdnUrl = ids.jsonTopicId\n ? `https://kiloscribe.com/api/inscription-cdn/${ids.jsonTopicId}?network=${network}`\n : undefined;\n return { hrl, cdnUrl, topicId: chosen };\n}\n"],"names":[],"mappings":"AASA,SAAS,cAAc,KAAc,KAAiC;AACpE,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,MAAO,IAAgC,GAAG;AAChD,SAAO,OAAO,QAAQ,YAAY,IAAI,KAAA,IAAS,MAAM;AACvD;AAOO,SAAS,gBACd,aACA,QACU;AACV,QAAM,cACJ,YAAY,eAAe,cAAc,aAAa,eAAe;AAEvE,QAAM,eACJ,cAAc,aAAa,UAAU,KACrC,cAAc,aAAa,SAAS,KACpC,cAAc,QAAQ,SAAS,KAC/B,cAAc,QAAQ,UAAU;AAElC,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,EAAA;AAEb;AAOO,SAAS,sBACd,KACA,SACA,eAAuB,KAC8B;AACrD,QAAM,SAAS,IAAI,eAAe,IAAI;AACtC,QAAM,MAAM,SAAS,SAAS,YAAY,IAAI,MAAM,KAAK;AACzD,QAAM,SAAS,IAAI,cACf,8CAA8C,IAAI,WAAW,YAAY,OAAO,KAChF;AACJ,SAAO,EAAE,KAAK,QAAQ,SAAS,OAAA;AACjC;"}
@@ -1,13 +1,5 @@
1
1
  function createInscriptionSuccess(params) {
2
- const {
3
- hrl,
4
- topicId,
5
- jsonTopicId,
6
- standard,
7
- cdnUrl,
8
- transactionId,
9
- metadata
10
- } = params;
2
+ const { hrl, topicId, standard, cdnUrl, transactionId, metadata } = params;
11
3
  return {
12
4
  success: true,
13
5
  type: "inscription",
@@ -16,12 +8,10 @@ function createInscriptionSuccess(params) {
16
8
  inscription: {
17
9
  hrl,
18
10
  topicId,
19
- jsonTopicId,
20
11
  standard,
21
12
  cdnUrl,
22
13
  transactionId
23
14
  },
24
- jsonTopicId,
25
15
  metadata,
26
16
  nextSteps: {
27
17
  primary: "CRITICAL: When minting NFTs, use ONLY the mintingMetadata value as a single string in the metadata array. Do NOT create JSON objects.",
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es55.js","sources":["../../src/types/inscription-response.ts"],"sourcesContent":["/**\n * Structured response interface for inscription tools\n * Provides a consistent, user-friendly format for inscription results\n */\n\nexport interface InscriptionSuccessResponse {\n success: true;\n type: 'inscription';\n title: string;\n message: string;\n inscription: {\n /** The HRL (Hashinal Reference Link) for minting - e.g., \"hcs://1/0.0.123456\" */\n hrl: string;\n /** Topic ID where the inscription was stored */\n topicId: string;\n /** Topic ID containing the JSON metadata when available */\n jsonTopicId?: string;\n /** Type of Hashinal - Static (HCS-5) or Dynamic (HCS-6) */\n standard: 'Static' | 'Dynamic';\n /** CDN URL for direct access to the inscribed content */\n cdnUrl?: string;\n /** Transaction ID of the inscription */\n transactionId?: string;\n };\n /** Topic ID used for metadata lookups */\n jsonTopicId?: string;\n metadata: {\n /** Name/title of the inscribed content */\n name?: string;\n /** Creator of the content */\n creator?: string;\n /** Description of the content */\n description?: string;\n /** Content type (image, text, etc.) */\n type?: string;\n /** Additional attributes */\n attributes?: Array<{ trait_type: string; value: string | number }>;\n };\n nextSteps: {\n /** Primary action the user should take next */\n primary: string;\n /** Additional context or options */\n context?: string;\n /** Specific metadata value to use for minting */\n mintingMetadata: string;\n };\n /** HashLink block data (only present when withHashLinkBlocks=true) */\n hashLinkBlock?: {\n /** Block topic ID on HCS */\n blockId: string;\n /** HashLink reference to the block */\n hashLink: string;\n /** Template topic ID */\n template: string;\n /** Block attributes for rendering */\n attributes: BlockAttributes;\n };\n}\n\nexport interface InscriptionQuoteResponse {\n success: true;\n type: 'quote';\n title: string;\n message: string;\n quote: {\n /** Total cost in HBAR */\n totalCostHbar: string;\n /** When the quote expires */\n validUntil: string;\n /** Cost breakdown details */\n breakdown?: CostBreakdown;\n };\n content: {\n /** Name of the content to be inscribed */\n name?: string;\n /** Creator of the content */\n creator?: string;\n /** Type of content */\n type?: string;\n };\n}\n\nexport interface InscriptionErrorResponse {\n success: false;\n type: 'error';\n title: string;\n message: string;\n error: {\n /** Error code for programmatic handling */\n code: string;\n /** Detailed error message */\n details: string;\n /** Suggestions for fixing the error */\n suggestions?: string[];\n };\n}\n\nexport type InscriptionResponse =\n | InscriptionSuccessResponse\n | InscriptionQuoteResponse\n | InscriptionErrorResponse;\n\n/**\n * Helper function to create a successful inscription response\n */\nexport function createInscriptionSuccess(params: {\n hrl: string;\n topicId: string;\n jsonTopicId?: string;\n standard: 'Static' | 'Dynamic';\n cdnUrl?: string;\n transactionId?: string;\n metadata: {\n name?: string;\n creator?: string;\n description?: string;\n type?: string;\n attributes?: Array<{ trait_type: string; value: string | number }>;\n };\n}): InscriptionSuccessResponse {\n const {\n hrl,\n topicId,\n jsonTopicId,\n standard,\n cdnUrl,\n transactionId,\n metadata,\n } = params;\n\n return {\n success: true,\n type: 'inscription',\n title: `${standard} Hashinal Inscription Complete`,\n message: `Successfully inscribed \"${\n metadata.name || 'your content'\n }\" as a ${standard} Hashinal. The content is now ready for NFT minting.`,\n inscription: {\n hrl,\n topicId,\n jsonTopicId,\n standard,\n cdnUrl,\n transactionId,\n },\n jsonTopicId,\n metadata,\n nextSteps: {\n primary: 'CRITICAL: When minting NFTs, use ONLY the mintingMetadata value as a single string in the metadata array. Do NOT create JSON objects.',\n context:\n 'The metadata parameter for minting should be exactly: [\"' + hrl + '\"] - just the HRL string in an array, nothing else.',\n mintingMetadata: hrl,\n },\n };\n}\n\n/**\n * Block attributes for HashLink rendering\n */\ninterface BlockAttributes {\n /** Display name */\n name?: string;\n /** Description text */\n description?: string;\n /** Image URL */\n image?: string;\n /** Content type */\n contentType?: string;\n /** Size in bytes */\n size?: number;\n /** Custom metadata */\n metadata?: Record<string, string | number | boolean>;\n}\n\n/**\n * Transfer details in cost breakdown\n */\ninterface TransferDetails {\n to: string;\n amount: string;\n description: string;\n}\n\n/**\n * Cost breakdown details for inscription quote\n */\ninterface CostBreakdown {\n transfers: TransferDetails[];\n baseFee?: number;\n sizeFee?: number;\n networkFee?: number;\n serviceFee?: number;\n totalFee?: number;\n currency?: string;\n}\n\n/**\n * Helper function to create a quote response\n */\nexport function createInscriptionQuote(params: {\n totalCostHbar: string;\n validUntil: string;\n breakdown?: CostBreakdown;\n content: {\n name?: string;\n creator?: string;\n type?: string;\n };\n}): InscriptionQuoteResponse {\n const { totalCostHbar, validUntil, breakdown, content } = params;\n\n return {\n success: true,\n type: 'quote',\n title: 'Inscription Cost Quote',\n message: `Estimated cost to inscribe \"${\n content.name || 'your content'\n }\" is ${totalCostHbar} HBAR.`,\n quote: {\n totalCostHbar,\n validUntil,\n breakdown,\n },\n content,\n };\n}\n\n/**\n * Helper function to create an error response\n */\nexport function createInscriptionError(params: {\n code: string;\n details: string;\n suggestions?: string[];\n}): InscriptionErrorResponse {\n const { code, details, suggestions } = params;\n\n return {\n success: false,\n type: 'error',\n title: 'Inscription Failed',\n message: `Unable to complete inscription: ${details}`,\n error: {\n code,\n details,\n suggestions,\n },\n };\n}\n\n/**\n * Helper for pending inscription state (submitted but not yet confirmed)\n */\nexport function createInscriptionPending(params: {\n transactionId: string;\n details?: string;\n suggestions?: string[];\n}): InscriptionErrorResponse {\n const { transactionId, details, suggestions } = params;\n const d = details || `Inscription submitted but not yet confirmed. Transaction ID: ${transactionId}`;\n return {\n success: false,\n type: 'error',\n title: 'Inscription Submitted (Pending)',\n message: d,\n error: {\n code: 'INSCRIPTION_PENDING',\n details: d,\n suggestions: suggestions || [\n 'Wait a few moments for confirmation',\n 'Check the transaction status on a Hedera explorer',\n \"Try the inscription again if it doesn't confirm within 5 minutes\",\n ],\n },\n };\n}\n"],"names":[],"mappings":"AAyGO,SAAS,yBAAyB,QAcV;AAC7B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO,GAAG,QAAQ;AAAA,IAClB,SAAS,2BACP,SAAS,QAAQ,cACnB,UAAU,QAAQ;AAAA,IAClB,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SACE,6DAA6D,MAAM;AAAA,MACrE,iBAAiB;AAAA,IAAA;AAAA,EACnB;AAEJ;AA6CO,SAAS,uBAAuB,QASV;AAC3B,QAAM,EAAE,eAAe,YAAY,WAAW,YAAY;AAE1D,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS,+BACP,QAAQ,QAAQ,cAClB,QAAQ,aAAa;AAAA,IACrB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEJ;AAKO,SAAS,uBAAuB,QAIV;AAC3B,QAAM,EAAE,MAAM,SAAS,YAAA,IAAgB;AAEvC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS,mCAAmC,OAAO;AAAA,IACnD,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEJ;AAKO,SAAS,yBAAyB,QAIZ;AAC3B,QAAM,EAAE,eAAe,SAAS,YAAA,IAAgB;AAChD,QAAM,IAAI,WAAW,gEAAgE,aAAa;AAClG,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa,eAAe;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"standards-agent-kit.es55.js","sources":["../../src/types/inscription-response.ts"],"sourcesContent":["/**\n * Structured response interface for inscription tools\n * Provides a consistent, user-friendly format for inscription results\n */\n\nexport interface InscriptionSuccessResponse {\n success: true;\n type: 'inscription';\n title: string;\n message: string;\n inscription: {\n /** The HRL (Hashinal Reference Link) for minting - e.g., \"hcs://1/0.0.123456\" */\n hrl: string;\n /** Topic ID where the inscription was stored */\n topicId: string;\n /** Type of Hashinal - Static (HCS-5) or Dynamic (HCS-6) */\n standard: 'Static' | 'Dynamic';\n /** CDN URL for direct access to the inscribed content */\n cdnUrl?: string;\n /** Transaction ID of the inscription */\n transactionId?: string;\n };\n metadata: {\n /** Name/title of the inscribed content */\n name?: string;\n /** Creator of the content */\n creator?: string;\n /** Description of the content */\n description?: string;\n /** Content type (image, text, etc.) */\n type?: string;\n /** Additional attributes */\n attributes?: Array<{ trait_type: string; value: string | number }>;\n };\n nextSteps: {\n /** Primary action the user should take next */\n primary: string;\n /** Additional context or options */\n context?: string;\n /** Specific metadata value to use for minting */\n mintingMetadata: string;\n };\n /** HashLink block data (only present when withHashLinkBlocks=true) */\n hashLinkBlock?: {\n /** Block topic ID on HCS */\n blockId: string;\n /** HashLink reference to the block */\n hashLink: string;\n /** Template topic ID */\n template: string;\n /** Block attributes for rendering */\n attributes: BlockAttributes;\n };\n}\n\nexport interface InscriptionQuoteResponse {\n success: true;\n type: 'quote';\n title: string;\n message: string;\n quote: {\n /** Total cost in HBAR */\n totalCostHbar: string;\n /** When the quote expires */\n validUntil: string;\n /** Cost breakdown details */\n breakdown?: CostBreakdown;\n };\n content: {\n /** Name of the content to be inscribed */\n name?: string;\n /** Creator of the content */\n creator?: string;\n /** Type of content */\n type?: string;\n };\n}\n\nexport interface InscriptionErrorResponse {\n success: false;\n type: 'error';\n title: string;\n message: string;\n error: {\n /** Error code for programmatic handling */\n code: string;\n /** Detailed error message */\n details: string;\n /** Suggestions for fixing the error */\n suggestions?: string[];\n };\n}\n\nexport type InscriptionResponse =\n | InscriptionSuccessResponse\n | InscriptionQuoteResponse\n | InscriptionErrorResponse;\n\n/**\n * Helper function to create a successful inscription response\n */\nexport function createInscriptionSuccess(params: {\n hrl: string;\n topicId: string;\n standard: 'Static' | 'Dynamic';\n cdnUrl?: string;\n transactionId?: string;\n metadata: {\n name?: string;\n creator?: string;\n description?: string;\n type?: string;\n attributes?: Array<{ trait_type: string; value: string | number }>;\n };\n}): InscriptionSuccessResponse {\n const { hrl, topicId, standard, cdnUrl, transactionId, metadata } = params;\n\n return {\n success: true,\n type: 'inscription',\n title: `${standard} Hashinal Inscription Complete`,\n message: `Successfully inscribed \"${\n metadata.name || 'your content'\n }\" as a ${standard} Hashinal. The content is now ready for NFT minting.`,\n inscription: {\n hrl,\n topicId,\n standard,\n cdnUrl,\n transactionId,\n },\n metadata,\n nextSteps: {\n primary: 'CRITICAL: When minting NFTs, use ONLY the mintingMetadata value as a single string in the metadata array. Do NOT create JSON objects.',\n context:\n 'The metadata parameter for minting should be exactly: [\"' + hrl + '\"] - just the HRL string in an array, nothing else.',\n mintingMetadata: hrl,\n },\n };\n}\n\n/**\n * Block attributes for HashLink rendering\n */\ninterface BlockAttributes {\n /** Display name */\n name?: string;\n /** Description text */\n description?: string;\n /** Image URL */\n image?: string;\n /** Content type */\n contentType?: string;\n /** Size in bytes */\n size?: number;\n /** Custom metadata */\n metadata?: Record<string, string | number | boolean>;\n}\n\n/**\n * Transfer details in cost breakdown\n */\ninterface TransferDetails {\n to: string;\n amount: string;\n description: string;\n}\n\n/**\n * Cost breakdown details for inscription quote\n */\ninterface CostBreakdown {\n transfers: TransferDetails[];\n baseFee?: number;\n sizeFee?: number;\n networkFee?: number;\n serviceFee?: number;\n totalFee?: number;\n currency?: string;\n}\n\n/**\n * Helper function to create a quote response\n */\nexport function createInscriptionQuote(params: {\n totalCostHbar: string;\n validUntil: string;\n breakdown?: CostBreakdown;\n content: {\n name?: string;\n creator?: string;\n type?: string;\n };\n}): InscriptionQuoteResponse {\n const { totalCostHbar, validUntil, breakdown, content } = params;\n\n return {\n success: true,\n type: 'quote',\n title: 'Inscription Cost Quote',\n message: `Estimated cost to inscribe \"${\n content.name || 'your content'\n }\" is ${totalCostHbar} HBAR.`,\n quote: {\n totalCostHbar,\n validUntil,\n breakdown,\n },\n content,\n };\n}\n\n/**\n * Helper function to create an error response\n */\nexport function createInscriptionError(params: {\n code: string;\n details: string;\n suggestions?: string[];\n}): InscriptionErrorResponse {\n const { code, details, suggestions } = params;\n\n return {\n success: false,\n type: 'error',\n title: 'Inscription Failed',\n message: `Unable to complete inscription: ${details}`,\n error: {\n code,\n details,\n suggestions,\n },\n };\n}\n\n/**\n * Helper for pending inscription state (submitted but not yet confirmed)\n */\nexport function createInscriptionPending(params: {\n transactionId: string;\n details?: string;\n suggestions?: string[];\n}): InscriptionErrorResponse {\n const { transactionId, details, suggestions } = params;\n const d = details || `Inscription submitted but not yet confirmed. Transaction ID: ${transactionId}`;\n return {\n success: false,\n type: 'error',\n title: 'Inscription Submitted (Pending)',\n message: d,\n error: {\n code: 'INSCRIPTION_PENDING',\n details: d,\n suggestions: suggestions || [\n 'Wait a few moments for confirmation',\n 'Check the transaction status on a Hedera explorer',\n \"Try the inscription again if it doesn't confirm within 5 minutes\",\n ],\n },\n };\n}\n"],"names":[],"mappings":"AAqGO,SAAS,yBAAyB,QAaV;AAC7B,QAAM,EAAE,KAAK,SAAS,UAAU,QAAQ,eAAe,aAAa;AAEpE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO,GAAG,QAAQ;AAAA,IAClB,SAAS,2BACP,SAAS,QAAQ,cACnB,UAAU,QAAQ;AAAA,IAClB,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SACE,6DAA6D,MAAM;AAAA,MACrE,iBAAiB;AAAA,IAAA;AAAA,EACnB;AAEJ;AA6CO,SAAS,uBAAuB,QASV;AAC3B,QAAM,EAAE,eAAe,YAAY,WAAW,YAAY;AAE1D,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS,+BACP,QAAQ,QAAQ,cAClB,QAAQ,aAAa;AAAA,IACrB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEJ;AAKO,SAAS,uBAAuB,QAIV;AAC3B,QAAM,EAAE,MAAM,SAAS,YAAA,IAAgB;AAEvC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS,mCAAmC,OAAO;AAAA,IACnD,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEJ;AAKO,SAAS,yBAAyB,QAIZ;AAC3B,QAAM,EAAE,eAAe,SAAS,YAAA,IAAgB;AAChD,QAAM,IAAI,WAAW,gEAAgE,aAAa;AAClG,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa,eAAe;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
@@ -1,7 +1,7 @@
1
1
  import { BaseServiceBuilder } from "hedera-agent-kit";
2
2
  import { HederaMirrorNode, HCS2Client } from "@hashgraphonline/standards-sdk";
3
3
  import { SignerProviderRegistry } from "./standards-agent-kit.es3.js";
4
- import { CodedError } from "./standards-agent-kit.es48.js";
4
+ import { CodedError } from "./standards-agent-kit.es49.js";
5
5
  class HCS2Builder extends BaseServiceBuilder {
6
6
  constructor(hederaKit) {
7
7
  super(hederaKit);
@@ -1,7 +1,7 @@
1
1
  import { BaseServiceBuilder } from "hedera-agent-kit";
2
2
  import { HCS6Client, HederaMirrorNode } from "@hashgraphonline/standards-sdk";
3
3
  import { SignerProviderRegistry } from "./standards-agent-kit.es3.js";
4
- import { CodedError } from "./standards-agent-kit.es48.js";
4
+ import { CodedError } from "./standards-agent-kit.es49.js";
5
5
  class HCS6Builder extends BaseServiceBuilder {
6
6
  constructor(hederaKit) {
7
7
  super(hederaKit);
@@ -134,6 +134,10 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
134
134
  const isCompletedResponse = Boolean(completedStart?.inscription) && completedStart?.confirmed;
135
135
  if (isCompletedResponse) {
136
136
  const completed = start;
137
+ this.logger.info(
138
+ "inscription already completed, short circuiting",
139
+ start
140
+ );
137
141
  return {
138
142
  quote: false,
139
143
  confirmed: completed.confirmed === true,
@@ -152,6 +156,7 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
152
156
  const transactionId = exec?.transactionId || "";
153
157
  const shouldWait = options.quoteOnly ? false : options.waitForConfirmation ?? true;
154
158
  if (shouldWait) {
159
+ this.logger.debug("Will be retrieving inscription");
155
160
  const maxAttempts = options.waitMaxAttempts ?? 60;
156
161
  const intervalMs = options.waitIntervalMs ?? 5e3;
157
162
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
@@ -174,6 +179,11 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
174
179
  },
175
180
  inscription: retrieved
176
181
  };
182
+ this.logger.debug(
183
+ "retrieved inscription",
184
+ resultConfirmed,
185
+ retrieved
186
+ );
177
187
  return resultConfirmed;
178
188
  }
179
189
  } catch {
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es8.js","sources":["../../src/builders/inscriber/inscriber-builder.ts"],"sourcesContent":["import { BaseServiceBuilder } from 'hedera-agent-kit';\nimport type { HederaAgentKit } from 'hedera-agent-kit';\nimport {\n inscribe,\n inscribeWithSigner,\n retrieveInscription,\n InscriptionInput,\n InscriptionOptions,\n InscriptionResponse,\n RetrievedInscriptionResult,\n HederaClientConfig,\n NetworkType,\n getTopicId,\n} from '@hashgraphonline/standards-sdk';\nimport { InscriptionResult, InscriptionSDK } from '@kiloscribe/inscription-sdk';\nimport type { AgentOperationalMode } from 'hedera-agent-kit';\n\n/**\n * Type definition for DAppSigner interface compatible with inscription SDK\n */\ninterface DAppSigner {\n getAccountId(): { toString(): string };\n [key: string]: unknown;\n}\n\nexport interface PendingInscriptionResponse {\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n}\n\nexport interface CompletedInscriptionResponse {\n confirmed?: boolean;\n result?: InscriptionResult;\n inscription?: RetrievedInscriptionResult;\n jsonTopicId?: string;\n network?: string;\n}\n/**\n * Builder for Inscription operations\n */\nexport class InscriberBuilder extends BaseServiceBuilder {\n protected inscriptionSDK?: InscriptionSDK;\n private static signerProvider?: () =>\n | Promise<DAppSigner | null>\n | DAppSigner\n | null;\n private static walletInfoResolver?: () =>\n | Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null>\n | { accountId: string; network: 'mainnet' | 'testnet' }\n | null;\n\n private static startInscriptionDelegate?: (\n request: Record<string, unknown>,\n network: 'mainnet' | 'testnet'\n ) => Promise<PendingInscriptionResponse | CompletedInscriptionResponse>;\n private static walletExecutor?: (\n base64: string,\n network: 'mainnet' | 'testnet'\n ) => Promise<{ transactionId: string }>;\n /** When true, do not allow server fallback; require a wallet path in Provide Bytes */\n private static preferWalletOnly = false;\n\n constructor(hederaKit: HederaAgentKit) {\n super(hederaKit);\n }\n\n public getOperationalMode(): AgentOperationalMode {\n return this.hederaKit.operationalMode as AgentOperationalMode;\n }\n\n static setSignerProvider(\n provider: () => Promise<DAppSigner | null> | DAppSigner | null\n ): void {\n InscriberBuilder.signerProvider = provider;\n }\n\n static setWalletInfoResolver(\n resolver: () =>\n | Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null>\n | { accountId: string; network: 'mainnet' | 'testnet' }\n | null\n ): void {\n InscriberBuilder.walletInfoResolver = resolver;\n }\n\n static setStartInscriptionDelegate(\n delegate: (\n request: Record<string, unknown>,\n network: 'mainnet' | 'testnet'\n ) => Promise<PendingInscriptionResponse | CompletedInscriptionResponse>\n ): void {\n InscriberBuilder.startInscriptionDelegate = delegate;\n }\n\n static setWalletExecutor(\n executor: (\n base64: string,\n network: 'mainnet' | 'testnet'\n ) => Promise<{ transactionId: string }>\n ): void {\n InscriberBuilder.walletExecutor = executor;\n }\n\n /**\n * Control fallback behavior. When true, wallet must be available for execution paths.\n */\n static setPreferWalletOnly(flag: boolean): void {\n InscriberBuilder.preferWalletOnly = !!flag;\n }\n\n async getSigner(): Promise<DAppSigner | null> {\n const provider = InscriberBuilder.signerProvider;\n if (!provider) return null;\n try {\n const maybe = provider();\n return maybe && typeof (maybe as Promise<unknown>).then === 'function'\n ? await (maybe as Promise<DAppSigner | null>)\n : (maybe as DAppSigner | null);\n } catch {\n return null;\n }\n }\n\n /**\n * Get or create Inscription SDK - temporarily returns null since we don't have the actual SDK\n */\n protected async getInscriptionSDK(\n _options: InscriptionOptions\n ): Promise<InscriptionSDK | null> {\n return null;\n }\n\n /**\n * Inscribe content using server-side authentication\n */\n async inscribe(\n input: InscriptionInput,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n const network = this.hederaKit.client.network;\n const networkType: NetworkType = network.toString().includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n const clientConfig: HederaClientConfig = {\n accountId: operatorId,\n privateKey: operatorPrivateKey,\n network: networkType,\n };\n\n return await inscribe(input, clientConfig, options);\n }\n\n /**\n * Inscribe content using a DApp signer\n */\n async inscribeWithSigner(\n input: InscriptionInput,\n signer: DAppSigner,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n return await inscribeWithSigner(\n input,\n signer as unknown as Parameters<typeof inscribeWithSigner>[1],\n options\n );\n }\n\n async inscribeAuto(\n input: InscriptionInput,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n const signer = await this.getSigner();\n if (signer) {\n return this.inscribeWithSigner(input, signer, options);\n }\n\n type WalletInfo = { accountId: string; network: 'mainnet' | 'testnet' };\n\n type WalletExecutorResponse = { transactionId: string };\n\n const infoMaybe: WalletInfo | null = InscriberBuilder.walletInfoResolver\n ? await InscriberBuilder.walletInfoResolver()\n : null;\n\n if (InscriberBuilder.preferWalletOnly && !infoMaybe) {\n const err = new Error(\n 'Wallet unavailable: connect a wallet or switch to autonomous mode'\n );\n (err as unknown as { code: string }).code = 'wallet_unavailable';\n throw err;\n }\n\n if (\n infoMaybe &&\n InscriberBuilder.startInscriptionDelegate &&\n InscriberBuilder.walletExecutor\n ) {\n const holderId = infoMaybe.accountId;\n const network: 'mainnet' | 'testnet' = infoMaybe.network;\n\n type InscriptionOptionsExt = InscriptionOptions & {\n fileStandard?: string;\n chunkSize?: number;\n jsonFileURL?: string;\n metadata?: Record<string, unknown> & {\n creator?: string;\n description?: string;\n };\n };\n const ext = options as InscriptionOptionsExt;\n\n const baseRequest: Record<string, unknown> = {\n holderId,\n metadata: ext.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n };\n if (typeof ext.fileStandard !== 'undefined') {\n (baseRequest as { fileStandard?: string }).fileStandard =\n ext.fileStandard;\n }\n if (typeof ext.chunkSize !== 'undefined') {\n (baseRequest as { chunkSize?: number }).chunkSize = ext.chunkSize;\n }\n\n let request: Record<string, unknown> = { ...baseRequest };\n switch (input.type) {\n case 'url':\n request = { ...baseRequest, file: { type: 'url', url: input.url } };\n break;\n case 'file':\n request = {\n ...baseRequest,\n file: { type: 'path', path: input.path },\n };\n break;\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(input.buffer).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n (request as { metadataObject?: unknown }).metadataObject = ext.metadata;\n (request as { creator?: string }).creator =\n ext.metadata?.creator || holderId;\n (request as { description?: string }).description =\n ext.metadata?.description;\n if (typeof ext.jsonFileURL === 'string' && ext.jsonFileURL.length > 0) {\n (request as { jsonFileURL?: string }).jsonFileURL = ext.jsonFileURL;\n }\n }\n\n const start = await InscriberBuilder.startInscriptionDelegate(\n request,\n network\n );\n\n const completedStart = start as CompletedInscriptionResponse;\n const isCompletedResponse =\n Boolean(completedStart?.inscription) && completedStart?.confirmed;\n\n if (isCompletedResponse) {\n const completed = start as {\n confirmed?: boolean;\n result?: unknown;\n inscription?: unknown;\n };\n return {\n quote: false,\n confirmed: completed.confirmed === true,\n result: completed.result as InscriptionResult,\n inscription: completed.inscription,\n } as unknown as InscriptionResponse;\n }\n\n const startResponse = start as {\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n };\n\n if (!startResponse || !startResponse.transactionBytes) {\n throw new Error('Failed to start inscription (no transaction bytes)');\n }\n\n const exec: WalletExecutorResponse =\n await InscriberBuilder.walletExecutor(\n startResponse.transactionBytes,\n network\n );\n const transactionId = exec?.transactionId || '';\n\n const shouldWait = options.quoteOnly\n ? false\n : options.waitForConfirmation ?? true;\n if (shouldWait) {\n const maxAttempts =\n (options as { waitMaxAttempts?: number }).waitMaxAttempts ?? 60;\n const intervalMs =\n (options as { waitIntervalMs?: number }).waitIntervalMs ?? 5000;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const retrieved: RetrievedInscriptionResult =\n await this.retrieveInscription(transactionId, options);\n const topicIdFromInscription: string | undefined = getTopicId(\n retrieved as unknown\n );\n const topicId: string | undefined =\n topicIdFromInscription ?? startResponse.topic_id;\n const status: string | undefined = (\n retrieved as { status?: string }\n ).status;\n const isDone = status === 'completed' || !!topicId;\n if (isDone) {\n const resultConfirmed: InscriptionResponse = {\n quote: false,\n confirmed: true,\n result: {\n jobId: startResponse.tx_id || '',\n transactionId,\n topicId,\n },\n inscription: retrieved,\n } as unknown as InscriptionResponse;\n return resultConfirmed;\n }\n } catch {}\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n }\n\n const partial: InscriptionResponse = {\n quote: false,\n confirmed: false,\n result: {\n jobId: startResponse.tx_id || '',\n transactionId,\n status: startResponse.status,\n completed: startResponse.completed,\n },\n inscription: startResponse.topic_id\n ? { topic_id: startResponse.topic_id }\n : undefined,\n } as unknown as InscriptionResponse;\n return partial;\n }\n\n if (InscriberBuilder.preferWalletOnly) {\n const err = new Error(\n 'Wallet unavailable: connect a wallet or switch to autonomous mode'\n );\n (err as unknown as { code: string }).code = 'wallet_unavailable';\n throw err;\n }\n return this.inscribe(input, options);\n }\n\n /**\n * Retrieve an existing inscription\n */\n async retrieveInscription(\n transactionId: string,\n options: InscriptionOptions\n ): Promise<RetrievedInscriptionResult> {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n return await retrieveInscription(transactionId, {\n ...options,\n accountId: operatorId,\n privateKey: operatorPrivateKey,\n });\n }\n\n /**\n * Close the inscription SDK\n */\n async close(): Promise<void> {\n this.inscriptionSDK = undefined;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-agent-kit.es8.js","sources":["../../src/builders/inscriber/inscriber-builder.ts"],"sourcesContent":["import { BaseServiceBuilder } from 'hedera-agent-kit';\nimport type { HederaAgentKit } from 'hedera-agent-kit';\nimport {\n inscribe,\n inscribeWithSigner,\n retrieveInscription,\n InscriptionInput,\n InscriptionOptions,\n InscriptionResponse,\n RetrievedInscriptionResult,\n HederaClientConfig,\n NetworkType,\n getTopicId,\n} from '@hashgraphonline/standards-sdk';\nimport { InscriptionResult, InscriptionSDK } from '@kiloscribe/inscription-sdk';\nimport type { AgentOperationalMode } from 'hedera-agent-kit';\n\n/**\n * Type definition for DAppSigner interface compatible with inscription SDK\n */\ninterface DAppSigner {\n getAccountId(): { toString(): string };\n [key: string]: unknown;\n}\n\nexport interface PendingInscriptionResponse {\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n}\n\nexport interface CompletedInscriptionResponse {\n confirmed?: boolean;\n result?: InscriptionResult;\n inscription?: RetrievedInscriptionResult;\n jsonTopicId?: string;\n network?: string;\n}\n/**\n * Builder for Inscription operations\n */\nexport class InscriberBuilder extends BaseServiceBuilder {\n protected inscriptionSDK?: InscriptionSDK;\n private static signerProvider?: () =>\n | Promise<DAppSigner | null>\n | DAppSigner\n | null;\n private static walletInfoResolver?: () =>\n | Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null>\n | { accountId: string; network: 'mainnet' | 'testnet' }\n | null;\n\n private static startInscriptionDelegate?: (\n request: Record<string, unknown>,\n network: 'mainnet' | 'testnet'\n ) => Promise<PendingInscriptionResponse | CompletedInscriptionResponse>;\n private static walletExecutor?: (\n base64: string,\n network: 'mainnet' | 'testnet'\n ) => Promise<{ transactionId: string }>;\n /** When true, do not allow server fallback; require a wallet path in Provide Bytes */\n private static preferWalletOnly = false;\n\n constructor(hederaKit: HederaAgentKit) {\n super(hederaKit);\n }\n\n public getOperationalMode(): AgentOperationalMode {\n return this.hederaKit.operationalMode as AgentOperationalMode;\n }\n\n static setSignerProvider(\n provider: () => Promise<DAppSigner | null> | DAppSigner | null\n ): void {\n InscriberBuilder.signerProvider = provider;\n }\n\n static setWalletInfoResolver(\n resolver: () =>\n | Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null>\n | { accountId: string; network: 'mainnet' | 'testnet' }\n | null\n ): void {\n InscriberBuilder.walletInfoResolver = resolver;\n }\n\n static setStartInscriptionDelegate(\n delegate: (\n request: Record<string, unknown>,\n network: 'mainnet' | 'testnet'\n ) => Promise<PendingInscriptionResponse | CompletedInscriptionResponse>\n ): void {\n InscriberBuilder.startInscriptionDelegate = delegate;\n }\n\n static setWalletExecutor(\n executor: (\n base64: string,\n network: 'mainnet' | 'testnet'\n ) => Promise<{ transactionId: string }>\n ): void {\n InscriberBuilder.walletExecutor = executor;\n }\n\n /**\n * Control fallback behavior. When true, wallet must be available for execution paths.\n */\n static setPreferWalletOnly(flag: boolean): void {\n InscriberBuilder.preferWalletOnly = !!flag;\n }\n\n async getSigner(): Promise<DAppSigner | null> {\n const provider = InscriberBuilder.signerProvider;\n if (!provider) return null;\n try {\n const maybe = provider();\n return maybe && typeof (maybe as Promise<unknown>).then === 'function'\n ? await (maybe as Promise<DAppSigner | null>)\n : (maybe as DAppSigner | null);\n } catch {\n return null;\n }\n }\n\n /**\n * Get or create Inscription SDK - temporarily returns null since we don't have the actual SDK\n */\n protected async getInscriptionSDK(\n _options: InscriptionOptions\n ): Promise<InscriptionSDK | null> {\n return null;\n }\n\n /**\n * Inscribe content using server-side authentication\n */\n async inscribe(\n input: InscriptionInput,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n const network = this.hederaKit.client.network;\n const networkType: NetworkType = network.toString().includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n const clientConfig: HederaClientConfig = {\n accountId: operatorId,\n privateKey: operatorPrivateKey,\n network: networkType,\n };\n\n return await inscribe(input, clientConfig, options);\n }\n\n /**\n * Inscribe content using a DApp signer\n */\n async inscribeWithSigner(\n input: InscriptionInput,\n signer: DAppSigner,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n return await inscribeWithSigner(\n input,\n signer as unknown as Parameters<typeof inscribeWithSigner>[1],\n options\n );\n }\n\n async inscribeAuto(\n input: InscriptionInput,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n const signer = await this.getSigner();\n if (signer) {\n return this.inscribeWithSigner(input, signer, options);\n }\n\n type WalletInfo = { accountId: string; network: 'mainnet' | 'testnet' };\n\n type WalletExecutorResponse = { transactionId: string };\n\n const infoMaybe: WalletInfo | null = InscriberBuilder.walletInfoResolver\n ? await InscriberBuilder.walletInfoResolver()\n : null;\n\n if (InscriberBuilder.preferWalletOnly && !infoMaybe) {\n const err = new Error(\n 'Wallet unavailable: connect a wallet or switch to autonomous mode'\n );\n (err as unknown as { code: string }).code = 'wallet_unavailable';\n throw err;\n }\n\n if (\n infoMaybe &&\n InscriberBuilder.startInscriptionDelegate &&\n InscriberBuilder.walletExecutor\n ) {\n const holderId = infoMaybe.accountId;\n const network: 'mainnet' | 'testnet' = infoMaybe.network;\n\n type InscriptionOptionsExt = InscriptionOptions & {\n fileStandard?: string;\n chunkSize?: number;\n jsonFileURL?: string;\n metadata?: Record<string, unknown> & {\n creator?: string;\n description?: string;\n };\n };\n const ext = options as InscriptionOptionsExt;\n\n const baseRequest: Record<string, unknown> = {\n holderId,\n metadata: ext.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n };\n if (typeof ext.fileStandard !== 'undefined') {\n (baseRequest as { fileStandard?: string }).fileStandard =\n ext.fileStandard;\n }\n if (typeof ext.chunkSize !== 'undefined') {\n (baseRequest as { chunkSize?: number }).chunkSize = ext.chunkSize;\n }\n\n let request: Record<string, unknown> = { ...baseRequest };\n switch (input.type) {\n case 'url':\n request = { ...baseRequest, file: { type: 'url', url: input.url } };\n break;\n case 'file':\n request = {\n ...baseRequest,\n file: { type: 'path', path: input.path },\n };\n break;\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(input.buffer).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n (request as { metadataObject?: unknown }).metadataObject = ext.metadata;\n (request as { creator?: string }).creator =\n ext.metadata?.creator || holderId;\n (request as { description?: string }).description =\n ext.metadata?.description;\n if (typeof ext.jsonFileURL === 'string' && ext.jsonFileURL.length > 0) {\n (request as { jsonFileURL?: string }).jsonFileURL = ext.jsonFileURL;\n }\n }\n\n const start = await InscriberBuilder.startInscriptionDelegate(\n request,\n network\n );\n\n const completedStart = start as CompletedInscriptionResponse;\n const isCompletedResponse =\n Boolean(completedStart?.inscription) && completedStart?.confirmed;\n\n if (isCompletedResponse) {\n const completed = start as {\n confirmed?: boolean;\n result?: unknown;\n inscription?: unknown;\n };\n this.logger.info(\n 'inscription already completed, short circuiting',\n start\n );\n return {\n quote: false,\n confirmed: completed.confirmed === true,\n result: completed.result as InscriptionResult,\n inscription: completed.inscription,\n } as unknown as InscriptionResponse;\n }\n\n const startResponse = start as {\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n };\n\n if (!startResponse || !startResponse.transactionBytes) {\n throw new Error('Failed to start inscription (no transaction bytes)');\n }\n\n const exec: WalletExecutorResponse =\n await InscriberBuilder.walletExecutor(\n startResponse.transactionBytes,\n network\n );\n const transactionId = exec?.transactionId || '';\n\n const shouldWait = options.quoteOnly\n ? false\n : options.waitForConfirmation ?? true;\n if (shouldWait) {\n this.logger.debug('Will be retrieving inscription');\n const maxAttempts =\n (options as { waitMaxAttempts?: number }).waitMaxAttempts ?? 60;\n const intervalMs =\n (options as { waitIntervalMs?: number }).waitIntervalMs ?? 5000;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const retrieved: RetrievedInscriptionResult =\n await this.retrieveInscription(transactionId, options);\n const topicIdFromInscription: string | undefined = getTopicId(\n retrieved as unknown\n );\n const topicId: string | undefined =\n topicIdFromInscription ?? startResponse.topic_id;\n const status: string | undefined = (\n retrieved as { status?: string }\n ).status;\n const isDone = status === 'completed' || !!topicId;\n if (isDone) {\n const resultConfirmed: InscriptionResponse = {\n quote: false,\n confirmed: true,\n result: {\n jobId: startResponse.tx_id || '',\n transactionId,\n topicId,\n },\n inscription: retrieved,\n } as unknown as InscriptionResponse;\n this.logger.debug(\n 'retrieved inscription',\n resultConfirmed,\n retrieved\n );\n return resultConfirmed;\n }\n } catch {}\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n }\n\n const partial: InscriptionResponse = {\n quote: false,\n confirmed: false,\n result: {\n jobId: startResponse.tx_id || '',\n transactionId,\n status: startResponse.status,\n completed: startResponse.completed,\n },\n inscription: startResponse.topic_id\n ? { topic_id: startResponse.topic_id }\n : undefined,\n } as unknown as InscriptionResponse;\n return partial;\n }\n\n if (InscriberBuilder.preferWalletOnly) {\n const err = new Error(\n 'Wallet unavailable: connect a wallet or switch to autonomous mode'\n );\n (err as unknown as { code: string }).code = 'wallet_unavailable';\n throw err;\n }\n return this.inscribe(input, options);\n }\n\n /**\n * Retrieve an existing inscription\n */\n async retrieveInscription(\n transactionId: string,\n options: InscriptionOptions\n ): Promise<RetrievedInscriptionResult> {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n return await retrieveInscription(transactionId, {\n ...options,\n accountId: operatorId,\n privateKey: operatorPrivateKey,\n });\n }\n\n /**\n * Close the inscription SDK\n */\n async close(): Promise<void> {\n this.inscriptionSDK = undefined;\n }\n}\n"],"names":[],"mappings":";;AA2CO,MAAM,oBAAN,MAAM,0BAAyB,mBAAmB;AAAA,EAsBvD,YAAY,WAA2B;AACrC,UAAM,SAAS;AAAA,EACjB;AAAA,EAEO,qBAA2C;AAChD,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,OAAO,kBACL,UACM;AACN,sBAAiB,iBAAiB;AAAA,EACpC;AAAA,EAEA,OAAO,sBACL,UAIM;AACN,sBAAiB,qBAAqB;AAAA,EACxC;AAAA,EAEA,OAAO,4BACL,UAIM;AACN,sBAAiB,2BAA2B;AAAA,EAC9C;AAAA,EAEA,OAAO,kBACL,UAIM;AACN,sBAAiB,iBAAiB;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,oBAAoB,MAAqB;AAC9C,sBAAiB,mBAAmB,CAAC,CAAC;AAAA,EACxC;AAAA,EAEA,MAAM,YAAwC;AAC5C,UAAM,WAAW,kBAAiB;AAClC,QAAI,CAAC,SAAU,QAAO;AACtB,QAAI;AACF,YAAM,QAAQ,SAAA;AACd,aAAO,SAAS,OAAQ,MAA2B,SAAS,aACxD,MAAO,QACN;AAAA,IACP,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,kBACd,UACgC;AAChC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SACJ,OACA,SAC8B;AAC9B,UAAM,aAAa,KAAK,UAAU,OAAO,aAAA,EAAe,SAAA;AACxD,UAAM,qBAAqB,KAAK,UAAU,QAAQ,sBAAA,IAC9C,KAAK,UAAU,OAAO,wBAAwB,YAAA,IAC9C;AAEJ,UAAM,UAAU,KAAK,UAAU,OAAO;AACtC,UAAM,cAA2B,QAAQ,SAAA,EAAW,SAAS,SAAS,IAClE,YACA;AAEJ,UAAM,eAAmC;AAAA,MACvC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,SAAS;AAAA,IAAA;AAGX,WAAO,MAAM,SAAS,OAAO,cAAc,OAAO;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ,OACA,QACA,SAC8B;AAC9B,WAAO,MAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,aACJ,OACA,SAC8B;AAC9B,UAAM,SAAS,MAAM,KAAK,UAAA;AAC1B,QAAI,QAAQ;AACV,aAAO,KAAK,mBAAmB,OAAO,QAAQ,OAAO;AAAA,IACvD;AAMA,UAAM,YAA+B,kBAAiB,qBAClD,MAAM,kBAAiB,uBACvB;AAEJ,QAAI,kBAAiB,oBAAoB,CAAC,WAAW;AACnD,YAAM,MAAM,IAAI;AAAA,QACd;AAAA,MAAA;AAED,UAAoC,OAAO;AAC5C,YAAM;AAAA,IACR;AAEA,QACE,aACA,kBAAiB,4BACjB,kBAAiB,gBACjB;AACA,YAAM,WAAW,UAAU;AAC3B,YAAM,UAAiC,UAAU;AAWjD,YAAM,MAAM;AAEZ,YAAM,cAAuC;AAAA,QAC3C;AAAA,QACA,UAAU,IAAI,YAAY,CAAA;AAAA,QAC1B,MAAM,QAAQ,QAAQ,CAAA;AAAA,QACtB,MAAM,QAAQ,QAAQ;AAAA,MAAA;AAExB,UAAI,OAAO,IAAI,iBAAiB,aAAa;AAC1C,oBAA0C,eACzC,IAAI;AAAA,MACR;AACA,UAAI,OAAO,IAAI,cAAc,aAAa;AACvC,oBAAuC,YAAY,IAAI;AAAA,MAC1D;AAEA,UAAI,UAAmC,EAAE,GAAG,YAAA;AAC5C,cAAQ,MAAM,MAAA;AAAA,QACZ,KAAK;AACH,oBAAU,EAAE,GAAG,aAAa,MAAM,EAAE,MAAM,OAAO,KAAK,MAAM,MAAI;AAChE;AAAA,QACF,KAAK;AACH,oBAAU;AAAA,YACR,GAAG;AAAA,YACH,MAAM,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAA;AAAA,UAAK;AAEzC;AAAA,QACF,KAAK;AACH,oBAAU;AAAA,YACR,GAAG;AAAA,YACH,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,QAAQ,OAAO,KAAK,MAAM,MAAM,EAAE,SAAS,QAAQ;AAAA,cACnD,UAAU,MAAM;AAAA,cAChB,UAAU,MAAM;AAAA,YAAA;AAAA,UAClB;AAEF;AAAA,MAAA;AAGJ,UAAI,QAAQ,SAAS,YAAY;AAC9B,gBAAyC,iBAAiB,IAAI;AAC9D,gBAAiC,UAChC,IAAI,UAAU,WAAW;AAC1B,gBAAqC,cACpC,IAAI,UAAU;AAChB,YAAI,OAAO,IAAI,gBAAgB,YAAY,IAAI,YAAY,SAAS,GAAG;AACpE,kBAAqC,cAAc,IAAI;AAAA,QAC1D;AAAA,MACF;AAEA,YAAM,QAAQ,MAAM,kBAAiB;AAAA,QACnC;AAAA,QACA;AAAA,MAAA;AAGF,YAAM,iBAAiB;AACvB,YAAM,sBACJ,QAAQ,gBAAgB,WAAW,KAAK,gBAAgB;AAE1D,UAAI,qBAAqB;AACvB,cAAM,YAAY;AAKlB,aAAK,OAAO;AAAA,UACV;AAAA,UACA;AAAA,QAAA;AAEF,eAAO;AAAA,UACL,OAAO;AAAA,UACP,WAAW,UAAU,cAAc;AAAA,UACnC,QAAQ,UAAU;AAAA,UAClB,aAAa,UAAU;AAAA,QAAA;AAAA,MAE3B;AAEA,YAAM,gBAAgB;AAQtB,UAAI,CAAC,iBAAiB,CAAC,cAAc,kBAAkB;AACrD,cAAM,IAAI,MAAM,oDAAoD;AAAA,MACtE;AAEA,YAAM,OACJ,MAAM,kBAAiB;AAAA,QACrB,cAAc;AAAA,QACd;AAAA,MAAA;AAEJ,YAAM,gBAAgB,MAAM,iBAAiB;AAE7C,YAAM,aAAa,QAAQ,YACvB,QACA,QAAQ,uBAAuB;AACnC,UAAI,YAAY;AACd,aAAK,OAAO,MAAM,gCAAgC;AAClD,cAAM,cACH,QAAyC,mBAAmB;AAC/D,cAAM,aACH,QAAwC,kBAAkB;AAE7D,iBAAS,UAAU,GAAG,UAAU,aAAa,WAAW;AACtD,cAAI;AACF,kBAAM,YACJ,MAAM,KAAK,oBAAoB,eAAe,OAAO;AACvD,kBAAM,yBAA6C;AAAA,cACjD;AAAA,YAAA;AAEF,kBAAM,UACJ,0BAA0B,cAAc;AAC1C,kBAAM,SACJ,UACA;AACF,kBAAM,SAAS,WAAW,eAAe,CAAC,CAAC;AAC3C,gBAAI,QAAQ;AACV,oBAAM,kBAAuC;AAAA,gBAC3C,OAAO;AAAA,gBACP,WAAW;AAAA,gBACX,QAAQ;AAAA,kBACN,OAAO,cAAc,SAAS;AAAA,kBAC9B;AAAA,kBACA;AAAA,gBAAA;AAAA,gBAEF,aAAa;AAAA,cAAA;AAEf,mBAAK,OAAO;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAEF,qBAAO;AAAA,YACT;AAAA,UACF,QAAQ;AAAA,UAAC;AACT,gBAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,UAAU,CAAC;AAAA,QAChE;AAAA,MACF;AAEA,YAAM,UAA+B;AAAA,QACnC,OAAO;AAAA,QACP,WAAW;AAAA,QACX,QAAQ;AAAA,UACN,OAAO,cAAc,SAAS;AAAA,UAC9B;AAAA,UACA,QAAQ,cAAc;AAAA,UACtB,WAAW,cAAc;AAAA,QAAA;AAAA,QAE3B,aAAa,cAAc,WACvB,EAAE,UAAU,cAAc,aAC1B;AAAA,MAAA;AAEN,aAAO;AAAA,IACT;AAEA,QAAI,kBAAiB,kBAAkB;AACrC,YAAM,MAAM,IAAI;AAAA,QACd;AAAA,MAAA;AAED,UAAoC,OAAO;AAC5C,YAAM;AAAA,IACR;AACA,WAAO,KAAK,SAAS,OAAO,OAAO;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBACJ,eACA,SACqC;AACrC,UAAM,aAAa,KAAK,UAAU,OAAO,aAAA,EAAe,SAAA;AACxD,UAAM,qBAAqB,KAAK,UAAU,QAAQ,sBAAA,IAC9C,KAAK,UAAU,OAAO,wBAAwB,YAAA,IAC9C;AAEJ,WAAO,MAAM,oBAAoB,eAAe;AAAA,MAC9C,GAAG;AAAA,MACH,WAAW;AAAA,MACX,YAAY;AAAA,IAAA,CACb;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAuB;AAC3B,SAAK,iBAAiB;AAAA,EACxB;AACF;AA7VE,kBAAe,mBAAmB;AApB7B,IAAM,mBAAN;"}
@@ -1,5 +1,5 @@
1
1
  import { HCS10Client as HCS10Client$1, Logger, AgentBuilder, AIAgentCapability, InboundTopicType } from "@hashgraphonline/standards-sdk";
2
- import { encryptMessage } from "./standards-agent-kit.es49.js";
2
+ import { encryptMessage } from "./standards-agent-kit.es48.js";
3
3
  class HCS10Client {
4
4
  constructor(operatorId, operatorPrivateKey, network, options) {
5
5
  this.standardClient = new HCS10Client$1({
@@ -12,8 +12,6 @@ export interface InscriptionSuccessResponse {
12
12
  hrl: string;
13
13
  /** Topic ID where the inscription was stored */
14
14
  topicId: string;
15
- /** Topic ID containing the JSON metadata when available */
16
- jsonTopicId?: string;
17
15
  /** Type of Hashinal - Static (HCS-5) or Dynamic (HCS-6) */
18
16
  standard: 'Static' | 'Dynamic';
19
17
  /** CDN URL for direct access to the inscribed content */
@@ -21,8 +19,6 @@ export interface InscriptionSuccessResponse {
21
19
  /** Transaction ID of the inscription */
22
20
  transactionId?: string;
23
21
  };
24
- /** Topic ID used for metadata lookups */
25
- jsonTopicId?: string;
26
22
  metadata: {
27
23
  /** Name/title of the inscribed content */
28
24
  name?: string;
@@ -101,7 +97,6 @@ export type InscriptionResponse = InscriptionSuccessResponse | InscriptionQuoteR
101
97
  export declare function createInscriptionSuccess(params: {
102
98
  hrl: string;
103
99
  topicId: string;
104
- jsonTopicId?: string;
105
100
  standard: 'Static' | 'Dynamic';
106
101
  cdnUrl?: string;
107
102
  transactionId?: string;
@@ -9,7 +9,7 @@ export interface TopicIds {
9
9
  * - Prefers jsonTopicId when present (for CDN linking)
10
10
  * - Collects topic_id/topicId from either inscription or result
11
11
  */
12
- export declare function extractTopicIds(inscription?: RetrievedInscriptionResult, result?: unknown): TopicIds;
12
+ export declare function extractTopicIds(inscription: RetrievedInscriptionResult, result?: unknown): TopicIds;
13
13
  /**
14
14
  * Build HRL/CDN URLs from extracted topic ids.
15
15
  * - HRL prefers jsonTopicId, falls back to topicId