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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +192 -0
  3. package/dist/actions/associate_token.d.ts +4 -0
  4. package/dist/actions/associate_token.d.ts.map +1 -0
  5. package/dist/actions/associate_token.js +156 -0
  6. package/dist/actions/associate_token.js.map +1 -0
  7. package/dist/actions/burn_nft.d.ts +4 -0
  8. package/dist/actions/burn_nft.d.ts.map +1 -0
  9. package/dist/actions/burn_nft.js +123 -0
  10. package/dist/actions/burn_nft.js.map +1 -0
  11. package/dist/actions/burn_token.d.ts +4 -0
  12. package/dist/actions/burn_token.d.ts.map +1 -0
  13. package/dist/actions/burn_token.js +147 -0
  14. package/dist/actions/burn_token.js.map +1 -0
  15. package/dist/actions/create_nft_collection.d.ts +4 -0
  16. package/dist/actions/create_nft_collection.d.ts.map +1 -0
  17. package/dist/actions/create_nft_collection.js +176 -0
  18. package/dist/actions/create_nft_collection.js.map +1 -0
  19. package/dist/actions/create_token.d.ts +4 -0
  20. package/dist/actions/create_token.d.ts.map +1 -0
  21. package/dist/actions/create_token.js +159 -0
  22. package/dist/actions/create_token.js.map +1 -0
  23. package/dist/actions/get_balance.d.ts +4 -0
  24. package/dist/actions/get_balance.d.ts.map +1 -0
  25. package/dist/actions/get_balance.js +106 -0
  26. package/dist/actions/get_balance.js.map +1 -0
  27. package/dist/actions/index.d.ts +17 -0
  28. package/dist/actions/index.d.ts.map +1 -0
  29. package/dist/actions/index.js +76 -0
  30. package/dist/actions/index.js.map +1 -0
  31. package/dist/actions/mint_nft.d.ts +4 -0
  32. package/dist/actions/mint_nft.d.ts.map +1 -0
  33. package/dist/actions/mint_nft.js +162 -0
  34. package/dist/actions/mint_nft.js.map +1 -0
  35. package/dist/actions/mint_token.d.ts +4 -0
  36. package/dist/actions/mint_token.d.ts.map +1 -0
  37. package/dist/actions/mint_token.js +127 -0
  38. package/dist/actions/mint_token.js.map +1 -0
  39. package/dist/actions/transfer.d.ts +4 -0
  40. package/dist/actions/transfer.d.ts.map +1 -0
  41. package/dist/actions/transfer.js +118 -0
  42. package/dist/actions/transfer.js.map +1 -0
  43. package/dist/actions/transfer_nft.d.ts +4 -0
  44. package/dist/actions/transfer_nft.d.ts.map +1 -0
  45. package/dist/actions/transfer_nft.js +177 -0
  46. package/dist/actions/transfer_nft.js.map +1 -0
  47. package/dist/actions/transfer_token.d.ts +4 -0
  48. package/dist/actions/transfer_token.d.ts.map +1 -0
  49. package/dist/actions/transfer_token.js +180 -0
  50. package/dist/actions/transfer_token.js.map +1 -0
  51. package/dist/agent/index.d.ts +13 -0
  52. package/dist/agent/index.d.ts.map +1 -0
  53. package/dist/agent/index.js +33 -0
  54. package/dist/agent/index.js.map +1 -0
  55. package/dist/index.d.ts +5 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +28 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/types/action.d.ts +39 -0
  60. package/dist/types/action.d.ts.map +1 -0
  61. package/dist/types/action.js +3 -0
  62. package/dist/types/action.js.map +1 -0
  63. package/package.json +50 -0
@@ -0,0 +1,147 @@
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 burnTokenAction = {
6
+ name: "BURN_TOKEN",
7
+ similes: [
8
+ "burn token",
9
+ "burn tokens",
10
+ "decrease supply",
11
+ "destroy tokens",
12
+ "reduce supply",
13
+ ],
14
+ description: "Burn fungible tokens, permanently reducing the total supply. The tokens are burned from the treasury account. The token must have been created with a supply key. By default, the agent's operator key is used to sign.",
15
+ examples: [
16
+ [
17
+ {
18
+ input: {
19
+ tokenId: "0.0.99999",
20
+ amount: 1000,
21
+ },
22
+ output: {
23
+ ok: true,
24
+ summary: "Burned 1,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
+ amountBurned: 1000,
30
+ newTotalSupply: "9000",
31
+ explorerUrl: "https://hashscan.io/testnet/transaction/...",
32
+ },
33
+ },
34
+ explanation: "Burn 1,000 tokens from the treasury supply",
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 burn (e.g. 0.0.99999)"),
43
+ amount: zod_1.z
44
+ .number()
45
+ .int()
46
+ .positive()
47
+ .describe("Amount of tokens to burn (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
+ const warnings = [];
61
+ if (input.amount >= 1000000) {
62
+ warnings.push(`Large burn: ${input.amount.toLocaleString()} units. This is permanent and irreversible.`);
63
+ }
64
+ // Always warn — burns are destructive
65
+ warnings.push("⚠️ Token burns are irreversible. Supply cannot be recovered.");
66
+ return {
67
+ summary: `Burn ${input.amount.toLocaleString()} of token ${input.tokenId}`,
68
+ estimatedFeeHbar: 0.001,
69
+ warnings,
70
+ };
71
+ },
72
+ handler: async (agent, input) => {
73
+ try {
74
+ const tx = new sdk_1.TokenBurnTransaction()
75
+ .setTokenId(input.tokenId)
76
+ .setAmount(input.amount);
77
+ if (input.memo) {
78
+ tx.setTransactionMemo(input.memo);
79
+ }
80
+ // Freeze before signing
81
+ const frozenTx = await tx.freezeWith(agent.client);
82
+ // Sign with custom supply key if provided
83
+ if (input.supplyPrivateKey) {
84
+ const supplyKey = sdk_1.PrivateKey.fromString(input.supplyPrivateKey);
85
+ await frozenTx.sign(supplyKey);
86
+ }
87
+ const response = await frozenTx.execute(agent.client);
88
+ const receipt = await response.getReceipt(agent.client);
89
+ if (receipt.status !== sdk_1.Status.Success) {
90
+ const statusStr = receipt.status.toString();
91
+ if (statusStr.includes("INSUFFICIENT_TOKEN_BALANCE")) {
92
+ return {
93
+ ok: false,
94
+ error: "INSUFFICIENT_TOKEN_BALANCE",
95
+ details: `Cannot burn ${input.amount.toLocaleString()} tokens — the treasury does not hold enough. Check the current supply.`,
96
+ };
97
+ }
98
+ return {
99
+ ok: false,
100
+ error: statusStr,
101
+ details: `Burn failed with status: ${statusStr}`,
102
+ };
103
+ }
104
+ const txId = response.transactionId.toString();
105
+ return {
106
+ ok: true,
107
+ summary: `Burned ${input.amount.toLocaleString()} of token ${input.tokenId}`,
108
+ txId,
109
+ receipt: {
110
+ status: receipt.status.toString(),
111
+ },
112
+ data: {
113
+ tokenId: input.tokenId,
114
+ amountBurned: input.amount,
115
+ newTotalSupply: receipt.totalSupply?.toString() ?? "unknown",
116
+ explorerUrl: agent.getExplorerUrl(txId),
117
+ },
118
+ };
119
+ }
120
+ catch (err) {
121
+ const message = err instanceof Error ? err.message : String(err);
122
+ // Catch insufficient balance at SDK level too
123
+ if (message.includes("INSUFFICIENT_TOKEN_BALANCE")) {
124
+ return {
125
+ ok: false,
126
+ error: "INSUFFICIENT_TOKEN_BALANCE",
127
+ details: `Cannot burn ${input.amount.toLocaleString()} tokens — the treasury does not hold enough.`,
128
+ };
129
+ }
130
+ const knownErrors = {
131
+ TOKEN_HAS_NO_SUPPLY_KEY: "This token was created without a supply key. Burning is permanently disabled.",
132
+ INVALID_SIGNATURE: "Transaction signature is invalid. The supply key doesn't match.",
133
+ INVALID_TOKEN_ID: "The token ID does not exist on this network.",
134
+ TOKEN_WAS_DELETED: "This token has been deleted.",
135
+ INSUFFICIENT_PAYER_BALANCE: "Not enough HBAR to cover the transaction fee.",
136
+ };
137
+ const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
138
+ return {
139
+ ok: false,
140
+ error: errorCode || "BURN_TOKEN_FAILED",
141
+ details: errorCode ? knownErrors[errorCode] : message,
142
+ };
143
+ }
144
+ },
145
+ };
146
+ exports.default = burnTokenAction;
147
+ //# sourceMappingURL=burn_token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"burn_token.js","sourceRoot":"","sources":["../../src/actions/burn_token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Action } from "../types/action";
2
+ declare const createNftCollectionAction: Action;
3
+ export default createNftCollectionAction;
4
+ //# sourceMappingURL=create_nft_collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_nft_collection.d.ts","sourceRoot":"","sources":["../../src/actions/create_nft_collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AASvD,QAAA,MAAM,yBAAyB,EAAE,MA2LhC,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,176 @@
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 createNftCollectionAction = {
6
+ name: "CREATE_NFT_COLLECTION",
7
+ similes: [
8
+ "create nft collection",
9
+ "create nft",
10
+ "launch nft",
11
+ "deploy nft",
12
+ "new nft collection",
13
+ "nft collection",
14
+ "make nft",
15
+ ],
16
+ description: "Create a new NFT collection (NonFungibleUnique token) on the Hedera Token Service. The operator key is used as admin and supply key by default. Max supply can optionally be capped.",
17
+ examples: [
18
+ [
19
+ {
20
+ input: {
21
+ name: "Dappily Genesis",
22
+ symbol: "DGEN",
23
+ memo: "The first Dappily NFT collection",
24
+ },
25
+ output: {
26
+ ok: true,
27
+ summary: "Created NFT collection DGEN (0.0.88888)",
28
+ txId: "0.0.12345@1700000000.000000000",
29
+ receipt: { status: "SUCCESS" },
30
+ data: {
31
+ tokenId: "0.0.88888",
32
+ name: "Dappily Genesis",
33
+ symbol: "DGEN",
34
+ type: "NON_FUNGIBLE_UNIQUE",
35
+ treasury: "0.0.12345",
36
+ maxSupply: "unlimited",
37
+ hasAdminKey: true,
38
+ hasSupplyKey: true,
39
+ explorerUrl: "https://hashscan.io/testnet/transaction/...",
40
+ },
41
+ },
42
+ explanation: "Create an NFT collection with unlimited supply",
43
+ },
44
+ ],
45
+ ],
46
+ schema: zod_1.z.object({
47
+ name: zod_1.z
48
+ .string()
49
+ .min(1)
50
+ .max(100)
51
+ .describe("The human-readable name of the NFT collection"),
52
+ symbol: zod_1.z
53
+ .string()
54
+ .min(1)
55
+ .max(100)
56
+ .describe("The ticker symbol for the collection (e.g. 'DGEN')"),
57
+ maxSupply: zod_1.z
58
+ .number()
59
+ .int()
60
+ .positive()
61
+ .optional()
62
+ .describe("Optional max supply cap. Omit for unlimited."),
63
+ memo: zod_1.z
64
+ .string()
65
+ .max(100)
66
+ .optional()
67
+ .describe("Optional memo attached to the collection"),
68
+ adminPrivateKey: zod_1.z
69
+ .string()
70
+ .optional()
71
+ .describe("⚠️ Admin key (only if different from operator key)"),
72
+ supplyPrivateKey: zod_1.z
73
+ .string()
74
+ .optional()
75
+ .describe("⚠️ Supply key (only if different from operator key)"),
76
+ }),
77
+ requiresConfirmation: true,
78
+ simulate: async (_agent, input) => {
79
+ return {
80
+ summary: `Create NFT collection "${input.name}" (${input.symbol})${input.maxSupply ? `, max supply: ${input.maxSupply}` : ", unlimited supply"}`,
81
+ estimatedFeeHbar: 1,
82
+ warnings: [],
83
+ };
84
+ },
85
+ handler: async (agent, input) => {
86
+ try {
87
+ const adminKey = input.adminPrivateKey
88
+ ? sdk_1.PrivateKey.fromString(input.adminPrivateKey).publicKey
89
+ : agent.privateKey.publicKey;
90
+ const supplyKey = input.supplyPrivateKey
91
+ ? sdk_1.PrivateKey.fromString(input.supplyPrivateKey).publicKey
92
+ : agent.privateKey.publicKey;
93
+ const tx = new sdk_1.TokenCreateTransaction()
94
+ .setTokenName(input.name)
95
+ .setTokenSymbol(input.symbol)
96
+ .setTokenType(sdk_1.TokenType.NonFungibleUnique)
97
+ .setDecimals(0)
98
+ .setInitialSupply(0)
99
+ .setTreasuryAccountId(agent.accountId)
100
+ .setAdminKey(adminKey)
101
+ .setSupplyKey(supplyKey);
102
+ if (input.maxSupply) {
103
+ tx.setSupplyType(sdk_1.TokenSupplyType.Finite);
104
+ tx.setMaxSupply(input.maxSupply);
105
+ }
106
+ else {
107
+ tx.setSupplyType(sdk_1.TokenSupplyType.Infinite);
108
+ }
109
+ if (input.memo) {
110
+ tx.setTokenMemo(input.memo);
111
+ }
112
+ // Freeze, sign with custom keys if needed, execute
113
+ const frozenTx = await tx.freezeWith(agent.client);
114
+ if (input.adminPrivateKey) {
115
+ await frozenTx.sign(sdk_1.PrivateKey.fromString(input.adminPrivateKey));
116
+ }
117
+ if (input.supplyPrivateKey && input.supplyPrivateKey !== input.adminPrivateKey) {
118
+ await frozenTx.sign(sdk_1.PrivateKey.fromString(input.supplyPrivateKey));
119
+ }
120
+ const response = await frozenTx.execute(agent.client);
121
+ const receipt = await response.getReceipt(agent.client);
122
+ if (receipt.status !== sdk_1.Status.Success) {
123
+ return {
124
+ ok: false,
125
+ error: receipt.status.toString(),
126
+ details: `NFT collection creation failed with status: ${receipt.status.toString()}`,
127
+ };
128
+ }
129
+ const tokenId = receipt.tokenId;
130
+ if (!tokenId) {
131
+ return {
132
+ ok: false,
133
+ error: "NO_TOKEN_ID",
134
+ details: "Transaction succeeded but no token ID was returned.",
135
+ };
136
+ }
137
+ const txId = response.transactionId.toString();
138
+ return {
139
+ ok: true,
140
+ summary: `Created NFT collection ${input.symbol} (${tokenId.toString()})`,
141
+ txId,
142
+ receipt: { status: receipt.status.toString() },
143
+ data: {
144
+ tokenId: tokenId.toString(),
145
+ name: input.name,
146
+ symbol: input.symbol,
147
+ type: "NON_FUNGIBLE_UNIQUE",
148
+ treasury: agent.accountId.toString(),
149
+ maxSupply: input.maxSupply?.toString() ?? "unlimited",
150
+ hasAdminKey: true,
151
+ hasSupplyKey: true,
152
+ explorerUrl: agent.getExplorerUrl(txId),
153
+ },
154
+ };
155
+ }
156
+ catch (err) {
157
+ const message = err instanceof Error ? err.message : String(err);
158
+ const knownErrors = {
159
+ INSUFFICIENT_PAYER_BALANCE: "Not enough HBAR to cover the NFT collection creation fee (~1 HBAR).",
160
+ INVALID_TOKEN_SYMBOL: "Token symbol is invalid.",
161
+ INVALID_TOKEN_NAME: "Token name is invalid.",
162
+ INVALID_SIGNATURE: "Transaction signature is invalid. Check your keys.",
163
+ INVALID_ACCOUNT_ID: "The account ID does not exist on this network.",
164
+ TOKEN_WAS_DELETED: "This token has been deleted.",
165
+ };
166
+ const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
167
+ return {
168
+ ok: false,
169
+ error: errorCode || "CREATE_NFT_COLLECTION_FAILED",
170
+ details: errorCode ? knownErrors[errorCode] : message,
171
+ };
172
+ }
173
+ },
174
+ };
175
+ exports.default = createNftCollectionAction;
176
+ //# sourceMappingURL=create_nft_collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_nft_collection.js","sourceRoot":"","sources":["../../src/actions/create_nft_collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Action } from "../types/action";
2
+ declare const createTokenAction: Action;
3
+ export default createTokenAction;
4
+ //# sourceMappingURL=create_token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_token.d.ts","sourceRoot":"","sources":["../../src/actions/create_token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAQvD,QAAA,MAAM,iBAAiB,EAAE,MAuKxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,159 @@
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 createTokenAction = {
6
+ name: "CREATE_TOKEN",
7
+ similes: [
8
+ "create token",
9
+ "launch token",
10
+ "deploy token",
11
+ "make token",
12
+ "new token",
13
+ "mint token",
14
+ "token factory",
15
+ ],
16
+ description: "Create a new fungible token on the Hedera Token Service (HTS). The agent's operator account is used as the treasury by default. The operator key is set as both admin key and supply key, enabling future mint/burn operations.",
17
+ examples: [
18
+ [
19
+ {
20
+ input: {
21
+ name: "Dappily Coin",
22
+ symbol: "DAPP",
23
+ initialSupply: 1000000,
24
+ decimals: 2,
25
+ memo: "The Dappily utility token",
26
+ },
27
+ output: {
28
+ ok: true,
29
+ summary: "Created token DAPP (0.0.99999) with initial supply 1,000,000",
30
+ txId: "0.0.12345@1700000000.000000000",
31
+ receipt: { status: "SUCCESS" },
32
+ data: {
33
+ tokenId: "0.0.99999",
34
+ name: "Dappily Coin",
35
+ symbol: "DAPP",
36
+ decimals: 2,
37
+ initialSupply: 1000000,
38
+ treasury: "0.0.12345",
39
+ hasAdminKey: true,
40
+ hasSupplyKey: true,
41
+ explorerUrl: "https://hashscan.io/testnet/transaction/...",
42
+ },
43
+ },
44
+ explanation: "Create a fungible token with 2 decimal places and 1M initial supply",
45
+ },
46
+ ],
47
+ ],
48
+ schema: zod_1.z.object({
49
+ name: zod_1.z
50
+ .string()
51
+ .min(1)
52
+ .max(100)
53
+ .describe("The human-readable name of the token (e.g. 'Dappily Coin')"),
54
+ symbol: zod_1.z
55
+ .string()
56
+ .min(1)
57
+ .max(100)
58
+ .describe("The ticker symbol for the token (e.g. 'DAPP')"),
59
+ decimals: zod_1.z
60
+ .number()
61
+ .int()
62
+ .min(0)
63
+ .max(18)
64
+ .optional()
65
+ .default(0)
66
+ .describe("Number of decimal places (default 0, max 18)"),
67
+ initialSupply: zod_1.z
68
+ .number()
69
+ .int()
70
+ .min(0)
71
+ .describe("Initial supply of the token (in the smallest unit)"),
72
+ memo: zod_1.z
73
+ .string()
74
+ .max(100)
75
+ .optional()
76
+ .describe("Optional memo attached to the token"),
77
+ }),
78
+ requiresConfirmation: true,
79
+ simulate: async (agent, input) => {
80
+ return {
81
+ summary: `Create token "${input.name}" (${input.symbol}) with supply ${input.initialSupply.toLocaleString()} and ${input.decimals ?? 0} decimals`,
82
+ estimatedFeeHbar: 1, // Token creation costs ~1 HBAR
83
+ warnings: [],
84
+ };
85
+ },
86
+ handler: async (agent, input) => {
87
+ try {
88
+ const decimals = input.decimals ?? 0;
89
+ const tx = new sdk_1.TokenCreateTransaction()
90
+ .setTokenName(input.name)
91
+ .setTokenSymbol(input.symbol)
92
+ .setDecimals(decimals)
93
+ .setInitialSupply(input.initialSupply)
94
+ .setTreasuryAccountId(agent.accountId)
95
+ .setAdminKey(agent.privateKey.publicKey)
96
+ .setSupplyKey(agent.privateKey.publicKey)
97
+ .setTokenType(sdk_1.TokenType.FungibleCommon)
98
+ .setSupplyType(sdk_1.TokenSupplyType.Infinite);
99
+ if (input.memo) {
100
+ tx.setTokenMemo(input.memo);
101
+ }
102
+ const response = await tx.execute(agent.client);
103
+ const receipt = await response.getReceipt(agent.client);
104
+ if (receipt.status !== sdk_1.Status.Success) {
105
+ return {
106
+ ok: false,
107
+ error: receipt.status.toString(),
108
+ details: `Token creation failed with status: ${receipt.status.toString()}`,
109
+ };
110
+ }
111
+ const tokenId = receipt.tokenId;
112
+ if (!tokenId) {
113
+ return {
114
+ ok: false,
115
+ error: "NO_TOKEN_ID",
116
+ details: "Transaction succeeded but no token ID was returned.",
117
+ };
118
+ }
119
+ const txId = response.transactionId.toString();
120
+ return {
121
+ ok: true,
122
+ summary: `Created token ${input.symbol} (${tokenId.toString()}) with initial supply ${input.initialSupply.toLocaleString()}`,
123
+ txId,
124
+ receipt: {
125
+ status: receipt.status.toString(),
126
+ },
127
+ data: {
128
+ tokenId: tokenId.toString(),
129
+ name: input.name,
130
+ symbol: input.symbol,
131
+ decimals,
132
+ initialSupply: input.initialSupply,
133
+ treasury: agent.accountId.toString(),
134
+ hasAdminKey: true,
135
+ hasSupplyKey: true,
136
+ explorerUrl: agent.getExplorerUrl(txId),
137
+ },
138
+ };
139
+ }
140
+ catch (err) {
141
+ const message = err instanceof Error ? err.message : String(err);
142
+ const knownErrors = {
143
+ INSUFFICIENT_PAYER_BALANCE: "Not enough HBAR to cover the token creation fee (~1 HBAR).",
144
+ INVALID_TOKEN_SYMBOL: "Token symbol is invalid.",
145
+ INVALID_TOKEN_NAME: "Token name is invalid.",
146
+ TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT: "This token is already associated with the treasury.",
147
+ TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED: "The treasury account has reached its token association limit.",
148
+ };
149
+ const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
150
+ return {
151
+ ok: false,
152
+ error: errorCode || "CREATE_TOKEN_FAILED",
153
+ details: errorCode ? knownErrors[errorCode] : message,
154
+ };
155
+ }
156
+ },
157
+ };
158
+ exports.default = createTokenAction;
159
+ //# sourceMappingURL=create_token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_token.js","sourceRoot":"","sources":["../../src/actions/create_token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Action } from "../types/action";
2
+ declare const getBalanceAction: Action;
3
+ export default getBalanceAction;
4
+ //# sourceMappingURL=get_balance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_balance.d.ts","sourceRoot":"","sources":["../../src/actions/get_balance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAGvD,QAAA,MAAM,gBAAgB,EAAE,MAoHvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,106 @@
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 getBalanceAction = {
6
+ name: "GET_BALANCE",
7
+ similes: [
8
+ "check balance",
9
+ "get balance",
10
+ "account balance",
11
+ "how much hbar",
12
+ "show balance",
13
+ "wallet balance",
14
+ ],
15
+ description: "Get the HBAR and token balances for a Hedera account. If no account ID is provided, returns the agent's own balance.",
16
+ examples: [
17
+ [
18
+ {
19
+ input: {},
20
+ output: {
21
+ ok: true,
22
+ summary: "Balance for 0.0.12345: 150.5 ℏ",
23
+ data: {
24
+ accountId: "0.0.12345",
25
+ hbarBalance: "150.5",
26
+ tokens: [],
27
+ },
28
+ },
29
+ explanation: "Get the agent's own balance when no accountId is specified",
30
+ },
31
+ ],
32
+ [
33
+ {
34
+ input: { accountId: "0.0.98765" },
35
+ output: {
36
+ ok: true,
37
+ summary: "Balance for 0.0.98765: 42.0 ℏ",
38
+ data: {
39
+ accountId: "0.0.98765",
40
+ hbarBalance: "42.0",
41
+ tokens: [
42
+ { tokenId: "0.0.55555", balance: "1000", decimals: 2 },
43
+ ],
44
+ },
45
+ },
46
+ explanation: "Get balance for a specific account, including tokens",
47
+ },
48
+ ],
49
+ ],
50
+ schema: zod_1.z.object({
51
+ accountId: zod_1.z
52
+ .string()
53
+ .regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Account ID format (must be 0.0.X)")
54
+ .optional()
55
+ .describe("The Hedera Account ID to check (e.g. 0.0.12345). Defaults to the agent's own account."),
56
+ }),
57
+ handler: async (agent, input) => {
58
+ try {
59
+ const targetId = input.accountId
60
+ ? sdk_1.AccountId.fromString(input.accountId)
61
+ : agent.accountId;
62
+ const balance = await new sdk_1.AccountBalanceQuery()
63
+ .setAccountId(targetId)
64
+ .execute(agent.client);
65
+ // Build token list from the balance map
66
+ const tokens = [];
67
+ if (balance.tokens) {
68
+ const tokenJson = balance.toJSON().tokens;
69
+ for (const t of tokenJson) {
70
+ tokens.push({
71
+ tokenId: t.tokenId,
72
+ balance: t.balance,
73
+ decimals: t.decimals,
74
+ });
75
+ }
76
+ }
77
+ const hbarStr = balance.hbars.toString();
78
+ const accountStr = targetId.toString();
79
+ return {
80
+ ok: true,
81
+ summary: `Balance for ${accountStr}: ${hbarStr}`,
82
+ data: {
83
+ accountId: accountStr,
84
+ hbarBalance: hbarStr,
85
+ tokens,
86
+ },
87
+ };
88
+ }
89
+ catch (err) {
90
+ const message = err instanceof Error ? err.message : String(err);
91
+ // Parse known Hedera error codes
92
+ const knownErrors = {
93
+ INVALID_ACCOUNT_ID: "The account ID does not exist on this network.",
94
+ ACCOUNT_DELETED: "This account has been deleted.",
95
+ };
96
+ const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
97
+ return {
98
+ ok: false,
99
+ error: errorCode || "BALANCE_QUERY_FAILED",
100
+ details: errorCode ? knownErrors[errorCode] : message,
101
+ };
102
+ }
103
+ },
104
+ };
105
+ exports.default = getBalanceAction;
106
+ //# sourceMappingURL=get_balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_balance.js","sourceRoot":"","sources":["../../src/actions/get_balance.ts"],"names":[],"mappings":";;AAAA,6BAAwB;AAExB,wCAAgE;AAEhE,MAAM,gBAAgB,GAAW;IAC/B,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE;QACP,eAAe;QACf,aAAa;QACb,iBAAiB;QACjB,eAAe;QACf,cAAc;QACd,gBAAgB;KACjB;IACD,WAAW,EACT,sHAAsH;IACxH,QAAQ,EAAE;QACR;YACE;gBACE,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE;oBACN,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,gCAAgC;oBACzC,IAAI,EAAE;wBACJ,SAAS,EAAE,WAAW;wBACtB,WAAW,EAAE,OAAO;wBACpB,MAAM,EAAE,EAAE;qBACX;iBACF;gBACD,WAAW,EACT,4DAA4D;aAC/D;SACF;QACD;YACE;gBACE,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;gBACjC,MAAM,EAAE;oBACN,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,+BAA+B;oBACxC,IAAI,EAAE;wBACJ,SAAS,EAAE,WAAW;wBACtB,WAAW,EAAE,MAAM;wBACnB,MAAM,EAAE;4BACN,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;yBACvD;qBACF;iBACF;gBACD,WAAW,EAAE,sDAAsD;aACpE;SACF;KACF;IACD,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,OAAC;aACT,MAAM,EAAE;aACR,KAAK,CACJ,iBAAiB,EACjB,kDAAkD,CACnD;aACA,QAAQ,EAAE;aACV,QAAQ,CACP,uFAAuF,CACxF;KACJ,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAyB,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS;gBAC9B,CAAC,CAAC,eAAS,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;gBACvC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YAEpB,MAAM,OAAO,GAAG,MAAM,IAAI,yBAAmB,EAAE;iBAC5C,YAAY,CAAC,QAAQ,CAAC;iBACtB,OAAO,CAAC,KAAK,CAAC,MAAa,CAAC,CAAC;YAEhC,wCAAwC;YACxC,MAAM,MAAM,GACV,EAAE,CAAC;YACL,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;gBAC1C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC;wBACV,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAEvC,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,eAAe,UAAU,KAAK,OAAO,EAAE;gBAChD,IAAI,EAAE;oBACJ,SAAS,EAAE,UAAU;oBACrB,WAAW,EAAE,OAAO;oBACpB,MAAM;iBACP;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEnD,iCAAiC;YACjC,MAAM,WAAW,GAA2B;gBAC1C,kBAAkB,EAAE,gDAAgD;gBACpE,eAAe,EAAE,gCAAgC;aAClD,CAAC;YAEF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CACvB,CAAC;YAEF,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,SAAS,IAAI,sBAAsB;gBAC1C,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO;aACtD,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC;AAEF,kBAAe,gBAAgB,CAAC"}