@hashgraphonline/standards-agent-kit 0.2.137 → 0.2.139
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/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 +4 -4
- package/dist/cjs/types/tx-results.d.ts +15 -0
- package/dist/cjs/utils/CodedError.d.ts +4 -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/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 -1549
- 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 -234
- package/dist/es/standards-agent-kit.es34.js.map +1 -1
- package/dist/es/standards-agent-kit.es35.js +87 -213
- package/dist/es/standards-agent-kit.es35.js.map +1 -1
- package/dist/es/standards-agent-kit.es36.js +185 -129
- package/dist/es/standards-agent-kit.es36.js.map +1 -1
- package/dist/es/standards-agent-kit.es37.js +167 -563
- package/dist/es/standards-agent-kit.es37.js.map +1 -1
- package/dist/es/standards-agent-kit.es38.js +244 -30
- 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 +24 -20
- package/dist/es/standards-agent-kit.es47.js.map +1 -1
- package/dist/es/standards-agent-kit.es48.js +6 -52
- package/dist/es/standards-agent-kit.es48.js.map +1 -1
- package/dist/es/standards-agent-kit.es49.js +4 -3
- 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 +3 -39
- package/dist/es/standards-agent-kit.es50.js.map +1 -1
- package/dist/es/standards-agent-kit.es51.js +18 -16
- package/dist/es/standards-agent-kit.es51.js.map +1 -1
- package/dist/es/standards-agent-kit.es52.js +48 -68
- package/dist/es/standards-agent-kit.es52.js.map +1 -1
- package/dist/es/standards-agent-kit.es53.js +6 -0
- package/dist/es/standards-agent-kit.es53.js.map +1 -0
- package/dist/es/standards-agent-kit.es54.js +43 -0
- package/dist/es/standards-agent-kit.es54.js.map +1 -0
- package/dist/es/standards-agent-kit.es55.js +22 -0
- package/dist/es/standards-agent-kit.es55.js.map +1 -0
- package/dist/es/standards-agent-kit.es56.js +77 -0
- package/dist/es/standards-agent-kit.es56.js.map +1 -0
- package/dist/es/standards-agent-kit.es6.js +332 -173
- 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 +4 -4
- package/dist/es/types/tx-results.d.ts +15 -0
- package/dist/es/utils/CodedError.d.ts +4 -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/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 +4 -4
- package/dist/umd/types/tx-results.d.ts +15 -0
- package/dist/umd/utils/CodedError.d.ts +4 -0
- package/dist/umd/validation/hip412-schemas.d.ts +2 -2
- package/package.json +3 -3
- package/src/builders/hcs10/hcs10-builder.ts +239 -10
- package/src/builders/hcs2/hcs2-builder.ts +302 -9
- package/src/builders/hcs6/hcs6-builder.ts +79 -4
- 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 +90 -2
- package/src/tools/inscriber/InscribeHashinalTool.ts +25 -134
- 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
|
@@ -1,212 +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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Get or create HCS-2 client
|
|
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;
|
|
21
39
|
}
|
|
22
40
|
/**
|
|
23
|
-
*
|
|
41
|
+
* Create a new HCS-2 registry
|
|
42
|
+
* Note: This executes the transaction directly via HCS2Client
|
|
24
43
|
*/
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Register a new entry in an HCS-2 registry
|
|
76
|
+
*/
|
|
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());
|
|
31
82
|
try {
|
|
32
|
-
const
|
|
33
|
-
|
|
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
|
+
}
|
|
34
95
|
} catch {
|
|
35
|
-
return null;
|
|
36
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);
|
|
37
128
|
}
|
|
38
129
|
/**
|
|
39
|
-
*
|
|
130
|
+
* Update an existing entry in an HCS-2 registry
|
|
40
131
|
*/
|
|
41
|
-
async
|
|
42
|
-
|
|
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);
|
|
43
183
|
}
|
|
44
184
|
/**
|
|
45
|
-
*
|
|
185
|
+
* Delete an entry from an HCS-2 registry
|
|
46
186
|
*/
|
|
47
|
-
async
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const network = this.hederaKit.client.network;
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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);
|
|
58
238
|
}
|
|
59
239
|
/**
|
|
60
|
-
*
|
|
240
|
+
* Migrate an HCS-2 registry to a new topic
|
|
61
241
|
*/
|
|
62
|
-
async
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
throw err;
|
|
79
|
-
}
|
|
80
|
-
if (infoMaybe && _InscriberBuilder.startInscriptionDelegate && _InscriberBuilder.walletExecutor) {
|
|
81
|
-
const holderId = infoMaybe.accountId;
|
|
82
|
-
const network = infoMaybe.network;
|
|
83
|
-
const ext = options;
|
|
84
|
-
const baseRequest = {
|
|
85
|
-
holderId,
|
|
86
|
-
metadata: ext.metadata || {},
|
|
87
|
-
tags: options.tags || [],
|
|
88
|
-
mode: options.mode || "file"
|
|
89
|
-
};
|
|
90
|
-
if (typeof ext.fileStandard !== "undefined") {
|
|
91
|
-
baseRequest.fileStandard = ext.fileStandard;
|
|
92
|
-
}
|
|
93
|
-
if (typeof ext.chunkSize !== "undefined") {
|
|
94
|
-
baseRequest.chunkSize = ext.chunkSize;
|
|
95
|
-
}
|
|
96
|
-
let request = { ...baseRequest };
|
|
97
|
-
switch (input.type) {
|
|
98
|
-
case "url":
|
|
99
|
-
request = { ...baseRequest, file: { type: "url", url: input.url } };
|
|
100
|
-
break;
|
|
101
|
-
case "file":
|
|
102
|
-
request = { ...baseRequest, file: { type: "path", path: input.path } };
|
|
103
|
-
break;
|
|
104
|
-
case "buffer":
|
|
105
|
-
request = {
|
|
106
|
-
...baseRequest,
|
|
107
|
-
file: {
|
|
108
|
-
type: "base64",
|
|
109
|
-
base64: Buffer.from(input.buffer).toString("base64"),
|
|
110
|
-
fileName: input.fileName,
|
|
111
|
-
mimeType: input.mimeType
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
break;
|
|
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
|
+
}
|
|
115
258
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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);
|
|
122
279
|
}
|
|
123
280
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
+
}
|
|
130
318
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
if (isDone) {
|
|
151
|
-
const resultConfirmed = {
|
|
152
|
-
quote: false,
|
|
153
|
-
confirmed: true,
|
|
154
|
-
result: {
|
|
155
|
-
jobId: start.tx_id || "",
|
|
156
|
-
transactionId,
|
|
157
|
-
topicId
|
|
158
|
-
},
|
|
159
|
-
inscription: retrieved
|
|
160
|
-
};
|
|
161
|
-
return resultConfirmed;
|
|
162
|
-
}
|
|
163
|
-
} catch {
|
|
164
|
-
}
|
|
165
|
-
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
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);
|
|
166
338
|
}
|
|
167
339
|
}
|
|
168
|
-
const partial = {
|
|
169
|
-
quote: false,
|
|
170
|
-
confirmed: false,
|
|
171
|
-
result: {
|
|
172
|
-
jobId: start.tx_id || "",
|
|
173
|
-
transactionId,
|
|
174
|
-
status: start.status,
|
|
175
|
-
completed: start.completed
|
|
176
|
-
},
|
|
177
|
-
inscription: start.topic_id ? { topic_id: start.topic_id } : void 0
|
|
178
|
-
};
|
|
179
|
-
return partial;
|
|
180
340
|
}
|
|
181
|
-
if (
|
|
182
|
-
|
|
183
|
-
err.code = "wallet_unavailable";
|
|
184
|
-
throw err;
|
|
341
|
+
if (preferWallet) {
|
|
342
|
+
throw new CodedError("wallet_unavailable", "WalletExecutor not configured for hcs2.submitMessage");
|
|
185
343
|
}
|
|
186
|
-
|
|
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 };
|
|
187
350
|
}
|
|
188
351
|
/**
|
|
189
|
-
*
|
|
352
|
+
* Get topic info from mirror node
|
|
190
353
|
*/
|
|
191
|
-
async
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
return await retrieveInscription(transactionId, {
|
|
195
|
-
...options,
|
|
196
|
-
accountId: operatorId,
|
|
197
|
-
privateKey: operatorPrivateKey
|
|
198
|
-
});
|
|
354
|
+
async getTopicInfo(topicId) {
|
|
355
|
+
const client = await this.getHCS2Client();
|
|
356
|
+
return await client.getTopicInfo(topicId);
|
|
199
357
|
}
|
|
200
358
|
/**
|
|
201
|
-
* Close the
|
|
359
|
+
* Close the HCS-2 client
|
|
202
360
|
*/
|
|
203
361
|
async close() {
|
|
204
|
-
this.
|
|
362
|
+
if (this.hcs2Client) {
|
|
363
|
+
this.hcs2Client.close();
|
|
364
|
+
this.hcs2Client = void 0;
|
|
365
|
+
}
|
|
205
366
|
}
|
|
206
|
-
}
|
|
207
|
-
_InscriberBuilder.preferWalletOnly = false;
|
|
208
|
-
let InscriberBuilder = _InscriberBuilder;
|
|
367
|
+
}
|
|
209
368
|
export {
|
|
210
|
-
|
|
369
|
+
HCS2Builder
|
|
211
370
|
};
|
|
212
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 getTopicId,\n} from '@hashgraphonline/standards-sdk';\nimport { InscriptionSDK } from '@kiloscribe/inscription-sdk';\nimport type { AgentOperationalMode } from 'hedera-agent-kit';\n\n/**\n * Type definition for DAppSigner interface compatible with inscription SDK\n */\ninterface DAppSigner {\n getAccountId(): { toString(): string };\n [key: string]: unknown;\n}\n\n/**\n * Builder for Inscription operations\n */\nexport class InscriberBuilder extends BaseServiceBuilder {\n protected inscriptionSDK?: InscriptionSDK;\n private static signerProvider?: () => Promise<DAppSigner | null> | DAppSigner | null;\n private static walletInfoResolver?: () => Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null> | { accountId: string; network: 'mainnet' | 'testnet' } | null;\n private static startInscriptionDelegate?: (\n request: Record<string, unknown>,\n network: 'mainnet' | 'testnet'\n ) => Promise<{\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n }>;\n private static walletExecutor?: (\n base64: string,\n network: 'mainnet' | 'testnet'\n ) => Promise<{ transactionId: string }>;\n /** When true, do not allow server fallback; require a wallet path in Provide Bytes */\n private static preferWalletOnly = false;\n\n constructor(hederaKit: HederaAgentKit) {\n super(hederaKit);\n }\n\n public getOperationalMode(): AgentOperationalMode {\n return this.hederaKit.operationalMode as AgentOperationalMode;\n }\n\n static setSignerProvider(\n provider: () => Promise<DAppSigner | null> | DAppSigner | null\n ): void {\n InscriberBuilder.signerProvider = provider;\n }\n\n static setWalletInfoResolver(\n resolver: () => Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null> | { accountId: string; network: 'mainnet' | 'testnet' } | null\n ): void {\n InscriberBuilder.walletInfoResolver = resolver;\n }\n\n static setStartInscriptionDelegate(\n delegate: (\n request: Record<string, unknown>,\n network: 'mainnet' | 'testnet'\n ) => Promise<{ transactionBytes: string; tx_id?: string; topic_id?: string; status?: string; completed?: boolean }>\n ): void {\n InscriberBuilder.startInscriptionDelegate = delegate;\n }\n\n static setWalletExecutor(\n executor: (base64: string, network: 'mainnet' | 'testnet') => Promise<{ transactionId: string }>\n ): void {\n InscriberBuilder.walletExecutor = executor;\n }\n\n /**\n * Control fallback behavior. When true, wallet must be available for execution paths.\n */\n static setPreferWalletOnly(flag: boolean): void {\n InscriberBuilder.preferWalletOnly = !!flag;\n }\n\n async getSigner(): Promise<DAppSigner | null> {\n const provider = InscriberBuilder.signerProvider;\n if (!provider) return null;\n try {\n const maybe = provider();\n return (maybe && typeof (maybe as Promise<unknown>).then === 'function')\n ? await (maybe as Promise<DAppSigner | null>)\n : (maybe as DAppSigner | null);\n } catch {\n return null;\n }\n }\n\n /**\n * Get or create Inscription SDK - temporarily returns null since we don't have the actual SDK\n */\n protected async getInscriptionSDK(\n _options: InscriptionOptions\n ): Promise<InscriptionSDK | null> {\n return null;\n }\n\n /**\n * Inscribe content using server-side authentication\n */\n async inscribe(\n input: InscriptionInput,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n const network = this.hederaKit.client.network;\n const networkType: NetworkType = network.toString().includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n\n const clientConfig: HederaClientConfig = {\n accountId: operatorId,\n privateKey: operatorPrivateKey,\n network: networkType,\n };\n\n return await inscribe(input, clientConfig, options);\n }\n\n /**\n * Inscribe content using a DApp signer\n */\n async inscribeWithSigner(\n input: InscriptionInput,\n signer: DAppSigner,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n return await inscribeWithSigner(\n input,\n signer as unknown as Parameters<typeof inscribeWithSigner>[1],\n options\n );\n }\n\n async inscribeAuto(\n input: InscriptionInput,\n options: InscriptionOptions\n ): Promise<InscriptionResponse> {\n const signer = await this.getSigner();\n if (signer) {\n return this.inscribeWithSigner(input, signer, options);\n }\n\n type WalletInfo = { accountId: string; network: 'mainnet' | 'testnet' };\n type WalletStartResponse = {\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n };\n type WalletExecutorResponse = { transactionId: string };\n\n const infoMaybe: WalletInfo | null = InscriberBuilder.walletInfoResolver\n ? await InscriberBuilder.walletInfoResolver()\n : null;\n\n if (InscriberBuilder.preferWalletOnly && !infoMaybe) {\n const err = new Error('Wallet unavailable: connect a wallet or switch to autonomous mode');\n (err as unknown as { code: string }).code = 'wallet_unavailable';\n throw err;\n }\n\n if (\n infoMaybe &&\n InscriberBuilder.startInscriptionDelegate &&\n InscriberBuilder.walletExecutor\n ) {\n const holderId = infoMaybe.accountId;\n const network: 'mainnet' | 'testnet' = infoMaybe.network;\n\n type InscriptionOptionsExt = InscriptionOptions & {\n fileStandard?: string;\n chunkSize?: number;\n jsonFileURL?: string;\n metadata?: Record<string, unknown> & { creator?: string; description?: string };\n };\n const ext = options as InscriptionOptionsExt;\n\n const baseRequest: Record<string, unknown> = {\n holderId,\n metadata: ext.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n };\n if (typeof ext.fileStandard !== 'undefined') {\n (baseRequest as { fileStandard?: string }).fileStandard = ext.fileStandard;\n }\n if (typeof ext.chunkSize !== 'undefined') {\n (baseRequest as { chunkSize?: number }).chunkSize = ext.chunkSize;\n }\n\n let request: Record<string, unknown> = { ...baseRequest };\n switch (input.type) {\n case 'url':\n request = { ...baseRequest, file: { type: 'url', url: input.url } };\n break;\n case 'file':\n request = { ...baseRequest, file: { type: 'path', path: input.path } };\n break;\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(input.buffer).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n (request as { metadataObject?: unknown }).metadataObject = ext.metadata;\n (request as { creator?: string }).creator = ext.metadata?.creator || holderId;\n (request as { description?: string }).description = ext.metadata?.description;\n if (typeof ext.jsonFileURL === 'string' && ext.jsonFileURL.length > 0) {\n (request as { jsonFileURL?: string }).jsonFileURL = ext.jsonFileURL;\n }\n }\n\n const start: WalletStartResponse = await InscriberBuilder.startInscriptionDelegate(\n request,\n network\n );\n if (!start || !start.transactionBytes) {\n throw new Error('Failed to start inscription (no transaction bytes)');\n }\n\n const exec: WalletExecutorResponse = await InscriberBuilder.walletExecutor(\n start.transactionBytes,\n network\n );\n const transactionId = exec?.transactionId || '';\n\n const shouldWait = options.quoteOnly ? false : options.waitForConfirmation ?? true;\n if (shouldWait) {\n const maxAttempts = (options as { waitMaxAttempts?: number }).waitMaxAttempts ?? 60;\n const intervalMs = (options as { waitIntervalMs?: number }).waitIntervalMs ?? 5000;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const retrieved: RetrievedInscriptionResult = await this.retrieveInscription(\n transactionId,\n options\n );\n const topicIdFromInscription: string | undefined = getTopicId(retrieved as unknown);\n const topicId: string | undefined = topicIdFromInscription ?? start.topic_id;\n const status: string | undefined = (retrieved as { status?: string }).status;\n const isDone = status === 'completed' || !!topicId;\n if (isDone) {\n const resultConfirmed: InscriptionResponse = {\n quote: false,\n confirmed: true,\n result: {\n jobId: start.tx_id || '',\n transactionId,\n topicId,\n },\n inscription: retrieved,\n } as unknown as InscriptionResponse;\n return resultConfirmed;\n }\n } catch {\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n }\n\n const partial: InscriptionResponse = {\n quote: false,\n confirmed: false,\n result: {\n jobId: start.tx_id || '',\n transactionId,\n status: start.status,\n completed: start.completed,\n },\n inscription: start.topic_id ? { topic_id: start.topic_id } : undefined,\n } as unknown as InscriptionResponse;\n return partial;\n }\n\n if (InscriberBuilder.preferWalletOnly) {\n const err = new Error('Wallet unavailable: connect a wallet or switch to autonomous mode');\n (err as unknown as { code: string }).code = 'wallet_unavailable';\n throw err;\n }\n return this.inscribe(input, options);\n }\n\n /**\n * Retrieve an existing inscription\n */\n async retrieveInscription(\n transactionId: string,\n options: InscriptionOptions\n ): Promise<RetrievedInscriptionResult> {\n const operatorId = this.hederaKit.signer.getAccountId().toString();\n const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey()\n ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw()\n : '';\n\n return await retrieveInscription(transactionId, {\n ...options,\n accountId: operatorId,\n privateKey: operatorPrivateKey,\n });\n }\n\n /**\n * Close the inscription SDK\n */\n async close(): Promise<void> {\n this.inscriptionSDK = undefined;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-agent-kit.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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"}
|