dappily-agent-kit 0.1.0
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/LICENSE +21 -0
- package/README.md +192 -0
- package/dist/actions/associate_token.d.ts +4 -0
- package/dist/actions/associate_token.d.ts.map +1 -0
- package/dist/actions/associate_token.js +156 -0
- package/dist/actions/associate_token.js.map +1 -0
- package/dist/actions/burn_nft.d.ts +4 -0
- package/dist/actions/burn_nft.d.ts.map +1 -0
- package/dist/actions/burn_nft.js +123 -0
- package/dist/actions/burn_nft.js.map +1 -0
- package/dist/actions/burn_token.d.ts +4 -0
- package/dist/actions/burn_token.d.ts.map +1 -0
- package/dist/actions/burn_token.js +147 -0
- package/dist/actions/burn_token.js.map +1 -0
- package/dist/actions/create_nft_collection.d.ts +4 -0
- package/dist/actions/create_nft_collection.d.ts.map +1 -0
- package/dist/actions/create_nft_collection.js +176 -0
- package/dist/actions/create_nft_collection.js.map +1 -0
- package/dist/actions/create_token.d.ts +4 -0
- package/dist/actions/create_token.d.ts.map +1 -0
- package/dist/actions/create_token.js +159 -0
- package/dist/actions/create_token.js.map +1 -0
- package/dist/actions/get_balance.d.ts +4 -0
- package/dist/actions/get_balance.d.ts.map +1 -0
- package/dist/actions/get_balance.js +106 -0
- package/dist/actions/get_balance.js.map +1 -0
- package/dist/actions/index.d.ts +17 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +76 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/mint_nft.d.ts +4 -0
- package/dist/actions/mint_nft.d.ts.map +1 -0
- package/dist/actions/mint_nft.js +162 -0
- package/dist/actions/mint_nft.js.map +1 -0
- package/dist/actions/mint_token.d.ts +4 -0
- package/dist/actions/mint_token.d.ts.map +1 -0
- package/dist/actions/mint_token.js +127 -0
- package/dist/actions/mint_token.js.map +1 -0
- package/dist/actions/transfer.d.ts +4 -0
- package/dist/actions/transfer.d.ts.map +1 -0
- package/dist/actions/transfer.js +118 -0
- package/dist/actions/transfer.js.map +1 -0
- package/dist/actions/transfer_nft.d.ts +4 -0
- package/dist/actions/transfer_nft.d.ts.map +1 -0
- package/dist/actions/transfer_nft.js +177 -0
- package/dist/actions/transfer_nft.js.map +1 -0
- package/dist/actions/transfer_token.d.ts +4 -0
- package/dist/actions/transfer_token.d.ts.map +1 -0
- package/dist/actions/transfer_token.js +180 -0
- package/dist/actions/transfer_token.js.map +1 -0
- package/dist/agent/index.d.ts +13 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +33 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/types/action.d.ts +39 -0
- package/dist/types/action.d.ts.map +1 -0
- package/dist/types/action.js +3 -0
- package/dist/types/action.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import getBalanceAction from "./get_balance";
|
|
2
|
+
import hbarTransferAction from "./transfer";
|
|
3
|
+
import createTokenAction from "./create_token";
|
|
4
|
+
import associateTokenAction from "./associate_token";
|
|
5
|
+
import transferTokenAction from "./transfer_token";
|
|
6
|
+
import mintTokenAction from "./mint_token";
|
|
7
|
+
import burnTokenAction from "./burn_token";
|
|
8
|
+
import createNftCollectionAction from "./create_nft_collection";
|
|
9
|
+
import mintNftAction from "./mint_nft";
|
|
10
|
+
import transferNftAction from "./transfer_nft";
|
|
11
|
+
import burnNftAction from "./burn_nft";
|
|
12
|
+
import { Action } from "../types/action";
|
|
13
|
+
export declare const actions: Action[];
|
|
14
|
+
export { getBalanceAction, hbarTransferAction, createTokenAction, associateTokenAction, transferTokenAction, mintTokenAction, burnTokenAction, createNftCollectionAction, mintNftAction, transferNftAction, burnNftAction, };
|
|
15
|
+
export declare function getActionByName(name: string): Action | undefined;
|
|
16
|
+
export declare function findActionBySimile(query: string): Action | undefined;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAIA,OAAO,gBAAgB,MAAM,eAAe,CAAC;AAC7C,OAAO,kBAAkB,MAAM,YAAY,CAAC;AAG5C,OAAO,iBAAiB,MAAM,gBAAgB,CAAC;AAC/C,OAAO,oBAAoB,MAAM,mBAAmB,CAAC;AACrD,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;AACnD,OAAO,eAAe,MAAM,cAAc,CAAC;AAC3C,OAAO,eAAe,MAAM,cAAc,CAAC;AAG3C,OAAO,yBAAyB,MAAM,yBAAyB,CAAC;AAChE,OAAO,aAAa,MAAM,YAAY,CAAC;AACvC,OAAO,iBAAiB,MAAM,gBAAgB,CAAC;AAC/C,OAAO,aAAa,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,eAAO,MAAM,OAAO,EAAE,MAAM,EAe3B,CAAC;AAGF,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,aAAa,GACd,CAAC;AAGF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhE;AAGD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBpE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ── Dappily Agent Kit: Action Registry ──────────────────────────
|
|
3
|
+
// All actions are exported here for easy consumption by agent runners.
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.burnNftAction = exports.transferNftAction = exports.mintNftAction = exports.createNftCollectionAction = exports.burnTokenAction = exports.mintTokenAction = exports.transferTokenAction = exports.associateTokenAction = exports.createTokenAction = exports.hbarTransferAction = exports.getBalanceAction = exports.actions = void 0;
|
|
9
|
+
exports.getActionByName = getActionByName;
|
|
10
|
+
exports.findActionBySimile = findActionBySimile;
|
|
11
|
+
// Core
|
|
12
|
+
const get_balance_1 = __importDefault(require("./get_balance"));
|
|
13
|
+
exports.getBalanceAction = get_balance_1.default;
|
|
14
|
+
const transfer_1 = __importDefault(require("./transfer"));
|
|
15
|
+
exports.hbarTransferAction = transfer_1.default;
|
|
16
|
+
// Fungible Tokens (HTS)
|
|
17
|
+
const create_token_1 = __importDefault(require("./create_token"));
|
|
18
|
+
exports.createTokenAction = create_token_1.default;
|
|
19
|
+
const associate_token_1 = __importDefault(require("./associate_token"));
|
|
20
|
+
exports.associateTokenAction = associate_token_1.default;
|
|
21
|
+
const transfer_token_1 = __importDefault(require("./transfer_token"));
|
|
22
|
+
exports.transferTokenAction = transfer_token_1.default;
|
|
23
|
+
const mint_token_1 = __importDefault(require("./mint_token"));
|
|
24
|
+
exports.mintTokenAction = mint_token_1.default;
|
|
25
|
+
const burn_token_1 = __importDefault(require("./burn_token"));
|
|
26
|
+
exports.burnTokenAction = burn_token_1.default;
|
|
27
|
+
// NFTs (HTS)
|
|
28
|
+
const create_nft_collection_1 = __importDefault(require("./create_nft_collection"));
|
|
29
|
+
exports.createNftCollectionAction = create_nft_collection_1.default;
|
|
30
|
+
const mint_nft_1 = __importDefault(require("./mint_nft"));
|
|
31
|
+
exports.mintNftAction = mint_nft_1.default;
|
|
32
|
+
const transfer_nft_1 = __importDefault(require("./transfer_nft"));
|
|
33
|
+
exports.transferNftAction = transfer_nft_1.default;
|
|
34
|
+
const burn_nft_1 = __importDefault(require("./burn_nft"));
|
|
35
|
+
exports.burnNftAction = burn_nft_1.default;
|
|
36
|
+
// Master list — order matters for display, not execution
|
|
37
|
+
exports.actions = [
|
|
38
|
+
// Core
|
|
39
|
+
get_balance_1.default,
|
|
40
|
+
transfer_1.default,
|
|
41
|
+
// Fungible
|
|
42
|
+
create_token_1.default,
|
|
43
|
+
associate_token_1.default,
|
|
44
|
+
transfer_token_1.default,
|
|
45
|
+
mint_token_1.default,
|
|
46
|
+
burn_token_1.default,
|
|
47
|
+
// NFT
|
|
48
|
+
create_nft_collection_1.default,
|
|
49
|
+
mint_nft_1.default,
|
|
50
|
+
transfer_nft_1.default,
|
|
51
|
+
burn_nft_1.default,
|
|
52
|
+
];
|
|
53
|
+
// Lookup by name
|
|
54
|
+
function getActionByName(name) {
|
|
55
|
+
return exports.actions.find((a) => a.name === name);
|
|
56
|
+
}
|
|
57
|
+
// Fuzzy match by simile — scores by how many simile words appear in the query
|
|
58
|
+
function findActionBySimile(query) {
|
|
59
|
+
const q = query.toLowerCase();
|
|
60
|
+
let bestAction;
|
|
61
|
+
let bestScore = 0;
|
|
62
|
+
for (const action of exports.actions) {
|
|
63
|
+
for (const simile of action.similes) {
|
|
64
|
+
const sWords = simile.toLowerCase().split(/\s+/);
|
|
65
|
+
const matched = sWords.filter((w) => q.includes(w)).length;
|
|
66
|
+
const score = matched / sWords.length; // % of simile words found in query
|
|
67
|
+
if (score > bestScore) {
|
|
68
|
+
bestScore = score;
|
|
69
|
+
bestAction = action;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Require at least 50% word overlap to count as a match
|
|
74
|
+
return bestScore >= 0.5 ? bestAction : undefined;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":";AAAA,mEAAmE;AACnE,uEAAuE;;;;;;AAuDvE,0CAEC;AAGD,gDAmBC;AA7ED,OAAO;AACP,gEAA6C;AAsC3C,2BAtCK,qBAAgB,CAsCL;AArClB,0DAA4C;AAsC1C,6BAtCK,kBAAkB,CAsCL;AApCpB,wBAAwB;AACxB,kEAA+C;AAoC7C,4BApCK,sBAAiB,CAoCL;AAnCnB,wEAAqD;AAoCnD,+BApCK,yBAAoB,CAoCL;AAnCtB,sEAAmD;AAoCjD,8BApCK,wBAAmB,CAoCL;AAnCrB,8DAA2C;AAoCzC,0BApCK,oBAAe,CAoCL;AAnCjB,8DAA2C;AAoCzC,0BApCK,oBAAe,CAoCL;AAlCjB,aAAa;AACb,oFAAgE;AAkC9D,oCAlCK,+BAAyB,CAkCL;AAjC3B,0DAAuC;AAkCrC,wBAlCK,kBAAa,CAkCL;AAjCf,kEAA+C;AAkC7C,4BAlCK,sBAAiB,CAkCL;AAjCnB,0DAAuC;AAkCrC,wBAlCK,kBAAa,CAkCL;AA9Bf,yDAAyD;AAC5C,QAAA,OAAO,GAAa;IAC/B,OAAO;IACP,qBAAgB;IAChB,kBAAkB;IAClB,WAAW;IACX,sBAAiB;IACjB,yBAAoB;IACpB,wBAAmB;IACnB,oBAAe;IACf,oBAAe;IACf,MAAM;IACN,+BAAyB;IACzB,kBAAa;IACb,sBAAiB;IACjB,kBAAa;CACd,CAAC;AAiBF,iBAAiB;AACjB,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,eAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,UAA8B,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,MAAM,IAAI,eAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3D,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,mCAAmC;YAC1E,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,UAAU,GAAG,MAAM,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,OAAO,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mint_nft.d.ts","sourceRoot":"","sources":["../../src/actions/mint_nft.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAqBvD,QAAA,MAAM,aAAa,EAAE,MAyKpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const zod_1 = require("zod");
|
|
4
|
+
const sdk_1 = require("@hashgraph/sdk");
|
|
5
|
+
// HTS limit: 100 bytes per NFT metadata
|
|
6
|
+
const MAX_METADATA_BYTES = 100;
|
|
7
|
+
// Sane per-transaction cap
|
|
8
|
+
const MAX_NFTS_PER_TX = 10;
|
|
9
|
+
/**
|
|
10
|
+
* Decode a base64 string to Uint8Array.
|
|
11
|
+
* Accepts raw base64 or "b64:..." prefix.
|
|
12
|
+
*/
|
|
13
|
+
function decodeMetadata(input) {
|
|
14
|
+
const raw = input.startsWith("b64:") ? input.slice(4) : input;
|
|
15
|
+
return Buffer.from(raw, "base64");
|
|
16
|
+
}
|
|
17
|
+
const mintNftAction = {
|
|
18
|
+
name: "MINT_NFT",
|
|
19
|
+
similes: [
|
|
20
|
+
"mint nft",
|
|
21
|
+
"mint nfts",
|
|
22
|
+
"create nft",
|
|
23
|
+
"issue nft",
|
|
24
|
+
"add nft",
|
|
25
|
+
"nft mint",
|
|
26
|
+
],
|
|
27
|
+
description: "Mint one or more NFTs in an existing collection. Each NFT gets its own metadata (base64-encoded, max 100 bytes each). Returns the serial numbers of the newly minted NFTs. The token must have a supply key.",
|
|
28
|
+
examples: [
|
|
29
|
+
[
|
|
30
|
+
{
|
|
31
|
+
input: {
|
|
32
|
+
tokenId: "0.0.88888",
|
|
33
|
+
metadata: ["SGVsbG8gV29ybGQ=", "RGFwcGlseSBORlQ="],
|
|
34
|
+
},
|
|
35
|
+
output: {
|
|
36
|
+
ok: true,
|
|
37
|
+
summary: "Minted 2 NFTs in collection 0.0.88888 (serials: 1, 2)",
|
|
38
|
+
txId: "0.0.12345@1700000000.000000000",
|
|
39
|
+
receipt: { status: "SUCCESS" },
|
|
40
|
+
data: {
|
|
41
|
+
tokenId: "0.0.88888",
|
|
42
|
+
serials: [1, 2],
|
|
43
|
+
count: 2,
|
|
44
|
+
explorerUrl: "https://hashscan.io/testnet/transaction/...",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
explanation: "Mint 2 NFTs with base64-encoded metadata",
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
],
|
|
51
|
+
schema: zod_1.z.object({
|
|
52
|
+
tokenId: zod_1.z
|
|
53
|
+
.string()
|
|
54
|
+
.regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Token ID format (must be 0.0.X)")
|
|
55
|
+
.describe("The NFT collection token ID"),
|
|
56
|
+
metadata: zod_1.z
|
|
57
|
+
.array(zod_1.z.string())
|
|
58
|
+
.min(1)
|
|
59
|
+
.max(MAX_NFTS_PER_TX)
|
|
60
|
+
.describe(`Array of base64-encoded metadata strings (1-${MAX_NFTS_PER_TX} per transaction, max ${MAX_METADATA_BYTES} bytes each)`),
|
|
61
|
+
memo: zod_1.z
|
|
62
|
+
.string()
|
|
63
|
+
.max(100)
|
|
64
|
+
.optional()
|
|
65
|
+
.describe("Optional transaction memo"),
|
|
66
|
+
supplyPrivateKey: zod_1.z
|
|
67
|
+
.string()
|
|
68
|
+
.optional()
|
|
69
|
+
.describe("⚠️ Supply key (only if different from operator key)"),
|
|
70
|
+
}),
|
|
71
|
+
requiresConfirmation: true,
|
|
72
|
+
simulate: async (_agent, input) => {
|
|
73
|
+
const warnings = [];
|
|
74
|
+
const count = input.metadata.length;
|
|
75
|
+
if (count > MAX_NFTS_PER_TX) {
|
|
76
|
+
warnings.push(`Minting ${count} NFTs exceeds the recommended ${MAX_NFTS_PER_TX} per transaction. Consider batching.`);
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
summary: `Mint ${count} NFT${count > 1 ? "s" : ""} in collection ${input.tokenId}`,
|
|
80
|
+
estimatedFeeHbar: 0.02 * count,
|
|
81
|
+
warnings,
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
handler: async (agent, input) => {
|
|
85
|
+
// ── Pre-flight: validate metadata sizes ──
|
|
86
|
+
const decodedMetadata = [];
|
|
87
|
+
for (let i = 0; i < input.metadata.length; i++) {
|
|
88
|
+
const bytes = decodeMetadata(input.metadata[i]);
|
|
89
|
+
if (bytes.length > MAX_METADATA_BYTES) {
|
|
90
|
+
return {
|
|
91
|
+
ok: false,
|
|
92
|
+
error: "METADATA_TOO_LARGE",
|
|
93
|
+
details: `Metadata at index ${i} is ${bytes.length} bytes (max ${MAX_METADATA_BYTES}). Shorten it or use an IPFS CID hash instead.`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (bytes.length === 0) {
|
|
97
|
+
return {
|
|
98
|
+
ok: false,
|
|
99
|
+
error: "METADATA_EMPTY",
|
|
100
|
+
details: `Metadata at index ${i} decoded to 0 bytes. Provide valid base64-encoded content.`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
decodedMetadata.push(bytes);
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
const tx = new sdk_1.TokenMintTransaction()
|
|
107
|
+
.setTokenId(input.tokenId)
|
|
108
|
+
.setMetadata(decodedMetadata);
|
|
109
|
+
if (input.memo) {
|
|
110
|
+
tx.setTransactionMemo(input.memo);
|
|
111
|
+
}
|
|
112
|
+
const frozenTx = await tx.freezeWith(agent.client);
|
|
113
|
+
if (input.supplyPrivateKey) {
|
|
114
|
+
const supplyKey = sdk_1.PrivateKey.fromString(input.supplyPrivateKey);
|
|
115
|
+
await frozenTx.sign(supplyKey);
|
|
116
|
+
}
|
|
117
|
+
const response = await frozenTx.execute(agent.client);
|
|
118
|
+
const receipt = await response.getReceipt(agent.client);
|
|
119
|
+
if (receipt.status !== sdk_1.Status.Success) {
|
|
120
|
+
return {
|
|
121
|
+
ok: false,
|
|
122
|
+
error: receipt.status.toString(),
|
|
123
|
+
details: `NFT mint failed with status: ${receipt.status.toString()}`,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const serials = (receipt.serials || []).map((s) => Number(s.toString()));
|
|
127
|
+
const txId = response.transactionId.toString();
|
|
128
|
+
return {
|
|
129
|
+
ok: true,
|
|
130
|
+
summary: `Minted ${serials.length} NFT${serials.length > 1 ? "s" : ""} in collection ${input.tokenId} (serials: ${serials.join(", ")})`,
|
|
131
|
+
txId,
|
|
132
|
+
receipt: { status: receipt.status.toString() },
|
|
133
|
+
data: {
|
|
134
|
+
tokenId: input.tokenId,
|
|
135
|
+
serials,
|
|
136
|
+
count: serials.length,
|
|
137
|
+
explorerUrl: agent.getExplorerUrl(txId),
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
143
|
+
const knownErrors = {
|
|
144
|
+
TOKEN_HAS_NO_SUPPLY_KEY: "This collection has no supply key. NFT minting is permanently disabled.",
|
|
145
|
+
INVALID_SIGNATURE: "Transaction signature is invalid. The supply key doesn't match.",
|
|
146
|
+
INVALID_TOKEN_ID: "The token ID does not exist on this network.",
|
|
147
|
+
TOKEN_WAS_DELETED: "This collection has been deleted.",
|
|
148
|
+
TOKEN_MAX_SUPPLY_REACHED: "This collection has reached its maximum supply cap.",
|
|
149
|
+
MAX_NFTS_IN_PRICE_REGIME_HAVE_BEEN_MINTED: "Network-level NFT minting limit reached for this price regime.",
|
|
150
|
+
INSUFFICIENT_PAYER_BALANCE: "Not enough HBAR to cover the mint fee.",
|
|
151
|
+
};
|
|
152
|
+
const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
|
|
153
|
+
return {
|
|
154
|
+
ok: false,
|
|
155
|
+
error: errorCode || "MINT_NFT_FAILED",
|
|
156
|
+
details: errorCode ? knownErrors[errorCode] : message,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
exports.default = mintNftAction;
|
|
162
|
+
//# sourceMappingURL=mint_nft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mint_nft.js","sourceRoot":"","sources":["../../src/actions/mint_nft.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mint_token.d.ts","sourceRoot":"","sources":["../../src/actions/mint_token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAOvD,QAAA,MAAM,eAAe,EAAE,MAyItB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const zod_1 = require("zod");
|
|
4
|
+
const sdk_1 = require("@hashgraph/sdk");
|
|
5
|
+
const mintTokenAction = {
|
|
6
|
+
name: "MINT_TOKEN",
|
|
7
|
+
similes: [
|
|
8
|
+
"mint token",
|
|
9
|
+
"mint tokens",
|
|
10
|
+
"increase supply",
|
|
11
|
+
"create more tokens",
|
|
12
|
+
"add supply",
|
|
13
|
+
],
|
|
14
|
+
description: "Mint additional fungible tokens, increasing the total supply. The token must have been created with a supply key. By default, the agent's operator key is used to sign. For tokens where the supply key differs, provide it via supplyPrivateKey.",
|
|
15
|
+
examples: [
|
|
16
|
+
[
|
|
17
|
+
{
|
|
18
|
+
input: {
|
|
19
|
+
tokenId: "0.0.99999",
|
|
20
|
+
amount: 5000,
|
|
21
|
+
},
|
|
22
|
+
output: {
|
|
23
|
+
ok: true,
|
|
24
|
+
summary: "Minted 5,000 of token 0.0.99999",
|
|
25
|
+
txId: "0.0.12345@1700000000.000000000",
|
|
26
|
+
receipt: { status: "SUCCESS" },
|
|
27
|
+
data: {
|
|
28
|
+
tokenId: "0.0.99999",
|
|
29
|
+
amountMinted: 5000,
|
|
30
|
+
newTotalSupply: "15000",
|
|
31
|
+
explorerUrl: "https://hashscan.io/testnet/transaction/...",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
explanation: "Mint 5,000 additional tokens using the operator's supply key",
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
],
|
|
38
|
+
schema: zod_1.z.object({
|
|
39
|
+
tokenId: zod_1.z
|
|
40
|
+
.string()
|
|
41
|
+
.regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Token ID format (must be 0.0.X)")
|
|
42
|
+
.describe("The token ID to mint (e.g. 0.0.99999)"),
|
|
43
|
+
amount: zod_1.z
|
|
44
|
+
.number()
|
|
45
|
+
.int()
|
|
46
|
+
.positive()
|
|
47
|
+
.describe("Amount of tokens to mint (in smallest unit)"),
|
|
48
|
+
memo: zod_1.z
|
|
49
|
+
.string()
|
|
50
|
+
.max(100)
|
|
51
|
+
.optional()
|
|
52
|
+
.describe("Optional memo for the transaction"),
|
|
53
|
+
supplyPrivateKey: zod_1.z
|
|
54
|
+
.string()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe("⚠️ Supply key for the token (only needed if different from operator key)"),
|
|
57
|
+
}),
|
|
58
|
+
requiresConfirmation: true,
|
|
59
|
+
simulate: async (agent, input) => {
|
|
60
|
+
return {
|
|
61
|
+
summary: `Mint ${input.amount.toLocaleString()} of token ${input.tokenId}`,
|
|
62
|
+
estimatedFeeHbar: 0.001,
|
|
63
|
+
warnings: input.amount >= 1000000000
|
|
64
|
+
? [`Very large mint: ${input.amount.toLocaleString()} units. Double-check this is intentional.`]
|
|
65
|
+
: [],
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
handler: async (agent, input) => {
|
|
69
|
+
try {
|
|
70
|
+
const tx = new sdk_1.TokenMintTransaction()
|
|
71
|
+
.setTokenId(input.tokenId)
|
|
72
|
+
.setAmount(input.amount);
|
|
73
|
+
if (input.memo) {
|
|
74
|
+
tx.setTransactionMemo(input.memo);
|
|
75
|
+
}
|
|
76
|
+
// Freeze before signing
|
|
77
|
+
const frozenTx = await tx.freezeWith(agent.client);
|
|
78
|
+
// Sign with custom supply key if provided
|
|
79
|
+
if (input.supplyPrivateKey) {
|
|
80
|
+
const supplyKey = sdk_1.PrivateKey.fromString(input.supplyPrivateKey);
|
|
81
|
+
await frozenTx.sign(supplyKey);
|
|
82
|
+
}
|
|
83
|
+
const response = await frozenTx.execute(agent.client);
|
|
84
|
+
const receipt = await response.getReceipt(agent.client);
|
|
85
|
+
if (receipt.status !== sdk_1.Status.Success) {
|
|
86
|
+
return {
|
|
87
|
+
ok: false,
|
|
88
|
+
error: receipt.status.toString(),
|
|
89
|
+
details: `Mint failed with status: ${receipt.status.toString()}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const txId = response.transactionId.toString();
|
|
93
|
+
return {
|
|
94
|
+
ok: true,
|
|
95
|
+
summary: `Minted ${input.amount.toLocaleString()} of token ${input.tokenId}`,
|
|
96
|
+
txId,
|
|
97
|
+
receipt: {
|
|
98
|
+
status: receipt.status.toString(),
|
|
99
|
+
},
|
|
100
|
+
data: {
|
|
101
|
+
tokenId: input.tokenId,
|
|
102
|
+
amountMinted: input.amount,
|
|
103
|
+
newTotalSupply: receipt.totalSupply?.toString() ?? "unknown",
|
|
104
|
+
explorerUrl: agent.getExplorerUrl(txId),
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
110
|
+
const knownErrors = {
|
|
111
|
+
TOKEN_HAS_NO_SUPPLY_KEY: "This token was created without a supply key. Minting is permanently disabled.",
|
|
112
|
+
INVALID_SIGNATURE: "Transaction signature is invalid. The supply key doesn't match.",
|
|
113
|
+
INVALID_TOKEN_ID: "The token ID does not exist on this network.",
|
|
114
|
+
TOKEN_WAS_DELETED: "This token has been deleted and can no longer be minted.",
|
|
115
|
+
INSUFFICIENT_PAYER_BALANCE: "Not enough HBAR to cover the transaction fee.",
|
|
116
|
+
};
|
|
117
|
+
const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
|
|
118
|
+
return {
|
|
119
|
+
ok: false,
|
|
120
|
+
error: errorCode || "MINT_TOKEN_FAILED",
|
|
121
|
+
details: errorCode ? knownErrors[errorCode] : message,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
exports.default = mintTokenAction;
|
|
127
|
+
//# sourceMappingURL=mint_token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mint_token.js","sourceRoot":"","sources":["../../src/actions/mint_token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/actions/transfer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAQvD,QAAA,MAAM,kBAAkB,EAAE,MAkIzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const zod_1 = require("zod");
|
|
4
|
+
const sdk_1 = require("@hashgraph/sdk");
|
|
5
|
+
const hbarTransferAction = {
|
|
6
|
+
name: "HBAR_TRANSFER",
|
|
7
|
+
similes: [
|
|
8
|
+
"send hbar",
|
|
9
|
+
"pay hbar",
|
|
10
|
+
"transfer hbar",
|
|
11
|
+
"send money",
|
|
12
|
+
"transfer funds",
|
|
13
|
+
"tip hbar",
|
|
14
|
+
],
|
|
15
|
+
description: "Send HBAR (native cryptocurrency) to another Hedera account.",
|
|
16
|
+
examples: [
|
|
17
|
+
[
|
|
18
|
+
{
|
|
19
|
+
input: {
|
|
20
|
+
to: "0.0.12345",
|
|
21
|
+
amount: 10,
|
|
22
|
+
memo: "Payment for services",
|
|
23
|
+
},
|
|
24
|
+
output: {
|
|
25
|
+
ok: true,
|
|
26
|
+
summary: "Sent 10 HBAR to 0.0.12345",
|
|
27
|
+
txId: "0.0.98765@1700000000.000000000",
|
|
28
|
+
receipt: { status: "SUCCESS" },
|
|
29
|
+
data: {
|
|
30
|
+
from: "0.0.98765",
|
|
31
|
+
to: "0.0.12345",
|
|
32
|
+
amount: 10,
|
|
33
|
+
memo: "Payment for services",
|
|
34
|
+
explorerUrl: "https://hashscan.io/testnet/transaction/0-0-98765-1700000000-000000000",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
explanation: "Send 10 HBAR to account 0.0.12345 with a memo",
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
],
|
|
41
|
+
schema: zod_1.z.object({
|
|
42
|
+
to: zod_1.z
|
|
43
|
+
.string()
|
|
44
|
+
.regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Account ID format (must be 0.0.X)")
|
|
45
|
+
.describe("The recipient's Hedera Account ID (e.g. 0.0.12345)"),
|
|
46
|
+
amount: zod_1.z.number().positive().describe("Amount of HBAR to send"),
|
|
47
|
+
memo: zod_1.z
|
|
48
|
+
.string()
|
|
49
|
+
.max(100)
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Optional memo for the transaction"),
|
|
52
|
+
}),
|
|
53
|
+
requiresConfirmation: true,
|
|
54
|
+
simulate: async (agent, input) => {
|
|
55
|
+
return {
|
|
56
|
+
summary: `Send ${input.amount} HBAR from ${agent.accountId.toString()} to ${input.to}`,
|
|
57
|
+
estimatedFeeHbar: 0.0001,
|
|
58
|
+
warnings: input.amount >= 100
|
|
59
|
+
? [`Large transfer: ${input.amount} HBAR. Please double-check.`]
|
|
60
|
+
: [],
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
handler: async (agent, input) => {
|
|
64
|
+
try {
|
|
65
|
+
const recipient = sdk_1.AccountId.fromString(input.to);
|
|
66
|
+
const amount = new sdk_1.Hbar(input.amount);
|
|
67
|
+
const tx = new sdk_1.TransferTransaction()
|
|
68
|
+
.addHbarTransfer(agent.accountId, amount.negated())
|
|
69
|
+
.addHbarTransfer(recipient, amount);
|
|
70
|
+
if (input.memo) {
|
|
71
|
+
tx.setTransactionMemo(input.memo);
|
|
72
|
+
}
|
|
73
|
+
const response = await tx.execute(agent.client);
|
|
74
|
+
const receipt = await response.getReceipt(agent.client);
|
|
75
|
+
if (receipt.status !== sdk_1.Status.Success) {
|
|
76
|
+
return {
|
|
77
|
+
ok: false,
|
|
78
|
+
error: receipt.status.toString(),
|
|
79
|
+
details: `Transaction ${response.transactionId.toString()} failed with status: ${receipt.status.toString()}`,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const txId = response.transactionId.toString();
|
|
83
|
+
return {
|
|
84
|
+
ok: true,
|
|
85
|
+
summary: `Sent ${input.amount} HBAR to ${input.to}`,
|
|
86
|
+
txId,
|
|
87
|
+
receipt: {
|
|
88
|
+
status: receipt.status.toString(),
|
|
89
|
+
},
|
|
90
|
+
data: {
|
|
91
|
+
from: agent.accountId.toString(),
|
|
92
|
+
to: input.to,
|
|
93
|
+
amount: input.amount,
|
|
94
|
+
memo: input.memo || null,
|
|
95
|
+
explorerUrl: agent.getExplorerUrl(txId),
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
101
|
+
// Parse known Hedera error codes
|
|
102
|
+
const knownErrors = {
|
|
103
|
+
INSUFFICIENT_PAYER_BALANCE: "The sending account does not have enough HBAR.",
|
|
104
|
+
INVALID_ACCOUNT_ID: "The recipient account ID does not exist on this network.",
|
|
105
|
+
ACCOUNT_DELETED: "The recipient account has been deleted.",
|
|
106
|
+
INVALID_SIGNATURE: "Transaction signature is invalid. Check your private key.",
|
|
107
|
+
};
|
|
108
|
+
const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
|
|
109
|
+
return {
|
|
110
|
+
ok: false,
|
|
111
|
+
error: errorCode || "TRANSFER_FAILED",
|
|
112
|
+
details: errorCode ? knownErrors[errorCode] : message,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
exports.default = hbarTransferAction;
|
|
118
|
+
//# sourceMappingURL=transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/actions/transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer_nft.d.ts","sourceRoot":"","sources":["../../src/actions/transfer_nft.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAUvD,QAAA,MAAM,iBAAiB,EAAE,MAsMxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|