@hashgraphonline/standards-agent-kit 0.2.160 → 0.2.162
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/inscriber/inscriber-builder.d.ts +6 -4
- package/dist/cjs/standards-agent-kit.cjs +1 -1
- package/dist/cjs/standards-agent-kit.cjs.map +1 -1
- package/dist/cjs/utils/inscription-utils.d.ts +1 -1
- package/dist/es/builders/inscriber/inscriber-builder.d.ts +6 -4
- package/dist/es/standards-agent-kit.es51.js +1 -1
- package/dist/es/standards-agent-kit.es51.js.map +1 -1
- package/dist/es/standards-agent-kit.es8.js +86 -35
- package/dist/es/standards-agent-kit.es8.js.map +1 -1
- package/dist/es/utils/inscription-utils.d.ts +1 -1
- package/dist/umd/builders/inscriber/inscriber-builder.d.ts +6 -4
- package/dist/umd/standards-agent-kit.umd.js +30 -30
- package/dist/umd/standards-agent-kit.umd.js.map +1 -1
- package/dist/umd/utils/inscription-utils.d.ts +1 -1
- package/package.json +1 -1
- package/src/builders/inscriber/inscriber-builder.ts +109 -46
- package/src/utils/inscription-utils.ts +3 -2
|
@@ -9,7 +9,7 @@ export interface TopicIds {
|
|
|
9
9
|
* - Prefers jsonTopicId when present (for CDN linking)
|
|
10
10
|
* - Collects topic_id/topicId from either inscription or result
|
|
11
11
|
*/
|
|
12
|
-
export declare function extractTopicIds(inscription: RetrievedInscriptionResult, result?: unknown): TopicIds;
|
|
12
|
+
export declare function extractTopicIds(inscription: RetrievedInscriptionResult | undefined, result?: unknown): TopicIds;
|
|
13
13
|
/**
|
|
14
14
|
* Build HRL/CDN URLs from extracted topic ids.
|
|
15
15
|
* - HRL prefers jsonTopicId, falls back to topicId
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseServiceBuilder, HederaAgentKit, AgentOperationalMode } from 'hedera-agent-kit';
|
|
2
2
|
import { InscriptionInput, InscriptionOptions, InscriptionResponse, RetrievedInscriptionResult } from '@hashgraphonline/standards-sdk';
|
|
3
|
-
import { InscriptionResult } from '@kiloscribe/inscription-sdk';
|
|
3
|
+
import { InscriptionSDK, InscriptionResult } from '@kiloscribe/inscription-sdk';
|
|
4
4
|
/**
|
|
5
5
|
* Type definition for DAppSigner interface compatible with inscription SDK
|
|
6
6
|
*/
|
|
@@ -24,9 +24,11 @@ export interface CompletedInscriptionResponse {
|
|
|
24
24
|
jsonTopicId?: string;
|
|
25
25
|
network?: string;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Builder for Inscription operations
|
|
29
|
+
*/
|
|
30
|
+
type InscriptionSDKInstance = InstanceType<typeof InscriptionSDK>;
|
|
31
|
+
export declare const toDashedTransactionId: (transactionId: string) => string;
|
|
30
32
|
export declare class InscriberBuilder extends BaseServiceBuilder {
|
|
31
33
|
protected inscriptionSDK?: InscriptionSDKInstance;
|
|
32
34
|
private static signerProvider?;
|
|
@@ -4,7 +4,7 @@ function getStringProp(obj, key) {
|
|
|
4
4
|
return typeof val === "string" && val.trim() ? val : void 0;
|
|
5
5
|
}
|
|
6
6
|
function extractTopicIds(inscription, result) {
|
|
7
|
-
const jsonTopicId = inscription
|
|
7
|
+
const jsonTopicId = inscription?.jsonTopicId || getStringProp(inscription, "json_topic_id");
|
|
8
8
|
const imageTopicId = getStringProp(inscription, "topic_id") || getStringProp(inscription, "topicId") || getStringProp(result, "topicId") || getStringProp(result, "topic_id");
|
|
9
9
|
return {
|
|
10
10
|
jsonTopicId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-agent-kit.es51.js","sources":["../../src/utils/inscription-utils.ts"],"sourcesContent":["import { RetrievedInscriptionResult } from '@kiloscribe/inscription-sdk';\n\nexport type NetworkType = 'mainnet' | 'testnet';\n\nexport interface TopicIds {\n jsonTopicId?: string;\n topicId?: string;\n}\n\nfunction getStringProp(obj: unknown, key: string): string | undefined {\n if (!obj || typeof obj !== 'object') return undefined;\n const val = (obj as Record<string, unknown>)[key];\n return typeof val === 'string' && val.trim() ? val : undefined;\n}\n\n/**\n * Extract topic ids from an inscription and/or result object without using any.\n * - Prefers jsonTopicId when present (for CDN linking)\n * - Collects topic_id/topicId from either inscription or result\n */\nexport function extractTopicIds(\n inscription: RetrievedInscriptionResult,\n result?: unknown\n): TopicIds {\n const jsonTopicId =\n inscription
|
|
1
|
+
{"version":3,"file":"standards-agent-kit.es51.js","sources":["../../src/utils/inscription-utils.ts"],"sourcesContent":["import { RetrievedInscriptionResult } from '@kiloscribe/inscription-sdk';\n\nexport type NetworkType = 'mainnet' | 'testnet';\n\nexport interface TopicIds {\n jsonTopicId?: string;\n topicId?: string;\n}\n\nfunction getStringProp(obj: unknown, key: string): string | undefined {\n if (!obj || typeof obj !== 'object') return undefined;\n const val = (obj as Record<string, unknown>)[key];\n return typeof val === 'string' && val.trim() ? val : undefined;\n}\n\n/**\n * Extract topic ids from an inscription and/or result object without using any.\n * - Prefers jsonTopicId when present (for CDN linking)\n * - Collects topic_id/topicId from either inscription or result\n */\nexport function extractTopicIds(\n inscription: RetrievedInscriptionResult | undefined,\n result?: unknown\n): TopicIds {\n const jsonTopicId =\n (inscription as RetrievedInscriptionResult | undefined)?.jsonTopicId ||\n getStringProp(inscription, 'json_topic_id');\n\n const imageTopicId =\n getStringProp(inscription, 'topic_id') ||\n getStringProp(inscription, 'topicId') ||\n getStringProp(result, 'topicId') ||\n getStringProp(result, 'topic_id');\n\n return {\n jsonTopicId: jsonTopicId,\n topicId: imageTopicId,\n };\n}\n\n/**\n * Build HRL/CDN URLs from extracted topic ids.\n * - HRL prefers jsonTopicId, falls back to topicId\n * - CDN URL only provided when jsonTopicId is present\n */\nexport function buildInscriptionLinks(\n ids: TopicIds,\n network: NetworkType,\n fileStandard: string = '1'\n): { hrl?: string; cdnUrl?: string; topicId?: string } {\n const chosen = ids.jsonTopicId || ids.topicId;\n const hrl = chosen ? `hcs://${fileStandard}/${chosen}` : undefined;\n const cdnUrl = ids.jsonTopicId\n ? `https://kiloscribe.com/api/inscription-cdn/${ids.jsonTopicId}?network=${network}`\n : undefined;\n return { hrl, cdnUrl, topicId: chosen };\n}\n"],"names":[],"mappings":"AASA,SAAS,cAAc,KAAc,KAAiC;AACpE,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,MAAO,IAAgC,GAAG;AAChD,SAAO,OAAO,QAAQ,YAAY,IAAI,KAAA,IAAS,MAAM;AACvD;AAOO,SAAS,gBACd,aACA,QACU;AACV,QAAM,cACH,aAAwD,eACzD,cAAc,aAAa,eAAe;AAE5C,QAAM,eACJ,cAAc,aAAa,UAAU,KACrC,cAAc,aAAa,SAAS,KACpC,cAAc,QAAQ,SAAS,KAC/B,cAAc,QAAQ,UAAU;AAElC,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,EAAA;AAEb;AAOO,SAAS,sBACd,KACA,SACA,eAAuB,KAC8B;AACrD,QAAM,SAAS,IAAI,eAAe,IAAI;AACtC,QAAM,MAAM,SAAS,SAAS,YAAY,IAAI,MAAM,KAAK;AACzD,QAAM,SAAS,IAAI,cACf,8CAA8C,IAAI,WAAW,YAAY,OAAO,KAChF;AACJ,SAAO,EAAE,KAAK,QAAQ,SAAS,OAAA;AACjC;"}
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { BaseServiceBuilder } from "hedera-agent-kit";
|
|
2
2
|
import { inscribe, inscribeWithSigner, getTopicId, retrieveInscription } from "@hashgraphonline/standards-sdk";
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
if (
|
|
6
|
-
|
|
3
|
+
import { InscriptionSDK } from "@kiloscribe/inscription-sdk";
|
|
4
|
+
const toDashedTransactionId = (transactionId) => {
|
|
5
|
+
if (transactionId.includes("-")) {
|
|
6
|
+
return transactionId;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
const [account, timePart] = transactionId.split("@");
|
|
9
|
+
if (!account || !timePart) {
|
|
10
|
+
return transactionId;
|
|
11
|
+
}
|
|
12
|
+
const [secondsPart, nanosPart] = timePart.split(".");
|
|
13
|
+
if (!secondsPart) {
|
|
14
|
+
return transactionId;
|
|
15
|
+
}
|
|
16
|
+
const normalizedNanos = (nanosPart ?? "0").padEnd(9, "0").slice(0, 9);
|
|
17
|
+
return `${account}-${secondsPart}-${normalizedNanos}`;
|
|
9
18
|
};
|
|
10
19
|
const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
|
|
11
20
|
constructor(hederaKit) {
|
|
@@ -53,25 +62,21 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
|
|
|
53
62
|
const networkType = network.toString().includes("mainnet") ? "mainnet" : "testnet";
|
|
54
63
|
const accountId = this.hederaKit.signer.getAccountId().toString();
|
|
55
64
|
try {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
this.logger.info("Attempting InscriptionSDK.createWithAuth", {
|
|
66
|
+
accountId,
|
|
67
|
+
network: networkType
|
|
68
|
+
});
|
|
69
|
+
const privateKey = this.hederaKit.signer?.getOperatorPrivateKey();
|
|
70
|
+
if (privateKey) {
|
|
59
71
|
this.inscriptionSDK = await InscriptionSDK.createWithAuth({
|
|
60
|
-
type: "
|
|
72
|
+
type: "server",
|
|
61
73
|
accountId,
|
|
62
|
-
|
|
74
|
+
privateKey: privateKey.toStringRaw(),
|
|
75
|
+
network: networkType
|
|
76
|
+
});
|
|
77
|
+
this.logger.info("Created InscriptionSDK via createWithAuth", {
|
|
63
78
|
network: networkType
|
|
64
79
|
});
|
|
65
|
-
} else {
|
|
66
|
-
const privateKey = this.hederaKit.signer?.getOperatorPrivateKey();
|
|
67
|
-
if (privateKey) {
|
|
68
|
-
this.inscriptionSDK = await InscriptionSDK.createWithAuth({
|
|
69
|
-
type: "server",
|
|
70
|
-
accountId,
|
|
71
|
-
privateKey: privateKey.toStringRaw(),
|
|
72
|
-
network: networkType
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
80
|
}
|
|
76
81
|
} catch (error) {
|
|
77
82
|
this.logger.warn("Failed to create InscriptionSDK with auth", error);
|
|
@@ -79,20 +84,27 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
|
|
|
79
84
|
}
|
|
80
85
|
if (!this.inscriptionSDK) {
|
|
81
86
|
try {
|
|
82
|
-
|
|
87
|
+
this.logger.info("Creating fallback InscriptionSDK instance", {
|
|
88
|
+
network: networkType
|
|
89
|
+
});
|
|
83
90
|
this.inscriptionSDK = new InscriptionSDK({
|
|
84
91
|
apiKey: "public-access",
|
|
85
92
|
network: networkType,
|
|
86
93
|
connectionMode: "http"
|
|
87
94
|
});
|
|
95
|
+
this.logger.info("Created fallback InscriptionSDK instance", {
|
|
96
|
+
network: networkType
|
|
97
|
+
});
|
|
98
|
+
return this.inscriptionSDK;
|
|
88
99
|
} catch (fallbackError) {
|
|
89
|
-
this.logger.
|
|
100
|
+
this.logger.error(
|
|
90
101
|
"Failed to create InscriptionSDK fallback instance",
|
|
91
102
|
fallbackError
|
|
92
103
|
);
|
|
93
104
|
}
|
|
94
105
|
}
|
|
95
|
-
|
|
106
|
+
this.logger.error("failed to setup sdk");
|
|
107
|
+
return null;
|
|
96
108
|
}
|
|
97
109
|
/**
|
|
98
110
|
* Inscribe content using server-side authentication
|
|
@@ -183,6 +195,11 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
|
|
|
183
195
|
request,
|
|
184
196
|
network
|
|
185
197
|
);
|
|
198
|
+
this.logger.info("inscribeAuto start response", {
|
|
199
|
+
hasTransactionBytes: typeof start.transactionBytes === "string",
|
|
200
|
+
txId: start.tx_id,
|
|
201
|
+
status: start.status
|
|
202
|
+
});
|
|
186
203
|
const completedStart = start;
|
|
187
204
|
const isCompletedResponse = Boolean(completedStart?.inscription) && completedStart?.confirmed;
|
|
188
205
|
if (isCompletedResponse) {
|
|
@@ -207,19 +224,48 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
|
|
|
207
224
|
network
|
|
208
225
|
);
|
|
209
226
|
const transactionId = exec?.transactionId || "";
|
|
227
|
+
this.logger.info("inscribeAuto wallet execution", {
|
|
228
|
+
transactionId,
|
|
229
|
+
network
|
|
230
|
+
});
|
|
210
231
|
const shouldWait = options.quoteOnly ? false : options.waitForConfirmation ?? true;
|
|
232
|
+
const canonicalTransactionId = toDashedTransactionId(
|
|
233
|
+
startResponse.tx_id || transactionId
|
|
234
|
+
);
|
|
211
235
|
if (shouldWait) {
|
|
212
|
-
this.logger.debug("Will be retrieving inscription");
|
|
213
236
|
const maxAttempts = options.waitMaxAttempts ?? 60;
|
|
214
237
|
const intervalMs = options.waitIntervalMs ?? 5e3;
|
|
238
|
+
const pollId = canonicalTransactionId;
|
|
239
|
+
this.logger.debug("Will be retrieving inscription", pollId);
|
|
240
|
+
let retrieved = null;
|
|
215
241
|
const sdk = await this.getInscriptionSDK(options);
|
|
242
|
+
console.log("got an SDK", sdk);
|
|
216
243
|
if (sdk) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
244
|
+
try {
|
|
245
|
+
retrieved = await sdk.waitForInscription(
|
|
246
|
+
pollId,
|
|
247
|
+
maxAttempts,
|
|
248
|
+
intervalMs,
|
|
249
|
+
true,
|
|
250
|
+
(progress) => {
|
|
251
|
+
this.logger.debug("checking inscription", progress);
|
|
252
|
+
}
|
|
253
|
+
);
|
|
254
|
+
} catch (error) {
|
|
255
|
+
this.logger.warn("Primary inscription wait failed", {
|
|
256
|
+
pollId,
|
|
257
|
+
error: error instanceof Error ? error.message : String(error)
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
this.logger.warn(
|
|
262
|
+
"No inscription SDK available, using public client",
|
|
263
|
+
{
|
|
264
|
+
pollId
|
|
265
|
+
}
|
|
222
266
|
);
|
|
267
|
+
}
|
|
268
|
+
if (retrieved) {
|
|
223
269
|
const topicIdFromInscription = getTopicId(
|
|
224
270
|
retrieved
|
|
225
271
|
);
|
|
@@ -228,13 +274,17 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
|
|
|
228
274
|
quote: false,
|
|
229
275
|
confirmed: true,
|
|
230
276
|
result: {
|
|
231
|
-
jobId: startResponse.tx_id || "",
|
|
232
|
-
transactionId,
|
|
277
|
+
jobId: toDashedTransactionId(startResponse.tx_id || ""),
|
|
278
|
+
transactionId: canonicalTransactionId,
|
|
233
279
|
topicId
|
|
234
280
|
},
|
|
235
281
|
inscription: retrieved
|
|
236
282
|
};
|
|
237
|
-
this.logger.debug(
|
|
283
|
+
this.logger.debug(
|
|
284
|
+
"retrieved inscription confirmed",
|
|
285
|
+
resultConfirmed,
|
|
286
|
+
retrieved
|
|
287
|
+
);
|
|
238
288
|
return resultConfirmed;
|
|
239
289
|
}
|
|
240
290
|
}
|
|
@@ -242,8 +292,8 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
|
|
|
242
292
|
quote: false,
|
|
243
293
|
confirmed: false,
|
|
244
294
|
result: {
|
|
245
|
-
jobId: startResponse.tx_id || "",
|
|
246
|
-
transactionId,
|
|
295
|
+
jobId: toDashedTransactionId(startResponse.tx_id || ""),
|
|
296
|
+
transactionId: canonicalTransactionId,
|
|
247
297
|
status: startResponse.status,
|
|
248
298
|
completed: startResponse.completed
|
|
249
299
|
},
|
|
@@ -282,6 +332,7 @@ const _InscriberBuilder = class _InscriberBuilder extends BaseServiceBuilder {
|
|
|
282
332
|
_InscriberBuilder.preferWalletOnly = false;
|
|
283
333
|
let InscriberBuilder = _InscriberBuilder;
|
|
284
334
|
export {
|
|
285
|
-
InscriberBuilder
|
|
335
|
+
InscriberBuilder,
|
|
336
|
+
toDashedTransactionId
|
|
286
337
|
};
|
|
287
338
|
//# sourceMappingURL=standards-agent-kit.es8.js.map
|
|
@@ -1 +1 @@
|
|
|
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 type { InscriptionResult } 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\nexport interface PendingInscriptionResponse {\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n}\n\nexport interface CompletedInscriptionResponse {\n confirmed?: boolean;\n result?: InscriptionResult;\n inscription?: RetrievedInscriptionResult;\n jsonTopicId?: string;\n network?: string;\n}\n/**\n * Builder for Inscription operations\n */\nlet cachedInscriptionSdkModule: typeof import('@kiloscribe/inscription-sdk') | null = null;\nconst loadInscriptionSdkModule = async () => {\n if (!cachedInscriptionSdkModule) {\n cachedInscriptionSdkModule = (await import(\n '@kiloscribe/inscription-sdk'\n )) as typeof import('@kiloscribe/inscription-sdk');\n }\n return cachedInscriptionSdkModule;\n};\n\ntype InscriptionSDKType = Awaited<\n ReturnType<typeof loadInscriptionSdkModule>\n>['InscriptionSDK'];\ntype InscriptionSDKInstance = InstanceType<InscriptionSDKType>;\ntype InscriptionSDKAuthParams = Parameters<InscriptionSDKType['createWithAuth']>[0];\ntype ClientAuthConfig = Extract<InscriptionSDKAuthParams, { type: 'client' }>;\ntype ServerAuthConfig = Extract<InscriptionSDKAuthParams, { type: 'server' }>;\n\nexport class InscriberBuilder extends BaseServiceBuilder {\n protected inscriptionSDK?: InscriptionSDKInstance;\n private static signerProvider?: () =>\n | Promise<DAppSigner | null>\n | DAppSigner\n | null;\n private static walletInfoResolver?: () =>\n | Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null>\n | { accountId: string; network: 'mainnet' | 'testnet' }\n | null;\n\n private static startInscriptionDelegate?: (\n request: Record<string, unknown>,\n network: 'mainnet' | 'testnet'\n ) => Promise<PendingInscriptionResponse | CompletedInscriptionResponse>;\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: () =>\n | Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null>\n | { accountId: string; network: 'mainnet' | 'testnet' }\n | 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<PendingInscriptionResponse | CompletedInscriptionResponse>\n ): void {\n InscriberBuilder.startInscriptionDelegate = delegate;\n }\n\n static setWalletExecutor(\n executor: (\n base64: string,\n network: 'mainnet' | 'testnet'\n ) => 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\n */\n protected async getInscriptionSDK(\n _options: InscriptionOptions\n ): Promise<InscriptionSDKInstance | null> {\n if (this.inscriptionSDK) {\n return this.inscriptionSDK;\n }\n\n const network = this.hederaKit.client.network;\n const networkType: 'mainnet' | 'testnet' = network.toString().includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n const accountId = this.hederaKit.signer.getAccountId().toString();\n\n try {\n const { InscriptionSDK } = await loadInscriptionSdkModule();\n const signer = await this.getSigner();\n\n if (signer) {\n this.inscriptionSDK = await InscriptionSDK.createWithAuth({\n type: 'client',\n accountId,\n signer: signer as unknown as ClientAuthConfig['signer'],\n network: networkType,\n });\n } else {\n const privateKey = this.hederaKit.signer?.getOperatorPrivateKey();\n if (privateKey) {\n this.inscriptionSDK = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId,\n privateKey: privateKey.toStringRaw() as ServerAuthConfig['privateKey'],\n network: networkType,\n });\n }\n }\n } catch (error) {\n this.logger.warn('Failed to create InscriptionSDK with auth', error);\n this.inscriptionSDK = undefined;\n }\n\n if (!this.inscriptionSDK) {\n try {\n const { InscriptionSDK } = await loadInscriptionSdkModule();\n this.inscriptionSDK = new InscriptionSDK({\n apiKey: 'public-access',\n network: networkType,\n connectionMode: 'http',\n });\n } catch (fallbackError) {\n this.logger.warn(\n 'Failed to create InscriptionSDK fallback instance',\n fallbackError\n );\n }\n }\n\n return this.inscriptionSDK || 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\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(\n 'Wallet unavailable: connect a wallet or switch to autonomous mode'\n );\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> & {\n creator?: string;\n description?: string;\n };\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 =\n 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 = {\n ...baseRequest,\n file: { type: 'path', path: input.path },\n };\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 =\n ext.metadata?.creator || holderId;\n (request as { description?: string }).description =\n 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 = await InscriberBuilder.startInscriptionDelegate(\n request,\n network\n );\n\n const completedStart = start as CompletedInscriptionResponse;\n const isCompletedResponse =\n Boolean(completedStart?.inscription) && completedStart?.confirmed;\n\n if (isCompletedResponse) {\n const completed = start as {\n confirmed?: boolean;\n result?: unknown;\n inscription?: unknown;\n };\n this.logger.info(\n 'inscription already completed, short circuiting',\n start\n );\n return {\n quote: false,\n confirmed: completed.confirmed === true,\n result: completed.result as InscriptionResult,\n inscription: completed.inscription,\n } as unknown as InscriptionResponse;\n }\n\n const startResponse = start as {\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n };\n\n if (!startResponse || !startResponse.transactionBytes) {\n throw new Error('Failed to start inscription (no transaction bytes)');\n }\n\n const exec: WalletExecutorResponse =\n await InscriberBuilder.walletExecutor(\n startResponse.transactionBytes,\n network\n );\n const transactionId = exec?.transactionId || '';\n\n const shouldWait = options.quoteOnly\n ? false\n : options.waitForConfirmation ?? true;\n if (shouldWait) {\n this.logger.debug('Will be retrieving inscription');\n const maxAttempts =\n (options as { waitMaxAttempts?: number }).waitMaxAttempts ?? 60;\n const intervalMs =\n (options as { waitIntervalMs?: number }).waitIntervalMs ?? 5000;\n\n const sdk = await this.getInscriptionSDK(options);\n if (sdk) {\n const retrieved: RetrievedInscriptionResult =\n await sdk.waitForInscription(\n transactionId,\n maxAttempts,\n intervalMs,\n true\n );\n const topicIdFromInscription: string | undefined = getTopicId(\n retrieved as unknown\n );\n const topicId: string | undefined =\n topicIdFromInscription ?? startResponse.topic_id;\n const resultConfirmed: InscriptionResponse = {\n quote: false,\n confirmed: true,\n result: {\n jobId: startResponse.tx_id || '',\n transactionId,\n topicId,\n },\n inscription: retrieved,\n } as unknown as InscriptionResponse;\n this.logger.debug('retrieved inscription', resultConfirmed, retrieved);\n return resultConfirmed;\n }\n }\n\n const partial: InscriptionResponse = {\n quote: false,\n confirmed: false,\n result: {\n jobId: startResponse.tx_id || '',\n transactionId,\n status: startResponse.status,\n completed: startResponse.completed,\n },\n inscription: startResponse.topic_id\n ? { topic_id: startResponse.topic_id }\n : undefined,\n } as unknown as InscriptionResponse;\n return partial;\n }\n\n if (InscriberBuilder.preferWalletOnly) {\n const err = new Error(\n 'Wallet unavailable: connect a wallet or switch to autonomous mode'\n );\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.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 Logger,\n} from '@hashgraphonline/standards-sdk';\nimport {\n InscriptionSDK,\n type InscriptionResult,\n type RegistrationProgressData,\n} 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\nexport interface PendingInscriptionResponse {\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n}\n\nexport interface CompletedInscriptionResponse {\n confirmed?: boolean;\n result?: InscriptionResult;\n inscription?: RetrievedInscriptionResult;\n jsonTopicId?: string;\n network?: string;\n}\n/**\n * Builder for Inscription operations\n */\ntype InscriptionSDKInstance = InstanceType<typeof InscriptionSDK>;\ntype InscriptionSDKAuthParams = Parameters<\n typeof InscriptionSDK.createWithAuth\n>[0];\ntype ClientAuthConfig = Extract<InscriptionSDKAuthParams, { type: 'client' }>;\ntype ServerAuthConfig = Extract<InscriptionSDKAuthParams, { type: 'server' }>;\n\nexport const toDashedTransactionId = (transactionId: string): string => {\n if (transactionId.includes('-')) {\n return transactionId;\n }\n\n const [account, timePart] = transactionId.split('@');\n if (!account || !timePart) {\n return transactionId;\n }\n\n const [secondsPart, nanosPart] = timePart.split('.');\n if (!secondsPart) {\n return transactionId;\n }\n\n const normalizedNanos = (nanosPart ?? '0').padEnd(9, '0').slice(0, 9);\n return `${account}-${secondsPart}-${normalizedNanos}`;\n};\n\nexport class InscriberBuilder extends BaseServiceBuilder {\n protected inscriptionSDK?: InscriptionSDKInstance;\n private static signerProvider?: () =>\n | Promise<DAppSigner | null>\n | DAppSigner\n | null;\n private static walletInfoResolver?: () =>\n | Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null>\n | { accountId: string; network: 'mainnet' | 'testnet' }\n | null;\n\n private static startInscriptionDelegate?: (\n request: Record<string, unknown>,\n network: 'mainnet' | 'testnet'\n ) => Promise<PendingInscriptionResponse | CompletedInscriptionResponse>;\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: () =>\n | Promise<{ accountId: string; network: 'mainnet' | 'testnet' } | null>\n | { accountId: string; network: 'mainnet' | 'testnet' }\n | 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<PendingInscriptionResponse | CompletedInscriptionResponse>\n ): void {\n InscriberBuilder.startInscriptionDelegate = delegate;\n }\n\n static setWalletExecutor(\n executor: (\n base64: string,\n network: 'mainnet' | 'testnet'\n ) => 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\n */\n protected async getInscriptionSDK(\n _options: InscriptionOptions\n ): Promise<InscriptionSDKInstance | null> {\n if (this.inscriptionSDK) {\n return this.inscriptionSDK;\n }\n\n const network = this.hederaKit.client.network;\n const networkType: 'mainnet' | 'testnet' = network\n .toString()\n .includes('mainnet')\n ? 'mainnet'\n : 'testnet';\n const accountId = this.hederaKit.signer.getAccountId().toString();\n\n try {\n this.logger.info('Attempting InscriptionSDK.createWithAuth', {\n accountId,\n network: networkType,\n });\n const privateKey = this.hederaKit.signer?.getOperatorPrivateKey();\n if (privateKey) {\n this.inscriptionSDK = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId,\n privateKey:\n privateKey.toStringRaw() as ServerAuthConfig['privateKey'],\n network: networkType,\n });\n this.logger.info('Created InscriptionSDK via createWithAuth', {\n network: networkType,\n });\n }\n } catch (error) {\n this.logger.warn('Failed to create InscriptionSDK with auth', error);\n this.inscriptionSDK = undefined;\n }\n\n if (!this.inscriptionSDK) {\n try {\n this.logger.info('Creating fallback InscriptionSDK instance', {\n network: networkType,\n });\n this.inscriptionSDK = new InscriptionSDK({\n apiKey: 'public-access',\n network: networkType,\n connectionMode: 'http',\n });\n this.logger.info('Created fallback InscriptionSDK instance', {\n network: networkType,\n });\n return this.inscriptionSDK;\n } catch (fallbackError) {\n this.logger.error(\n 'Failed to create InscriptionSDK fallback instance',\n fallbackError\n );\n }\n }\n\n this.logger.error('failed to setup sdk');\n\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\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(\n 'Wallet unavailable: connect a wallet or switch to autonomous mode'\n );\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> & {\n creator?: string;\n description?: string;\n };\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 =\n 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 = {\n ...baseRequest,\n file: { type: 'path', path: input.path },\n };\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 =\n ext.metadata?.creator || holderId;\n (request as { description?: string }).description =\n 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 = await InscriberBuilder.startInscriptionDelegate(\n request,\n network\n );\n\n this.logger.info('inscribeAuto start response', {\n hasTransactionBytes:\n typeof (start as { transactionBytes?: unknown }).transactionBytes ===\n 'string',\n txId: (start as { tx_id?: unknown }).tx_id,\n status: (start as { status?: unknown }).status,\n });\n\n const completedStart = start as CompletedInscriptionResponse;\n const isCompletedResponse =\n Boolean(completedStart?.inscription) && completedStart?.confirmed;\n\n if (isCompletedResponse) {\n const completed = start as {\n confirmed?: boolean;\n result?: unknown;\n inscription?: unknown;\n };\n this.logger.info(\n 'inscription already completed, short circuiting',\n start\n );\n return {\n quote: false,\n confirmed: completed.confirmed === true,\n result: completed.result as InscriptionResult,\n inscription: completed.inscription,\n } as unknown as InscriptionResponse;\n }\n\n const startResponse = start as {\n transactionBytes: string;\n tx_id?: string;\n topic_id?: string;\n status?: string;\n completed?: boolean;\n };\n\n if (!startResponse || !startResponse.transactionBytes) {\n throw new Error('Failed to start inscription (no transaction bytes)');\n }\n\n const exec: WalletExecutorResponse =\n await InscriberBuilder.walletExecutor(\n startResponse.transactionBytes,\n network\n );\n const transactionId = exec?.transactionId || '';\n\n this.logger.info('inscribeAuto wallet execution', {\n transactionId,\n network,\n });\n\n const shouldWait = options.quoteOnly\n ? false\n : options.waitForConfirmation ?? true;\n const canonicalTransactionId = toDashedTransactionId(\n startResponse.tx_id || transactionId\n );\n if (shouldWait) {\n const maxAttempts =\n (options as { waitMaxAttempts?: number }).waitMaxAttempts ?? 60;\n const intervalMs =\n (options as { waitIntervalMs?: number }).waitIntervalMs ?? 5000;\n const pollId = canonicalTransactionId;\n this.logger.debug('Will be retrieving inscription', pollId);\n\n let retrieved: RetrievedInscriptionResult | null = null;\n const sdk = await this.getInscriptionSDK(options);\n\n console.log('got an SDK', sdk);\n\n if (sdk) {\n try {\n retrieved = await sdk.waitForInscription(\n pollId,\n maxAttempts,\n intervalMs,\n true,\n (progress: RegistrationProgressData) => {\n this.logger.debug('checking inscription', progress);\n }\n );\n } catch (error) {\n this.logger.warn('Primary inscription wait failed', {\n pollId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n } else {\n this.logger.warn(\n 'No inscription SDK available, using public client',\n {\n pollId,\n }\n );\n }\n\n if (retrieved) {\n const topicIdFromInscription: string | undefined = getTopicId(\n retrieved as unknown\n );\n const topicId: string | undefined =\n topicIdFromInscription ?? startResponse.topic_id;\n const resultConfirmed: InscriptionResponse = {\n quote: false,\n confirmed: true,\n result: {\n jobId: toDashedTransactionId(startResponse.tx_id || ''),\n transactionId: canonicalTransactionId,\n topicId,\n },\n inscription: retrieved,\n } as unknown as InscriptionResponse;\n this.logger.debug(\n 'retrieved inscription confirmed',\n resultConfirmed,\n retrieved\n );\n return resultConfirmed;\n }\n }\n\n const partial: InscriptionResponse = {\n quote: false,\n confirmed: false,\n result: {\n jobId: toDashedTransactionId(startResponse.tx_id || ''),\n transactionId: canonicalTransactionId,\n status: startResponse.status,\n completed: startResponse.completed,\n },\n inscription: startResponse.topic_id\n ? { topic_id: startResponse.topic_id }\n : undefined,\n } as unknown as InscriptionResponse;\n return partial;\n }\n\n if (InscriberBuilder.preferWalletOnly) {\n const err = new Error(\n 'Wallet unavailable: connect a wallet or switch to autonomous mode'\n );\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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"}
|
|
@@ -9,7 +9,7 @@ export interface TopicIds {
|
|
|
9
9
|
* - Prefers jsonTopicId when present (for CDN linking)
|
|
10
10
|
* - Collects topic_id/topicId from either inscription or result
|
|
11
11
|
*/
|
|
12
|
-
export declare function extractTopicIds(inscription: RetrievedInscriptionResult, result?: unknown): TopicIds;
|
|
12
|
+
export declare function extractTopicIds(inscription: RetrievedInscriptionResult | undefined, result?: unknown): TopicIds;
|
|
13
13
|
/**
|
|
14
14
|
* Build HRL/CDN URLs from extracted topic ids.
|
|
15
15
|
* - HRL prefers jsonTopicId, falls back to topicId
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseServiceBuilder, HederaAgentKit, AgentOperationalMode } from 'hedera-agent-kit';
|
|
2
2
|
import { InscriptionInput, InscriptionOptions, InscriptionResponse, RetrievedInscriptionResult } from '@hashgraphonline/standards-sdk';
|
|
3
|
-
import { InscriptionResult } from '@kiloscribe/inscription-sdk';
|
|
3
|
+
import { InscriptionSDK, InscriptionResult } from '@kiloscribe/inscription-sdk';
|
|
4
4
|
/**
|
|
5
5
|
* Type definition for DAppSigner interface compatible with inscription SDK
|
|
6
6
|
*/
|
|
@@ -24,9 +24,11 @@ export interface CompletedInscriptionResponse {
|
|
|
24
24
|
jsonTopicId?: string;
|
|
25
25
|
network?: string;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Builder for Inscription operations
|
|
29
|
+
*/
|
|
30
|
+
type InscriptionSDKInstance = InstanceType<typeof InscriptionSDK>;
|
|
31
|
+
export declare const toDashedTransactionId: (transactionId: string) => string;
|
|
30
32
|
export declare class InscriberBuilder extends BaseServiceBuilder {
|
|
31
33
|
protected inscriptionSDK?: InscriptionSDKInstance;
|
|
32
34
|
private static signerProvider?;
|