@hashgraphonline/standards-agent-kit 0.2.136 → 0.2.138
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -4
- package/dist/cjs/builders/hcs10/hcs10-builder.d.ts +1 -0
- package/dist/cjs/builders/hcs2/hcs2-builder.d.ts +8 -7
- package/dist/cjs/builders/hcs6/hcs6-builder.d.ts +5 -4
- package/dist/cjs/builders/inscriber/inscriber-builder.d.ts +32 -1
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/signing/bytes-registry.d.ts +17 -0
- package/dist/cjs/signing/signer-provider.d.ts +45 -0
- package/dist/cjs/standards-agent-kit.cjs +1 -1
- package/dist/cjs/standards-agent-kit.cjs.map +1 -1
- package/dist/cjs/tools/hcs10/InitiateConnectionTool.d.ts +4 -4
- package/dist/cjs/tools/hcs2/CreateRegistryTool.d.ts +2 -2
- package/dist/cjs/tools/hcs2/DeleteEntryTool.d.ts +2 -2
- package/dist/cjs/tools/hcs2/UpdateEntryTool.d.ts +2 -2
- package/dist/cjs/tools/hcs6/RegisterDynamicHashinalTool.d.ts +10 -10
- package/dist/cjs/tools/hcs6/UpdateDynamicHashinalTool.d.ts +8 -8
- package/dist/cjs/tools/inscriber/InscribeFromBufferTool.d.ts +5 -4
- package/dist/cjs/tools/inscriber/InscribeFromFileTool.d.ts +2 -2
- package/dist/cjs/tools/inscriber/InscribeFromUrlTool.d.ts +4 -4
- package/dist/cjs/tools/inscriber/InscribeHashinalTool.d.ts +3 -3
- package/dist/cjs/types/inscription-response.d.ts +8 -0
- package/dist/cjs/types/tx-results.d.ts +15 -0
- package/dist/cjs/utils/CodedError.d.ts +4 -0
- package/dist/cjs/utils/inscription-utils.d.ts +21 -0
- package/dist/cjs/validation/hip412-schemas.d.ts +2 -2
- package/dist/es/builders/hcs10/hcs10-builder.d.ts +1 -0
- package/dist/es/builders/hcs2/hcs2-builder.d.ts +8 -7
- package/dist/es/builders/hcs6/hcs6-builder.d.ts +5 -4
- package/dist/es/builders/inscriber/inscriber-builder.d.ts +32 -1
- package/dist/es/index.d.ts +4 -0
- package/dist/es/signing/bytes-registry.d.ts +17 -0
- package/dist/es/signing/signer-provider.d.ts +45 -0
- package/dist/es/standards-agent-kit.es.js +46 -42
- package/dist/es/standards-agent-kit.es.js.map +1 -1
- package/dist/es/standards-agent-kit.es10.js +24 -83
- package/dist/es/standards-agent-kit.es10.js.map +1 -1
- package/dist/es/standards-agent-kit.es11.js +224 -20
- package/dist/es/standards-agent-kit.es11.js.map +1 -1
- package/dist/es/standards-agent-kit.es12.js +78 -27
- package/dist/es/standards-agent-kit.es12.js.map +1 -1
- package/dist/es/standards-agent-kit.es13.js +26 -36
- package/dist/es/standards-agent-kit.es13.js.map +1 -1
- package/dist/es/standards-agent-kit.es14.js +17 -39
- package/dist/es/standards-agent-kit.es14.js.map +1 -1
- package/dist/es/standards-agent-kit.es15.js +36 -58
- package/dist/es/standards-agent-kit.es15.js.map +1 -1
- package/dist/es/standards-agent-kit.es16.js +45 -18
- package/dist/es/standards-agent-kit.es16.js.map +1 -1
- package/dist/es/standards-agent-kit.es17.js +53 -16
- package/dist/es/standards-agent-kit.es17.js.map +1 -1
- package/dist/es/standards-agent-kit.es18.js +18 -28
- package/dist/es/standards-agent-kit.es18.js.map +1 -1
- package/dist/es/standards-agent-kit.es19.js +26 -12
- package/dist/es/standards-agent-kit.es19.js.map +1 -1
- package/dist/es/standards-agent-kit.es20.js +38 -136
- package/dist/es/standards-agent-kit.es20.js.map +1 -1
- package/dist/es/standards-agent-kit.es21.js +13 -24
- package/dist/es/standards-agent-kit.es21.js.map +1 -1
- package/dist/es/standards-agent-kit.es22.js +136 -39
- package/dist/es/standards-agent-kit.es22.js.map +1 -1
- package/dist/es/standards-agent-kit.es23.js +25 -41
- package/dist/es/standards-agent-kit.es23.js.map +1 -1
- package/dist/es/standards-agent-kit.es24.js +49 -31
- package/dist/es/standards-agent-kit.es24.js.map +1 -1
- package/dist/es/standards-agent-kit.es25.js +34 -18
- package/dist/es/standards-agent-kit.es25.js.map +1 -1
- package/dist/es/standards-agent-kit.es26.js +35 -19
- package/dist/es/standards-agent-kit.es26.js.map +1 -1
- package/dist/es/standards-agent-kit.es27.js +45 -32
- package/dist/es/standards-agent-kit.es27.js.map +1 -1
- package/dist/es/standards-agent-kit.es28.js +54 -25
- package/dist/es/standards-agent-kit.es28.js.map +1 -1
- package/dist/es/standards-agent-kit.es29.js +35 -23
- package/dist/es/standards-agent-kit.es29.js.map +1 -1
- package/dist/es/standards-agent-kit.es3.js +41 -1545
- package/dist/es/standards-agent-kit.es3.js.map +1 -1
- package/dist/es/standards-agent-kit.es30.js +23 -39
- package/dist/es/standards-agent-kit.es30.js.map +1 -1
- package/dist/es/standards-agent-kit.es31.js +30 -28
- package/dist/es/standards-agent-kit.es31.js.map +1 -1
- package/dist/es/standards-agent-kit.es32.js +45 -32
- package/dist/es/standards-agent-kit.es32.js.map +1 -1
- package/dist/es/standards-agent-kit.es33.js +50 -89
- package/dist/es/standards-agent-kit.es33.js.map +1 -1
- package/dist/es/standards-agent-kit.es34.js +35 -228
- package/dist/es/standards-agent-kit.es34.js.map +1 -1
- package/dist/es/standards-agent-kit.es35.js +87 -212
- package/dist/es/standards-agent-kit.es35.js.map +1 -1
- package/dist/es/standards-agent-kit.es36.js +188 -128
- package/dist/es/standards-agent-kit.es36.js.map +1 -1
- package/dist/es/standards-agent-kit.es37.js +167 -561
- package/dist/es/standards-agent-kit.es37.js.map +1 -1
- package/dist/es/standards-agent-kit.es38.js +236 -31
- package/dist/es/standards-agent-kit.es38.js.map +1 -1
- package/dist/es/standards-agent-kit.es39.js +483 -206
- package/dist/es/standards-agent-kit.es39.js.map +1 -1
- package/dist/es/standards-agent-kit.es4.js +359 -81
- package/dist/es/standards-agent-kit.es4.js.map +1 -1
- package/dist/es/standards-agent-kit.es40.js +39 -135
- package/dist/es/standards-agent-kit.es40.js.map +1 -1
- package/dist/es/standards-agent-kit.es41.js +244 -28
- package/dist/es/standards-agent-kit.es41.js.map +1 -1
- package/dist/es/standards-agent-kit.es42.js +132 -418
- package/dist/es/standards-agent-kit.es42.js.map +1 -1
- package/dist/es/standards-agent-kit.es43.js +28 -184
- package/dist/es/standards-agent-kit.es43.js.map +1 -1
- package/dist/es/standards-agent-kit.es44.js +423 -3
- package/dist/es/standards-agent-kit.es44.js.map +1 -1
- package/dist/es/standards-agent-kit.es45.js +185 -24
- package/dist/es/standards-agent-kit.es45.js.map +1 -1
- package/dist/es/standards-agent-kit.es46.js +3 -3
- package/dist/es/standards-agent-kit.es46.js.map +1 -1
- package/dist/es/standards-agent-kit.es47.js +21 -50
- package/dist/es/standards-agent-kit.es47.js.map +1 -1
- package/dist/es/standards-agent-kit.es48.js +8 -3
- package/dist/es/standards-agent-kit.es48.js.map +1 -1
- package/dist/es/standards-agent-kit.es49.js +3 -39
- package/dist/es/standards-agent-kit.es49.js.map +1 -1
- package/dist/es/standards-agent-kit.es5.js +1747 -73
- package/dist/es/standards-agent-kit.es5.js.map +1 -1
- package/dist/es/standards-agent-kit.es50.js +18 -16
- package/dist/es/standards-agent-kit.es50.js.map +1 -1
- package/dist/es/standards-agent-kit.es51.js +49 -49
- package/dist/es/standards-agent-kit.es51.js.map +1 -1
- package/dist/es/standards-agent-kit.es52.js +6 -0
- package/dist/es/standards-agent-kit.es52.js.map +1 -0
- package/dist/es/standards-agent-kit.es53.js +43 -0
- package/dist/es/standards-agent-kit.es53.js.map +1 -0
- package/dist/es/standards-agent-kit.es54.js +22 -0
- package/dist/es/standards-agent-kit.es54.js.map +1 -0
- package/dist/es/standards-agent-kit.es55.js +77 -0
- package/dist/es/standards-agent-kit.es55.js.map +1 -0
- package/dist/es/standards-agent-kit.es56.js +7 -0
- package/dist/es/standards-agent-kit.es56.js.map +1 -0
- package/dist/es/standards-agent-kit.es6.js +347 -32
- package/dist/es/standards-agent-kit.es6.js.map +1 -1
- package/dist/es/standards-agent-kit.es7.js +142 -293
- package/dist/es/standards-agent-kit.es7.js.map +1 -1
- package/dist/es/standards-agent-kit.es8.js +201 -21
- package/dist/es/standards-agent-kit.es8.js.map +1 -1
- package/dist/es/standards-agent-kit.es9.js +301 -213
- package/dist/es/standards-agent-kit.es9.js.map +1 -1
- package/dist/es/tools/hcs10/InitiateConnectionTool.d.ts +4 -4
- package/dist/es/tools/hcs2/CreateRegistryTool.d.ts +2 -2
- package/dist/es/tools/hcs2/DeleteEntryTool.d.ts +2 -2
- package/dist/es/tools/hcs2/UpdateEntryTool.d.ts +2 -2
- package/dist/es/tools/hcs6/RegisterDynamicHashinalTool.d.ts +10 -10
- package/dist/es/tools/hcs6/UpdateDynamicHashinalTool.d.ts +8 -8
- package/dist/es/tools/inscriber/InscribeFromBufferTool.d.ts +5 -4
- package/dist/es/tools/inscriber/InscribeFromFileTool.d.ts +2 -2
- package/dist/es/tools/inscriber/InscribeFromUrlTool.d.ts +4 -4
- package/dist/es/tools/inscriber/InscribeHashinalTool.d.ts +3 -3
- package/dist/es/types/inscription-response.d.ts +8 -0
- package/dist/es/types/tx-results.d.ts +15 -0
- package/dist/es/utils/CodedError.d.ts +4 -0
- package/dist/es/utils/inscription-utils.d.ts +21 -0
- package/dist/es/validation/hip412-schemas.d.ts +2 -2
- package/dist/umd/builders/hcs10/hcs10-builder.d.ts +1 -0
- package/dist/umd/builders/hcs2/hcs2-builder.d.ts +8 -7
- package/dist/umd/builders/hcs6/hcs6-builder.d.ts +5 -4
- package/dist/umd/builders/inscriber/inscriber-builder.d.ts +32 -1
- package/dist/umd/index.d.ts +4 -0
- package/dist/umd/signing/bytes-registry.d.ts +17 -0
- package/dist/umd/signing/signer-provider.d.ts +45 -0
- package/dist/umd/standards-agent-kit.umd.js +1 -1
- package/dist/umd/standards-agent-kit.umd.js.map +1 -1
- package/dist/umd/tools/hcs10/InitiateConnectionTool.d.ts +4 -4
- package/dist/umd/tools/hcs2/CreateRegistryTool.d.ts +2 -2
- package/dist/umd/tools/hcs2/DeleteEntryTool.d.ts +2 -2
- package/dist/umd/tools/hcs2/UpdateEntryTool.d.ts +2 -2
- package/dist/umd/tools/hcs6/RegisterDynamicHashinalTool.d.ts +10 -10
- package/dist/umd/tools/hcs6/UpdateDynamicHashinalTool.d.ts +8 -8
- package/dist/umd/tools/inscriber/InscribeFromBufferTool.d.ts +5 -4
- package/dist/umd/tools/inscriber/InscribeFromFileTool.d.ts +2 -2
- package/dist/umd/tools/inscriber/InscribeFromUrlTool.d.ts +4 -4
- package/dist/umd/tools/inscriber/InscribeHashinalTool.d.ts +3 -3
- package/dist/umd/types/inscription-response.d.ts +8 -0
- package/dist/umd/types/tx-results.d.ts +15 -0
- package/dist/umd/utils/CodedError.d.ts +4 -0
- package/dist/umd/utils/inscription-utils.d.ts +21 -0
- package/dist/umd/validation/hip412-schemas.d.ts +2 -2
- package/package.json +10 -5
- package/src/builders/hcs10/hcs10-builder.ts +239 -6
- package/src/builders/hcs2/hcs2-builder.ts +302 -9
- package/src/builders/hcs6/hcs6-builder.ts +79 -4
- package/src/builders/inscriber/inscriber-builder.ts +235 -2
- package/src/hcs10/HCS10Client.ts +1 -1
- package/src/index.ts +5 -1
- package/src/lib/zod-render/schema-extension.ts +0 -1
- package/src/signing/bytes-registry.ts +501 -0
- package/src/signing/signer-provider.ts +120 -0
- package/src/tools/hcs2/CreateRegistryTool.ts +30 -5
- package/src/tools/hcs2/DeleteEntryTool.ts +16 -2
- package/src/tools/hcs2/MigrateRegistryTool.ts +16 -2
- package/src/tools/hcs2/QueryRegistryTool.ts +11 -2
- package/src/tools/hcs2/RegisterEntryTool.ts +17 -3
- package/src/tools/hcs2/UpdateEntryTool.ts +16 -2
- package/src/tools/hcs6/CreateDynamicRegistryTool.ts +17 -3
- package/src/tools/hcs6/RegisterDynamicHashinalTool.ts +17 -3
- package/src/tools/hcs6/UpdateDynamicHashinalTool.ts +17 -3
- package/src/tools/inscriber/InscribeFromBufferTool.ts +126 -21
- package/src/tools/inscriber/InscribeFromFileTool.ts +10 -13
- package/src/tools/inscriber/InscribeFromUrlTool.ts +15 -11
- package/src/tools/inscriber/InscribeHashinalTool.ts +40 -168
- package/src/tools/inscriber/RetrieveInscriptionTool.ts +15 -16
- package/src/types/inscription-response.ts +27 -0
- package/src/types/tx-results.ts +18 -0
- package/src/utils/CodedError.ts +8 -0
- package/src/utils/Encryption.ts +0 -2
- package/src/utils/ensure-agent-has-hbar.ts +4 -5
- package/src/utils/inscription-utils.ts +53 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
function createInscriptionSuccess(params) {
|
|
2
|
+
const { hrl, topicId, standard, cdnUrl, transactionId, metadata } = params;
|
|
3
|
+
return {
|
|
4
|
+
success: true,
|
|
5
|
+
type: "inscription",
|
|
6
|
+
title: `${standard} Hashinal Inscription Complete`,
|
|
7
|
+
message: `Successfully inscribed "${metadata.name || "your content"}" as a ${standard} Hashinal. The content is now ready for NFT minting.`,
|
|
8
|
+
inscription: {
|
|
9
|
+
hrl,
|
|
10
|
+
topicId,
|
|
11
|
+
standard,
|
|
12
|
+
cdnUrl,
|
|
13
|
+
transactionId
|
|
14
|
+
},
|
|
15
|
+
metadata,
|
|
16
|
+
nextSteps: {
|
|
17
|
+
primary: "CRITICAL: When minting NFTs, use ONLY the mintingMetadata value as a single string in the metadata array. Do NOT create JSON objects.",
|
|
18
|
+
context: 'The metadata parameter for minting should be exactly: ["' + hrl + '"] - just the HRL string in an array, nothing else.',
|
|
19
|
+
mintingMetadata: hrl
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function createInscriptionQuote(params) {
|
|
24
|
+
const { totalCostHbar, validUntil, breakdown, content } = params;
|
|
25
|
+
return {
|
|
26
|
+
success: true,
|
|
27
|
+
type: "quote",
|
|
28
|
+
title: "Inscription Cost Quote",
|
|
29
|
+
message: `Estimated cost to inscribe "${content.name || "your content"}" is ${totalCostHbar} HBAR.`,
|
|
30
|
+
quote: {
|
|
31
|
+
totalCostHbar,
|
|
32
|
+
validUntil,
|
|
33
|
+
breakdown
|
|
34
|
+
},
|
|
35
|
+
content
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function createInscriptionError(params) {
|
|
39
|
+
const { code, details, suggestions } = params;
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
type: "error",
|
|
43
|
+
title: "Inscription Failed",
|
|
44
|
+
message: `Unable to complete inscription: ${details}`,
|
|
45
|
+
error: {
|
|
46
|
+
code,
|
|
47
|
+
details,
|
|
48
|
+
suggestions
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function createInscriptionPending(params) {
|
|
53
|
+
const { transactionId, details, suggestions } = params;
|
|
54
|
+
const d = details || `Inscription submitted but not yet confirmed. Transaction ID: ${transactionId}`;
|
|
55
|
+
return {
|
|
56
|
+
success: false,
|
|
57
|
+
type: "error",
|
|
58
|
+
title: "Inscription Submitted (Pending)",
|
|
59
|
+
message: d,
|
|
60
|
+
error: {
|
|
61
|
+
code: "INSCRIPTION_PENDING",
|
|
62
|
+
details: d,
|
|
63
|
+
suggestions: suggestions || [
|
|
64
|
+
"Wait a few moments for confirmation",
|
|
65
|
+
"Check the transaction status on a Hedera explorer",
|
|
66
|
+
"Try the inscription again if it doesn't confirm within 5 minutes"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
createInscriptionError,
|
|
73
|
+
createInscriptionPending,
|
|
74
|
+
createInscriptionQuote,
|
|
75
|
+
createInscriptionSuccess
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=standards-agent-kit.es55.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standards-agent-kit.es55.js","sources":["../../src/types/inscription-response.ts"],"sourcesContent":["/**\n * Structured response interface for inscription tools\n * Provides a consistent, user-friendly format for inscription results\n */\n\nexport interface InscriptionSuccessResponse {\n success: true;\n type: 'inscription';\n title: string;\n message: string;\n inscription: {\n /** The HRL (Hashinal Reference Link) for minting - e.g., \"hcs://1/0.0.123456\" */\n hrl: string;\n /** Topic ID where the inscription was stored */\n topicId: string;\n /** Type of Hashinal - Static (HCS-5) or Dynamic (HCS-6) */\n standard: 'Static' | 'Dynamic';\n /** CDN URL for direct access to the inscribed content */\n cdnUrl?: string;\n /** Transaction ID of the inscription */\n transactionId?: string;\n };\n metadata: {\n /** Name/title of the inscribed content */\n name?: string;\n /** Creator of the content */\n creator?: string;\n /** Description of the content */\n description?: string;\n /** Content type (image, text, etc.) */\n type?: string;\n /** Additional attributes */\n attributes?: Array<{ trait_type: string; value: string | number }>;\n };\n nextSteps: {\n /** Primary action the user should take next */\n primary: string;\n /** Additional context or options */\n context?: string;\n /** Specific metadata value to use for minting */\n mintingMetadata: string;\n };\n /** HashLink block data (only present when withHashLinkBlocks=true) */\n hashLinkBlock?: {\n /** Block topic ID on HCS */\n blockId: string;\n /** HashLink reference to the block */\n hashLink: string;\n /** Template topic ID */\n template: string;\n /** Block attributes for rendering */\n attributes: BlockAttributes;\n };\n}\n\nexport interface InscriptionQuoteResponse {\n success: true;\n type: 'quote';\n title: string;\n message: string;\n quote: {\n /** Total cost in HBAR */\n totalCostHbar: string;\n /** When the quote expires */\n validUntil: string;\n /** Cost breakdown details */\n breakdown?: CostBreakdown;\n };\n content: {\n /** Name of the content to be inscribed */\n name?: string;\n /** Creator of the content */\n creator?: string;\n /** Type of content */\n type?: string;\n };\n}\n\nexport interface InscriptionErrorResponse {\n success: false;\n type: 'error';\n title: string;\n message: string;\n error: {\n /** Error code for programmatic handling */\n code: string;\n /** Detailed error message */\n details: string;\n /** Suggestions for fixing the error */\n suggestions?: string[];\n };\n}\n\nexport type InscriptionResponse =\n | InscriptionSuccessResponse\n | InscriptionQuoteResponse\n | InscriptionErrorResponse;\n\n/**\n * Helper function to create a successful inscription response\n */\nexport function createInscriptionSuccess(params: {\n hrl: string;\n topicId: string;\n standard: 'Static' | 'Dynamic';\n cdnUrl?: string;\n transactionId?: string;\n metadata: {\n name?: string;\n creator?: string;\n description?: string;\n type?: string;\n attributes?: Array<{ trait_type: string; value: string | number }>;\n };\n}): InscriptionSuccessResponse {\n const { hrl, topicId, standard, cdnUrl, transactionId, metadata } = params;\n\n return {\n success: true,\n type: 'inscription',\n title: `${standard} Hashinal Inscription Complete`,\n message: `Successfully inscribed \"${\n metadata.name || 'your content'\n }\" as a ${standard} Hashinal. The content is now ready for NFT minting.`,\n inscription: {\n hrl,\n topicId,\n standard,\n cdnUrl,\n transactionId,\n },\n metadata,\n nextSteps: {\n primary: 'CRITICAL: When minting NFTs, use ONLY the mintingMetadata value as a single string in the metadata array. Do NOT create JSON objects.',\n context:\n 'The metadata parameter for minting should be exactly: [\"' + hrl + '\"] - just the HRL string in an array, nothing else.',\n mintingMetadata: hrl,\n },\n };\n}\n\n/**\n * Block attributes for HashLink rendering\n */\ninterface BlockAttributes {\n /** Display name */\n name?: string;\n /** Description text */\n description?: string;\n /** Image URL */\n image?: string;\n /** Content type */\n contentType?: string;\n /** Size in bytes */\n size?: number;\n /** Custom metadata */\n metadata?: Record<string, string | number | boolean>;\n}\n\n/**\n * Transfer details in cost breakdown\n */\ninterface TransferDetails {\n to: string;\n amount: string;\n description: string;\n}\n\n/**\n * Cost breakdown details for inscription quote\n */\ninterface CostBreakdown {\n transfers: TransferDetails[];\n baseFee?: number;\n sizeFee?: number;\n networkFee?: number;\n serviceFee?: number;\n totalFee?: number;\n currency?: string;\n}\n\n/**\n * Helper function to create a quote response\n */\nexport function createInscriptionQuote(params: {\n totalCostHbar: string;\n validUntil: string;\n breakdown?: CostBreakdown;\n content: {\n name?: string;\n creator?: string;\n type?: string;\n };\n}): InscriptionQuoteResponse {\n const { totalCostHbar, validUntil, breakdown, content } = params;\n\n return {\n success: true,\n type: 'quote',\n title: 'Inscription Cost Quote',\n message: `Estimated cost to inscribe \"${\n content.name || 'your content'\n }\" is ${totalCostHbar} HBAR.`,\n quote: {\n totalCostHbar,\n validUntil,\n breakdown,\n },\n content,\n };\n}\n\n/**\n * Helper function to create an error response\n */\nexport function createInscriptionError(params: {\n code: string;\n details: string;\n suggestions?: string[];\n}): InscriptionErrorResponse {\n const { code, details, suggestions } = params;\n\n return {\n success: false,\n type: 'error',\n title: 'Inscription Failed',\n message: `Unable to complete inscription: ${details}`,\n error: {\n code,\n details,\n suggestions,\n },\n };\n}\n\n/**\n * Helper for pending inscription state (submitted but not yet confirmed)\n */\nexport function createInscriptionPending(params: {\n transactionId: string;\n details?: string;\n suggestions?: string[];\n}): InscriptionErrorResponse {\n const { transactionId, details, suggestions } = params;\n const d = details || `Inscription submitted but not yet confirmed. Transaction ID: ${transactionId}`;\n return {\n success: false,\n type: 'error',\n title: 'Inscription Submitted (Pending)',\n message: d,\n error: {\n code: 'INSCRIPTION_PENDING',\n details: d,\n suggestions: suggestions || [\n 'Wait a few moments for confirmation',\n 'Check the transaction status on a Hedera explorer',\n \"Try the inscription again if it doesn't confirm within 5 minutes\",\n ],\n },\n };\n}\n"],"names":[],"mappings":"AAqGO,SAAS,yBAAyB,QAaV;AAC7B,QAAM,EAAE,KAAK,SAAS,UAAU,QAAQ,eAAe,aAAa;AAEpE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO,GAAG,QAAQ;AAAA,IAClB,SAAS,2BACP,SAAS,QAAQ,cACnB,UAAU,QAAQ;AAAA,IAClB,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SACE,6DAA6D,MAAM;AAAA,MACrE,iBAAiB;AAAA,IAAA;AAAA,EACnB;AAEJ;AA6CO,SAAS,uBAAuB,QASV;AAC3B,QAAM,EAAE,eAAe,YAAY,WAAW,YAAY;AAE1D,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS,+BACP,QAAQ,QAAQ,cAClB,QAAQ,aAAa;AAAA,IACrB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEJ;AAKO,SAAS,uBAAuB,QAIV;AAC3B,QAAM,EAAE,MAAM,SAAS,YAAA,IAAgB;AAEvC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS,mCAAmC,OAAO;AAAA,IACnD,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEJ;AAKO,SAAS,yBAAyB,QAIZ;AAC3B,QAAM,EAAE,eAAe,SAAS,YAAA,IAAgB;AAChD,QAAM,IAAI,WAAW,gEAAgE,aAAa;AAClG,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa,eAAe;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standards-agent-kit.es56.js","sources":["../../src/types/tx-results.ts"],"sourcesContent":["import type { TopicRegistrationResponse, RegistryOperationResponse, HCS6TopicRegistrationResponse, HCS6RegistryOperationResponse, HCS6CreateHashinalResponse } from '@hashgraphonline/standards-sdk';\n\nexport interface WalletBytesResponse {\n success: true;\n transactionBytes: string;\n}\n\nexport function isWalletBytesResponse(value: unknown): value is WalletBytesResponse {\n return !!value && typeof (value as any).transactionBytes === 'string';\n}\n\nexport type TopicRegistrationResult = TopicRegistrationResponse | WalletBytesResponse;\nexport type RegistryOperationResult = RegistryOperationResponse | WalletBytesResponse;\nexport type SubmitMessageResult = { success: true; transactionId?: string } | WalletBytesResponse;\n\nexport type HCS6TopicRegistrationResult = HCS6TopicRegistrationResponse | WalletBytesResponse;\nexport type HCS6RegistryOperationResult = HCS6RegistryOperationResponse | WalletBytesResponse;\nexport type HCS6CreateHashinalResult = HCS6CreateHashinalResponse | WalletBytesResponse;\n"],"names":[],"mappings":"AAOO,SAAS,sBAAsB,OAA8C;AAClF,SAAO,CAAC,CAAC,SAAS,OAAQ,MAAc,qBAAqB;AAC/D;"}
|
|
@@ -1,56 +1,371 @@
|
|
|
1
1
|
import { BaseServiceBuilder } from "hedera-agent-kit";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { HederaMirrorNode, HCS2Client } from "@hashgraphonline/standards-sdk";
|
|
3
|
+
import { SignerProviderRegistry } from "./standards-agent-kit.es3.js";
|
|
4
|
+
import { CodedError } from "./standards-agent-kit.es48.js";
|
|
5
|
+
class HCS2Builder extends BaseServiceBuilder {
|
|
4
6
|
constructor(hederaKit) {
|
|
5
7
|
super(hederaKit);
|
|
6
8
|
}
|
|
7
9
|
/**
|
|
8
|
-
* Get or create
|
|
10
|
+
* Get or create HCS-2 client
|
|
9
11
|
*/
|
|
10
|
-
async
|
|
11
|
-
|
|
12
|
+
async getHCS2Client() {
|
|
13
|
+
if (!this.hcs2Client) {
|
|
14
|
+
const operatorId = this.hederaKit.signer.getAccountId().toString();
|
|
15
|
+
const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey() ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw() : "";
|
|
16
|
+
const network = this.hederaKit.client.network;
|
|
17
|
+
const networkType = network.toString().includes("mainnet") ? "mainnet" : "testnet";
|
|
18
|
+
let keyTypeHint;
|
|
19
|
+
try {
|
|
20
|
+
const mirror = new HederaMirrorNode(networkType);
|
|
21
|
+
const info = await mirror.requestAccount(operatorId);
|
|
22
|
+
const t = info?.key?._type;
|
|
23
|
+
if (t) {
|
|
24
|
+
const upper = t.toUpperCase();
|
|
25
|
+
if (upper.includes("ED25519")) keyTypeHint = "ed25519";
|
|
26
|
+
else if (upper.includes("ECDSA")) keyTypeHint = "ecdsa";
|
|
27
|
+
}
|
|
28
|
+
} catch {
|
|
29
|
+
}
|
|
30
|
+
const config = {
|
|
31
|
+
network: networkType,
|
|
32
|
+
operatorId,
|
|
33
|
+
operatorKey: operatorPrivateKey,
|
|
34
|
+
...keyTypeHint ? { keyType: keyTypeHint } : {}
|
|
35
|
+
};
|
|
36
|
+
this.hcs2Client = new HCS2Client(config);
|
|
37
|
+
}
|
|
38
|
+
return this.hcs2Client;
|
|
12
39
|
}
|
|
13
40
|
/**
|
|
14
|
-
*
|
|
41
|
+
* Create a new HCS-2 registry
|
|
42
|
+
* Note: This executes the transaction directly via HCS2Client
|
|
15
43
|
*/
|
|
16
|
-
async
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
44
|
+
async createRegistry(options = {}) {
|
|
45
|
+
const exec = SignerProviderRegistry.walletExecutor;
|
|
46
|
+
const preferWallet = SignerProviderRegistry.preferWalletOnly;
|
|
47
|
+
const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());
|
|
48
|
+
if (exec) {
|
|
49
|
+
const start = SignerProviderRegistry.startHCSDelegate;
|
|
50
|
+
if (start) {
|
|
51
|
+
try {
|
|
52
|
+
const request = { options };
|
|
53
|
+
const network = this.hederaKit.client.network.toString().includes("mainnet") ? "mainnet" : "testnet";
|
|
54
|
+
const { transactionBytes } = await start("hcs2.createRegistry", request, network);
|
|
55
|
+
if (transactionBytes) {
|
|
56
|
+
return { success: true, transactionBytes };
|
|
57
|
+
}
|
|
58
|
+
} catch (err) {
|
|
59
|
+
if (preferWallet) {
|
|
60
|
+
throw new CodedError("wallet_submit_failed", `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (preferWallet) {
|
|
65
|
+
throw new CodedError("wallet_unavailable", "WalletExecutor not configured for hcs2.createRegistry");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (!hasPrivateKey) {
|
|
69
|
+
throw new CodedError("wallet_unavailable", "No wallet executor and no operator private key available for server execution");
|
|
70
|
+
}
|
|
71
|
+
const client = await this.getHCS2Client();
|
|
72
|
+
return await client.createRegistry(options);
|
|
27
73
|
}
|
|
28
74
|
/**
|
|
29
|
-
*
|
|
75
|
+
* Register a new entry in an HCS-2 registry
|
|
30
76
|
*/
|
|
31
|
-
async
|
|
32
|
-
|
|
77
|
+
async registerEntry(registryTopicId, options) {
|
|
78
|
+
const exec = SignerProviderRegistry.walletExecutor;
|
|
79
|
+
const preferWallet = SignerProviderRegistry.preferWalletOnly;
|
|
80
|
+
const network = this.hederaKit.client.network.toString().includes("mainnet") ? "mainnet" : "testnet";
|
|
81
|
+
const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());
|
|
82
|
+
try {
|
|
83
|
+
const { ByteBuildRegistry } = await import("./standards-agent-kit.es4.js");
|
|
84
|
+
if (ByteBuildRegistry.has("hcs2.registerEntry")) {
|
|
85
|
+
const built = await ByteBuildRegistry.build("hcs2.registerEntry", this.hederaKit, { registryTopicId, options });
|
|
86
|
+
if (built && built.transactionBytes) {
|
|
87
|
+
if (exec) {
|
|
88
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
89
|
+
}
|
|
90
|
+
if (!hasPrivateKey) {
|
|
91
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
} catch {
|
|
96
|
+
}
|
|
97
|
+
const start = SignerProviderRegistry.startHCSDelegate;
|
|
98
|
+
if (start) {
|
|
99
|
+
try {
|
|
100
|
+
const request = {
|
|
101
|
+
registryTopicId,
|
|
102
|
+
options
|
|
103
|
+
};
|
|
104
|
+
const { transactionBytes } = await start("hcs2.registerEntry", request, network);
|
|
105
|
+
if (transactionBytes) {
|
|
106
|
+
if (exec) {
|
|
107
|
+
return { success: true, transactionBytes };
|
|
108
|
+
}
|
|
109
|
+
if (!hasPrivateKey) {
|
|
110
|
+
return { success: true, transactionBytes };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
} catch (err) {
|
|
114
|
+
if (preferWallet) {
|
|
115
|
+
const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
116
|
+
throw new CodedError("wallet_submit_failed", msg);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (preferWallet) {
|
|
121
|
+
throw new CodedError("wallet_unavailable", "WalletExecutor not configured for hcs2.registerEntry");
|
|
122
|
+
}
|
|
123
|
+
if (!hasPrivateKey) {
|
|
124
|
+
throw new CodedError("wallet_unavailable", "No wallet executor and no operator private key available for server execution");
|
|
125
|
+
}
|
|
126
|
+
const client = await this.getHCS2Client();
|
|
127
|
+
return await client.registerEntry(registryTopicId, options);
|
|
33
128
|
}
|
|
34
129
|
/**
|
|
35
|
-
*
|
|
130
|
+
* Update an existing entry in an HCS-2 registry
|
|
36
131
|
*/
|
|
37
|
-
async
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
132
|
+
async updateEntry(registryTopicId, options) {
|
|
133
|
+
const exec = SignerProviderRegistry.walletExecutor;
|
|
134
|
+
const preferWallet = SignerProviderRegistry.preferWalletOnly;
|
|
135
|
+
const network = this.hederaKit.client.network.toString().includes("mainnet") ? "mainnet" : "testnet";
|
|
136
|
+
const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());
|
|
137
|
+
try {
|
|
138
|
+
const { ByteBuildRegistry } = await import("./standards-agent-kit.es4.js");
|
|
139
|
+
if (ByteBuildRegistry.has("hcs2.updateEntry")) {
|
|
140
|
+
const built = await ByteBuildRegistry.build("hcs2.updateEntry", this.hederaKit, { registryTopicId, options });
|
|
141
|
+
if (built && built.transactionBytes) {
|
|
142
|
+
if (exec) {
|
|
143
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
144
|
+
}
|
|
145
|
+
if (!hasPrivateKey) {
|
|
146
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
} catch {
|
|
151
|
+
}
|
|
152
|
+
const start = SignerProviderRegistry.startHCSDelegate;
|
|
153
|
+
if (start) {
|
|
154
|
+
try {
|
|
155
|
+
const request = {
|
|
156
|
+
registryTopicId,
|
|
157
|
+
options
|
|
158
|
+
};
|
|
159
|
+
const { transactionBytes } = await start("hcs2.updateEntry", request, network);
|
|
160
|
+
if (transactionBytes) {
|
|
161
|
+
if (exec) {
|
|
162
|
+
return { success: true, transactionBytes };
|
|
163
|
+
}
|
|
164
|
+
if (!hasPrivateKey) {
|
|
165
|
+
return { success: true, transactionBytes };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
} catch (err) {
|
|
169
|
+
if (preferWallet) {
|
|
170
|
+
const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
171
|
+
throw new CodedError("wallet_submit_failed", msg);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (preferWallet) {
|
|
176
|
+
throw new CodedError("wallet_unavailable", "WalletExecutor not configured for hcs2.updateEntry");
|
|
177
|
+
}
|
|
178
|
+
if (!hasPrivateKey) {
|
|
179
|
+
throw new CodedError("wallet_unavailable", "No wallet executor and no operator private key available for server execution");
|
|
180
|
+
}
|
|
181
|
+
const client = await this.getHCS2Client();
|
|
182
|
+
return await client.updateEntry(registryTopicId, options);
|
|
45
183
|
}
|
|
46
184
|
/**
|
|
47
|
-
*
|
|
185
|
+
* Delete an entry from an HCS-2 registry
|
|
186
|
+
*/
|
|
187
|
+
async deleteEntry(registryTopicId, options) {
|
|
188
|
+
const exec = SignerProviderRegistry.walletExecutor;
|
|
189
|
+
const preferWallet = SignerProviderRegistry.preferWalletOnly;
|
|
190
|
+
const network = this.hederaKit.client.network.toString().includes("mainnet") ? "mainnet" : "testnet";
|
|
191
|
+
const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());
|
|
192
|
+
try {
|
|
193
|
+
const { ByteBuildRegistry } = await import("./standards-agent-kit.es4.js");
|
|
194
|
+
if (ByteBuildRegistry.has("hcs2.deleteEntry")) {
|
|
195
|
+
const built = await ByteBuildRegistry.build("hcs2.deleteEntry", this.hederaKit, { registryTopicId, options });
|
|
196
|
+
if (built && built.transactionBytes) {
|
|
197
|
+
if (exec) {
|
|
198
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
199
|
+
}
|
|
200
|
+
if (!hasPrivateKey) {
|
|
201
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
} catch {
|
|
206
|
+
}
|
|
207
|
+
const start = SignerProviderRegistry.startHCSDelegate;
|
|
208
|
+
if (start) {
|
|
209
|
+
try {
|
|
210
|
+
const request = {
|
|
211
|
+
registryTopicId,
|
|
212
|
+
options
|
|
213
|
+
};
|
|
214
|
+
const { transactionBytes } = await start("hcs2.deleteEntry", request, network);
|
|
215
|
+
if (transactionBytes) {
|
|
216
|
+
if (exec) {
|
|
217
|
+
return { success: true, transactionBytes };
|
|
218
|
+
}
|
|
219
|
+
if (!hasPrivateKey) {
|
|
220
|
+
return { success: true, transactionBytes };
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
} catch (err) {
|
|
224
|
+
if (preferWallet) {
|
|
225
|
+
const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
226
|
+
throw new CodedError("wallet_submit_failed", msg);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (preferWallet) {
|
|
231
|
+
throw new CodedError("wallet_unavailable", "WalletExecutor not configured for hcs2.deleteEntry");
|
|
232
|
+
}
|
|
233
|
+
if (!hasPrivateKey) {
|
|
234
|
+
throw new CodedError("wallet_unavailable", "No wallet executor and no operator private key available for server execution");
|
|
235
|
+
}
|
|
236
|
+
const client = await this.getHCS2Client();
|
|
237
|
+
return await client.deleteEntry(registryTopicId, options);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Migrate an HCS-2 registry to a new topic
|
|
241
|
+
*/
|
|
242
|
+
async migrateRegistry(registryTopicId, options) {
|
|
243
|
+
const exec = SignerProviderRegistry.walletExecutor;
|
|
244
|
+
const preferWallet = SignerProviderRegistry.preferWalletOnly;
|
|
245
|
+
const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());
|
|
246
|
+
try {
|
|
247
|
+
const { ByteBuildRegistry } = await import("./standards-agent-kit.es4.js");
|
|
248
|
+
if (ByteBuildRegistry.has("hcs2.migrateRegistry")) {
|
|
249
|
+
const built = await ByteBuildRegistry.build("hcs2.migrateRegistry", this.hederaKit, { registryTopicId, options });
|
|
250
|
+
if (built && built.transactionBytes) {
|
|
251
|
+
if (exec) {
|
|
252
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
253
|
+
}
|
|
254
|
+
if (!hasPrivateKey) {
|
|
255
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
} catch {
|
|
260
|
+
}
|
|
261
|
+
const start = SignerProviderRegistry.startHCSDelegate;
|
|
262
|
+
if (start) {
|
|
263
|
+
try {
|
|
264
|
+
const request = { registryTopicId, options };
|
|
265
|
+
const network = this.hederaKit.client.network.toString().includes("mainnet") ? "mainnet" : "testnet";
|
|
266
|
+
const { transactionBytes } = await start("hcs2.migrateRegistry", request, network);
|
|
267
|
+
if (transactionBytes) {
|
|
268
|
+
if (exec) {
|
|
269
|
+
return { success: true, transactionBytes };
|
|
270
|
+
}
|
|
271
|
+
if (!hasPrivateKey) {
|
|
272
|
+
return { success: true, transactionBytes };
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
} catch (err) {
|
|
276
|
+
if (preferWallet) {
|
|
277
|
+
const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
278
|
+
throw new CodedError("wallet_submit_failed", msg);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (preferWallet) {
|
|
283
|
+
throw new CodedError("wallet_unavailable", "WalletExecutor not configured for hcs2.migrateRegistry");
|
|
284
|
+
}
|
|
285
|
+
if (!hasPrivateKey) {
|
|
286
|
+
throw new CodedError("wallet_unavailable", "No wallet executor and no operator private key available for server execution");
|
|
287
|
+
}
|
|
288
|
+
const client = await this.getHCS2Client();
|
|
289
|
+
return await client.migrateRegistry(registryTopicId, options);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Query entries from an HCS-2 registry
|
|
293
|
+
*/
|
|
294
|
+
async getRegistry(topicId, options = {}) {
|
|
295
|
+
const client = await this.getHCS2Client();
|
|
296
|
+
return await client.getRegistry(topicId, options);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Submit a raw message to an HCS-2 topic
|
|
300
|
+
*/
|
|
301
|
+
async submitMessage(topicId, payload) {
|
|
302
|
+
const exec = SignerProviderRegistry.walletExecutor;
|
|
303
|
+
const preferWallet = SignerProviderRegistry.preferWalletOnly;
|
|
304
|
+
const network = this.hederaKit.client.network.toString().includes("mainnet") ? "mainnet" : "testnet";
|
|
305
|
+
const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());
|
|
306
|
+
try {
|
|
307
|
+
const { ByteBuildRegistry } = await import("./standards-agent-kit.es4.js");
|
|
308
|
+
if (ByteBuildRegistry.has("hcs2.submitMessage")) {
|
|
309
|
+
const built = await ByteBuildRegistry.build("hcs2.submitMessage", this.hederaKit, { topicId, payload });
|
|
310
|
+
if (built && built.transactionBytes) {
|
|
311
|
+
if (exec) {
|
|
312
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
313
|
+
}
|
|
314
|
+
if (!hasPrivateKey) {
|
|
315
|
+
return { success: true, transactionBytes: built.transactionBytes };
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
} catch {
|
|
320
|
+
}
|
|
321
|
+
const start = SignerProviderRegistry.startHCSDelegate;
|
|
322
|
+
if (start) {
|
|
323
|
+
try {
|
|
324
|
+
const request = { topicId, payload };
|
|
325
|
+
const { transactionBytes } = await start("hcs2.submitMessage", request, network);
|
|
326
|
+
if (transactionBytes) {
|
|
327
|
+
if (exec) {
|
|
328
|
+
return { success: true, transactionBytes };
|
|
329
|
+
}
|
|
330
|
+
if (!hasPrivateKey) {
|
|
331
|
+
return { success: true, transactionBytes };
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
} catch (err) {
|
|
335
|
+
if (preferWallet) {
|
|
336
|
+
const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
337
|
+
throw new CodedError("wallet_submit_failed", msg);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
if (preferWallet) {
|
|
342
|
+
throw new CodedError("wallet_unavailable", "WalletExecutor not configured for hcs2.submitMessage");
|
|
343
|
+
}
|
|
344
|
+
if (!hasPrivateKey) {
|
|
345
|
+
throw new CodedError("wallet_unavailable", "No wallet executor and no operator private key available for server execution");
|
|
346
|
+
}
|
|
347
|
+
const client = await this.getHCS2Client();
|
|
348
|
+
await client.submitMessage(topicId, payload);
|
|
349
|
+
return { success: true };
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Get topic info from mirror node
|
|
353
|
+
*/
|
|
354
|
+
async getTopicInfo(topicId) {
|
|
355
|
+
const client = await this.getHCS2Client();
|
|
356
|
+
return await client.getTopicInfo(topicId);
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Close the HCS-2 client
|
|
48
360
|
*/
|
|
49
361
|
async close() {
|
|
50
|
-
this.
|
|
362
|
+
if (this.hcs2Client) {
|
|
363
|
+
this.hcs2Client.close();
|
|
364
|
+
this.hcs2Client = void 0;
|
|
365
|
+
}
|
|
51
366
|
}
|
|
52
367
|
}
|
|
53
368
|
export {
|
|
54
|
-
|
|
369
|
+
HCS2Builder
|
|
55
370
|
};
|
|
56
371
|
//# sourceMappingURL=standards-agent-kit.es6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-agent-kit.es6.js","sources":["../../src/builders/inscriber/inscriber-builder.ts"],"sourcesContent":["import { BaseServiceBuilder } from 'hedera-agent-kit';\nimport type { HederaAgentKit } from 'hedera-agent-kit';\nimport {\n inscribe,\n inscribeWithSigner,\n retrieveInscription,\n InscriptionInput,\n InscriptionOptions,\n InscriptionResponse,\n RetrievedInscriptionResult,\n HederaClientConfig,\n NetworkType,\n} from '@hashgraphonline/standards-sdk';\nimport { InscriptionSDK } from '@kiloscribe/inscription-sdk';\n\n/**\n * Type definition for DAppSigner interface compatible with inscription SDK\n */\ninterface DAppSigner {\n getAccountId(): { toString(): string };\n [key: string]: unknown;\n}\n\n/**\n * Builder for Inscription operations\n */\nexport class InscriberBuilder extends BaseServiceBuilder {\n protected inscriptionSDK?: InscriptionSDK;\n\n constructor(hederaKit: HederaAgentKit) {\n super(hederaKit);\n }\n\n /**\n * Get or create Inscription SDK - temporarily returns null since we don't have the actual SDK\n */\n protected async getInscriptionSDK(\n _options: InscriptionOptions\n ): Promise<InscriptionSDK | null> {\n return null;\n }\n\n /**\n * Inscribe content using server-side authentication\n */\n async inscribe(\n input: InscriptionInput,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n const network = this.hederaKit.client.network;\n const networkType: NetworkType = network.toString().includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n const clientConfig: HederaClientConfig = {\n accountId: operatorId,\n privateKey: operatorPrivateKey,\n network: networkType,\n };\n\n return await inscribe(input, clientConfig, options);\n }\n\n /**\n * Inscribe content using a DApp signer\n */\n async inscribeWithSigner(\n input: InscriptionInput,\n signer: DAppSigner,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n return await inscribeWithSigner(input, signer as unknown as Parameters<typeof inscribeWithSigner>[1], options);\n }\n\n /**\n * Retrieve an existing inscription\n */\n async retrieveInscription(\n transactionId: string,\n options: InscriptionOptions\n ): Promise<RetrievedInscriptionResult> {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n return await retrieveInscription(transactionId, {\n ...options,\n accountId: operatorId,\n privateKey: operatorPrivateKey,\n });\n }\n\n /**\n * Close the inscription SDK\n */\n async close(): Promise<void> {\n this.inscriptionSDK = undefined;\n }\n}"],"names":[],"mappings":";;AA0BO,MAAM,yBAAyB,mBAAmB;AAAA,EAGvD,YAAY,WAA2B;AACrC,UAAM,SAAS;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,kBACd,UACgC;AAChC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SACJ,OACA,SAC8B;AAC9B,UAAM,aAAa,KAAK,UAAU,OAAO,aAAA,EAAe,SAAA;AACxD,UAAM,qBAAqB,KAAK,UAAU,QAAQ,sBAAA,IAC9C,KAAK,UAAU,OAAO,wBAAwB,YAAA,IAC9C;AAEJ,UAAM,UAAU,KAAK,UAAU,OAAO;AACtC,UAAM,cAA2B,QAAQ,SAAA,EAAW,SAAS,SAAS,IAClE,YACA;AAEJ,UAAM,eAAmC;AAAA,MACvC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,SAAS;AAAA,IAAA;AAGX,WAAO,MAAM,SAAS,OAAO,cAAc,OAAO;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ,OACA,QACA,SAC8B;AAC9B,WAAO,MAAM,mBAAmB,OAAO,QAA+D,OAAO;AAAA,EAC/G;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBACJ,eACA,SACqC;AACrC,UAAM,aAAa,KAAK,UAAU,OAAO,aAAA,EAAe,SAAA;AACxD,UAAM,qBAAqB,KAAK,UAAU,QAAQ,sBAAA,IAC9C,KAAK,UAAU,OAAO,wBAAwB,YAAA,IAC9C;AAEJ,WAAO,MAAM,oBAAoB,eAAe;AAAA,MAC9C,GAAG;AAAA,MACH,WAAW;AAAA,MACX,YAAY;AAAA,IAAA,CACb;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAuB;AAC3B,SAAK,iBAAiB;AAAA,EACxB;AACF;"}
|
|
1
|
+
{"version":3,"file":"standards-agent-kit.es6.js","sources":["../../src/builders/hcs2/hcs2-builder.ts"],"sourcesContent":["import { BaseServiceBuilder } from 'hedera-agent-kit';\nimport type { HederaAgentKit } from 'hedera-agent-kit';\nimport {\n HCS2Client,\n SDKHCS2ClientConfig,\n CreateRegistryOptions,\n RegisterEntryOptions,\n UpdateEntryOptions,\n DeleteEntryOptions,\n MigrateTopicOptions,\n QueryRegistryOptions,\n TopicRegistrationResponse,\n RegistryOperationResponse,\n TopicRegistry,\n NetworkType,\n HederaMirrorNode,\n} from '@hashgraphonline/standards-sdk';\nimport { SignerProviderRegistry, type NetworkString } from '../../signing/signer-provider';\nimport type { TopicRegistrationResult, RegistryOperationResult, SubmitMessageResult } from '../../types/tx-results';\nimport { CodedError } from '../../utils/CodedError';\n\n/**\n * Builder for HCS-2 operations that delegates to HCS2Client\n */\nexport class HCS2Builder extends BaseServiceBuilder {\n protected hcs2Client?: HCS2Client;\n\n constructor(hederaKit: HederaAgentKit) {\n super(hederaKit);\n }\n\n /**\n * Get or create HCS-2 client\n */\n protected async getHCS2Client(): Promise<HCS2Client> {\n if (!this.hcs2Client) {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n const network = this.hederaKit.client.network;\n const networkType: NetworkType = network.toString().includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n let keyTypeHint: 'ed25519' | 'ecdsa' | undefined;\n try {\n const mirror = new HederaMirrorNode(networkType);\n const info = await mirror.requestAccount(operatorId);\n const t = (info as any)?.key?._type as string | undefined;\n if (t) {\n const upper = t.toUpperCase();\n if (upper.includes('ED25519')) keyTypeHint = 'ed25519';\n else if (upper.includes('ECDSA')) keyTypeHint = 'ecdsa';\n }\n } catch {}\n\n const config: SDKHCS2ClientConfig = {\n network: networkType,\n operatorId: operatorId,\n operatorKey: operatorPrivateKey,\n ...(keyTypeHint ? { keyType: keyTypeHint } : {}),\n };\n\n this.hcs2Client = new HCS2Client(config);\n }\n return this.hcs2Client;\n }\n\n /**\n * Create a new HCS-2 registry\n * Note: This executes the transaction directly via HCS2Client\n */\n async createRegistry(\n options: CreateRegistryOptions = {}\n ): Promise<TopicRegistrationResult> {\n const exec = SignerProviderRegistry.walletExecutor;\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());\n\n if (exec) {\n const start = SignerProviderRegistry.startHCSDelegate;\n if (start) {\n try {\n const request: Record<string, unknown> = { options };\n const network = (this.hederaKit.client.network.toString().includes('mainnet') ? 'mainnet' : 'testnet') as NetworkString;\n const { transactionBytes } = await start('hcs2.createRegistry', request, network);\n if (transactionBytes) {\n return { success: true, transactionBytes };\n }\n } catch (err) {\n if (preferWallet) {\n throw new CodedError('wallet_submit_failed', `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n }\n if (preferWallet) {\n throw new CodedError('wallet_unavailable', 'WalletExecutor not configured for hcs2.createRegistry');\n }\n }\n\n if (!hasPrivateKey) {\n throw new CodedError('wallet_unavailable', 'No wallet executor and no operator private key available for server execution');\n }\n const client = await this.getHCS2Client();\n return await client.createRegistry(options);\n }\n /**\n * Register a new entry in an HCS-2 registry\n */\n async registerEntry(\n registryTopicId: string,\n options: RegisterEntryOptions\n ): Promise<RegistryOperationResult> {\n const exec = SignerProviderRegistry.walletExecutor;\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const network = (this.hederaKit.client.network.toString().includes('mainnet') ? 'mainnet' : 'testnet') as NetworkString;\n const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());\n\n try {\n const { ByteBuildRegistry } = await import('../../signing/bytes-registry');\n if (ByteBuildRegistry.has('hcs2.registerEntry')) {\n const built = await ByteBuildRegistry.build('hcs2.registerEntry', this.hederaKit, { registryTopicId, options });\n if (built && built.transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n }\n }\n } catch {}\n\n const start = SignerProviderRegistry.startHCSDelegate;\n if (start) {\n try {\n const request: Record<string, unknown> = {\n registryTopicId,\n options,\n };\n const { transactionBytes } = await start('hcs2.registerEntry', request, network);\n if (transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes };\n }\n }\n } catch (err) {\n if (preferWallet) {\n const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;\n throw new CodedError('wallet_submit_failed', msg);\n }\n }\n }\n\n if (preferWallet) {\n throw new CodedError('wallet_unavailable', 'WalletExecutor not configured for hcs2.registerEntry');\n }\n\n if (!hasPrivateKey) {\n throw new CodedError('wallet_unavailable', 'No wallet executor and no operator private key available for server execution');\n }\n const client = await this.getHCS2Client();\n return await client.registerEntry(registryTopicId, options);\n }\n\n /**\n * Update an existing entry in an HCS-2 registry\n */\n async updateEntry(\n registryTopicId: string,\n options: UpdateEntryOptions\n ): Promise<RegistryOperationResult> {\n const exec = SignerProviderRegistry.walletExecutor;\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const network = (this.hederaKit.client.network.toString().includes('mainnet') ? 'mainnet' : 'testnet') as NetworkString;\n const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());\n\n try {\n const { ByteBuildRegistry } = await import('../../signing/bytes-registry');\n if (ByteBuildRegistry.has('hcs2.updateEntry')) {\n const built = await ByteBuildRegistry.build('hcs2.updateEntry', this.hederaKit, { registryTopicId, options });\n if (built && built.transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n }\n }\n } catch {}\n\n const start = SignerProviderRegistry.startHCSDelegate;\n if (start) {\n try {\n const request: Record<string, unknown> = {\n registryTopicId,\n options,\n };\n const { transactionBytes } = await start('hcs2.updateEntry', request, network);\n if (transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes };\n }\n }\n } catch (err) {\n if (preferWallet) {\n const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;\n throw new CodedError('wallet_submit_failed', msg);\n }\n }\n }\n\n if (preferWallet) {\n throw new CodedError('wallet_unavailable', 'WalletExecutor not configured for hcs2.updateEntry');\n }\n\n if (!hasPrivateKey) {\n throw new CodedError('wallet_unavailable', 'No wallet executor and no operator private key available for server execution');\n }\n const client = await this.getHCS2Client();\n return await client.updateEntry(registryTopicId, options);\n }\n\n /**\n * Delete an entry from an HCS-2 registry\n */\n async deleteEntry(\n registryTopicId: string,\n options: DeleteEntryOptions\n ): Promise<RegistryOperationResult> {\n const exec = SignerProviderRegistry.walletExecutor;\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const network = (this.hederaKit.client.network.toString().includes('mainnet') ? 'mainnet' : 'testnet') as NetworkString;\n const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());\n\n try {\n const { ByteBuildRegistry } = await import('../../signing/bytes-registry');\n if (ByteBuildRegistry.has('hcs2.deleteEntry')) {\n const built = await ByteBuildRegistry.build('hcs2.deleteEntry', this.hederaKit, { registryTopicId, options });\n if (built && built.transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n }\n }\n } catch {}\n\n const start = SignerProviderRegistry.startHCSDelegate;\n if (start) {\n try {\n const request: Record<string, unknown> = {\n registryTopicId,\n options,\n };\n const { transactionBytes } = await start('hcs2.deleteEntry', request, network);\n if (transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes };\n }\n }\n } catch (err) {\n if (preferWallet) {\n const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;\n throw new CodedError('wallet_submit_failed', msg);\n }\n }\n }\n\n if (preferWallet) {\n throw new CodedError('wallet_unavailable', 'WalletExecutor not configured for hcs2.deleteEntry');\n }\n\n if (!hasPrivateKey) {\n throw new CodedError('wallet_unavailable', 'No wallet executor and no operator private key available for server execution');\n }\n const client = await this.getHCS2Client();\n return await client.deleteEntry(registryTopicId, options);\n }\n\n /**\n * Migrate an HCS-2 registry to a new topic\n */\n async migrateRegistry(\n registryTopicId: string,\n options: MigrateTopicOptions\n ): Promise<RegistryOperationResult> {\n const exec = SignerProviderRegistry.walletExecutor;\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());\n\n try {\n const { ByteBuildRegistry } = await import('../../signing/bytes-registry');\n if (ByteBuildRegistry.has('hcs2.migrateRegistry')) {\n const built = await ByteBuildRegistry.build('hcs2.migrateRegistry', this.hederaKit, { registryTopicId, options });\n if (built && built.transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n }\n }\n } catch {}\n\n const start = SignerProviderRegistry.startHCSDelegate;\n if (start) {\n try {\n const request: Record<string, unknown> = { registryTopicId, options };\n const network = (this.hederaKit.client.network.toString().includes('mainnet') ? 'mainnet' : 'testnet') as NetworkString;\n const { transactionBytes } = await start('hcs2.migrateRegistry', request, network);\n if (transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes };\n }\n }\n } catch (err) {\n if (preferWallet) {\n const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;\n throw new CodedError('wallet_submit_failed', msg);\n }\n }\n }\n\n if (preferWallet) {\n throw new CodedError('wallet_unavailable', 'WalletExecutor not configured for hcs2.migrateRegistry');\n }\n\n if (!hasPrivateKey) {\n throw new CodedError('wallet_unavailable', 'No wallet executor and no operator private key available for server execution');\n }\n const client = await this.getHCS2Client();\n return await client.migrateRegistry(registryTopicId, options);\n }\n\n /**\n * Query entries from an HCS-2 registry\n */\n async getRegistry(\n topicId: string,\n options: QueryRegistryOptions = {}\n ): Promise<TopicRegistry> {\n const client = await this.getHCS2Client();\n return await client.getRegistry(topicId, options);\n }\n\n /**\n * Submit a raw message to an HCS-2 topic\n */\n async submitMessage(\n topicId: string,\n payload: any\n ): Promise<SubmitMessageResult> {\n const exec = SignerProviderRegistry.walletExecutor;\n const preferWallet = SignerProviderRegistry.preferWalletOnly;\n const network = (this.hederaKit.client.network.toString().includes('mainnet') ? 'mainnet' : 'testnet') as NetworkString;\n const hasPrivateKey = !!(this.hederaKit?.signer?.getOperatorPrivateKey && this.hederaKit.signer.getOperatorPrivateKey());\n\n try {\n const { ByteBuildRegistry } = await import('../../signing/bytes-registry');\n if (ByteBuildRegistry.has('hcs2.submitMessage')) {\n const built = await ByteBuildRegistry.build('hcs2.submitMessage', this.hederaKit, { topicId, payload });\n if (built && built.transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes: built.transactionBytes };\n }\n }\n }\n } catch {}\n\n const start = SignerProviderRegistry.startHCSDelegate;\n if (start) {\n try {\n const request: Record<string, unknown> = { topicId, payload };\n const { transactionBytes } = await start('hcs2.submitMessage', request, network);\n if (transactionBytes) {\n if (exec) {\n return { success: true, transactionBytes };\n }\n if (!hasPrivateKey) {\n return { success: true, transactionBytes };\n }\n }\n } catch (err) {\n if (preferWallet) {\n const msg = `wallet_submit_failed: ${err instanceof Error ? err.message : String(err)}`;\n throw new CodedError('wallet_submit_failed', msg);\n }\n }\n }\n\n if (preferWallet) {\n throw new CodedError('wallet_unavailable', 'WalletExecutor not configured for hcs2.submitMessage');\n }\n\n if (!hasPrivateKey) {\n throw new CodedError('wallet_unavailable', 'No wallet executor and no operator private key available for server execution');\n }\n const client = await this.getHCS2Client();\n await client.submitMessage(topicId, payload);\n return { success: true };\n }\n /**\n * Get topic info from mirror node\n */\n async getTopicInfo(topicId: string): Promise<any> {\n const client = await this.getHCS2Client();\n return await client.getTopicInfo(topicId);\n }\n\n /**\n * Close the HCS-2 client\n */\n async close(): Promise<void> {\n if (this.hcs2Client) {\n this.hcs2Client.close();\n this.hcs2Client = undefined;\n }\n }\n}"],"names":[],"mappings":"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"}
|