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,177 @@
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 transferNftAction = {
6
+ name: "TRANSFER_NFT",
7
+ similes: [
8
+ "transfer nft",
9
+ "send nft",
10
+ "give nft",
11
+ "move nft",
12
+ "nft transfer",
13
+ ],
14
+ description: "Transfer an NFT (by serial number) to another Hedera account. The recipient must have the NFT collection associated first. The sender defaults to the agent's operator account.",
15
+ examples: [
16
+ [
17
+ {
18
+ input: {
19
+ tokenId: "0.0.88888",
20
+ serial: 1,
21
+ to: "0.0.54321",
22
+ },
23
+ output: {
24
+ ok: true,
25
+ summary: "Transferred NFT 0.0.88888 #1 to 0.0.54321",
26
+ txId: "0.0.12345@1700000000.000000000",
27
+ receipt: { status: "SUCCESS" },
28
+ data: {
29
+ tokenId: "0.0.88888",
30
+ serial: 1,
31
+ from: "0.0.12345",
32
+ to: "0.0.54321",
33
+ explorerUrl: "https://hashscan.io/testnet/transaction/...",
34
+ },
35
+ },
36
+ explanation: "Transfer NFT serial #1 to another account",
37
+ },
38
+ ],
39
+ ],
40
+ schema: zod_1.z.object({
41
+ tokenId: zod_1.z
42
+ .string()
43
+ .regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Token ID format (must be 0.0.X)")
44
+ .describe("The NFT collection token ID"),
45
+ serial: zod_1.z
46
+ .number()
47
+ .int()
48
+ .positive()
49
+ .describe("The serial number of the NFT to transfer"),
50
+ to: zod_1.z
51
+ .string()
52
+ .regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Account ID format (must be 0.0.X)")
53
+ .describe("The recipient's Hedera Account ID"),
54
+ fromAccountId: zod_1.z
55
+ .string()
56
+ .regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Account ID format (must be 0.0.X)")
57
+ .optional()
58
+ .describe("Sender account ID. Defaults to the agent's operator account."),
59
+ memo: zod_1.z
60
+ .string()
61
+ .max(100)
62
+ .optional()
63
+ .describe("Optional transaction memo"),
64
+ senderPrivateKey: zod_1.z
65
+ .string()
66
+ .optional()
67
+ .describe("⚠️ Sender's private key (only if different from operator key)"),
68
+ }),
69
+ requiresConfirmation: true,
70
+ simulate: async (agent, input) => {
71
+ const from = input.fromAccountId || agent.accountId.toString();
72
+ return {
73
+ summary: `Transfer NFT ${input.tokenId} #${input.serial} from ${from} to ${input.to}`,
74
+ estimatedFeeHbar: 0.001,
75
+ warnings: [],
76
+ };
77
+ },
78
+ handler: async (agent, input) => {
79
+ try {
80
+ const tokenId = sdk_1.TokenId.fromString(input.tokenId);
81
+ const recipient = sdk_1.AccountId.fromString(input.to);
82
+ const sender = input.fromAccountId
83
+ ? sdk_1.AccountId.fromString(input.fromAccountId)
84
+ : agent.accountId;
85
+ // ── Pre-flight: check if recipient has the collection associated ──
86
+ try {
87
+ const recipientBalance = await new sdk_1.AccountBalanceQuery()
88
+ .setAccountId(recipient)
89
+ .execute(agent.client);
90
+ if (recipientBalance.tokens) {
91
+ const balanceJson = recipientBalance.toJSON();
92
+ const hasToken = balanceJson.tokens.some((t) => t.tokenId === input.tokenId);
93
+ if (!hasToken) {
94
+ return {
95
+ ok: false,
96
+ error: "TOKEN_NOT_ASSOCIATED_TO_ACCOUNT",
97
+ details: `Account ${input.to} has not associated NFT collection ${input.tokenId}. The recipient must run ASSOCIATE_TOKEN first.`,
98
+ };
99
+ }
100
+ }
101
+ }
102
+ catch {
103
+ // Balance query failed — proceed and let the network return the real error
104
+ }
105
+ // ── Execute transfer ──
106
+ const tx = new sdk_1.TransferTransaction()
107
+ .addNftTransfer(tokenId, input.serial, sender, recipient);
108
+ if (input.memo) {
109
+ tx.setTransactionMemo(input.memo);
110
+ }
111
+ const frozenTx = await tx.freezeWith(agent.client);
112
+ if (input.senderPrivateKey) {
113
+ const senderKey = sdk_1.PrivateKey.fromString(input.senderPrivateKey);
114
+ await frozenTx.sign(senderKey);
115
+ }
116
+ const response = await frozenTx.execute(agent.client);
117
+ const receipt = await response.getReceipt(agent.client);
118
+ if (receipt.status !== sdk_1.Status.Success) {
119
+ const statusStr = receipt.status.toString();
120
+ if (statusStr.includes("TOKEN_NOT_ASSOCIATED_TO_ACCOUNT")) {
121
+ return {
122
+ ok: false,
123
+ error: "TOKEN_NOT_ASSOCIATED_TO_ACCOUNT",
124
+ details: `Account ${input.to} has not associated NFT collection ${input.tokenId}. Run ASSOCIATE_TOKEN first.`,
125
+ };
126
+ }
127
+ return {
128
+ ok: false,
129
+ error: statusStr,
130
+ details: `NFT transfer failed with status: ${statusStr}`,
131
+ };
132
+ }
133
+ const txId = response.transactionId.toString();
134
+ return {
135
+ ok: true,
136
+ summary: `Transferred NFT ${input.tokenId} #${input.serial} to ${input.to}`,
137
+ txId,
138
+ receipt: { status: receipt.status.toString() },
139
+ data: {
140
+ tokenId: input.tokenId,
141
+ serial: input.serial,
142
+ from: sender.toString(),
143
+ to: input.to,
144
+ explorerUrl: agent.getExplorerUrl(txId),
145
+ },
146
+ };
147
+ }
148
+ catch (err) {
149
+ const message = err instanceof Error ? err.message : String(err);
150
+ if (message.includes("TOKEN_NOT_ASSOCIATED_TO_ACCOUNT")) {
151
+ return {
152
+ ok: false,
153
+ error: "TOKEN_NOT_ASSOCIATED_TO_ACCOUNT",
154
+ details: `Account ${input.to} has not associated NFT collection ${input.tokenId}. Run ASSOCIATE_TOKEN first.`,
155
+ };
156
+ }
157
+ const knownErrors = {
158
+ INVALID_SIGNATURE: "Transaction signature is invalid. Check the sender's key.",
159
+ INVALID_ACCOUNT_ID: "The account ID does not exist on this network.",
160
+ INVALID_TOKEN_ID: "The token ID does not exist on this network.",
161
+ INVALID_NFT_ID: "The specified NFT serial does not exist in this collection.",
162
+ SENDER_DOES_NOT_OWN_NFT_SERIAL_NO: "The sender does not own this NFT serial number.",
163
+ ACCOUNT_DELETED: "The recipient account has been deleted.",
164
+ ACCOUNT_FROZEN_FOR_TOKEN: "This account is frozen for this NFT collection.",
165
+ INSUFFICIENT_PAYER_BALANCE: "Not enough HBAR to cover the transaction fee.",
166
+ };
167
+ const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
168
+ return {
169
+ ok: false,
170
+ error: errorCode || "TRANSFER_NFT_FAILED",
171
+ details: errorCode ? knownErrors[errorCode] : message,
172
+ };
173
+ }
174
+ },
175
+ };
176
+ exports.default = transferNftAction;
177
+ //# sourceMappingURL=transfer_nft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer_nft.js","sourceRoot":"","sources":["../../src/actions/transfer_nft.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Action } from "../types/action";
2
+ declare const transferTokenAction: Action;
3
+ export default transferTokenAction;
4
+ //# sourceMappingURL=transfer_token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer_token.d.ts","sourceRoot":"","sources":["../../src/actions/transfer_token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AASvD,QAAA,MAAM,mBAAmB,EAAE,MAkN1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,180 @@
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 transferTokenAction = {
6
+ name: "TRANSFER_TOKEN",
7
+ similes: [
8
+ "send token",
9
+ "transfer token",
10
+ "pay token",
11
+ "send fungible",
12
+ "token transfer",
13
+ "move token",
14
+ ],
15
+ description: "Transfer fungible tokens (HTS) from the agent's account (or a specified sender) to a recipient. The recipient must have previously associated the token, or you'll get a clear error with instructions.",
16
+ examples: [
17
+ [
18
+ {
19
+ input: {
20
+ tokenId: "0.0.99999",
21
+ to: "0.0.54321",
22
+ amount: 500,
23
+ },
24
+ output: {
25
+ ok: true,
26
+ summary: "Transferred 500 of token 0.0.99999 to 0.0.54321",
27
+ txId: "0.0.12345@1700000000.000000000",
28
+ receipt: { status: "SUCCESS" },
29
+ data: {
30
+ tokenId: "0.0.99999",
31
+ from: "0.0.12345",
32
+ to: "0.0.54321",
33
+ amount: 500,
34
+ memo: null,
35
+ explorerUrl: "https://hashscan.io/testnet/transaction/...",
36
+ },
37
+ },
38
+ explanation: "Transfer 500 fungible tokens from agent to a recipient",
39
+ },
40
+ ],
41
+ ],
42
+ schema: zod_1.z.object({
43
+ tokenId: zod_1.z
44
+ .string()
45
+ .regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Token ID format (must be 0.0.X)")
46
+ .describe("The token ID to transfer (e.g. 0.0.99999)"),
47
+ to: zod_1.z
48
+ .string()
49
+ .regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Account ID format (must be 0.0.X)")
50
+ .describe("The recipient's Hedera Account ID"),
51
+ amount: zod_1.z
52
+ .number()
53
+ .int()
54
+ .positive()
55
+ .describe("Amount of tokens to transfer (in smallest unit)"),
56
+ fromAccountId: zod_1.z
57
+ .string()
58
+ .regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Account ID format (must be 0.0.X)")
59
+ .optional()
60
+ .describe("Sender account ID. Defaults to the agent's operator account."),
61
+ memo: zod_1.z
62
+ .string()
63
+ .max(100)
64
+ .optional()
65
+ .describe("Optional memo for the transaction"),
66
+ }),
67
+ requiresConfirmation: true,
68
+ simulate: async (agent, input) => {
69
+ const from = input.fromAccountId || agent.accountId.toString();
70
+ const warnings = [];
71
+ if (input.amount >= 1000000) {
72
+ warnings.push(`Large token transfer: ${input.amount.toLocaleString()} units. Please double-check.`);
73
+ }
74
+ return {
75
+ summary: `Transfer ${input.amount.toLocaleString()} of token ${input.tokenId} from ${from} to ${input.to}`,
76
+ estimatedFeeHbar: 0.001,
77
+ warnings,
78
+ };
79
+ },
80
+ handler: async (agent, input) => {
81
+ try {
82
+ const tokenId = sdk_1.TokenId.fromString(input.tokenId);
83
+ const recipient = sdk_1.AccountId.fromString(input.to);
84
+ const sender = input.fromAccountId
85
+ ? sdk_1.AccountId.fromString(input.fromAccountId)
86
+ : agent.accountId;
87
+ // ── Pre-flight: check if recipient has the token associated ──
88
+ try {
89
+ const recipientBalance = await new sdk_1.AccountBalanceQuery()
90
+ .setAccountId(recipient)
91
+ .execute(agent.client);
92
+ // If tokens map exists, check if our token is in it
93
+ if (recipientBalance.tokens) {
94
+ const balanceJson = recipientBalance.toJSON();
95
+ const hasToken = balanceJson.tokens.some((t) => t.tokenId === input.tokenId);
96
+ if (!hasToken) {
97
+ return {
98
+ ok: false,
99
+ error: "TOKEN_NOT_ASSOCIATED_TO_ACCOUNT",
100
+ details: `Account ${input.to} has not associated token ${input.tokenId}. The recipient must run ASSOCIATE_TOKEN first before they can receive this token.`,
101
+ };
102
+ }
103
+ }
104
+ }
105
+ catch {
106
+ // Balance query failed — proceed anyway and let the transfer
107
+ // return the real error from the network.
108
+ }
109
+ // ── Execute transfer ──
110
+ const tx = new sdk_1.TransferTransaction()
111
+ .addTokenTransfer(tokenId, sender, -input.amount)
112
+ .addTokenTransfer(tokenId, recipient, input.amount);
113
+ if (input.memo) {
114
+ tx.setTransactionMemo(input.memo);
115
+ }
116
+ const response = await tx.execute(agent.client);
117
+ const receipt = await response.getReceipt(agent.client);
118
+ if (receipt.status !== sdk_1.Status.Success) {
119
+ // Map specific receipt failures
120
+ const statusStr = receipt.status.toString();
121
+ if (statusStr.includes("TOKEN_NOT_ASSOCIATED_TO_ACCOUNT")) {
122
+ return {
123
+ ok: false,
124
+ error: "TOKEN_NOT_ASSOCIATED_TO_ACCOUNT",
125
+ details: `Account ${input.to} has not associated token ${input.tokenId}. Run ASSOCIATE_TOKEN for this account first.`,
126
+ };
127
+ }
128
+ return {
129
+ ok: false,
130
+ error: statusStr,
131
+ details: `Token transfer failed with status: ${statusStr}`,
132
+ };
133
+ }
134
+ const txId = response.transactionId.toString();
135
+ return {
136
+ ok: true,
137
+ summary: `Transferred ${input.amount.toLocaleString()} of token ${input.tokenId} to ${input.to}`,
138
+ txId,
139
+ receipt: {
140
+ status: receipt.status.toString(),
141
+ },
142
+ data: {
143
+ tokenId: input.tokenId,
144
+ from: sender.toString(),
145
+ to: input.to,
146
+ amount: input.amount,
147
+ memo: input.memo || null,
148
+ explorerUrl: agent.getExplorerUrl(txId),
149
+ },
150
+ };
151
+ }
152
+ catch (err) {
153
+ const message = err instanceof Error ? err.message : String(err);
154
+ // Catch the association error at the network/SDK level too
155
+ if (message.includes("TOKEN_NOT_ASSOCIATED_TO_ACCOUNT")) {
156
+ return {
157
+ ok: false,
158
+ error: "TOKEN_NOT_ASSOCIATED_TO_ACCOUNT",
159
+ details: `Account ${input.to} has not associated token ${input.tokenId}. Run ASSOCIATE_TOKEN for this account first.`,
160
+ };
161
+ }
162
+ const knownErrors = {
163
+ INSUFFICIENT_TOKEN_BALANCE: "The sender does not have enough of this token.",
164
+ INVALID_ACCOUNT_ID: "The account ID does not exist on this network.",
165
+ INVALID_TOKEN_ID: "The token ID does not exist on this network.",
166
+ INVALID_SIGNATURE: "Transaction signature is invalid. Check your private key.",
167
+ INSUFFICIENT_PAYER_BALANCE: "Not enough HBAR to cover the transaction fee.",
168
+ ACCOUNT_FROZEN_FOR_TOKEN: "This account is frozen for this token and cannot send or receive it.",
169
+ };
170
+ const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
171
+ return {
172
+ ok: false,
173
+ error: errorCode || "TRANSFER_TOKEN_FAILED",
174
+ details: errorCode ? knownErrors[errorCode] : message,
175
+ };
176
+ }
177
+ },
178
+ };
179
+ exports.default = transferTokenAction;
180
+ //# sourceMappingURL=transfer_token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer_token.js","sourceRoot":"","sources":["../../src/actions/transfer_token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Client, AccountId, PrivateKey } from "@hashgraph/sdk";
2
+ export declare class HederaAgentKit {
3
+ client: Client;
4
+ accountId: AccountId;
5
+ privateKey: PrivateKey;
6
+ network: "mainnet" | "testnet" | "previewnet";
7
+ constructor(accountId: string, privateKey: string, network: "mainnet" | "testnet" | "previewnet");
8
+ /**
9
+ * Returns the explorer URL for a transaction ID
10
+ */
11
+ getExplorerUrl(txId: string): string;
12
+ }
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE/D,qBAAa,cAAc;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;gBAGnD,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY;IAiB/C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAOrC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HederaAgentKit = void 0;
4
+ const sdk_1 = require("@hashgraph/sdk");
5
+ class HederaAgentKit {
6
+ constructor(accountId, privateKey, network) {
7
+ this.network = network;
8
+ this.accountId = sdk_1.AccountId.fromString(accountId);
9
+ this.privateKey = sdk_1.PrivateKey.fromString(privateKey);
10
+ if (network === "mainnet") {
11
+ this.client = sdk_1.Client.forMainnet();
12
+ }
13
+ else if (network === "previewnet") {
14
+ this.client = sdk_1.Client.forPreviewnet();
15
+ }
16
+ else {
17
+ this.client = sdk_1.Client.forTestnet();
18
+ }
19
+ this.client.setOperator(this.accountId, this.privateKey);
20
+ }
21
+ /**
22
+ * Returns the explorer URL for a transaction ID
23
+ */
24
+ getExplorerUrl(txId) {
25
+ const formattedTxId = txId.replace(/@/g, "-").replace(/\./g, "-");
26
+ const baseUrl = this.network === "mainnet"
27
+ ? "https://hashscan.io/mainnet/transaction/"
28
+ : "https://hashscan.io/testnet/transaction/";
29
+ return `${baseUrl}${formattedTxId}`;
30
+ }
31
+ }
32
+ exports.HederaAgentKit = HederaAgentKit;
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":";;;AAAA,wCAA+D;AAE/D,MAAa,cAAc;IAMzB,YACE,SAAiB,EACjB,UAAkB,EAClB,OAA6C;QAE7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,eAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,gBAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,YAAM,CAAC,UAAU,EAAE,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,GAAG,YAAM,CAAC,aAAa,EAAE,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,YAAM,CAAC,UAAU,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS;YACxC,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,0CAA0C,CAAC;QAC/C,OAAO,GAAG,OAAO,GAAG,aAAa,EAAE,CAAC;IACtC,CAAC;CACF;AApCD,wCAoCC"}
@@ -0,0 +1,5 @@
1
+ export { HederaAgentKit } from "./agent";
2
+ export { actions, getActionByName, findActionBySimile, } from "./actions";
3
+ export { getBalanceAction, hbarTransferAction, createTokenAction, associateTokenAction, transferTokenAction, mintTokenAction, burnTokenAction, createNftCollectionAction, mintNftAction, transferNftAction, burnNftAction, } from "./actions";
4
+ export type { Action, ActionResult, ActionSuccess, ActionFailure, ActionExample, SimulationResult, Handler, } from "./types/action";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,OAAO,EACL,OAAO,EACP,eAAe,EACf,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,aAAa,GACd,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,OAAO,GACR,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ // ── Dappily Agent Kit ──────────────────────────────────────────
3
+ // Solana Agent Kit-style actions for Hedera (HTS + NFTs).
4
+ // https://github.com/user/dappily-agent-kit
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.burnNftAction = exports.transferNftAction = exports.mintNftAction = exports.createNftCollectionAction = exports.burnTokenAction = exports.mintTokenAction = exports.transferTokenAction = exports.associateTokenAction = exports.createTokenAction = exports.hbarTransferAction = exports.getBalanceAction = exports.findActionBySimile = exports.getActionByName = exports.actions = exports.HederaAgentKit = void 0;
7
+ // Core
8
+ var agent_1 = require("./agent");
9
+ Object.defineProperty(exports, "HederaAgentKit", { enumerable: true, get: function () { return agent_1.HederaAgentKit; } });
10
+ // Actions — registry
11
+ var actions_1 = require("./actions");
12
+ Object.defineProperty(exports, "actions", { enumerable: true, get: function () { return actions_1.actions; } });
13
+ Object.defineProperty(exports, "getActionByName", { enumerable: true, get: function () { return actions_1.getActionByName; } });
14
+ Object.defineProperty(exports, "findActionBySimile", { enumerable: true, get: function () { return actions_1.findActionBySimile; } });
15
+ // Actions — named exports
16
+ var actions_2 = require("./actions");
17
+ Object.defineProperty(exports, "getBalanceAction", { enumerable: true, get: function () { return actions_2.getBalanceAction; } });
18
+ Object.defineProperty(exports, "hbarTransferAction", { enumerable: true, get: function () { return actions_2.hbarTransferAction; } });
19
+ Object.defineProperty(exports, "createTokenAction", { enumerable: true, get: function () { return actions_2.createTokenAction; } });
20
+ Object.defineProperty(exports, "associateTokenAction", { enumerable: true, get: function () { return actions_2.associateTokenAction; } });
21
+ Object.defineProperty(exports, "transferTokenAction", { enumerable: true, get: function () { return actions_2.transferTokenAction; } });
22
+ Object.defineProperty(exports, "mintTokenAction", { enumerable: true, get: function () { return actions_2.mintTokenAction; } });
23
+ Object.defineProperty(exports, "burnTokenAction", { enumerable: true, get: function () { return actions_2.burnTokenAction; } });
24
+ Object.defineProperty(exports, "createNftCollectionAction", { enumerable: true, get: function () { return actions_2.createNftCollectionAction; } });
25
+ Object.defineProperty(exports, "mintNftAction", { enumerable: true, get: function () { return actions_2.mintNftAction; } });
26
+ Object.defineProperty(exports, "transferNftAction", { enumerable: true, get: function () { return actions_2.transferNftAction; } });
27
+ Object.defineProperty(exports, "burnNftAction", { enumerable: true, get: function () { return actions_2.burnNftAction; } });
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,kEAAkE;AAClE,0DAA0D;AAC1D,4CAA4C;;;AAE5C,OAAO;AACP,iCAAyC;AAAhC,uGAAA,cAAc,OAAA;AAEvB,qBAAqB;AACrB,qCAImB;AAHjB,kGAAA,OAAO,OAAA;AACP,0GAAA,eAAe,OAAA;AACf,6GAAA,kBAAkB,OAAA;AAGpB,0BAA0B;AAC1B,qCAYmB;AAXjB,2GAAA,gBAAgB,OAAA;AAChB,6GAAA,kBAAkB,OAAA;AAClB,4GAAA,iBAAiB,OAAA;AACjB,+GAAA,oBAAoB,OAAA;AACpB,8GAAA,mBAAmB,OAAA;AACnB,0GAAA,eAAe,OAAA;AACf,0GAAA,eAAe,OAAA;AACf,oHAAA,yBAAyB,OAAA;AACzB,wGAAA,aAAa,OAAA;AACb,4GAAA,iBAAiB,OAAA;AACjB,wGAAA,aAAa,OAAA"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { HederaAgentKit } from "../agent";
3
+ export interface ActionSuccess {
4
+ ok: true;
5
+ summary: string;
6
+ txId?: string;
7
+ receipt?: {
8
+ status: string;
9
+ };
10
+ data: Record<string, any>;
11
+ }
12
+ export interface ActionFailure {
13
+ ok: false;
14
+ error: string;
15
+ details?: string;
16
+ }
17
+ export type ActionResult = ActionSuccess | ActionFailure;
18
+ export interface ActionExample {
19
+ input: Record<string, any>;
20
+ output: ActionResult;
21
+ explanation: string;
22
+ }
23
+ export type Handler = (agent: HederaAgentKit, input: any) => Promise<ActionResult>;
24
+ export interface SimulationResult {
25
+ summary: string;
26
+ estimatedFeeHbar?: number;
27
+ warnings?: string[];
28
+ }
29
+ export interface Action {
30
+ name: string;
31
+ similes: string[];
32
+ description: string;
33
+ examples: ActionExample[][];
34
+ schema: z.ZodTypeAny;
35
+ simulate?: (agent: HederaAgentKit, input: any) => Promise<SimulationResult>;
36
+ requiresConfirmation?: boolean;
37
+ handler: Handler;
38
+ }
39
+ //# sourceMappingURL=action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/types/action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,aAAa,CAAC;AAIzD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,OAAO,GAAG,CACpB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,GAAG,KACP,OAAO,CAAC,YAAY,CAAC,CAAC;AAE3B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/types/action.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "dappily-agent-kit",
3
+ "version": "0.1.0",
4
+ "description": "Solana Agent Kit-style actions for Hedera — HTS tokens, NFTs, transfers, and more.",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "LICENSE"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc -p tsconfig.build.json",
14
+ "test": "npx ts-node src/test.ts",
15
+ "test:integration": "npx ts-node src/integration_test.ts",
16
+ "prepublishOnly": "npm run build"
17
+ },
18
+ "keywords": [
19
+ "hedera",
20
+ "hts",
21
+ "nft",
22
+ "agent",
23
+ "ai",
24
+ "toolkit",
25
+ "web3",
26
+ "dappily",
27
+ "solana-agent-kit"
28
+ ],
29
+ "author": "Dappily <hello@dappily.io>",
30
+ "license": "MIT",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/dappily/dappily-agent-kit"
34
+ },
35
+ "dependencies": {
36
+ "@hashgraph/sdk": "^2.80.0",
37
+ "zod": "^3.25.76"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^20.19.33",
41
+ "ts-node": "^10.9.2",
42
+ "typescript": "^5.9.3"
43
+ },
44
+ "engines": {
45
+ "node": ">=18"
46
+ },
47
+ "peerDependencies": {
48
+ "@hashgraph/sdk": ">=2.50.0"
49
+ }
50
+ }