@hashgraphonline/standards-agent-kit 0.2.112 → 0.2.113

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 (126) hide show
  1. package/dist/cjs/index.d.ts +1 -1
  2. package/dist/cjs/standards-agent-kit.cjs +1 -1
  3. package/dist/cjs/standards-agent-kit.cjs.map +1 -1
  4. package/dist/cjs/tools/hcs6/CreateDynamicRegistryTool.d.ts +44 -0
  5. package/dist/cjs/tools/hcs6/QueryDynamicRegistryTool.d.ts +50 -0
  6. package/dist/cjs/tools/hcs6/RegisterDynamicHashinalTool.d.ts +102 -0
  7. package/dist/cjs/tools/hcs6/UpdateDynamicHashinalTool.d.ts +96 -0
  8. package/dist/cjs/tools/hcs6/base-hcs6-tools.d.ts +28 -0
  9. package/dist/cjs/tools/hcs6/hcs6-tool-params.d.ts +18 -0
  10. package/dist/cjs/tools/hcs6/index.d.ts +6 -0
  11. package/dist/cjs/tools/index.d.ts +1 -0
  12. package/dist/cjs/tools/inscriber/InscribeFromBufferTool.d.ts +4 -4
  13. package/dist/es/index.d.ts +1 -1
  14. package/dist/es/standards-agent-kit.es.js +44 -31
  15. package/dist/es/standards-agent-kit.es.js.map +1 -1
  16. package/dist/es/standards-agent-kit.es10.js +27 -27
  17. package/dist/es/standards-agent-kit.es10.js.map +1 -1
  18. package/dist/es/standards-agent-kit.es11.js +20 -30
  19. package/dist/es/standards-agent-kit.es11.js.map +1 -1
  20. package/dist/es/standards-agent-kit.es12.js +27 -37
  21. package/dist/es/standards-agent-kit.es12.js.map +1 -1
  22. package/dist/es/standards-agent-kit.es13.js +48 -60
  23. package/dist/es/standards-agent-kit.es13.js.map +1 -1
  24. package/dist/es/standards-agent-kit.es14.js +60 -23
  25. package/dist/es/standards-agent-kit.es14.js.map +1 -1
  26. package/dist/es/standards-agent-kit.es15.js +23 -23
  27. package/dist/es/standards-agent-kit.es15.js.map +1 -1
  28. package/dist/es/standards-agent-kit.es16.js +23 -33
  29. package/dist/es/standards-agent-kit.es16.js.map +1 -1
  30. package/dist/es/standards-agent-kit.es17.js +34 -10
  31. package/dist/es/standards-agent-kit.es17.js.map +1 -1
  32. package/dist/es/standards-agent-kit.es18.js +16 -155
  33. package/dist/es/standards-agent-kit.es18.js.map +1 -1
  34. package/dist/es/standards-agent-kit.es19.js +150 -22
  35. package/dist/es/standards-agent-kit.es19.js.map +1 -1
  36. package/dist/es/standards-agent-kit.es20.js +25 -39
  37. package/dist/es/standards-agent-kit.es20.js.map +1 -1
  38. package/dist/es/standards-agent-kit.es21.js +26 -28
  39. package/dist/es/standards-agent-kit.es21.js.map +1 -1
  40. package/dist/es/standards-agent-kit.es22.js +16 -19
  41. package/dist/es/standards-agent-kit.es22.js.map +1 -1
  42. package/dist/es/standards-agent-kit.es23.js +21 -15
  43. package/dist/es/standards-agent-kit.es23.js.map +1 -1
  44. package/dist/es/standards-agent-kit.es24.js +18 -21
  45. package/dist/es/standards-agent-kit.es24.js.map +1 -1
  46. package/dist/es/standards-agent-kit.es25.js +35 -32
  47. package/dist/es/standards-agent-kit.es25.js.map +1 -1
  48. package/dist/es/standards-agent-kit.es26.js +38 -25
  49. package/dist/es/standards-agent-kit.es26.js.map +1 -1
  50. package/dist/es/standards-agent-kit.es27.js +25 -116
  51. package/dist/es/standards-agent-kit.es27.js.map +1 -1
  52. package/dist/es/standards-agent-kit.es28.js +33 -166
  53. package/dist/es/standards-agent-kit.es28.js.map +1 -1
  54. package/dist/es/standards-agent-kit.es29.js +42 -121
  55. package/dist/es/standards-agent-kit.es29.js.map +1 -1
  56. package/dist/es/standards-agent-kit.es30.js +40 -77
  57. package/dist/es/standards-agent-kit.es30.js.map +1 -1
  58. package/dist/es/standards-agent-kit.es31.js +42 -37
  59. package/dist/es/standards-agent-kit.es31.js.map +1 -1
  60. package/dist/es/standards-agent-kit.es32.js +20 -237
  61. package/dist/es/standards-agent-kit.es32.js.map +1 -1
  62. package/dist/es/standards-agent-kit.es33.js +154 -135
  63. package/dist/es/standards-agent-kit.es33.js.map +1 -1
  64. package/dist/es/standards-agent-kit.es34.js +168 -23
  65. package/dist/es/standards-agent-kit.es34.js.map +1 -1
  66. package/dist/es/standards-agent-kit.es35.js +126 -21
  67. package/dist/es/standards-agent-kit.es35.js.map +1 -1
  68. package/dist/es/standards-agent-kit.es36.js +86 -3
  69. package/dist/es/standards-agent-kit.es36.js.map +1 -1
  70. package/dist/es/standards-agent-kit.es37.js +45 -0
  71. package/dist/es/standards-agent-kit.es37.js.map +1 -0
  72. package/dist/es/standards-agent-kit.es38.js +249 -0
  73. package/dist/es/standards-agent-kit.es38.js.map +1 -0
  74. package/dist/es/standards-agent-kit.es39.js +141 -0
  75. package/dist/es/standards-agent-kit.es39.js.map +1 -0
  76. package/dist/es/standards-agent-kit.es4.js +65 -32
  77. package/dist/es/standards-agent-kit.es4.js.map +1 -1
  78. package/dist/es/standards-agent-kit.es40.js +33 -0
  79. package/dist/es/standards-agent-kit.es40.js.map +1 -0
  80. package/dist/es/standards-agent-kit.es41.js +28 -0
  81. package/dist/es/standards-agent-kit.es41.js.map +1 -0
  82. package/dist/es/standards-agent-kit.es42.js +7 -0
  83. package/dist/es/standards-agent-kit.es42.js.map +1 -0
  84. package/dist/es/standards-agent-kit.es5.js +35 -311
  85. package/dist/es/standards-agent-kit.es5.js.map +1 -1
  86. package/dist/es/standards-agent-kit.es6.js +320 -20
  87. package/dist/es/standards-agent-kit.es6.js.map +1 -1
  88. package/dist/es/standards-agent-kit.es7.js +19 -227
  89. package/dist/es/standards-agent-kit.es7.js.map +1 -1
  90. package/dist/es/standards-agent-kit.es8.js +216 -65
  91. package/dist/es/standards-agent-kit.es8.js.map +1 -1
  92. package/dist/es/standards-agent-kit.es9.js +72 -23
  93. package/dist/es/standards-agent-kit.es9.js.map +1 -1
  94. package/dist/es/tools/hcs6/CreateDynamicRegistryTool.d.ts +44 -0
  95. package/dist/es/tools/hcs6/QueryDynamicRegistryTool.d.ts +50 -0
  96. package/dist/es/tools/hcs6/RegisterDynamicHashinalTool.d.ts +102 -0
  97. package/dist/es/tools/hcs6/UpdateDynamicHashinalTool.d.ts +96 -0
  98. package/dist/es/tools/hcs6/base-hcs6-tools.d.ts +28 -0
  99. package/dist/es/tools/hcs6/hcs6-tool-params.d.ts +18 -0
  100. package/dist/es/tools/hcs6/index.d.ts +6 -0
  101. package/dist/es/tools/index.d.ts +1 -0
  102. package/dist/es/tools/inscriber/InscribeFromBufferTool.d.ts +4 -4
  103. package/dist/umd/index.d.ts +1 -1
  104. package/dist/umd/standards-agent-kit.umd.js +1 -1
  105. package/dist/umd/standards-agent-kit.umd.js.map +1 -1
  106. package/dist/umd/tools/hcs6/CreateDynamicRegistryTool.d.ts +44 -0
  107. package/dist/umd/tools/hcs6/QueryDynamicRegistryTool.d.ts +50 -0
  108. package/dist/umd/tools/hcs6/RegisterDynamicHashinalTool.d.ts +102 -0
  109. package/dist/umd/tools/hcs6/UpdateDynamicHashinalTool.d.ts +96 -0
  110. package/dist/umd/tools/hcs6/base-hcs6-tools.d.ts +28 -0
  111. package/dist/umd/tools/hcs6/hcs6-tool-params.d.ts +18 -0
  112. package/dist/umd/tools/hcs6/index.d.ts +6 -0
  113. package/dist/umd/tools/index.d.ts +1 -0
  114. package/dist/umd/tools/inscriber/InscribeFromBufferTool.d.ts +4 -4
  115. package/package.json +1 -1
  116. package/src/index.ts +1 -1
  117. package/src/tools/hcs6/CreateDynamicRegistryTool.ts +66 -0
  118. package/src/tools/hcs6/QueryDynamicRegistryTool.ts +72 -0
  119. package/src/tools/hcs6/RegisterDynamicHashinalTool.ts +79 -0
  120. package/src/tools/hcs6/UpdateDynamicHashinalTool.ts +74 -0
  121. package/src/tools/hcs6/base-hcs6-tools.ts +63 -0
  122. package/src/tools/hcs6/hcs6-tool-params.ts +21 -0
  123. package/src/tools/hcs6/index.ts +6 -0
  124. package/src/tools/index.ts +1 -0
  125. package/src/tools/inscriber/InscribeFromBufferTool.ts +1 -1
  126. package/src/tools/inscriber/InscribeFromUrlTool.ts +60 -7
@@ -1,133 +1,54 @@
1
1
  import { z } from "zod";
2
- import { BaseInscriberQueryTool } from "./standards-agent-kit.es26.js";
3
- const inscribeFromBufferSchema = z.object({
4
- base64Data: z.string().min(1, "Base64 data cannot be empty").describe("Base64 encoded content to inscribe. Must contain valid, non-empty content (minimum 10 bytes after decoding)."),
5
- fileName: z.string().min(1, "File name cannot be empty").describe("Name for the inscribed content. Required for all inscriptions."),
6
- mimeType: z.string().optional().describe("MIME type of the content"),
7
- mode: z.enum(["file", "hashinal"]).optional().describe("Inscription mode: file or hashinal NFT"),
8
- metadata: z.record(z.unknown()).optional().describe("Metadata to attach to the inscription"),
9
- tags: z.array(z.string()).optional().describe("Tags to categorize the inscription"),
10
- chunkSize: z.number().int().positive().optional().describe("Chunk size for large files"),
11
- waitForConfirmation: z.boolean().optional().describe("Whether to wait for inscription confirmation"),
12
- timeoutMs: z.number().int().positive().optional().describe("Timeout in milliseconds for inscription (default: no timeout)"),
13
- apiKey: z.string().optional().describe("API key for inscription service")
2
+ import { BaseHCS6TransactionTool } from "./standards-agent-kit.es27.js";
3
+ const RegisterDynamicHashinalSchema = z.object({
4
+ metadata: z.record(z.unknown()).describe("Metadata object for the hashinal (e.g., name, description, attributes)"),
5
+ data: z.object({
6
+ base64: z.string().optional().describe("Base64 encoded data for the hashinal"),
7
+ url: z.string().optional().describe("URL to fetch data from"),
8
+ mimeType: z.string().optional().describe("MIME type of the data")
9
+ }).optional().describe("Data to inscribe with the hashinal"),
10
+ memo: z.string().optional().describe("Optional memo for the registration"),
11
+ ttl: z.number().min(3600).default(86400).describe("Time-to-live in seconds for the inscription"),
12
+ registryTopicId: z.string().optional().describe("Registry topic ID to use. If not provided, a new registry will be created"),
13
+ submitKey: z.string().optional().describe("Submit key for the registry (required if registry has a submit key)")
14
14
  });
15
- class InscribeFromBufferTool extends BaseInscriberQueryTool {
16
- constructor() {
17
- super(...arguments);
18
- this.name = "inscribeFromBuffer";
19
- this.description = "Inscribe content that you already have (text, data, or files) to the Hedera network. Use this tool when you have content from: Wikipedia articles, MCP tool responses, text data, API responses, or any content you've retrieved. Convert your content to base64 first. DO NOT use inscribeFromUrl for web page content - use this tool instead after retrieving the actual content.";
15
+ class RegisterDynamicHashinalTool extends BaseHCS6TransactionTool {
16
+ constructor(params) {
17
+ super(params);
18
+ this.name = "registerDynamicHashinal";
19
+ this.description = "Create and register a new dynamic hashinal that can be updated over time";
20
+ this.schema = RegisterDynamicHashinalSchema;
20
21
  }
21
- get specificInputSchema() {
22
- return inscribeFromBufferSchema;
23
- }
24
- async executeQuery(params, _runManager) {
25
- console.log(`[DEBUG] InscribeFromBufferTool.executeQuery called`);
26
- console.log(`[DEBUG] Buffer tool received base64Data length: ${params.base64Data?.length || 0}`);
27
- console.log(`[DEBUG] Buffer tool fileName: ${params.fileName}`);
28
- console.log(`[DEBUG] Buffer tool mimeType: ${params.mimeType}`);
29
- if (!params.base64Data || params.base64Data.trim() === "") {
30
- console.log(`[InscribeFromBufferTool] ERROR: No data provided`);
31
- throw new Error("No data provided. Cannot inscribe empty content. Please provide valid base64 encoded data.");
32
- }
33
- if (!params.fileName || params.fileName.trim() === "") {
34
- console.log(`[InscribeFromBufferTool] ERROR: No fileName provided`);
35
- throw new Error("No fileName provided. A valid fileName is required for inscription.");
36
- }
37
- let buffer;
22
+ async _call(params) {
38
23
  try {
39
- buffer = Buffer.from(params.base64Data, "base64");
40
- } catch (error) {
41
- console.log(`[InscribeFromBufferTool] ERROR: Invalid base64 data`);
42
- throw new Error("Invalid base64 data provided. Please ensure the data is properly base64 encoded.");
43
- }
44
- console.log(`[InscribeFromBufferTool] Buffer length after conversion: ${buffer.length}`);
45
- if (buffer.length === 0) {
46
- console.log(`[InscribeFromBufferTool] ERROR: Buffer is empty after conversion`);
47
- throw new Error("Buffer is empty after base64 conversion. The provided data appears to be invalid or empty.");
48
- }
49
- if (buffer.length < 10) {
50
- console.log(`[InscribeFromBufferTool] WARNING: Buffer is very small (${buffer.length} bytes)`);
51
- console.log(`[InscribeFromBufferTool] Buffer content preview: ${buffer.toString("utf8", 0, Math.min(buffer.length, 50))}`);
52
- throw new Error(`Buffer content is too small (${buffer.length} bytes). This may indicate empty or invalid content. Please verify the source data contains actual content.`);
53
- }
54
- const isValidBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(params.base64Data);
55
- if (!isValidBase64) {
56
- console.log(`[InscribeFromBufferTool] ERROR: Invalid base64 format`);
57
- throw new Error("Invalid base64 format. The data does not appear to be properly base64 encoded.");
58
- }
59
- if (buffer.toString("utf8", 0, Math.min(buffer.length, 100)).trim() === "") {
60
- console.log(`[InscribeFromBufferTool] ERROR: Buffer contains only whitespace or empty content`);
61
- throw new Error("Buffer contains only whitespace or empty content. Cannot inscribe meaningless data.");
62
- }
63
- const options = {
64
- mode: params.mode,
65
- metadata: params.metadata,
66
- tags: params.tags,
67
- chunkSize: params.chunkSize,
68
- waitForConfirmation: params.waitForConfirmation ?? true,
69
- waitMaxAttempts: 10,
70
- waitIntervalMs: 3e3,
71
- apiKey: params.apiKey,
72
- network: this.inscriberBuilder["hederaKit"].client.network.toString().includes("mainnet") ? "mainnet" : "testnet"
73
- };
74
- try {
75
- let result;
76
- if (params.timeoutMs) {
77
- const timeoutPromise = new Promise((_, reject) => {
78
- setTimeout(
79
- () => reject(new Error(`Inscription timed out after ${params.timeoutMs}ms`)),
80
- params.timeoutMs
81
- );
82
- });
83
- result = await Promise.race([
84
- this.inscriberBuilder.inscribe(
85
- {
86
- type: "buffer",
87
- buffer,
88
- fileName: params.fileName,
89
- mimeType: params.mimeType
90
- },
91
- options
92
- ),
93
- timeoutPromise
94
- ]);
95
- } else {
96
- result = await this.inscriberBuilder.inscribe(
97
- {
98
- type: "buffer",
99
- buffer,
100
- fileName: params.fileName,
101
- mimeType: params.mimeType
102
- },
103
- options
104
- );
105
- }
106
- if (result.confirmed) {
107
- const topicId = result.inscription?.topic_id || result.result.topicId;
108
- const network = options.network || "testnet";
109
- const cdnUrl = topicId ? `https://kiloscribe.com/api/inscription-cdn/${topicId}?network=${network}` : null;
110
- return `Successfully inscribed and confirmed content on the Hedera network!
111
-
112
- Transaction ID: ${result.result.transactionId}
113
- Topic ID: ${topicId || "N/A"}${cdnUrl ? `
114
- View inscription: ${cdnUrl}` : ""}
115
-
116
- The inscription is now available.`;
117
- } else {
118
- return `Successfully submitted inscription to the Hedera network!
119
-
120
- Transaction ID: ${result.result.transactionId}
121
-
122
- The inscription is processing and will be confirmed shortly.`;
24
+ const result = await this.hcs6Builder.register({
25
+ metadata: params.metadata,
26
+ data: params.data,
27
+ memo: params.memo,
28
+ ttl: params.ttl,
29
+ registryTopicId: params.registryTopicId,
30
+ submitKey: params.submitKey
31
+ });
32
+ if (!result.success || !result.registryTopicId || !result.inscriptionTopicId) {
33
+ throw new Error(result.error || "Failed to register dynamic hashinal");
123
34
  }
35
+ return {
36
+ status: "success",
37
+ data: {
38
+ registryTopicId: result.registryTopicId,
39
+ inscriptionTopicId: result.inscriptionTopicId,
40
+ transactionId: result.transactionId
41
+ }
42
+ };
124
43
  } catch (error) {
125
- const errorMessage = error instanceof Error ? error.message : "Failed to inscribe from buffer";
126
- throw new Error(`Inscription failed: ${errorMessage}`);
44
+ return {
45
+ status: "error",
46
+ message: error instanceof Error ? error.message : "Unknown error"
47
+ };
127
48
  }
128
49
  }
129
50
  }
130
51
  export {
131
- InscribeFromBufferTool
52
+ RegisterDynamicHashinalTool
132
53
  };
133
54
  //# sourceMappingURL=standards-agent-kit.es29.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es29.js","sources":["../../src/tools/inscriber/InscribeFromBufferTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseInscriberQueryTool } from './base-inscriber-tools';\nimport { InscriptionOptions } from '@hashgraphonline/standards-sdk';\nimport { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';\n\n/**\n * Schema for inscribing from buffer\n */\nconst inscribeFromBufferSchema = z.object({\n base64Data: z.string().min(1, 'Base64 data cannot be empty').describe('Base64 encoded content to inscribe. Must contain valid, non-empty content (minimum 10 bytes after decoding).'),\n fileName: z.string().min(1, 'File name cannot be empty').describe('Name for the inscribed content. Required for all inscriptions.'),\n mimeType: z\n .string()\n .optional()\n .describe('MIME type of the content'),\n mode: z\n .enum(['file', 'hashinal'])\n .optional()\n .describe('Inscription mode: file or hashinal NFT'),\n metadata: z\n .record(z.unknown())\n .optional()\n .describe('Metadata to attach to the inscription'),\n tags: z\n .array(z.string())\n .optional()\n .describe('Tags to categorize the inscription'),\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('Timeout in milliseconds for inscription (default: no timeout)'),\n apiKey: z\n .string()\n .optional()\n .describe('API key for inscription service'),\n});\n\n\n/**\n * Tool for inscribing content from buffer\n */\nexport class InscribeFromBufferTool extends BaseInscriberQueryTool<typeof inscribeFromBufferSchema> {\n name = 'inscribeFromBuffer';\n description = 'Inscribe content that you already have (text, data, or files) to the Hedera network. Use this tool when you have content from: Wikipedia articles, MCP tool responses, text data, API responses, or any content you\\'ve retrieved. Convert your content to base64 first. DO NOT use inscribeFromUrl for web page content - use this tool instead after retrieving the actual content.';\n\n get specificInputSchema() {\n return inscribeFromBufferSchema;\n }\n\n protected async executeQuery(\n params: z.infer<typeof inscribeFromBufferSchema>,\n _runManager?: CallbackManagerForToolRun\n ): Promise<unknown> {\n console.log(`[DEBUG] InscribeFromBufferTool.executeQuery called`);\n console.log(`[DEBUG] Buffer tool received base64Data length: ${params.base64Data?.length || 0}`);\n console.log(`[DEBUG] Buffer tool fileName: ${params.fileName}`);\n console.log(`[DEBUG] Buffer tool mimeType: ${params.mimeType}`);\n \n if (!params.base64Data || params.base64Data.trim() === '') {\n console.log(`[InscribeFromBufferTool] ERROR: No data provided`);\n throw new Error('No data provided. Cannot inscribe empty content. Please provide valid base64 encoded data.');\n }\n\n if (!params.fileName || params.fileName.trim() === '') {\n console.log(`[InscribeFromBufferTool] ERROR: No fileName provided`);\n throw new Error('No fileName provided. A valid fileName is required for inscription.');\n }\n\n let buffer: Buffer;\n try {\n buffer = Buffer.from(params.base64Data, 'base64');\n } catch (error) {\n console.log(`[InscribeFromBufferTool] ERROR: Invalid base64 data`);\n throw new Error('Invalid base64 data provided. Please ensure the data is properly base64 encoded.');\n }\n \n console.log(`[InscribeFromBufferTool] Buffer length after conversion: ${buffer.length}`);\n \n if (buffer.length === 0) {\n console.log(`[InscribeFromBufferTool] ERROR: Buffer is empty after conversion`);\n throw new Error('Buffer is empty after base64 conversion. The provided data appears to be invalid or empty.');\n }\n\n if (buffer.length < 10) {\n console.log(`[InscribeFromBufferTool] WARNING: Buffer is very small (${buffer.length} bytes)`);\n console.log(`[InscribeFromBufferTool] Buffer content preview: ${buffer.toString('utf8', 0, Math.min(buffer.length, 50))}`);\n throw new Error(`Buffer content is too small (${buffer.length} bytes). This may indicate empty or invalid content. Please verify the source data contains actual content.`);\n }\n\n const isValidBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(params.base64Data);\n if (!isValidBase64) {\n console.log(`[InscribeFromBufferTool] ERROR: Invalid base64 format`);\n throw new Error('Invalid base64 format. The data does not appear to be properly base64 encoded.');\n }\n\n if (buffer.toString('utf8', 0, Math.min(buffer.length, 100)).trim() === '') {\n console.log(`[InscribeFromBufferTool] ERROR: Buffer contains only whitespace or empty content`);\n throw new Error('Buffer contains only whitespace or empty content. Cannot inscribe meaningless data.');\n }\n\n const options: InscriptionOptions = {\n mode: params.mode,\n metadata: params.metadata,\n tags: params.tags,\n chunkSize: params.chunkSize,\n waitForConfirmation: params.waitForConfirmation ?? true,\n waitMaxAttempts: 10,\n waitIntervalMs: 3000,\n apiKey: params.apiKey,\n network: this.inscriberBuilder['hederaKit'].client.network.toString().includes('mainnet') ? 'mainnet' : 'testnet',\n };\n\n try {\n let result: any;\n \n if (params.timeoutMs) {\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(\n () => reject(new Error(`Inscription timed out after ${params.timeoutMs}ms`)),\n params.timeoutMs\n );\n });\n\n result = await Promise.race([\n this.inscriberBuilder.inscribe(\n {\n type: 'buffer',\n buffer,\n fileName: params.fileName,\n mimeType: params.mimeType,\n },\n options\n ),\n timeoutPromise,\n ]);\n } else {\n result = await this.inscriberBuilder.inscribe(\n {\n type: 'buffer',\n buffer,\n fileName: params.fileName,\n mimeType: params.mimeType,\n },\n options\n );\n }\n\n if (result.confirmed) {\n const topicId = result.inscription?.topic_id || result.result.topicId;\n const network = options.network || 'testnet';\n const cdnUrl = topicId ? `https://kiloscribe.com/api/inscription-cdn/${topicId}?network=${network}` : null;\n return `Successfully inscribed and confirmed content on the Hedera network!\\n\\nTransaction ID: ${result.result.transactionId}\\nTopic ID: ${topicId || 'N/A'}${cdnUrl ? `\\nView inscription: ${cdnUrl}` : ''}\\n\\nThe inscription is now available.`;\n } else {\n return `Successfully submitted inscription to the Hedera network!\\n\\nTransaction ID: ${result.result.transactionId}\\n\\nThe inscription is processing and will be confirmed shortly.`;\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to inscribe from buffer';\n throw new Error(`Inscription failed: ${errorMessage}`);\n }\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-agent-kit.es29.js","sources":["../../src/tools/hcs6/RegisterDynamicHashinalTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseHCS6TransactionTool } from './base-hcs6-tools';\nimport { HCS6TransactionToolParams } from './hcs6-tool-params';\nimport type { TransactionResponse } from 'hedera-agent-kit';\n\n/**\n * Schema for registering a dynamic hashinal\n */\nconst RegisterDynamicHashinalSchema = z.object({\n metadata: z.record(z.unknown())\n .describe('Metadata object for the hashinal (e.g., name, description, attributes)'),\n data: z.object({\n base64: z.string().optional().describe('Base64 encoded data for the hashinal'),\n url: z.string().optional().describe('URL to fetch data from'),\n mimeType: z.string().optional().describe('MIME type of the data'),\n }).optional()\n .describe('Data to inscribe with the hashinal'),\n memo: z.string()\n .optional()\n .describe('Optional memo for the registration'),\n ttl: z.number()\n .min(3600)\n .default(86400)\n .describe('Time-to-live in seconds for the inscription'),\n registryTopicId: z.string()\n .optional()\n .describe('Registry topic ID to use. If not provided, a new registry will be created'),\n submitKey: z.string()\n .optional()\n .describe('Submit key for the registry (required if registry has a submit key)'),\n});\n\nexport type RegisterDynamicHashinalInput = z.infer<typeof RegisterDynamicHashinalSchema>;\n\n/**\n * Tool for registering (creating) dynamic hashinals\n */\nexport class RegisterDynamicHashinalTool extends BaseHCS6TransactionTool<typeof RegisterDynamicHashinalSchema> {\n name = 'registerDynamicHashinal';\n description = 'Create and register a new dynamic hashinal that can be updated over time';\n schema = RegisterDynamicHashinalSchema;\n\n constructor(params: HCS6TransactionToolParams) {\n super(params);\n }\n\n protected async _call(\n params: RegisterDynamicHashinalInput\n ): Promise<TransactionResponse> {\n try {\n const result = await this.hcs6Builder.register({\n metadata: params.metadata,\n data: params.data,\n memo: params.memo,\n ttl: params.ttl,\n registryTopicId: params.registryTopicId,\n submitKey: params.submitKey,\n });\n\n if (!result.success || !result.registryTopicId || !result.inscriptionTopicId) {\n throw new Error(result.error || 'Failed to register dynamic hashinal');\n }\n\n return {\n status: 'success',\n data: {\n registryTopicId: result.registryTopicId,\n inscriptionTopicId: result.inscriptionTopicId,\n transactionId: result.transactionId,\n },\n };\n } catch (error) {\n return {\n status: 'error',\n message: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n}"],"names":[],"mappings":";;AAQA,MAAM,gCAAgC,EAAE,OAAO;AAAA,EAC7C,UAAU,EAAE,OAAO,EAAE,SAAS,EAC3B,SAAS,wEAAwE;AAAA,EACpF,MAAM,EAAE,OAAO;AAAA,IACb,QAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,sCAAsC;AAAA,IAC7E,KAAK,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,wBAAwB;AAAA,IAC5D,UAAU,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,uBAAuB;AAAA,EAAA,CACjE,EAAE,SAAA,EACA,SAAS,oCAAoC;AAAA,EAChD,MAAM,EAAE,OAAA,EACL,SAAA,EACA,SAAS,oCAAoC;AAAA,EAChD,KAAK,EAAE,OAAA,EACJ,IAAI,IAAI,EACR,QAAQ,KAAK,EACb,SAAS,6CAA6C;AAAA,EACzD,iBAAiB,EAAE,OAAA,EAChB,SAAA,EACA,SAAS,2EAA2E;AAAA,EACvF,WAAW,EAAE,OAAA,EACV,SAAA,EACA,SAAS,qEAAqE;AACnF,CAAC;AAOM,MAAM,oCAAoC,wBAA8D;AAAA,EAK7G,YAAY,QAAmC;AAC7C,UAAM,MAAM;AALd,SAAA,OAAO;AACP,SAAA,cAAc;AACd,SAAA,SAAS;AAAA,EAIT;AAAA,EAEA,MAAgB,MACd,QAC8B;AAC9B,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,YAAY,SAAS;AAAA,QAC7C,UAAU,OAAO;AAAA,QACjB,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,KAAK,OAAO;AAAA,QACZ,iBAAiB,OAAO;AAAA,QACxB,WAAW,OAAO;AAAA,MAAA,CACnB;AAED,UAAI,CAAC,OAAO,WAAW,CAAC,OAAO,mBAAmB,CAAC,OAAO,oBAAoB;AAC5E,cAAM,IAAI,MAAM,OAAO,SAAS,qCAAqC;AAAA,MACvE;AAEA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,iBAAiB,OAAO;AAAA,UACxB,oBAAoB,OAAO;AAAA,UAC3B,eAAe,OAAO;AAAA,QAAA;AAAA,MACxB;AAAA,IAEJ,SAAS,OAAO;AACd,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAAA;AAAA,IAEtD;AAAA,EACF;AACF;"}
@@ -1,90 +1,53 @@
1
1
  import { z } from "zod";
2
- import { BaseInscriberQueryTool } from "./standards-agent-kit.es26.js";
3
- const inscribeHashinalSchema = z.object({
4
- url: z.string().url().describe("The URL of the content to inscribe as Hashinal NFT"),
5
- name: z.string().describe("Name of the Hashinal NFT"),
6
- creator: z.string().describe("Creator account ID or name"),
7
- description: z.string().describe("Description of the Hashinal NFT"),
8
- type: z.string().describe('Type of NFT (e.g., "image", "video", "audio")'),
9
- attributes: z.array(
10
- z.object({
11
- trait_type: z.string(),
12
- value: z.union([z.string(), z.number()])
13
- })
14
- ).optional().describe("NFT attributes"),
15
- properties: z.record(z.unknown()).optional().describe("Additional properties"),
16
- jsonFileURL: z.string().url().optional().describe("URL to JSON metadata file"),
17
- tags: z.array(z.string()).optional().describe("Tags to categorize the NFT"),
18
- chunkSize: z.number().int().positive().optional().describe("Chunk size for large files"),
19
- waitForConfirmation: z.boolean().optional().describe("Whether to wait for inscription confirmation"),
20
- apiKey: z.string().optional().describe("API key for inscription service")
2
+ import { BaseHCS6TransactionTool } from "./standards-agent-kit.es27.js";
3
+ const UpdateDynamicHashinalSchema = z.object({
4
+ registryTopicId: z.string().describe("The registry topic ID that tracks this dynamic hashinal"),
5
+ metadata: z.record(z.unknown()).describe("Updated metadata object for the hashinal"),
6
+ data: z.object({
7
+ base64: z.string().optional().describe("Base64 encoded data for the updated hashinal"),
8
+ url: z.string().optional().describe("URL to fetch updated data from"),
9
+ mimeType: z.string().optional().describe("MIME type of the data")
10
+ }).optional().describe("Updated data to inscribe"),
11
+ memo: z.string().optional().describe('Optional memo for the update (e.g., "Level up", "Version 2.0")'),
12
+ submitKey: z.string().describe("Submit key for the registry (required to update)")
21
13
  });
22
- class InscribeHashinalTool extends BaseInscriberQueryTool {
23
- constructor() {
24
- super(...arguments);
25
- this.name = "inscribeHashinal";
26
- this.description = "Inscribe content as a Hashinal NFT on the Hedera network";
14
+ class UpdateDynamicHashinalTool extends BaseHCS6TransactionTool {
15
+ constructor(params) {
16
+ super(params);
17
+ this.name = "updateDynamicHashinal";
18
+ this.description = "Update an existing dynamic hashinal with new content while maintaining the same registry";
19
+ this.schema = UpdateDynamicHashinalSchema;
27
20
  }
28
- get specificInputSchema() {
29
- return inscribeHashinalSchema;
30
- }
31
- async executeQuery(params, _runManager) {
32
- const metadata = {
33
- name: params.name,
34
- creator: params.creator,
35
- description: params.description,
36
- type: params.type,
37
- attributes: params.attributes,
38
- properties: params.properties
39
- };
40
- const options = {
41
- mode: "hashinal",
42
- metadata,
43
- jsonFileURL: params.jsonFileURL,
44
- tags: params.tags,
45
- chunkSize: params.chunkSize,
46
- waitForConfirmation: params.waitForConfirmation ?? true,
47
- waitMaxAttempts: 10,
48
- waitIntervalMs: 3e3,
49
- apiKey: params.apiKey,
50
- network: this.inscriberBuilder["hederaKit"].client.network.toString().includes("mainnet") ? "mainnet" : "testnet"
51
- };
21
+ async _call(params) {
52
22
  try {
53
- const timeoutPromise = new Promise((_, reject) => {
54
- setTimeout(() => reject(new Error("Inscription timed out after 30 seconds")), 3e4);
23
+ const result = await this.hcs6Builder.register({
24
+ metadata: params.metadata,
25
+ data: params.data,
26
+ memo: params.memo,
27
+ registryTopicId: params.registryTopicId,
28
+ submitKey: params.submitKey
55
29
  });
56
- const result = await Promise.race([
57
- this.inscriberBuilder.inscribe(
58
- { type: "url", url: params.url },
59
- options
60
- ),
61
- timeoutPromise
62
- ]);
63
- if (result.confirmed) {
64
- const topicId = result.inscription?.topic_id || result.result.topicId;
65
- const network = options.network || "testnet";
66
- const cdnUrl = topicId ? `https://kiloscribe.com/api/inscription-cdn/${topicId}?network=${network}` : null;
67
- return `Successfully inscribed and confirmed Hashinal NFT on the Hedera network!
68
-
69
- Transaction ID: ${result.result.transactionId}
70
- Topic ID: ${topicId || "N/A"}${cdnUrl ? `
71
- View inscription: ${cdnUrl}` : ""}
72
-
73
- The Hashinal NFT is now available.`;
74
- } else {
75
- return `Successfully submitted Hashinal NFT inscription to the Hedera network!
76
-
77
- Transaction ID: ${result.result.transactionId}
78
-
79
- The inscription is processing and will be confirmed shortly.`;
30
+ if (!result.success) {
31
+ throw new Error(result.error || "Failed to update dynamic hashinal");
80
32
  }
33
+ return {
34
+ status: "success",
35
+ data: {
36
+ registryTopicId: result.registryTopicId,
37
+ newInscriptionTopicId: result.inscriptionTopicId,
38
+ transactionId: result.transactionId,
39
+ updateMemo: params.memo
40
+ }
41
+ };
81
42
  } catch (error) {
82
- const errorMessage = error instanceof Error ? error.message : "Failed to inscribe Hashinal NFT";
83
- throw new Error(`Inscription failed: ${errorMessage}`);
43
+ return {
44
+ status: "error",
45
+ message: error instanceof Error ? error.message : "Unknown error"
46
+ };
84
47
  }
85
48
  }
86
49
  }
87
50
  export {
88
- InscribeHashinalTool
51
+ UpdateDynamicHashinalTool
89
52
  };
90
53
  //# sourceMappingURL=standards-agent-kit.es30.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es30.js","sources":["../../src/tools/inscriber/InscribeHashinalTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseInscriberQueryTool } from './base-inscriber-tools';\nimport { InscriptionOptions } from '@hashgraphonline/standards-sdk';\nimport { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';\n\n/**\n * Schema for inscribing Hashinal NFT\n */\nconst inscribeHashinalSchema = z.object({\n url: z.string().url().describe('The URL of the content to inscribe as Hashinal NFT'),\n name: z.string().describe('Name of the Hashinal NFT'),\n creator: z.string().describe('Creator account ID or name'),\n description: z.string().describe('Description of the Hashinal NFT'),\n type: z.string().describe('Type of NFT (e.g., \"image\", \"video\", \"audio\")'),\n attributes: z\n .array(\n z.object({\n trait_type: z.string(),\n value: z.union([z.string(), z.number()]),\n })\n )\n .optional()\n .describe('NFT attributes'),\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 tags: z\n .array(z.string())\n .optional()\n .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 apiKey: z\n .string()\n .optional()\n .describe('API key for inscription service'),\n});\n\n\n/**\n * Tool for inscribing Hashinal NFTs\n */\nexport class InscribeHashinalTool extends BaseInscriberQueryTool<typeof inscribeHashinalSchema> {\n name = 'inscribeHashinal';\n description = 'Inscribe content as a Hashinal NFT on the Hedera network';\n\n get specificInputSchema() {\n return inscribeHashinalSchema;\n }\n\n protected async executeQuery(\n params: z.infer<typeof inscribeHashinalSchema>,\n _runManager?: CallbackManagerForToolRun\n ): Promise<unknown> {\n const metadata = {\n name: params.name,\n creator: params.creator,\n description: params.description,\n type: params.type,\n attributes: params.attributes,\n properties: params.properties,\n };\n\n const options: InscriptionOptions = {\n mode: 'hashinal',\n metadata,\n jsonFileURL: params.jsonFileURL,\n tags: params.tags,\n chunkSize: params.chunkSize,\n waitForConfirmation: params.waitForConfirmation ?? true,\n waitMaxAttempts: 10,\n waitIntervalMs: 3000,\n apiKey: params.apiKey,\n network: this.inscriberBuilder['hederaKit'].client.network.toString().includes('mainnet') ? 'mainnet' : 'testnet',\n };\n\n try {\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Inscription timed out after 30 seconds')), 30000);\n });\n\n const result = await Promise.race([\n this.inscriberBuilder.inscribe(\n { type: 'url', url: params.url },\n options\n ),\n timeoutPromise\n ]) as any;\n\n if (result.confirmed) {\n const topicId = result.inscription?.topic_id || result.result.topicId;\n const network = options.network || 'testnet';\n const cdnUrl = topicId ? `https://kiloscribe.com/api/inscription-cdn/${topicId}?network=${network}` : null;\n return `Successfully inscribed and confirmed Hashinal NFT on the Hedera network!\\n\\nTransaction ID: ${result.result.transactionId}\\nTopic ID: ${topicId || 'N/A'}${cdnUrl ? `\\nView inscription: ${cdnUrl}` : ''}\\n\\nThe Hashinal NFT is now available.`;\n } else {\n return `Successfully submitted Hashinal NFT inscription to the Hedera network!\\n\\nTransaction ID: ${result.result.transactionId}\\n\\nThe inscription is processing and will be confirmed shortly.`;\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to inscribe Hashinal NFT';\n throw new Error(`Inscription failed: ${errorMessage}`);\n }\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-agent-kit.es30.js","sources":["../../src/tools/hcs6/UpdateDynamicHashinalTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseHCS6TransactionTool } from './base-hcs6-tools';\nimport { HCS6TransactionToolParams } from './hcs6-tool-params';\nimport type { TransactionResponse } from 'hedera-agent-kit';\n\n/**\n * Schema for updating a dynamic hashinal\n */\nconst UpdateDynamicHashinalSchema = z.object({\n registryTopicId: z.string()\n .describe('The registry topic ID that tracks this dynamic hashinal'),\n metadata: z.record(z.unknown())\n .describe('Updated metadata object for the hashinal'),\n data: z.object({\n base64: z.string().optional().describe('Base64 encoded data for the updated hashinal'),\n url: z.string().optional().describe('URL to fetch updated data from'),\n mimeType: z.string().optional().describe('MIME type of the data'),\n }).optional()\n .describe('Updated data to inscribe'),\n memo: z.string()\n .optional()\n .describe('Optional memo for the update (e.g., \"Level up\", \"Version 2.0\")'),\n submitKey: z.string()\n .describe('Submit key for the registry (required to update)'),\n});\n\nexport type UpdateDynamicHashinalInput = z.infer<typeof UpdateDynamicHashinalSchema>;\n\n/**\n * Tool for updating dynamic hashinals\n */\nexport class UpdateDynamicHashinalTool extends BaseHCS6TransactionTool<typeof UpdateDynamicHashinalSchema> {\n name = 'updateDynamicHashinal';\n description = 'Update an existing dynamic hashinal with new content while maintaining the same registry';\n schema = UpdateDynamicHashinalSchema;\n\n constructor(params: HCS6TransactionToolParams) {\n super(params);\n }\n\n protected async _call(\n params: UpdateDynamicHashinalInput\n ): Promise<TransactionResponse> {\n try {\n // Use the register method with the existing registry ID\n const result = await this.hcs6Builder.register({\n metadata: params.metadata,\n data: params.data,\n memo: params.memo,\n registryTopicId: params.registryTopicId,\n submitKey: params.submitKey,\n });\n\n if (!result.success) {\n throw new Error(result.error || 'Failed to update dynamic hashinal');\n }\n\n return {\n status: 'success',\n data: {\n registryTopicId: result.registryTopicId,\n newInscriptionTopicId: result.inscriptionTopicId,\n transactionId: result.transactionId,\n updateMemo: params.memo,\n },\n };\n } catch (error) {\n return {\n status: 'error',\n message: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n}"],"names":[],"mappings":";;AAQA,MAAM,8BAA8B,EAAE,OAAO;AAAA,EAC3C,iBAAiB,EAAE,SAChB,SAAS,yDAAyD;AAAA,EACrE,UAAU,EAAE,OAAO,EAAE,SAAS,EAC3B,SAAS,0CAA0C;AAAA,EACtD,MAAM,EAAE,OAAO;AAAA,IACb,QAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,8CAA8C;AAAA,IACrF,KAAK,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,gCAAgC;AAAA,IACpE,UAAU,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,uBAAuB;AAAA,EAAA,CACjE,EAAE,SAAA,EACA,SAAS,0BAA0B;AAAA,EACtC,MAAM,EAAE,OAAA,EACL,SAAA,EACA,SAAS,gEAAgE;AAAA,EAC5E,WAAW,EAAE,OAAA,EACV,SAAS,kDAAkD;AAChE,CAAC;AAOM,MAAM,kCAAkC,wBAA4D;AAAA,EAKzG,YAAY,QAAmC;AAC7C,UAAM,MAAM;AALd,SAAA,OAAO;AACP,SAAA,cAAc;AACd,SAAA,SAAS;AAAA,EAIT;AAAA,EAEA,MAAgB,MACd,QAC8B;AAC9B,QAAI;AAEF,YAAM,SAAS,MAAM,KAAK,YAAY,SAAS;AAAA,QAC7C,UAAU,OAAO;AAAA,QACjB,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,iBAAiB,OAAO;AAAA,QACxB,WAAW,OAAO;AAAA,MAAA,CACnB;AAED,UAAI,CAAC,OAAO,SAAS;AACnB,cAAM,IAAI,MAAM,OAAO,SAAS,mCAAmC;AAAA,MACrE;AAEA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,iBAAiB,OAAO;AAAA,UACxB,uBAAuB,OAAO;AAAA,UAC9B,eAAe,OAAO;AAAA,UACtB,YAAY,OAAO;AAAA,QAAA;AAAA,MACrB;AAAA,IAEJ,SAAS,OAAO;AACd,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAAA;AAAA,IAEtD;AAAA,EACF;AACF;"}
@@ -1,45 +1,50 @@
1
1
  import { z } from "zod";
2
- import { BaseInscriberQueryTool } from "./standards-agent-kit.es26.js";
3
- const retrieveInscriptionSchema = z.object({
4
- transactionId: z.string().describe("The transaction ID of the inscription to retrieve"),
5
- apiKey: z.string().optional().describe("API key for inscription service")
2
+ import { BaseHCS6QueryTool } from "./standards-agent-kit.es27.js";
3
+ const QueryDynamicRegistrySchema = z.object({
4
+ topicId: z.string().describe("The registry topic ID to query"),
5
+ limit: z.number().optional().default(100).describe("Maximum number of entries to retrieve"),
6
+ order: z.enum(["asc", "desc"]).optional().default("desc").describe("Order of entries (desc shows latest first)"),
7
+ skip: z.number().optional().describe("Number of entries to skip")
6
8
  });
7
- class RetrieveInscriptionTool extends BaseInscriberQueryTool {
8
- constructor() {
9
- super(...arguments);
10
- this.name = "retrieveInscription";
11
- this.description = "Retrieve details of an existing inscription from the Hedera network";
9
+ class QueryDynamicRegistryTool extends BaseHCS6QueryTool {
10
+ constructor(params) {
11
+ super(params);
12
+ this.name = "queryDynamicRegistry";
13
+ this.description = "Query a dynamic registry to get the current state of a dynamic hashinal";
14
+ this.schema = QueryDynamicRegistrySchema;
12
15
  }
13
- get specificInputSchema() {
14
- return retrieveInscriptionSchema;
15
- }
16
- async executeQuery(params, _runManager) {
17
- const result = await this.inscriberBuilder.retrieveInscription(
18
- params.transactionId,
19
- {
20
- apiKey: params.apiKey,
21
- network: this.inscriberBuilder["hederaKit"].client.network.toString().includes("mainnet") ? "mainnet" : "testnet"
22
- }
23
- );
24
- return {
25
- inscriptionId: result.inscriptionId,
26
- transactionId: result.transactionId,
27
- topicId: result.topic_id,
28
- status: result.status,
29
- holderId: result.holderId,
30
- metadata: result.metadata,
31
- tags: result.tags,
32
- mode: result.mode,
33
- chunks: result.chunks,
34
- createdAt: result.createdAt,
35
- completedAt: result.completed || result.completedAt,
36
- fileUrl: result.fileUrl,
37
- mimeType: result.mimeType,
38
- fileSize: result.fileSize
39
- };
16
+ async _call(params) {
17
+ try {
18
+ const registry = await this.hcs6Builder.getRegistry(params.topicId, {
19
+ limit: params.limit,
20
+ order: params.order,
21
+ skip: params.skip
22
+ });
23
+ return {
24
+ status: "success",
25
+ data: {
26
+ topicId: registry.topicId,
27
+ registryType: "NON_INDEXED",
28
+ ttl: registry.ttl,
29
+ latestEntry: registry.latestEntry ? {
30
+ topicId: registry.latestEntry.message.t_id,
31
+ timestamp: registry.latestEntry.timestamp,
32
+ memo: registry.latestEntry.message.m,
33
+ sequence: registry.latestEntry.sequence,
34
+ payer: registry.latestEntry.payer
35
+ } : null,
36
+ totalEntries: registry.entries.length
37
+ }
38
+ };
39
+ } catch (error) {
40
+ return {
41
+ status: "error",
42
+ message: error instanceof Error ? error.message : "Unknown error"
43
+ };
44
+ }
40
45
  }
41
46
  }
42
47
  export {
43
- RetrieveInscriptionTool
48
+ QueryDynamicRegistryTool
44
49
  };
45
50
  //# sourceMappingURL=standards-agent-kit.es31.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es31.js","sources":["../../src/tools/inscriber/RetrieveInscriptionTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseInscriberQueryTool } from './base-inscriber-tools';\nimport { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';\n\n/**\n * Schema for retrieving inscription\n */\nconst retrieveInscriptionSchema = z.object({\n transactionId: z\n .string()\n .describe('The transaction ID of the inscription to retrieve'),\n apiKey: z\n .string()\n .optional()\n .describe('API key for inscription service'),\n});\n\n\n/**\n * Tool for retrieving inscriptions\n */\nexport class RetrieveInscriptionTool extends BaseInscriberQueryTool<typeof retrieveInscriptionSchema> {\n name = 'retrieveInscription';\n description = 'Retrieve details of an existing inscription from the Hedera network';\n\n get specificInputSchema() {\n return retrieveInscriptionSchema;\n }\n\n protected async executeQuery(\n params: z.infer<typeof retrieveInscriptionSchema>,\n _runManager?: CallbackManagerForToolRun\n ): Promise<unknown> {\n const result = await this.inscriberBuilder.retrieveInscription(\n params.transactionId,\n {\n apiKey: params.apiKey,\n network: this.inscriberBuilder['hederaKit'].client.network.toString().includes('mainnet') ? 'mainnet' : 'testnet',\n }\n );\n\n return {\n inscriptionId: (result as any).inscriptionId,\n transactionId: result.transactionId,\n topicId: (result as any).topic_id,\n status: result.status,\n holderId: (result as any).holderId,\n metadata: result.metadata,\n tags: (result as any).tags,\n mode: result.mode,\n chunks: (result as any).chunks,\n createdAt: (result as any).createdAt,\n completedAt: (result as any).completed || (result as any).completedAt,\n fileUrl: result.fileUrl,\n mimeType: (result as any).mimeType,\n fileSize: (result as any).fileSize,\n };\n }\n}"],"names":[],"mappings":";;AAOA,MAAM,4BAA4B,EAAE,OAAO;AAAA,EACzC,eAAe,EACZ,SACA,SAAS,mDAAmD;AAAA,EAC/D,QAAQ,EACL,OAAA,EACA,SAAA,EACA,SAAS,iCAAiC;AAC/C,CAAC;AAMM,MAAM,gCAAgC,uBAAyD;AAAA,EAA/F,cAAA;AAAA,UAAA,GAAA,SAAA;AACL,SAAA,OAAO;AACP,SAAA,cAAc;AAAA,EAAA;AAAA,EAEd,IAAI,sBAAsB;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,aACd,QACA,aACkB;AAClB,UAAM,SAAS,MAAM,KAAK,iBAAiB;AAAA,MACzC,OAAO;AAAA,MACP;AAAA,QACE,QAAQ,OAAO;AAAA,QACf,SAAS,KAAK,iBAAiB,WAAW,EAAE,OAAO,QAAQ,WAAW,SAAS,SAAS,IAAI,YAAY;AAAA,MAAA;AAAA,IAC1G;AAGF,WAAO;AAAA,MACL,eAAgB,OAAe;AAAA,MAC/B,eAAe,OAAO;AAAA,MACtB,SAAU,OAAe;AAAA,MACzB,QAAQ,OAAO;AAAA,MACf,UAAW,OAAe;AAAA,MAC1B,UAAU,OAAO;AAAA,MACjB,MAAO,OAAe;AAAA,MACtB,MAAM,OAAO;AAAA,MACb,QAAS,OAAe;AAAA,MACxB,WAAY,OAAe;AAAA,MAC3B,aAAc,OAAe,aAAc,OAAe;AAAA,MAC1D,SAAS,OAAO;AAAA,MAChB,UAAW,OAAe;AAAA,MAC1B,UAAW,OAAe;AAAA,IAAA;AAAA,EAE9B;AACF;"}
1
+ {"version":3,"file":"standards-agent-kit.es31.js","sources":["../../src/tools/hcs6/QueryDynamicRegistryTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseHCS6QueryTool } from './base-hcs6-tools';\nimport { HCS6QueryToolParams } from './hcs6-tool-params';\nimport type { TransactionResponse } from 'hedera-agent-kit';\n\n/**\n * Schema for querying a dynamic registry\n */\nconst QueryDynamicRegistrySchema = z.object({\n topicId: z.string()\n .describe('The registry topic ID to query'),\n limit: z.number()\n .optional()\n .default(100)\n .describe('Maximum number of entries to retrieve'),\n order: z.enum(['asc', 'desc'])\n .optional()\n .default('desc')\n .describe('Order of entries (desc shows latest first)'),\n skip: z.number()\n .optional()\n .describe('Number of entries to skip'),\n});\n\nexport type QueryDynamicRegistryInput = z.infer<typeof QueryDynamicRegistrySchema>;\n\n/**\n * Tool for querying HCS-6 dynamic registries\n */\nexport class QueryDynamicRegistryTool extends BaseHCS6QueryTool<typeof QueryDynamicRegistrySchema> {\n name = 'queryDynamicRegistry';\n description = 'Query a dynamic registry to get the current state of a dynamic hashinal';\n schema = QueryDynamicRegistrySchema;\n\n constructor(params: HCS6QueryToolParams) {\n super(params);\n }\n\n protected async _call(\n params: QueryDynamicRegistryInput\n ): Promise<TransactionResponse> {\n try {\n const registry = await this.hcs6Builder.getRegistry(params.topicId, {\n limit: params.limit,\n order: params.order,\n skip: params.skip,\n });\n\n return {\n status: 'success',\n data: {\n topicId: registry.topicId,\n registryType: 'NON_INDEXED',\n ttl: registry.ttl,\n latestEntry: registry.latestEntry ? {\n topicId: registry.latestEntry.message.t_id,\n timestamp: registry.latestEntry.timestamp,\n memo: registry.latestEntry.message.m,\n sequence: registry.latestEntry.sequence,\n payer: registry.latestEntry.payer,\n } : null,\n totalEntries: registry.entries.length,\n },\n };\n } catch (error) {\n return {\n status: 'error',\n message: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n}"],"names":[],"mappings":";;AAQA,MAAM,6BAA6B,EAAE,OAAO;AAAA,EAC1C,SAAS,EAAE,SACR,SAAS,gCAAgC;AAAA,EAC5C,OAAO,EAAE,OAAA,EACN,SAAA,EACA,QAAQ,GAAG,EACX,SAAS,uCAAuC;AAAA,EACnD,OAAO,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAC1B,SAAA,EACA,QAAQ,MAAM,EACd,SAAS,4CAA4C;AAAA,EACxD,MAAM,EAAE,OAAA,EACL,SAAA,EACA,SAAS,2BAA2B;AACzC,CAAC;AAOM,MAAM,iCAAiC,kBAAqD;AAAA,EAKjG,YAAY,QAA6B;AACvC,UAAM,MAAM;AALd,SAAA,OAAO;AACP,SAAA,cAAc;AACd,SAAA,SAAS;AAAA,EAIT;AAAA,EAEA,MAAgB,MACd,QAC8B;AAC9B,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,YAAY,YAAY,OAAO,SAAS;AAAA,QAClE,OAAO,OAAO;AAAA,QACd,OAAO,OAAO;AAAA,QACd,MAAM,OAAO;AAAA,MAAA,CACd;AAED,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,SAAS,SAAS;AAAA,UAClB,cAAc;AAAA,UACd,KAAK,SAAS;AAAA,UACd,aAAa,SAAS,cAAc;AAAA,YAClC,SAAS,SAAS,YAAY,QAAQ;AAAA,YACtC,WAAW,SAAS,YAAY;AAAA,YAChC,MAAM,SAAS,YAAY,QAAQ;AAAA,YACnC,UAAU,SAAS,YAAY;AAAA,YAC/B,OAAO,SAAS,YAAY;AAAA,UAAA,IAC1B;AAAA,UACJ,cAAc,SAAS,QAAQ;AAAA,QAAA;AAAA,MACjC;AAAA,IAEJ,SAAS,OAAO;AACd,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAAA;AAAA,IAEtD;AAAA,EACF;AACF;"}