@hashgraphonline/standards-agent-kit 0.2.127 → 0.2.129

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 (41) 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/tools/inscriber/InscribeFromBufferTool.d.ts +2 -10
  4. package/dist/cjs/tools/inscriber/InscribeHashinalTool.d.ts +62 -30
  5. package/dist/cjs/utils/content-resolver.d.ts +10 -0
  6. package/dist/cjs/utils/metadata-defaults.d.ts +18 -0
  7. package/dist/cjs/validation/content-ref-schemas.d.ts +9 -0
  8. package/dist/cjs/validation/hip412-schemas.d.ts +125 -0
  9. package/dist/es/standards-agent-kit.es36.js +11 -63
  10. package/dist/es/standards-agent-kit.es36.js.map +1 -1
  11. package/dist/es/standards-agent-kit.es37.js +159 -33
  12. package/dist/es/standards-agent-kit.es37.js.map +1 -1
  13. package/dist/es/standards-agent-kit.es44.js +57 -0
  14. package/dist/es/standards-agent-kit.es44.js.map +1 -0
  15. package/dist/es/standards-agent-kit.es45.js +6 -0
  16. package/dist/es/standards-agent-kit.es45.js.map +1 -0
  17. package/dist/es/standards-agent-kit.es46.js +43 -0
  18. package/dist/es/standards-agent-kit.es46.js.map +1 -0
  19. package/dist/es/standards-agent-kit.es47.js +15 -0
  20. package/dist/es/standards-agent-kit.es47.js.map +1 -0
  21. package/dist/es/tools/inscriber/InscribeFromBufferTool.d.ts +2 -10
  22. package/dist/es/tools/inscriber/InscribeHashinalTool.d.ts +62 -30
  23. package/dist/es/utils/content-resolver.d.ts +10 -0
  24. package/dist/es/utils/metadata-defaults.d.ts +18 -0
  25. package/dist/es/validation/content-ref-schemas.d.ts +9 -0
  26. package/dist/es/validation/hip412-schemas.d.ts +125 -0
  27. package/dist/umd/standards-agent-kit.umd.js +1 -1
  28. package/dist/umd/standards-agent-kit.umd.js.map +1 -1
  29. package/dist/umd/tools/inscriber/InscribeFromBufferTool.d.ts +2 -10
  30. package/dist/umd/tools/inscriber/InscribeHashinalTool.d.ts +62 -30
  31. package/dist/umd/utils/content-resolver.d.ts +10 -0
  32. package/dist/umd/utils/metadata-defaults.d.ts +18 -0
  33. package/dist/umd/validation/content-ref-schemas.d.ts +9 -0
  34. package/dist/umd/validation/hip412-schemas.d.ts +125 -0
  35. package/package.json +34 -31
  36. package/src/tools/inscriber/InscribeFromBufferTool.ts +30 -133
  37. package/src/tools/inscriber/InscribeHashinalTool.ts +271 -46
  38. package/src/utils/content-resolver.ts +87 -0
  39. package/src/utils/metadata-defaults.ts +25 -0
  40. package/src/validation/content-ref-schemas.ts +20 -0
  41. package/src/validation/hip412-schemas.ts +52 -0
@@ -1,11 +1,31 @@
1
1
  import { z } from "zod";
2
2
  import { BaseInscriberQueryTool } from "./standards-agent-kit.es33.js";
3
+ import { ContentResolverRegistry } from "@hashgraphonline/standards-sdk";
4
+ import { validateHIP412Metadata } from "./standards-agent-kit.es46.js";
5
+ import { contentRefSchema } from "./standards-agent-kit.es45.js";
6
+ import { generateDefaultMetadata } from "./standards-agent-kit.es47.js";
3
7
  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")'),
8
+ url: z.string().optional().describe(
9
+ "The URL of the content to inscribe as Hashinal NFT (use this OR contentRef)"
10
+ ),
11
+ contentRef: contentRefSchema.optional().describe(
12
+ 'Content reference ID in format "content-ref:[id]" for already stored content (use this OR url)'
13
+ ),
14
+ base64Data: z.string().optional().describe(
15
+ "Base64 encoded content data (use this if neither url nor contentRef provided)"
16
+ ),
17
+ fileName: z.string().optional().describe(
18
+ "File name for the content (required when using base64Data or contentRef)"
19
+ ),
20
+ mimeType: z.string().optional().describe('MIME type of the content (e.g., "image/png", "image/jpeg")'),
21
+ name: z.string().optional().describe(
22
+ "Name of the Hashinal NFT (defaults to filename if not provided)"
23
+ ),
24
+ creator: z.string().optional().describe("Creator account ID or name (defaults to operator account)"),
25
+ description: z.string().optional().describe(
26
+ "Description of the Hashinal NFT (auto-generated if not provided)"
27
+ ),
28
+ type: z.string().optional().describe("Type of NFT (auto-detected from MIME type if not provided)"),
9
29
  attributes: z.array(
10
30
  z.object({
11
31
  trait_type: z.string(),
@@ -14,35 +34,61 @@ const inscribeHashinalSchema = z.object({
14
34
  ).optional().describe("NFT attributes"),
15
35
  properties: z.record(z.unknown()).optional().describe("Additional properties"),
16
36
  jsonFileURL: z.string().url().optional().describe("URL to JSON metadata file"),
37
+ fileStandard: z.enum(["1", "6"]).optional().default("1").describe(
38
+ "HCS file standard: 1 for static Hashinals (HCS-5), 6 for dynamic Hashinals (HCS-6)"
39
+ ),
17
40
  tags: z.array(z.string()).optional().describe("Tags to categorize the NFT"),
18
41
  chunkSize: z.number().int().positive().optional().describe("Chunk size for large files"),
19
42
  waitForConfirmation: z.boolean().optional().describe("Whether to wait for inscription confirmation"),
20
- timeoutMs: z.number().int().positive().optional().describe("Timeout in milliseconds for inscription (default: no timeout - waits until completion)"),
43
+ timeoutMs: z.number().int().positive().optional().describe(
44
+ "Timeout in milliseconds for inscription (default: no timeout - waits until completion)"
45
+ ),
21
46
  apiKey: z.string().optional().describe("API key for inscription service"),
22
- quoteOnly: z.boolean().optional().default(false).describe("If true, returns a cost quote instead of executing the inscription")
47
+ quoteOnly: z.boolean().optional().default(false).describe(
48
+ "If true, returns a cost quote instead of executing the inscription"
49
+ )
23
50
  });
24
51
  class InscribeHashinalTool extends BaseInscriberQueryTool {
25
52
  constructor() {
26
53
  super(...arguments);
27
54
  this.name = "inscribeHashinal";
28
- this.description = "Inscribe content as a Hashinal NFT on the Hedera network. Set quoteOnly=true to get cost estimates without executing the inscription.";
55
+ this.description = "STEP 1: Inscribe content as Hashinal NFT. This tool creates the inscription and returns metadataForMinting (HRL format). CRITICAL: You MUST use the metadataForMinting field from this tool output as the metadata parameter when calling mint NFT tools. DO NOT use the original content reference for minting. This tool only inscribes - call minting tools separately after this completes. Use fileStandard=6 for dynamic Hashinals (HCS-6) or fileStandard=1 for static Hashinals (HCS-5).";
29
56
  }
30
57
  get specificInputSchema() {
31
58
  return inscribeHashinalSchema;
32
59
  }
33
60
  async executeQuery(params, _runManager) {
34
- const metadata = {
35
- name: params.name,
36
- creator: params.creator,
37
- description: params.description,
38
- type: params.type,
61
+ if (!params.url && !params.contentRef && !params.base64Data) {
62
+ throw new Error(
63
+ "Must provide either url, contentRef, or base64Data for the Hashinal NFT content"
64
+ );
65
+ }
66
+ const operatorAccount = this.inscriberBuilder["hederaKit"]?.client?.operatorAccountId?.toString() || "0.0.unknown";
67
+ const rawMetadata = {
68
+ ...generateDefaultMetadata({
69
+ name: params.name,
70
+ creator: params.creator,
71
+ description: params.description,
72
+ type: params.type,
73
+ fileName: params.fileName,
74
+ mimeType: params.mimeType,
75
+ operatorAccount
76
+ }),
39
77
  attributes: params.attributes,
40
78
  properties: params.properties
41
79
  };
80
+ let validatedMetadata;
81
+ try {
82
+ validatedMetadata = validateHIP412Metadata(rawMetadata);
83
+ } catch (error) {
84
+ const errorMessage = error instanceof Error ? error.message : String(error);
85
+ throw new Error(`Metadata validation error: ${errorMessage}`);
86
+ }
42
87
  const options = {
43
88
  mode: "hashinal",
44
- metadata,
89
+ metadata: validatedMetadata,
45
90
  jsonFileURL: params.jsonFileURL,
91
+ fileStandard: params.fileStandard,
46
92
  tags: params.tags,
47
93
  chunkSize: params.chunkSize,
48
94
  waitForConfirmation: params.quoteOnly ? false : params.waitForConfirmation ?? true,
@@ -52,10 +98,27 @@ class InscribeHashinalTool extends BaseInscriberQueryTool {
52
98
  network: this.inscriberBuilder["hederaKit"].client.network.toString().includes("mainnet") ? "mainnet" : "testnet",
53
99
  quoteOnly: params.quoteOnly
54
100
  };
101
+ let inscriptionData;
102
+ if (params.url) {
103
+ inscriptionData = { type: "url", url: params.url };
104
+ } else if (params.contentRef || params.base64Data) {
105
+ const inputData = params.contentRef || params.base64Data || "";
106
+ const { buffer, mimeType, fileName } = await this.resolveContent(
107
+ inputData,
108
+ params.mimeType,
109
+ params.fileName
110
+ );
111
+ inscriptionData = {
112
+ type: "buffer",
113
+ buffer,
114
+ fileName: fileName || params.fileName || "hashinal-content",
115
+ mimeType: mimeType || params.mimeType
116
+ };
117
+ }
55
118
  if (params.quoteOnly) {
56
119
  try {
57
120
  const quote = await this.generateInscriptionQuote(
58
- { type: "url", url: params.url },
121
+ inscriptionData,
59
122
  options
60
123
  );
61
124
  return {
@@ -85,34 +148,41 @@ Total cost: ${quote.totalCostHbar} HBAR`
85
148
  if (params.timeoutMs) {
86
149
  const timeoutPromise = new Promise((_, reject) => {
87
150
  setTimeout(
88
- () => reject(new Error(`Inscription timed out after ${params.timeoutMs}ms`)),
151
+ () => reject(
152
+ new Error(`Inscription timed out after ${params.timeoutMs}ms`)
153
+ ),
89
154
  params.timeoutMs
90
155
  );
91
156
  });
92
157
  result = await Promise.race([
93
- this.inscriberBuilder.inscribe(
94
- { type: "url", url: params.url },
95
- options
96
- ),
158
+ this.inscriberBuilder.inscribe(inscriptionData, options),
97
159
  timeoutPromise
98
160
  ]);
99
161
  } else {
100
- result = await this.inscriberBuilder.inscribe(
101
- { type: "url", url: params.url },
102
- options
103
- );
162
+ result = await this.inscriberBuilder.inscribe(inscriptionData, options);
104
163
  }
105
164
  if (result.confirmed && !result.quote) {
106
- const topicId = result.inscription?.topic_id || result.result.topicId;
165
+ const imageTopicId = result.inscription?.topic_id;
166
+ const jsonTopicId = result.inscription?.jsonTopicId;
107
167
  const network = options.network || "testnet";
108
- const cdnUrl = topicId ? `https://kiloscribe.com/api/inscription-cdn/${topicId}?network=${network}` : null;
109
- return `Successfully inscribed and confirmed Hashinal NFT on the Hedera network!
110
-
111
- Transaction ID: ${result.result.transactionId}
112
- Topic ID: ${topicId || "N/A"}${cdnUrl ? `
113
- View inscription: ${cdnUrl}` : ""}
114
-
115
- The Hashinal NFT is now available.`;
168
+ const cdnUrl = jsonTopicId ? `https://kiloscribe.com/api/inscription-cdn/${jsonTopicId}?network=${network}` : null;
169
+ const fileStandard = params.fileStandard || "1";
170
+ const hrl = jsonTopicId ? `hcs://${fileStandard}/${jsonTopicId}` : null;
171
+ const standardType = fileStandard === "6" ? "Dynamic" : "Static";
172
+ return {
173
+ success: true,
174
+ transactionId: result.result.transactionId,
175
+ imageTopicId: imageTopicId || "N/A",
176
+ jsonTopicId: jsonTopicId || "N/A",
177
+ metadataForMinting: hrl,
178
+ hcsStandard: `hcs://${fileStandard}`,
179
+ fileStandard,
180
+ standardType,
181
+ message: `STEP 1 COMPLETE: ${standardType} Hashinal inscription finished! NOW FOR STEP 2: Use EXACTLY this metadata for minting: "${hrl}". DO NOT use the original content reference.`,
182
+ cdnUrl,
183
+ NEXT_STEP_INSTRUCTIONS: `Call mint NFT tool with metadata: ["${hrl}"]`,
184
+ WARNING: "DO NOT use content-ref for minting - only use the metadataForMinting value above"
185
+ };
116
186
  } else if (!result.quote && !result.confirmed) {
117
187
  return `Successfully submitted Hashinal NFT inscription to the Hedera network!
118
188
 
@@ -127,6 +197,62 @@ The inscription is processing and will be confirmed shortly.`;
127
197
  throw new Error(`Inscription failed: ${errorMessage}`);
128
198
  }
129
199
  }
200
+ async resolveContent(input, providedMimeType, providedFileName) {
201
+ const trimmedInput = input.trim();
202
+ const resolver = this.getContentResolver() || ContentResolverRegistry.getResolver();
203
+ if (!resolver) {
204
+ return this.handleDirectContent(
205
+ trimmedInput,
206
+ providedMimeType,
207
+ providedFileName
208
+ );
209
+ }
210
+ const referenceId = resolver.extractReferenceId(trimmedInput);
211
+ if (referenceId) {
212
+ try {
213
+ const resolution = await resolver.resolveReference(referenceId);
214
+ return {
215
+ buffer: resolution.content,
216
+ mimeType: resolution.metadata?.mimeType || providedMimeType,
217
+ fileName: resolution.metadata?.fileName || providedFileName,
218
+ wasReference: true
219
+ };
220
+ } catch (error) {
221
+ const errorMsg = error instanceof Error ? error.message : "Unknown error resolving reference";
222
+ throw new Error(`Reference resolution failed: ${errorMsg}`);
223
+ }
224
+ }
225
+ return this.handleDirectContent(
226
+ trimmedInput,
227
+ providedMimeType,
228
+ providedFileName
229
+ );
230
+ }
231
+ handleDirectContent(input, providedMimeType, providedFileName) {
232
+ const isValidBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(input);
233
+ if (isValidBase64) {
234
+ try {
235
+ const buffer2 = Buffer.from(input, "base64");
236
+ return {
237
+ buffer: buffer2,
238
+ mimeType: providedMimeType,
239
+ fileName: providedFileName,
240
+ wasReference: false
241
+ };
242
+ } catch (error) {
243
+ throw new Error(
244
+ "Failed to decode base64 data. Please ensure the data is properly encoded."
245
+ );
246
+ }
247
+ }
248
+ const buffer = Buffer.from(input, "utf8");
249
+ return {
250
+ buffer,
251
+ mimeType: providedMimeType || "text/plain",
252
+ fileName: providedFileName,
253
+ wasReference: false
254
+ };
255
+ }
130
256
  }
131
257
  export {
132
258
  InscribeHashinalTool
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es37.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 timeoutMs: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Timeout in milliseconds for inscription (default: no timeout - waits until completion)'),\n apiKey: z\n .string()\n .optional()\n .describe('API key for inscription service'),\n quoteOnly: z\n .boolean()\n .optional()\n .default(false)\n .describe('If true, returns a cost quote instead of executing the inscription'),\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. Set quoteOnly=true to get cost estimates without executing the inscription.';\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.quoteOnly ? false : (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 quoteOnly: params.quoteOnly,\n };\n\n if (params.quoteOnly) {\n try {\n const quote = await this.generateInscriptionQuote(\n { type: 'url', url: params.url },\n options\n );\n \n return {\n success: true,\n quote: {\n totalCostHbar: quote.totalCostHbar,\n validUntil: quote.validUntil,\n breakdown: quote.breakdown,\n },\n contentInfo: {\n url: params.url,\n name: params.name,\n creator: params.creator,\n type: params.type,\n },\n message: `Estimated Quote for Hashinal NFT: ${params.name}\\nCreator: ${params.creator}\\nTotal cost: ${quote.totalCostHbar} HBAR`,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to generate inscription quote';\n throw new Error(`Quote generation failed: ${errorMessage}`);\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 () => 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 { type: 'url', url: params.url },\n options\n ),\n timeoutPromise\n ]);\n } else {\n result = await this.inscriberBuilder.inscribe(\n { type: 'url', url: params.url },\n options\n );\n }\n\n if (result.confirmed && !result.quote) {\n const topicId = result.inscription?.topic_id || (result.result as any).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 as any).transactionId}\\nTopic ID: ${topicId || 'N/A'}${cdnUrl ? `\\nView inscription: ${cdnUrl}` : ''}\\n\\nThe Hashinal NFT is now available.`;\n } else if (!result.quote && !result.confirmed) {\n return `Successfully submitted Hashinal NFT inscription to the Hedera network!\\n\\nTransaction ID: ${(result.result as any).transactionId}\\n\\nThe inscription is processing and will be confirmed shortly.`;\n } else {\n return 'Inscription operation completed.';\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.es37.js","sources":["../../src/tools/inscriber/InscribeHashinalTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseInscriberQueryTool } from './base-inscriber-tools';\nimport {\n InscriptionOptions,\n ContentResolverRegistry,\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';\n\n\n/**\n * Schema for inscribing Hashinal NFT\n */\nconst inscribeHashinalSchema = 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 'Name of the Hashinal NFT (defaults to filename if not provided)'\n ),\n creator: z\n .string()\n .optional()\n .describe('Creator account ID or name (defaults to operator account)'),\n description: z\n .string()\n .optional()\n .describe(\n 'Description of the Hashinal NFT (auto-generated if not provided)'\n ),\n type: z\n .string()\n .optional()\n .describe('Type of NFT (auto-detected from MIME type if not provided)'),\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 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 apiKey: z.string().optional().describe('API key for inscription service'),\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});\n\n/**\n * Tool for inscribing Hashinal NFTs\n */\nexport class InscribeHashinalTool extends BaseInscriberQueryTool<\n typeof inscribeHashinalSchema\n> {\n name = 'inscribeHashinal';\n description =\n 'STEP 1: Inscribe content as Hashinal NFT. This tool creates the inscription and returns metadataForMinting (HRL format). CRITICAL: You MUST use the metadataForMinting field from this tool output as the metadata parameter when calling mint NFT tools. DO NOT use the original content reference for minting. This tool only inscribes - call minting tools separately after this completes. Use fileStandard=6 for dynamic Hashinals (HCS-6) or fileStandard=1 for static Hashinals (HCS-5).';\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 // Validate input - must have either url, contentRef, or base64Data\n if (!params.url && !params.contentRef && !params.base64Data) {\n throw new Error(\n 'Must provide either url, contentRef, or base64Data for the Hashinal NFT content'\n );\n }\n\n const operatorAccount =\n this.inscriberBuilder['hederaKit']?.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: params.attributes,\n properties: params.properties,\n };\n\n // Validate metadata against HIP-412 standard\n let validatedMetadata;\n try {\n validatedMetadata = validateHIP412Metadata(rawMetadata);\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n throw new Error(`Metadata validation error: ${errorMessage}`);\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: 10,\n waitIntervalMs: 3000,\n apiKey: params.apiKey,\n network: this.inscriberBuilder['hederaKit'].client.network\n .toString()\n .includes('mainnet')\n ? 'mainnet'\n : 'testnet',\n quoteOnly: params.quoteOnly,\n };\n\n // Determine inscription data based on input type\n let inscriptionData: any;\n\n if (params.url) {\n inscriptionData = { type: 'url', url: params.url };\n } else if (params.contentRef || params.base64Data) {\n // Handle content reference or base64 data\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 }\n\n if (params.quoteOnly) {\n try {\n const quote = await this.generateInscriptionQuote(\n inscriptionData,\n options\n );\n\n return {\n success: true,\n quote: {\n totalCostHbar: quote.totalCostHbar,\n validUntil: quote.validUntil,\n breakdown: quote.breakdown,\n },\n contentInfo: {\n url: params.url,\n name: params.name,\n creator: params.creator,\n type: params.type,\n },\n message: `Estimated Quote for Hashinal NFT: ${params.name}\\nCreator: ${params.creator}\\nTotal cost: ${quote.totalCostHbar} HBAR`,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to generate inscription quote';\n throw new Error(`Quote generation failed: ${errorMessage}`);\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.inscribe(inscriptionData, options),\n timeoutPromise,\n ]);\n } else {\n result = await this.inscriberBuilder.inscribe(inscriptionData, options);\n }\n\n if (result.confirmed && !result.quote) {\n const imageTopicId = result.inscription?.topic_id;\n const jsonTopicId = result.inscription?.jsonTopicId;\n const network = options.network || 'testnet';\n\n const cdnUrl = jsonTopicId\n ? `https://kiloscribe.com/api/inscription-cdn/${jsonTopicId}?network=${network}`\n : null;\n\n const fileStandard = params.fileStandard || '1';\n const hrl = jsonTopicId ? `hcs://${fileStandard}/${jsonTopicId}` : null;\n const standardType = fileStandard === '6' ? 'Dynamic' : 'Static';\n\n return {\n success: true,\n transactionId: (result.result as any).transactionId,\n imageTopicId: imageTopicId || 'N/A',\n jsonTopicId: jsonTopicId || 'N/A',\n metadataForMinting: hrl,\n hcsStandard: `hcs://${fileStandard}`,\n fileStandard: fileStandard,\n standardType: standardType,\n message: `STEP 1 COMPLETE: ${standardType} Hashinal inscription finished! NOW FOR STEP 2: Use EXACTLY this metadata for minting: \"${hrl}\". DO NOT use the original content reference.`,\n cdnUrl: cdnUrl,\n NEXT_STEP_INSTRUCTIONS: `Call mint NFT tool with metadata: [\"${hrl}\"]`,\n WARNING:\n 'DO NOT use content-ref for minting - only use the metadataForMinting value above',\n };\n } else if (!result.quote && !result.confirmed) {\n return `Successfully submitted Hashinal NFT inscription to the Hedera network!\\n\\nTransaction ID: ${\n (result.result as any).transactionId\n }\\n\\nThe inscription is processing and will be confirmed shortly.`;\n } else {\n return 'Inscription operation completed.';\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 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"],"names":["buffer"],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { ContentResolverRegistry } from "@hashgraphonline/standards-sdk";
2
+ async function resolveContent(input, providedMimeType, providedFileName) {
3
+ const trimmedInput = input.trim();
4
+ const resolver = ContentResolverRegistry.getResolver();
5
+ if (!resolver) {
6
+ return handleDirectContent(
7
+ trimmedInput,
8
+ providedMimeType,
9
+ providedFileName
10
+ );
11
+ }
12
+ const referenceId = resolver.extractReferenceId(trimmedInput);
13
+ if (referenceId) {
14
+ try {
15
+ const resolution = await resolver.resolveReference(referenceId);
16
+ return {
17
+ buffer: resolution.content,
18
+ mimeType: resolution.metadata?.mimeType || providedMimeType,
19
+ fileName: resolution.metadata?.fileName || providedFileName,
20
+ wasReference: true
21
+ };
22
+ } catch (error) {
23
+ const errorMsg = error instanceof Error ? error.message : "Unknown error resolving reference";
24
+ throw new Error(`Reference resolution failed: ${errorMsg}`);
25
+ }
26
+ }
27
+ return handleDirectContent(trimmedInput, providedMimeType, providedFileName);
28
+ }
29
+ function handleDirectContent(input, providedMimeType, providedFileName) {
30
+ const isValidBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(input);
31
+ if (isValidBase64) {
32
+ try {
33
+ const buffer2 = Buffer.from(input, "base64");
34
+ return {
35
+ buffer: buffer2,
36
+ mimeType: providedMimeType,
37
+ fileName: providedFileName,
38
+ wasReference: false
39
+ };
40
+ } catch (error) {
41
+ throw new Error(
42
+ "Failed to decode base64 data. Please ensure the data is properly encoded."
43
+ );
44
+ }
45
+ }
46
+ const buffer = Buffer.from(input, "utf8");
47
+ return {
48
+ buffer,
49
+ mimeType: providedMimeType || "text/plain",
50
+ fileName: providedFileName,
51
+ wasReference: false
52
+ };
53
+ }
54
+ export {
55
+ resolveContent
56
+ };
57
+ //# sourceMappingURL=standards-agent-kit.es44.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-agent-kit.es44.js","sources":["../../src/utils/content-resolver.ts"],"sourcesContent":["import { ContentResolverRegistry } from '@hashgraphonline/standards-sdk';\n\nexport interface ContentResolutionResult {\n buffer: Buffer;\n mimeType?: string;\n fileName?: string;\n wasReference?: boolean;\n}\n\n/**\n * Resolves content from various input formats (content-ref, base64, plain text)\n */\nexport async function resolveContent(\n input: string,\n providedMimeType?: string,\n providedFileName?: string\n): Promise<ContentResolutionResult> {\n const trimmedInput = input.trim();\n\n const resolver = ContentResolverRegistry.getResolver();\n\n if (!resolver) {\n return 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 handleDirectContent(trimmedInput, providedMimeType, providedFileName);\n}\n\n/**\n * Handles direct content (base64 or plain text)\n */\nfunction handleDirectContent(\n input: string,\n providedMimeType?: string,\n providedFileName?: string\n): ContentResolutionResult {\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"],"names":["buffer"],"mappings":";AAYA,eAAsB,eACpB,OACA,kBACA,kBACkC;AAClC,QAAM,eAAe,MAAM,KAAA;AAE3B,QAAM,WAAW,wBAAwB,YAAA;AAEzC,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,cAAc,SAAS,mBAAmB,YAAY;AAE5D,MAAI,aAAa;AACf,QAAI;AACF,YAAM,aAAa,MAAM,SAAS,iBAAiB,WAAW;AAE9D,aAAO;AAAA,QACL,QAAQ,WAAW;AAAA,QACnB,UAAU,WAAW,UAAU,YAAY;AAAA,QAC3C,UAAU,WAAW,UAAU,YAAY;AAAA,QAC3C,cAAc;AAAA,MAAA;AAAA,IAElB,SAAS,OAAO;AACd,YAAM,WACJ,iBAAiB,QACb,MAAM,UACN;AACN,YAAM,IAAI,MAAM,gCAAgC,QAAQ,EAAE;AAAA,IAC5D;AAAA,EACF;AAEA,SAAO,oBAAoB,cAAc,kBAAkB,gBAAgB;AAC7E;AAKA,SAAS,oBACP,OACA,kBACA,kBACyB;AACzB,QAAM,gBAAgB,yBAAyB,KAAK,KAAK;AAEzD,MAAI,eAAe;AACjB,QAAI;AACF,YAAMA,UAAS,OAAO,KAAK,OAAO,QAAQ;AAC1C,aAAO;AAAA,QACL,QAAAA;AAAAA,QACA,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAc;AAAA,MAAA;AAAA,IAElB,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAEA,QAAM,SAAS,OAAO,KAAK,OAAO,MAAM;AACxC,SAAO;AAAA,IACL;AAAA,IACA,UAAU,oBAAoB;AAAA,IAC9B,UAAU;AAAA,IACV,cAAc;AAAA,EAAA;AAElB;"}
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ const contentRefSchema = z.string().regex(/^content-ref:[a-fA-F0-9]{64}$/, 'Content reference must be in format "content-ref:[64-char hex]"').describe('Content reference in format "content-ref:[id]"');
3
+ export {
4
+ contentRefSchema
5
+ };
6
+ //# sourceMappingURL=standards-agent-kit.es45.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-agent-kit.es45.js","sources":["../../src/validation/content-ref-schemas.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Validates content reference format\n */\nexport const contentRefSchema = z\n .string()\n .regex(/^content-ref:[a-fA-F0-9]{64}$/, 'Content reference must be in format \"content-ref:[64-char hex]\"')\n .describe('Content reference in format \"content-ref:[id]\"');\n\n/**\n * Validates content reference or returns error for dumber models\n */\nexport function validateContentRef(input: string): string {\n try {\n return contentRefSchema.parse(input);\n } catch (error) {\n throw new Error(`Invalid content reference format. Expected \"content-ref:[64-character-hash]\" but got \"${input}\"`);\n }\n}"],"names":[],"mappings":";AAKO,MAAM,mBAAmB,EAC7B,SACA,MAAM,iCAAiC,iEAAiE,EACxG,SAAS,gDAAgD;"}
@@ -0,0 +1,43 @@
1
+ import { z } from "zod";
2
+ const hip412FileSchema = z.object({
3
+ uri: z.string().describe("URI of the file"),
4
+ checksum: z.string().optional().describe("SHA-256 checksum of the file"),
5
+ is_default_file: z.boolean().optional().describe("Whether this is the default file"),
6
+ type: z.string().describe("MIME type of the file")
7
+ });
8
+ const hip412AttributeSchema = z.object({
9
+ trait_type: z.string().describe("The trait type"),
10
+ value: z.union([z.string(), z.number()]).describe("The trait value"),
11
+ display_type: z.string().optional().describe("Display type for the attribute")
12
+ });
13
+ const hip412MetadataSchema = z.object({
14
+ name: z.string().describe("Token name (required by HIP-412)"),
15
+ description: z.string().describe("Human readable description (required by HIP-412)"),
16
+ image: z.string().describe("Preview image URI (required by HIP-412)"),
17
+ type: z.string().describe("MIME type (required by HIP-412)"),
18
+ creator: z.string().optional().describe("Creator name or comma-separated names"),
19
+ creatorDID: z.string().optional().describe("Decentralized identifier for creator"),
20
+ checksum: z.string().optional().describe("SHA-256 checksum of the image"),
21
+ format: z.string().optional().default("HIP412@2.0.0").describe("Metadata format version"),
22
+ files: z.array(hip412FileSchema).optional().describe("Array of files for multi-file NFTs"),
23
+ attributes: z.array(hip412AttributeSchema).optional().describe("NFT attributes/traits"),
24
+ properties: z.record(z.unknown()).optional().describe("Additional properties")
25
+ });
26
+ function validateHIP412Metadata(metadata) {
27
+ try {
28
+ return hip412MetadataSchema.parse(metadata);
29
+ } catch (error) {
30
+ if (error instanceof z.ZodError) {
31
+ const issues = error.errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("; ");
32
+ throw new Error(`HIP-412 metadata validation failed: ${issues}`);
33
+ }
34
+ throw error;
35
+ }
36
+ }
37
+ export {
38
+ hip412AttributeSchema,
39
+ hip412FileSchema,
40
+ hip412MetadataSchema,
41
+ validateHIP412Metadata
42
+ };
43
+ //# sourceMappingURL=standards-agent-kit.es46.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-agent-kit.es46.js","sources":["../../src/validation/hip412-schemas.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * HIP-412 file schema for multi-file NFTs\n */\nexport const hip412FileSchema = z.object({\n uri: z.string().describe('URI of the file'),\n checksum: z.string().optional().describe('SHA-256 checksum of the file'),\n is_default_file: z.boolean().optional().describe('Whether this is the default file'),\n type: z.string().describe('MIME type of the file'),\n});\n\n/**\n * HIP-412 attribute schema for NFT traits\n */\nexport const hip412AttributeSchema = z.object({\n trait_type: z.string().describe('The trait type'),\n value: z.union([z.string(), z.number()]).describe('The trait value'),\n display_type: z.string().optional().describe('Display type for the attribute'),\n});\n\n/**\n * HIP-412 compliant metadata schema for Hedera NFTs\n */\nexport const hip412MetadataSchema = z.object({\n name: z.string().describe('Token name (required by HIP-412)'),\n description: z.string().describe('Human readable description (required by HIP-412)'),\n image: z.string().describe('Preview image URI (required by HIP-412)'),\n type: z.string().describe('MIME type (required by HIP-412)'),\n creator: z.string().optional().describe('Creator name or comma-separated names'),\n creatorDID: z.string().optional().describe('Decentralized identifier for creator'),\n checksum: z.string().optional().describe('SHA-256 checksum of the image'),\n format: z.string().optional().default('HIP412@2.0.0').describe('Metadata format version'),\n files: z.array(hip412FileSchema).optional().describe('Array of files for multi-file NFTs'),\n attributes: z.array(hip412AttributeSchema).optional().describe('NFT attributes/traits'),\n properties: z.record(z.unknown()).optional().describe('Additional properties'),\n});\n\n/**\n * Validates metadata against HIP-412 standard\n */\nexport function validateHIP412Metadata(metadata: any): z.infer<typeof hip412MetadataSchema> {\n try {\n return hip412MetadataSchema.parse(metadata);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const issues = error.errors.map(err => `${err.path.join('.')}: ${err.message}`).join('; ');\n throw new Error(`HIP-412 metadata validation failed: ${issues}`);\n }\n throw error;\n }\n}"],"names":[],"mappings":";AAKO,MAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,KAAK,EAAE,SAAS,SAAS,iBAAiB;AAAA,EAC1C,UAAU,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,8BAA8B;AAAA,EACvE,iBAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,SAAS,kCAAkC;AAAA,EACnF,MAAM,EAAE,OAAA,EAAS,SAAS,uBAAuB;AACnD,CAAC;AAKM,MAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,YAAY,EAAE,SAAS,SAAS,gBAAgB;AAAA,EAChD,OAAO,EAAE,MAAM,CAAC,EAAE,OAAA,GAAU,EAAE,OAAA,CAAQ,CAAC,EAAE,SAAS,iBAAiB;AAAA,EACnE,cAAc,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,gCAAgC;AAC/E,CAAC;AAKM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,MAAM,EAAE,SAAS,SAAS,kCAAkC;AAAA,EAC5D,aAAa,EAAE,SAAS,SAAS,kDAAkD;AAAA,EACnF,OAAO,EAAE,SAAS,SAAS,yCAAyC;AAAA,EACpE,MAAM,EAAE,SAAS,SAAS,iCAAiC;AAAA,EAC3D,SAAS,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,uCAAuC;AAAA,EAC/E,YAAY,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,sCAAsC;AAAA,EACjF,UAAU,EAAE,OAAA,EAAS,SAAA,EAAW,SAAS,+BAA+B;AAAA,EACxE,QAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,cAAc,EAAE,SAAS,yBAAyB;AAAA,EACxF,OAAO,EAAE,MAAM,gBAAgB,EAAE,SAAA,EAAW,SAAS,oCAAoC;AAAA,EACzF,YAAY,EAAE,MAAM,qBAAqB,EAAE,SAAA,EAAW,SAAS,uBAAuB;AAAA,EACtF,YAAY,EAAE,OAAO,EAAE,QAAA,CAAS,EAAE,WAAW,SAAS,uBAAuB;AAC/E,CAAC;AAKM,SAAS,uBAAuB,UAAqD;AAC1F,MAAI;AACF,WAAO,qBAAqB,MAAM,QAAQ;AAAA,EAC5C,SAAS,OAAO;AACd,QAAI,iBAAiB,EAAE,UAAU;AAC/B,YAAM,SAAS,MAAM,OAAO,IAAI,CAAA,QAAO,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,OAAO,EAAE,EAAE,KAAK,IAAI;AACzF,YAAM,IAAI,MAAM,uCAAuC,MAAM,EAAE;AAAA,IACjE;AACA,UAAM;AAAA,EACR;AACF;"}
@@ -0,0 +1,15 @@
1
+ function generateDefaultMetadata(params) {
2
+ const defaultName = params.fileName?.replace(/\.[^/.]+$/, "") || "Hashinal NFT";
3
+ const defaultType = params.mimeType?.startsWith("image/") ? "image" : params.mimeType?.startsWith("video/") ? "video" : params.mimeType?.startsWith("audio/") ? "audio" : "media";
4
+ return {
5
+ name: params.name || defaultName,
6
+ creator: params.creator || params.operatorAccount,
7
+ description: params.description || `${defaultType.charAt(0).toUpperCase() + defaultType.slice(1)} NFT inscribed as Hashinal`,
8
+ type: params.type || defaultType,
9
+ image: ""
10
+ };
11
+ }
12
+ export {
13
+ generateDefaultMetadata
14
+ };
15
+ //# sourceMappingURL=standards-agent-kit.es47.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-agent-kit.es47.js","sources":["../../src/utils/metadata-defaults.ts"],"sourcesContent":["/**\n * Generates default metadata for NFT inscription\n */\nexport function generateDefaultMetadata(params: {\n name?: string;\n creator?: string;\n description?: string;\n type?: string;\n fileName?: string;\n mimeType?: string;\n operatorAccount: string;\n}) {\n const defaultName = params.fileName?.replace(/\\.[^/.]+$/, '') || 'Hashinal NFT';\n const defaultType = params.mimeType?.startsWith('image/') ? 'image' : \n params.mimeType?.startsWith('video/') ? 'video' :\n params.mimeType?.startsWith('audio/') ? 'audio' : 'media';\n\n return {\n name: params.name || defaultName,\n creator: params.creator || params.operatorAccount,\n description: params.description || `${defaultType.charAt(0).toUpperCase() + defaultType.slice(1)} NFT inscribed as Hashinal`,\n type: params.type || defaultType,\n image: '',\n };\n}"],"names":[],"mappings":"AAGO,SAAS,wBAAwB,QAQrC;AACD,QAAM,cAAc,OAAO,UAAU,QAAQ,aAAa,EAAE,KAAK;AACjE,QAAM,cAAc,OAAO,UAAU,WAAW,QAAQ,IAAI,UACxC,OAAO,UAAU,WAAW,QAAQ,IAAI,UACxC,OAAO,UAAU,WAAW,QAAQ,IAAI,UAAU;AAEtE,SAAO;AAAA,IACL,MAAM,OAAO,QAAQ;AAAA,IACrB,SAAS,OAAO,WAAW,OAAO;AAAA,IAClC,aAAa,OAAO,eAAe,GAAG,YAAY,OAAO,CAAC,EAAE,YAAA,IAAgB,YAAY,MAAM,CAAC,CAAC;AAAA,IAChG,MAAM,OAAO,QAAQ;AAAA,IACrB,OAAO;AAAA,EAAA;AAEX;"}
@@ -2,10 +2,9 @@ import { z } from 'zod';
2
2
  import { BaseInscriberQueryTool } from './base-inscriber-tools';
3
3
  import { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';
4
4
  declare const inscribeFromBufferSchema: z.ZodObject<{
5
- base64Data: z.ZodString;
5
+ base64Data: z.ZodUnion<[z.ZodString, z.ZodString]>;
6
6
  fileName: z.ZodString;
7
7
  mimeType: z.ZodOptional<z.ZodString>;
8
- mode: z.ZodOptional<z.ZodEnum<["file", "hashinal"]>>;
9
8
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
10
9
  tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
11
10
  chunkSize: z.ZodOptional<z.ZodNumber>;
@@ -20,7 +19,6 @@ declare const inscribeFromBufferSchema: z.ZodObject<{
20
19
  tags?: string[] | undefined;
21
20
  metadata?: Record<string, unknown> | undefined;
22
21
  mimeType?: string | undefined;
23
- mode?: "file" | "hashinal" | undefined;
24
22
  chunkSize?: number | undefined;
25
23
  waitForConfirmation?: boolean | undefined;
26
24
  timeoutMs?: number | undefined;
@@ -31,7 +29,6 @@ declare const inscribeFromBufferSchema: z.ZodObject<{
31
29
  tags?: string[] | undefined;
32
30
  metadata?: Record<string, unknown> | undefined;
33
31
  mimeType?: string | undefined;
34
- mode?: "file" | "hashinal" | undefined;
35
32
  chunkSize?: number | undefined;
36
33
  waitForConfirmation?: boolean | undefined;
37
34
  timeoutMs?: number | undefined;
@@ -43,10 +40,9 @@ export declare class InscribeFromBufferTool extends BaseInscriberQueryTool<typeo
43
40
  description: string;
44
41
  private config;
45
42
  get specificInputSchema(): z.ZodObject<{
46
- base64Data: z.ZodString;
43
+ base64Data: z.ZodUnion<[z.ZodString, z.ZodString]>;
47
44
  fileName: z.ZodString;
48
45
  mimeType: z.ZodOptional<z.ZodString>;
49
- mode: z.ZodOptional<z.ZodEnum<["file", "hashinal"]>>;
50
46
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
51
47
  tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
52
48
  chunkSize: z.ZodOptional<z.ZodNumber>;
@@ -61,7 +57,6 @@ export declare class InscribeFromBufferTool extends BaseInscriberQueryTool<typeo
61
57
  tags?: string[] | undefined;
62
58
  metadata?: Record<string, unknown> | undefined;
63
59
  mimeType?: string | undefined;
64
- mode?: "file" | "hashinal" | undefined;
65
60
  chunkSize?: number | undefined;
66
61
  waitForConfirmation?: boolean | undefined;
67
62
  timeoutMs?: number | undefined;
@@ -72,7 +67,6 @@ export declare class InscribeFromBufferTool extends BaseInscriberQueryTool<typeo
72
67
  tags?: string[] | undefined;
73
68
  metadata?: Record<string, unknown> | undefined;
74
69
  mimeType?: string | undefined;
75
- mode?: "file" | "hashinal" | undefined;
76
70
  chunkSize?: number | undefined;
77
71
  waitForConfirmation?: boolean | undefined;
78
72
  timeoutMs?: number | undefined;
@@ -84,7 +78,5 @@ export declare class InscribeFromBufferTool extends BaseInscriberQueryTool<typeo
84
78
  private validateContent;
85
79
  private executeInscription;
86
80
  private formatInscriptionResult;
87
- private resolveContent;
88
- private handleDirectContent;
89
81
  }
90
82
  export {};