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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dappily
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# 🦞 Dappily Agent Kit
|
|
2
|
+
|
|
3
|
+
**Solana Agent Kit-style actions for Hedera — HTS tokens, NFTs, transfers, and more.**
|
|
4
|
+
|
|
5
|
+
Give any AI agent the ability to interact with the Hedera network. Inspired by [solana-agent-kit](https://github.com/sendaifun/solana-agent-kit).
|
|
6
|
+
|
|
7
|
+
## Proven on Testnet
|
|
8
|
+
|
|
9
|
+
Every action has been tested with real transactions on Hedera testnet — not just schema validation, but actual on-chain execution with verified receipts:
|
|
10
|
+
|
|
11
|
+
| Action | Testnet Proof |
|
|
12
|
+
|--------|---------------|
|
|
13
|
+
| GET_BALANCE | ✅ 999 ℏ queried |
|
|
14
|
+
| HBAR_TRANSFER | ✅ Receipt: SUCCESS |
|
|
15
|
+
| CREATE_TOKEN | ✅ Token `0.0.7932264` created |
|
|
16
|
+
| MINT_TOKEN | ✅ Supply 10000 → 15000 |
|
|
17
|
+
| BURN_TOKEN | ✅ Supply 15000 → 14000 |
|
|
18
|
+
| TRANSFER_TOKEN | ✅ 100 tokens moved |
|
|
19
|
+
| CREATE_NFT_COLLECTION | ✅ Collection `0.0.7932266` created |
|
|
20
|
+
| MINT_NFT | ✅ Serials [1, 2, 3] returned |
|
|
21
|
+
| BURN_NFT | ✅ Serial #3 destroyed |
|
|
22
|
+
|
|
23
|
+
## Quickstart
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install dappily-agent-kit @hashgraph/sdk
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { HederaAgentKit, getBalanceAction, createTokenAction } from "dappily-agent-kit";
|
|
31
|
+
|
|
32
|
+
// Initialize with your Hedera credentials
|
|
33
|
+
const agent = new HederaAgentKit(
|
|
34
|
+
"0.0.YOUR_ACCOUNT",
|
|
35
|
+
"YOUR_PRIVATE_KEY",
|
|
36
|
+
"testnet" // or "mainnet"
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
// Check balance
|
|
40
|
+
const balance = await getBalanceAction.handler(agent, {});
|
|
41
|
+
if (balance.ok) {
|
|
42
|
+
console.log(balance.data.hbarBalance); // "150.5 ℏ"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Create a token
|
|
46
|
+
const token = await createTokenAction.handler(agent, {
|
|
47
|
+
name: "My Token",
|
|
48
|
+
symbol: "MTK",
|
|
49
|
+
initialSupply: 1000000,
|
|
50
|
+
decimals: 2,
|
|
51
|
+
});
|
|
52
|
+
if (token.ok) {
|
|
53
|
+
console.log(token.data.tokenId); // "0.0.XXXXX"
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Actions
|
|
58
|
+
|
|
59
|
+
### Core
|
|
60
|
+
|
|
61
|
+
| Action | Input | Description |
|
|
62
|
+
|--------|-------|-------------|
|
|
63
|
+
| `GET_BALANCE` | `{ accountId?: string }` | Get HBAR + token balances. Defaults to agent's account. |
|
|
64
|
+
| `HBAR_TRANSFER` | `{ to, amount, memo? }` | Send HBAR to another account. |
|
|
65
|
+
|
|
66
|
+
### Fungible Tokens (HTS)
|
|
67
|
+
|
|
68
|
+
| Action | Input | Description |
|
|
69
|
+
|--------|-------|-------------|
|
|
70
|
+
| `CREATE_TOKEN` | `{ name, symbol, initialSupply, decimals?, memo? }` | Create a new fungible token. |
|
|
71
|
+
| `ASSOCIATE_TOKEN` | `{ tokenId, accountId?, accountPrivateKey? }` | Associate a token with an account. |
|
|
72
|
+
| `TRANSFER_TOKEN` | `{ tokenId, to, amount, memo? }` | Transfer fungible tokens. Pre-flight association check. |
|
|
73
|
+
| `MINT_TOKEN` | `{ tokenId, amount, supplyPrivateKey? }` | Mint additional supply. |
|
|
74
|
+
| `BURN_TOKEN` | `{ tokenId, amount, supplyPrivateKey? }` | Burn supply (irreversible). |
|
|
75
|
+
|
|
76
|
+
### NFTs (HTS)
|
|
77
|
+
|
|
78
|
+
| Action | Input | Description |
|
|
79
|
+
|--------|-------|-------------|
|
|
80
|
+
| `CREATE_NFT_COLLECTION` | `{ name, symbol, maxSupply?, memo? }` | Create an NFT collection. |
|
|
81
|
+
| `MINT_NFT` | `{ tokenId, metadata: string[], supplyPrivateKey? }` | Mint NFTs with base64 metadata. Returns serial numbers. |
|
|
82
|
+
| `TRANSFER_NFT` | `{ tokenId, serial, to, senderPrivateKey? }` | Transfer an NFT. Pre-flight association check. |
|
|
83
|
+
| `BURN_NFT` | `{ tokenId, serial, supplyPrivateKey? }` | Burn an NFT (irreversible). |
|
|
84
|
+
|
|
85
|
+
## Standardized Output
|
|
86
|
+
|
|
87
|
+
Every action returns the same shape:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
// Success
|
|
91
|
+
{
|
|
92
|
+
ok: true,
|
|
93
|
+
summary: "Sent 10 HBAR to 0.0.12345",
|
|
94
|
+
txId: "0.0.98765@1700000000.000000000",
|
|
95
|
+
receipt: { status: "SUCCESS" },
|
|
96
|
+
data: { /* action-specific */ }
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Failure
|
|
100
|
+
{
|
|
101
|
+
ok: false,
|
|
102
|
+
error: "INSUFFICIENT_PAYER_BALANCE",
|
|
103
|
+
details: "The sending account does not have enough HBAR."
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Error codes are mapped from Hedera's native codes to human-readable messages. Pre-flight checks (like association verification) prevent wasted transactions.
|
|
108
|
+
|
|
109
|
+
## Action Discovery
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import { actions, getActionByName, findActionBySimile } from "dappily-agent-kit";
|
|
113
|
+
|
|
114
|
+
// List all actions
|
|
115
|
+
actions.forEach(a => console.log(a.name, a.description));
|
|
116
|
+
|
|
117
|
+
// Lookup by name
|
|
118
|
+
const action = getActionByName("HBAR_TRANSFER");
|
|
119
|
+
|
|
120
|
+
// Fuzzy match (for AI agents)
|
|
121
|
+
const match = findActionBySimile("send some hbar");
|
|
122
|
+
// → hbarTransferAction
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Examples
|
|
126
|
+
|
|
127
|
+
See the [`examples/`](./examples) directory:
|
|
128
|
+
|
|
129
|
+
- **`balance.ts`** — Check account balance
|
|
130
|
+
- **`fungible-lifecycle.ts`** — Create → Mint → Transfer → Burn
|
|
131
|
+
- **`nft-lifecycle.ts`** — Create collection → Mint NFTs → Burn
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
OPERATOR_ID=0.0.XXXXX OPERATOR_KEY=302e... npx ts-node examples/balance.ts
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Security
|
|
138
|
+
|
|
139
|
+
⚠️ **Private keys in action inputs** are supported for development and testing. For production:
|
|
140
|
+
|
|
141
|
+
- Use environment variables or a vault for key storage
|
|
142
|
+
- Never log or persist private keys
|
|
143
|
+
- Plan to integrate wallet signing (HashPack / WalletConnect) for third-party accounts
|
|
144
|
+
- The `accountPrivateKey` and `supplyPrivateKey` fields will be replaced with a signing interface in a future version
|
|
145
|
+
|
|
146
|
+
## Architecture
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
dappily-agent-kit/
|
|
150
|
+
├── src/
|
|
151
|
+
│ ├── index.ts # Public API surface
|
|
152
|
+
│ ├── agent/index.ts # HederaAgentKit (client + operator)
|
|
153
|
+
│ ├── actions/
|
|
154
|
+
│ │ ├── index.ts # Registry + lookup helpers
|
|
155
|
+
│ │ ├── get_balance.ts # GET_BALANCE
|
|
156
|
+
│ │ ├── transfer.ts # HBAR_TRANSFER
|
|
157
|
+
│ │ ├── create_token.ts # CREATE_TOKEN
|
|
158
|
+
│ │ ├── associate_token.ts
|
|
159
|
+
│ │ ├── transfer_token.ts
|
|
160
|
+
│ │ ├── mint_token.ts
|
|
161
|
+
│ │ ├── burn_token.ts
|
|
162
|
+
│ │ ├── create_nft_collection.ts
|
|
163
|
+
│ │ ├── mint_nft.ts
|
|
164
|
+
│ │ ├── transfer_nft.ts
|
|
165
|
+
│ │ └── burn_nft.ts
|
|
166
|
+
│ └── types/action.ts # ActionResult, Action, etc.
|
|
167
|
+
├── examples/
|
|
168
|
+
│ ├── balance.ts
|
|
169
|
+
│ ├── fungible-lifecycle.ts
|
|
170
|
+
│ └── nft-lifecycle.ts
|
|
171
|
+
├── dist/ # Built output (CJS + types)
|
|
172
|
+
├── package.json
|
|
173
|
+
├── tsconfig.build.json
|
|
174
|
+
└── LICENSE
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Roadmap
|
|
178
|
+
|
|
179
|
+
- [ ] HCS (Hedera Consensus Service) — topic create/submit
|
|
180
|
+
- [ ] Mirror Node queries — token info, NFT metadata, transaction history
|
|
181
|
+
- [ ] Wallet signing interface (replace private key inputs)
|
|
182
|
+
- [ ] Smart contract deployment + invocation
|
|
183
|
+
- [ ] Scheduled transactions
|
|
184
|
+
- [ ] Multi-sig support
|
|
185
|
+
|
|
186
|
+
## License
|
|
187
|
+
|
|
188
|
+
MIT — see [LICENSE](./LICENSE).
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
Built by [Dappily](https://dappily.io) 🦞
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"associate_token.d.ts","sourceRoot":"","sources":["../../src/actions/associate_token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAQvD,QAAA,MAAM,oBAAoB,EAAE,MAyL3B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
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 associateTokenAction = {
|
|
6
|
+
name: "ASSOCIATE_TOKEN",
|
|
7
|
+
similes: [
|
|
8
|
+
"associate token",
|
|
9
|
+
"link token",
|
|
10
|
+
"add token",
|
|
11
|
+
"enable token",
|
|
12
|
+
"opt in token",
|
|
13
|
+
"connect token",
|
|
14
|
+
],
|
|
15
|
+
description: "Associate a token with a Hedera account so it can receive that token. On Hedera, accounts must explicitly opt-in to receive tokens. If no accountId is provided, associates with the agent's operator account. For third-party accounts, a private key is required (short-term; wallet signing planned).",
|
|
16
|
+
examples: [
|
|
17
|
+
[
|
|
18
|
+
{
|
|
19
|
+
input: {
|
|
20
|
+
tokenId: "0.0.99999",
|
|
21
|
+
},
|
|
22
|
+
output: {
|
|
23
|
+
ok: true,
|
|
24
|
+
summary: "Associated token 0.0.99999 with account 0.0.12345",
|
|
25
|
+
txId: "0.0.12345@1700000000.000000000",
|
|
26
|
+
receipt: { status: "SUCCESS" },
|
|
27
|
+
data: {
|
|
28
|
+
tokenId: "0.0.99999",
|
|
29
|
+
accountId: "0.0.12345",
|
|
30
|
+
explorerUrl: "https://hashscan.io/testnet/transaction/...",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
explanation: "Associate a token with the agent's own account",
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
[
|
|
37
|
+
{
|
|
38
|
+
input: {
|
|
39
|
+
tokenId: "0.0.99999",
|
|
40
|
+
accountId: "0.0.54321",
|
|
41
|
+
accountPrivateKey: "302e020100300506...hex...",
|
|
42
|
+
},
|
|
43
|
+
output: {
|
|
44
|
+
ok: true,
|
|
45
|
+
summary: "Associated token 0.0.99999 with account 0.0.54321",
|
|
46
|
+
txId: "0.0.12345@1700000000.000000000",
|
|
47
|
+
receipt: { status: "SUCCESS" },
|
|
48
|
+
data: {
|
|
49
|
+
tokenId: "0.0.99999",
|
|
50
|
+
accountId: "0.0.54321",
|
|
51
|
+
explorerUrl: "https://hashscan.io/testnet/transaction/...",
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
explanation: "Associate a token with a third-party account using their private key",
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
],
|
|
58
|
+
schema: zod_1.z.object({
|
|
59
|
+
tokenId: zod_1.z
|
|
60
|
+
.string()
|
|
61
|
+
.regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Token ID format (must be 0.0.X)")
|
|
62
|
+
.describe("The token ID to associate (e.g. 0.0.99999)"),
|
|
63
|
+
accountId: zod_1.z
|
|
64
|
+
.string()
|
|
65
|
+
.regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Account ID format (must be 0.0.X)")
|
|
66
|
+
.optional()
|
|
67
|
+
.describe("The account to associate the token with. Defaults to the agent's operator account."),
|
|
68
|
+
accountPrivateKey: zod_1.z
|
|
69
|
+
.string()
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("⚠️ Private key of the target account (required for third-party accounts). Will be replaced by wallet signing in a future version."),
|
|
72
|
+
}),
|
|
73
|
+
requiresConfirmation: true,
|
|
74
|
+
simulate: async (agent, input) => {
|
|
75
|
+
const targetAccount = input.accountId || agent.accountId.toString();
|
|
76
|
+
const isThirdParty = input.accountId && input.accountId !== agent.accountId.toString();
|
|
77
|
+
const warnings = [];
|
|
78
|
+
if (isThirdParty && !input.accountPrivateKey) {
|
|
79
|
+
warnings.push("Third-party account requires a private key. The transaction will fail without it.");
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
summary: `Associate token ${input.tokenId} with account ${targetAccount}`,
|
|
83
|
+
estimatedFeeHbar: 0.05,
|
|
84
|
+
warnings,
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
handler: async (agent, input) => {
|
|
88
|
+
try {
|
|
89
|
+
const targetAccountId = input.accountId
|
|
90
|
+
? sdk_1.AccountId.fromString(input.accountId)
|
|
91
|
+
: agent.accountId;
|
|
92
|
+
const isThirdParty = input.accountId &&
|
|
93
|
+
input.accountId !== agent.accountId.toString();
|
|
94
|
+
// If third-party account but no key provided, fail early with guidance
|
|
95
|
+
if (isThirdParty && !input.accountPrivateKey) {
|
|
96
|
+
return {
|
|
97
|
+
ok: false,
|
|
98
|
+
error: "SIGNATURE_REQUIRED",
|
|
99
|
+
details: `Account ${input.accountId} is not the agent's operator. Provide 'accountPrivateKey' or have the account owner sign via a wallet.`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const tx = new sdk_1.TokenAssociateTransaction()
|
|
103
|
+
.setAccountId(targetAccountId)
|
|
104
|
+
.setTokenIds([input.tokenId]);
|
|
105
|
+
// Freeze the transaction before signing
|
|
106
|
+
const frozenTx = await tx.freezeWith(agent.client);
|
|
107
|
+
// Sign with the target account's key
|
|
108
|
+
if (isThirdParty && input.accountPrivateKey) {
|
|
109
|
+
const thirdPartyKey = sdk_1.PrivateKey.fromString(input.accountPrivateKey);
|
|
110
|
+
await frozenTx.sign(thirdPartyKey);
|
|
111
|
+
}
|
|
112
|
+
const response = await frozenTx.execute(agent.client);
|
|
113
|
+
const receipt = await response.getReceipt(agent.client);
|
|
114
|
+
if (receipt.status !== sdk_1.Status.Success) {
|
|
115
|
+
return {
|
|
116
|
+
ok: false,
|
|
117
|
+
error: receipt.status.toString(),
|
|
118
|
+
details: `Token association failed with status: ${receipt.status.toString()}`,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const txId = response.transactionId.toString();
|
|
122
|
+
return {
|
|
123
|
+
ok: true,
|
|
124
|
+
summary: `Associated token ${input.tokenId} with account ${targetAccountId.toString()}`,
|
|
125
|
+
txId,
|
|
126
|
+
receipt: {
|
|
127
|
+
status: receipt.status.toString(),
|
|
128
|
+
},
|
|
129
|
+
data: {
|
|
130
|
+
tokenId: input.tokenId,
|
|
131
|
+
accountId: targetAccountId.toString(),
|
|
132
|
+
explorerUrl: agent.getExplorerUrl(txId),
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
138
|
+
const knownErrors = {
|
|
139
|
+
TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT: "This token is already associated with this account.",
|
|
140
|
+
INVALID_ACCOUNT_ID: "The account ID does not exist on this network.",
|
|
141
|
+
INVALID_TOKEN_ID: "The token ID does not exist on this network.",
|
|
142
|
+
TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED: "This account has reached its maximum token association limit.",
|
|
143
|
+
INVALID_SIGNATURE: "Transaction signature is invalid. Check the private key provided.",
|
|
144
|
+
INSUFFICIENT_PAYER_BALANCE: "Not enough HBAR to cover the transaction fee.",
|
|
145
|
+
};
|
|
146
|
+
const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
|
|
147
|
+
return {
|
|
148
|
+
ok: false,
|
|
149
|
+
error: errorCode || "ASSOCIATE_TOKEN_FAILED",
|
|
150
|
+
details: errorCode ? knownErrors[errorCode] : message,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
exports.default = associateTokenAction;
|
|
156
|
+
//# sourceMappingURL=associate_token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"associate_token.js","sourceRoot":"","sources":["../../src/actions/associate_token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"burn_nft.d.ts","sourceRoot":"","sources":["../../src/actions/burn_nft.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAOvD,QAAA,MAAM,aAAa,EAAE,MAuIpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
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 burnNftAction = {
|
|
6
|
+
name: "BURN_NFT",
|
|
7
|
+
similes: [
|
|
8
|
+
"burn nft",
|
|
9
|
+
"destroy nft",
|
|
10
|
+
"delete nft",
|
|
11
|
+
"remove nft",
|
|
12
|
+
"nft burn",
|
|
13
|
+
],
|
|
14
|
+
description: "Permanently burn an NFT by serial number from the treasury account. This is irreversible. The collection must have a supply key. The NFT must be owned by the treasury.",
|
|
15
|
+
examples: [
|
|
16
|
+
[
|
|
17
|
+
{
|
|
18
|
+
input: {
|
|
19
|
+
tokenId: "0.0.88888",
|
|
20
|
+
serial: 3,
|
|
21
|
+
},
|
|
22
|
+
output: {
|
|
23
|
+
ok: true,
|
|
24
|
+
summary: "Burned NFT 0.0.88888 #3",
|
|
25
|
+
txId: "0.0.12345@1700000000.000000000",
|
|
26
|
+
receipt: { status: "SUCCESS" },
|
|
27
|
+
data: {
|
|
28
|
+
tokenId: "0.0.88888",
|
|
29
|
+
serial: 3,
|
|
30
|
+
explorerUrl: "https://hashscan.io/testnet/transaction/...",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
explanation: "Permanently burn NFT serial #3 from the treasury",
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
],
|
|
37
|
+
schema: zod_1.z.object({
|
|
38
|
+
tokenId: zod_1.z
|
|
39
|
+
.string()
|
|
40
|
+
.regex(/^\d+\.\d+\.\d+$/, "Invalid Hedera Token ID format (must be 0.0.X)")
|
|
41
|
+
.describe("The NFT collection token ID"),
|
|
42
|
+
serial: zod_1.z
|
|
43
|
+
.number()
|
|
44
|
+
.int()
|
|
45
|
+
.positive()
|
|
46
|
+
.describe("The serial number of the NFT to burn"),
|
|
47
|
+
memo: zod_1.z
|
|
48
|
+
.string()
|
|
49
|
+
.max(100)
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Optional transaction memo"),
|
|
52
|
+
supplyPrivateKey: zod_1.z
|
|
53
|
+
.string()
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("⚠️ Supply key (only if different from operator key)"),
|
|
56
|
+
}),
|
|
57
|
+
requiresConfirmation: true,
|
|
58
|
+
simulate: async (_agent, input) => {
|
|
59
|
+
return {
|
|
60
|
+
summary: `Burn NFT ${input.tokenId} #${input.serial}`,
|
|
61
|
+
estimatedFeeHbar: 0.001,
|
|
62
|
+
warnings: [
|
|
63
|
+
"⚠️ NFT burns are irreversible. This serial number will be permanently destroyed.",
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
handler: async (agent, input) => {
|
|
68
|
+
try {
|
|
69
|
+
const tx = new sdk_1.TokenBurnTransaction()
|
|
70
|
+
.setTokenId(input.tokenId)
|
|
71
|
+
.setSerials([input.serial]);
|
|
72
|
+
if (input.memo) {
|
|
73
|
+
tx.setTransactionMemo(input.memo);
|
|
74
|
+
}
|
|
75
|
+
const frozenTx = await tx.freezeWith(agent.client);
|
|
76
|
+
if (input.supplyPrivateKey) {
|
|
77
|
+
const supplyKey = sdk_1.PrivateKey.fromString(input.supplyPrivateKey);
|
|
78
|
+
await frozenTx.sign(supplyKey);
|
|
79
|
+
}
|
|
80
|
+
const response = await frozenTx.execute(agent.client);
|
|
81
|
+
const receipt = await response.getReceipt(agent.client);
|
|
82
|
+
if (receipt.status !== sdk_1.Status.Success) {
|
|
83
|
+
return {
|
|
84
|
+
ok: false,
|
|
85
|
+
error: receipt.status.toString(),
|
|
86
|
+
details: `NFT burn failed with status: ${receipt.status.toString()}`,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const txId = response.transactionId.toString();
|
|
90
|
+
return {
|
|
91
|
+
ok: true,
|
|
92
|
+
summary: `Burned NFT ${input.tokenId} #${input.serial}`,
|
|
93
|
+
txId,
|
|
94
|
+
receipt: { status: receipt.status.toString() },
|
|
95
|
+
data: {
|
|
96
|
+
tokenId: input.tokenId,
|
|
97
|
+
serial: input.serial,
|
|
98
|
+
explorerUrl: agent.getExplorerUrl(txId),
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
104
|
+
const knownErrors = {
|
|
105
|
+
TOKEN_HAS_NO_SUPPLY_KEY: "This collection has no supply key. Burning is permanently disabled.",
|
|
106
|
+
INVALID_SIGNATURE: "Transaction signature is invalid. The supply key doesn't match.",
|
|
107
|
+
INVALID_TOKEN_ID: "The token ID does not exist on this network.",
|
|
108
|
+
INVALID_NFT_ID: "The specified NFT serial does not exist in this collection.",
|
|
109
|
+
SENDER_DOES_NOT_OWN_NFT_SERIAL_NO: "The treasury does not own this NFT serial. Only treasury-held NFTs can be burned.",
|
|
110
|
+
TOKEN_WAS_DELETED: "This collection has been deleted.",
|
|
111
|
+
INSUFFICIENT_PAYER_BALANCE: "Not enough HBAR to cover the transaction fee.",
|
|
112
|
+
};
|
|
113
|
+
const errorCode = Object.keys(knownErrors).find((code) => message.includes(code));
|
|
114
|
+
return {
|
|
115
|
+
ok: false,
|
|
116
|
+
error: errorCode || "BURN_NFT_FAILED",
|
|
117
|
+
details: errorCode ? knownErrors[errorCode] : message,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
exports.default = burnNftAction;
|
|
123
|
+
//# sourceMappingURL=burn_nft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"burn_nft.js","sourceRoot":"","sources":["../../src/actions/burn_nft.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"burn_token.d.ts","sourceRoot":"","sources":["../../src/actions/burn_token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAOvD,QAAA,MAAM,eAAe,EAAE,MAqKtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|