@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
|
@@ -1,32 +1,212 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { BaseServiceBuilder } from "hedera-agent-kit";
|
|
2
|
+
import { inscribe, inscribeWithSigner, getTopicId, retrieveInscription } from "@hashgraphonline/standards-sdk";
|
|
3
|
+
const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
|
|
4
|
+
constructor(hederaKit) {
|
|
5
|
+
super(hederaKit);
|
|
6
|
+
}
|
|
7
|
+
getOperationalMode() {
|
|
8
|
+
return this.hederaKit.operationalMode;
|
|
9
|
+
}
|
|
10
|
+
static setSignerProvider(provider) {
|
|
11
|
+
_InscriberBuilder.signerProvider = provider;
|
|
12
|
+
}
|
|
13
|
+
static setWalletInfoResolver(resolver) {
|
|
14
|
+
_InscriberBuilder.walletInfoResolver = resolver;
|
|
15
|
+
}
|
|
16
|
+
static setStartInscriptionDelegate(delegate) {
|
|
17
|
+
_InscriberBuilder.startInscriptionDelegate = delegate;
|
|
18
|
+
}
|
|
19
|
+
static setWalletExecutor(executor) {
|
|
20
|
+
_InscriberBuilder.walletExecutor = executor;
|
|
7
21
|
}
|
|
8
22
|
/**
|
|
9
|
-
*
|
|
23
|
+
* Control fallback behavior. When true, wallet must be available for execution paths.
|
|
10
24
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
25
|
+
static setPreferWalletOnly(flag) {
|
|
26
|
+
_InscriberBuilder.preferWalletOnly = !!flag;
|
|
13
27
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
async getSigner() {
|
|
29
|
+
const provider = _InscriberBuilder.signerProvider;
|
|
30
|
+
if (!provider) return null;
|
|
31
|
+
try {
|
|
32
|
+
const maybe = provider();
|
|
33
|
+
return maybe && typeof maybe.then === "function" ? await maybe : maybe;
|
|
34
|
+
} catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
20
37
|
}
|
|
21
38
|
/**
|
|
22
|
-
*
|
|
39
|
+
* Get or create Inscription SDK - temporarily returns null since we don't have the actual SDK
|
|
23
40
|
*/
|
|
24
|
-
|
|
25
|
-
return
|
|
41
|
+
async getInscriptionSDK(_options) {
|
|
42
|
+
return null;
|
|
26
43
|
}
|
|
27
|
-
|
|
44
|
+
/**
|
|
45
|
+
* Inscribe content using server-side authentication
|
|
46
|
+
*/
|
|
47
|
+
async inscribe(input, options) {
|
|
48
|
+
const operatorId = this.hederaKit.signer.getAccountId().toString();
|
|
49
|
+
const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey() ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw() : "";
|
|
50
|
+
const network = this.hederaKit.client.network;
|
|
51
|
+
const networkType = network.toString().includes("mainnet") ? "mainnet" : "testnet";
|
|
52
|
+
const clientConfig = {
|
|
53
|
+
accountId: operatorId,
|
|
54
|
+
privateKey: operatorPrivateKey,
|
|
55
|
+
network: networkType
|
|
56
|
+
};
|
|
57
|
+
return await inscribe(input, clientConfig, options);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Inscribe content using a DApp signer
|
|
61
|
+
*/
|
|
62
|
+
async inscribeWithSigner(input, signer, options) {
|
|
63
|
+
return await inscribeWithSigner(
|
|
64
|
+
input,
|
|
65
|
+
signer,
|
|
66
|
+
options
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
async inscribeAuto(input, options) {
|
|
70
|
+
const signer = await this.getSigner();
|
|
71
|
+
if (signer) {
|
|
72
|
+
return this.inscribeWithSigner(input, signer, options);
|
|
73
|
+
}
|
|
74
|
+
const infoMaybe = _InscriberBuilder.walletInfoResolver ? await _InscriberBuilder.walletInfoResolver() : null;
|
|
75
|
+
if (_InscriberBuilder.preferWalletOnly && !infoMaybe) {
|
|
76
|
+
const err = new Error("Wallet unavailable: connect a wallet or switch to autonomous mode");
|
|
77
|
+
err.code = "wallet_unavailable";
|
|
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;
|
|
115
|
+
}
|
|
116
|
+
if (options.mode === "hashinal") {
|
|
117
|
+
request.metadataObject = ext.metadata;
|
|
118
|
+
request.creator = ext.metadata?.creator || holderId;
|
|
119
|
+
request.description = ext.metadata?.description;
|
|
120
|
+
if (typeof ext.jsonFileURL === "string" && ext.jsonFileURL.length > 0) {
|
|
121
|
+
request.jsonFileURL = ext.jsonFileURL;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const start = await _InscriberBuilder.startInscriptionDelegate(
|
|
125
|
+
request,
|
|
126
|
+
network
|
|
127
|
+
);
|
|
128
|
+
if (!start || !start.transactionBytes) {
|
|
129
|
+
throw new Error("Failed to start inscription (no transaction bytes)");
|
|
130
|
+
}
|
|
131
|
+
const exec = await _InscriberBuilder.walletExecutor(
|
|
132
|
+
start.transactionBytes,
|
|
133
|
+
network
|
|
134
|
+
);
|
|
135
|
+
const transactionId = exec?.transactionId || "";
|
|
136
|
+
const shouldWait = options.quoteOnly ? false : options.waitForConfirmation ?? true;
|
|
137
|
+
if (shouldWait) {
|
|
138
|
+
const maxAttempts = options.waitMaxAttempts ?? 60;
|
|
139
|
+
const intervalMs = options.waitIntervalMs ?? 5e3;
|
|
140
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
141
|
+
try {
|
|
142
|
+
const retrieved = await this.retrieveInscription(
|
|
143
|
+
transactionId,
|
|
144
|
+
options
|
|
145
|
+
);
|
|
146
|
+
const topicIdFromInscription = getTopicId(retrieved);
|
|
147
|
+
const topicId = topicIdFromInscription ?? start.topic_id;
|
|
148
|
+
const status = retrieved.status;
|
|
149
|
+
const isDone = status === "completed" || !!topicId;
|
|
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));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
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
|
+
}
|
|
181
|
+
if (_InscriberBuilder.preferWalletOnly) {
|
|
182
|
+
const err = new Error("Wallet unavailable: connect a wallet or switch to autonomous mode");
|
|
183
|
+
err.code = "wallet_unavailable";
|
|
184
|
+
throw err;
|
|
185
|
+
}
|
|
186
|
+
return this.inscribe(input, options);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Retrieve an existing inscription
|
|
190
|
+
*/
|
|
191
|
+
async retrieveInscription(transactionId, options) {
|
|
192
|
+
const operatorId = this.hederaKit.signer.getAccountId().toString();
|
|
193
|
+
const operatorPrivateKey = this.hederaKit.signer?.getOperatorPrivateKey() ? this.hederaKit.signer.getOperatorPrivateKey().toStringRaw() : "";
|
|
194
|
+
return await retrieveInscription(transactionId, {
|
|
195
|
+
...options,
|
|
196
|
+
accountId: operatorId,
|
|
197
|
+
privateKey: operatorPrivateKey
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Close the inscription SDK
|
|
202
|
+
*/
|
|
203
|
+
async close() {
|
|
204
|
+
this.inscriptionSDK = void 0;
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
_InscriberBuilder.preferWalletOnly = false;
|
|
208
|
+
let InscriberBuilder = _InscriberBuilder;
|
|
28
209
|
export {
|
|
29
|
-
|
|
30
|
-
BaseHCS10TransactionTool
|
|
210
|
+
InscriberBuilder
|
|
31
211
|
};
|
|
32
212
|
//# sourceMappingURL=standards-agent-kit.es8.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-agent-kit.es8.js","sources":["../../src/tools/hcs10/base-hcs10-tools.ts"],"sourcesContent":["import {\n BaseHederaTransactionTool,\n BaseHederaQueryTool,\n BaseServiceBuilder,\n} from 'hedera-agent-kit';\nimport { HCS10Builder } from '../../builders/hcs10/hcs10-builder';\nimport {\n HCS10TransactionToolParams,\n HCS10QueryToolParams,\n} from './hcs10-tool-params';\nimport { z } from 'zod';\n\n/**\n * Base class for HCS10 transaction tools\n */\nexport abstract class BaseHCS10TransactionTool<\n T extends z.ZodObject<\n z.ZodRawShape,\n z.UnknownKeysParam,\n z.ZodTypeAny\n > = z.ZodObject<z.ZodRawShape>\n> extends BaseHederaTransactionTool<T> {\n protected hcs10Builder: HCS10Builder;\n namespace = 'hcs10' as const;\n\n constructor(params: HCS10TransactionToolParams) {\n super(params);\n this.hcs10Builder = params.hcs10Builder;\n }\n\n /**\n * Override to return the HCS10Builder\n */\n protected getServiceBuilder(): BaseServiceBuilder {\n return this.hcs10Builder;\n }\n}\n\n/**\n * Base class for HCS10 query tools\n */\nexport abstract class BaseHCS10QueryTool<\n T extends z.ZodObject<\n z.ZodRawShape,\n z.UnknownKeysParam,\n z.ZodTypeAny\n > = z.ZodObject<z.ZodRawShape>\n> extends BaseHederaQueryTool<T> {\n protected hcs10Builder: HCS10Builder;\n namespace = 'hcs10' as const;\n\n constructor(params: HCS10QueryToolParams) {\n super(params);\n this.hcs10Builder = params.hcs10Builder;\n }\n\n /**\n * Override to return the HCS10Builder\n */\n protected getServiceBuilder(): BaseServiceBuilder {\n return this.hcs10Builder;\n }\n}\n"],"names":[],"mappings":";AAeO,MAAe,iCAMZ,0BAA6B;AAAA,EAIrC,YAAY,QAAoC;AAC9C,UAAM,MAAM;AAHd,SAAA,YAAY;AAIV,SAAK,eAAe,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKU,oBAAwC;AAChD,WAAO,KAAK;AAAA,EACd;AACF;AAKO,MAAe,2BAMZ,oBAAuB;AAAA,EAI/B,YAAY,QAA8B;AACxC,UAAM,MAAM;AAHd,SAAA,YAAY;AAIV,SAAK,eAAe,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKU,oBAAwC;AAChD,WAAO,KAAK;AAAA,EACd;AACF;"}
|
|
1
|
+
{"version":3,"file":"standards-agent-kit.es8.js","sources":["../../src/builders/inscriber/inscriber-builder.ts"],"sourcesContent":["import { BaseServiceBuilder } from 'hedera-agent-kit';\nimport type { HederaAgentKit } from 'hedera-agent-kit';\nimport {\n inscribe,\n inscribeWithSigner,\n retrieveInscription,\n InscriptionInput,\n InscriptionOptions,\n InscriptionResponse,\n RetrievedInscriptionResult,\n HederaClientConfig,\n NetworkType,\n getTopicId,\n} from '@hashgraphonline/standards-sdk';\nimport { 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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"}
|