Skip to content

Commit e0e3229

Browse files
committed
🔧 fix(example): update dependencies and improve chat functionality
Changes: - Added `nedb` dependency to `package.json` for local data storage. - Updated chat model in the API route to use `deepseek-r1-distill-llama-70b`. - Enhanced error handling in the `ChatWindow` component for better user feedback. - Modified the `get_all_tools` utility to include email validation in the schema for wallet claims. - Improved user share data handling in the chat API, including saving and deleting user share data.
1 parent a54c44e commit e0e3229

File tree

8 files changed

+287
-24
lines changed

8 files changed

+287
-24
lines changed

‎examples/para-plugin-example/app/api/chat/route.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { NextRequest } from "next/server";
22
import { Message,LanguageModelV1,streamText,tool } from "ai";
33
import { createGroq } from "@ai-sdk/groq";
4+
// import { createOpenAI } from "@ai-sdk/openai";
45
import { createVercelAITools } from "solana-agent-kit";
56
import { solanaAgentWithPara } from "@/utils/init_server";
67
import {listParaToolsWeb} from "@/utils/get_all_tools"
@@ -9,7 +10,10 @@ const groq = createGroq({
910
baseURL: "https://api.groq.com/openai/v1",
1011
apiKey: process.env.GROQ_API_KEY,
1112
});
12-
13+
// const openai = createOpenAI({
14+
// baseURL: "https://generativelanguage.googleapis.com/v1beta/openai/",
15+
// apiKey: process.env.OPENAI_API_KEY,
16+
// });
1317
export async function POST(req: NextRequest) {
1418
try {
1519
const { messages } = await req.json() as { messages: Message[] };
@@ -22,7 +26,7 @@ export async function POST(req: NextRequest) {
2226
...webTools
2327
}
2428
const result = await streamText({
25-
model: groq("qwen-qwq-32b") as LanguageModelV1,
29+
model: groq("deepseek-r1-distill-llama-70b") as LanguageModelV1,
2630
tools:tools as any,
2731
system: `
2832
You are a helpful agent that can interact onchain using the Solana Agent Kit. You are
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import Datastore from 'nedb';
2+
3+
// Create an in-memory database instance
4+
const db = new Datastore({ inMemoryOnly: true });
5+
6+
export default db;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
import { NextResponse } from 'next/server';
2+
import db from './db';
3+
4+
// POST /api/usershare - Save user share data
5+
export async function POST(request: Request) {
6+
try {
7+
const body = await request.json();
8+
const { email, userShare } = body;
9+
10+
if (!email || !userShare) {
11+
return NextResponse.json(
12+
{ error: 'Email and userShare are required' },
13+
{ status: 400 }
14+
);
15+
}
16+
17+
// Insert the data into the database
18+
db.insert({ email, userShare }, (err, newDoc) => {
19+
if (err) {
20+
return NextResponse.json(
21+
{ error: 'Failed to save data' },
22+
{ status: 500 }
23+
);
24+
}
25+
});
26+
27+
return NextResponse.json({ message: 'Data saved successfully' });
28+
} catch (error) {
29+
return NextResponse.json(
30+
{ error: 'Internal server error' },
31+
{ status: 500 }
32+
);
33+
}
34+
}
35+
36+
// GET /api/usershare?email=xxx - Get user share data by email
37+
export async function GET(request: Request) {
38+
try {
39+
const { searchParams } = new URL(request.url);
40+
const email = searchParams.get('email');
41+
42+
if (!email) {
43+
return NextResponse.json(
44+
{ error: 'Email parameter is required' },
45+
{ status: 400 }
46+
);
47+
}
48+
49+
return new Promise((resolve) => {
50+
db.findOne({ email }, (err, doc) => {
51+
if (err) {
52+
resolve(NextResponse.json(
53+
{ error: 'Failed to retrieve data' },
54+
{ status: 500 }
55+
));
56+
return;
57+
}
58+
59+
if (!doc) {
60+
resolve(NextResponse.json(
61+
{ error: 'No data found for this email' },
62+
{ status: 404 }
63+
));
64+
return;
65+
}
66+
67+
resolve(NextResponse.json(doc));
68+
});
69+
});
70+
} catch (error) {
71+
return NextResponse.json(
72+
{ error: 'Internal server error' },
73+
{ status: 500 }
74+
);
75+
}
76+
}
77+
78+
// DELETE /api/usershare?email=xxx - Delete user share data by email
79+
export async function DELETE(request: Request) {
80+
try {
81+
const { searchParams } = new URL(request.url);
82+
const email = searchParams.get('email');
83+
84+
if (!email) {
85+
return NextResponse.json(
86+
{ error: 'Email parameter is required' },
87+
{ status: 400 }
88+
);
89+
}
90+
91+
return new Promise((resolve) => {
92+
db.remove({ email }, {}, (err, numRemoved) => {
93+
if (err) {
94+
resolve(NextResponse.json(
95+
{ error: 'Failed to delete data' },
96+
{ status: 500 }
97+
));
98+
return;
99+
}
100+
101+
if (numRemoved === 0) {
102+
resolve(NextResponse.json(
103+
{ error: 'No data found for this email' },
104+
{ status: 404 }
105+
));
106+
return;
107+
}
108+
109+
resolve(NextResponse.json({ message: 'Data deleted successfully' }));
110+
});
111+
});
112+
} catch (error) {
113+
return NextResponse.json(
114+
{ error: 'Internal server error' },
115+
{ status: 500 }
116+
);
117+
}
118+
}

‎examples/para-plugin-example/app/page.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export default function ChatbotPage() {
7272
<li className="text-l">
7373
💡
7474
<span className="ml-2">
75-
Try asking e.g. <code>create pregen wallet with this email [email protected]</code> or <code>claim pregen wallet</code>
75+
Try asking e.g. <code>create pregen wallet with this email [email protected]</code> or <code>claim pregen wallet with email [email protected]</code>
7676
</span>
7777
</li>
7878
</ul>

‎examples/para-plugin-example/components/ChatWindow.tsx

+96-20
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,15 @@ export const ChatWindow: FC<ChatWindowProps> = ({
7676
const { messages: chatMessages, input, handleInputChange, handleSubmit, isLoading } = useChat({
7777
api: endpoint,
7878
onError: (error) => {
79-
let errorMessage = "An error occurred while processing your request.";
80-
try {
81-
const parsedError = JSON.parse(error.message);
82-
errorMessage = parsedError.error || error.message;
83-
} catch {
84-
errorMessage = error.message;
85-
}
86-
toast.error(errorMessage);
79+
// let errorMessage = "An error occurred while processing your request.";
80+
console.log(error);
81+
// try {
82+
// const parsedError = JSON.parse(error.message);
83+
// errorMessage = parsedError.error || error.message;
84+
// } catch {
85+
// errorMessage = error.message;
86+
// }
87+
toast.error(error.message as any);
8788
},
8889
onResponse: (response) => {
8990
if (!response.ok) {
@@ -132,24 +133,99 @@ export const ChatWindow: FC<ChatWindowProps> = ({
132133
};
133134
}
134135
}
136+
if (invocation.toolName === '0') {
137+
// console.log(invocation.result)
138+
try {
139+
// Save user share data to our API
140+
const response = await fetch('/api/usershare', {
141+
method: 'POST',
142+
headers: {
143+
'Content-Type': 'application/json',
144+
},
145+
body: JSON.stringify({
146+
email: invocation.result?.email,
147+
userShare: invocation.result?.userShare
148+
})
149+
});
150+
151+
if (!response.ok) {
152+
throw new Error('Failed to save user share data');
153+
}
154+
155+
return {
156+
...invocation,
157+
result: {
158+
status: 'success',
159+
...invocation.result
160+
}
161+
};
162+
} catch (error) {
163+
console.error('Error saving user share data:', error);
164+
return {
165+
...invocation,
166+
result: {
167+
status: 'error',
168+
message: (error as Error).message,
169+
...invocation.result
170+
}
171+
};
172+
}
173+
}
135174
//
136175
if (invocation.toolName === 'CLAIM_PARA_PREGEN_WALLET') {
176+
// const userShare="eyJjcmVhdGVkQXQiOiIyMDI1LTAzLTE4VDAyOjIwOjMwLjE5NloiLCJ1cGRhdGVkQXQiOiIyMDI1LTAzLTE4VDAyOjIwOjMyLjc5N1oiLCJpZCI6IjU5OWMyZWU2LWExZDgtNDZlYy1hY2ZjLTBlM2FkZjcyNWU5OSIsInVzZXJJZCI6bnVsbCwibmFtZSI6bnVsbCwia2V5R2VuQ29tcGxldGUiOnRydWUsImFkZHJlc3MiOiJETnhKS1pIckFSdmU1aFl5U3U1dGU4RlZxQmkyVlZ6UXJ3ZE5GUDZCbnNIZiIsImFkZHJlc3NTZWNvbmRhcnkiOm51bGwsInB1YmxpY0tleSI6IiIsImNvc21vc1ByZWZpeCI6bnVsbCwic2NoZW1lIjoiRUQyNTUxOSIsImlzUHJlZ2VuIjp0cnVlLCJ0eXBlIjoiU09MQU5BIiwicHJlZ2VuSWRlbnRpZmllciI6InBvbmNpQHRlc3QuZ2V0cGFyYS5jb20iLCJwcmVnZW5JZGVudGlmaWVyVHlwZSI6IkVNQUlMIiwicGFydG5lcklkIjoiOGY2MTE2MDktZDFjNS00YmU3LTlhMTUtMjE2NjQ5ZDk4M2ExIiwiY3VzdG9tQXV0aElkSWQiOm51bGwsImxhc3RVc2VkQXQiOm51bGwsImxhc3RVc2VkUGFydG5lcklkIjpudWxsLCJoYXNCZWVuVXNlZENyb3NzUGFydG5lciI6ZmFsc2UsInBhcnRuZXIiOnsiY3JlYXRlZEF0IjoiMjAyNS0wMS0yNFQxMzoxNTo1Ni40MDJaIiwidXBkYXRlZEF0IjoiMjAyNS0wMi0yNlQwNzo1NDo0NS4xODBaIiwiaWQiOiI4ZjYxMTYwOS1kMWM1LTRiZTctOWExNS0yMTY2NDlkOTgzYTEiLCJuYW1lIjoic29sYW5hIiwib3JnYW5pemF0aW9uSWQiOiJkZjVhN2Q2YS1jMDk1LTQyMDYtYWE1ZS05Mjc2ZjA2YjhkOWMiLCJwcm9qZWN0SWQiOiIxODFiZjg5OS1kZTE2LTQ3OWYtYjk4Mi1hZjQ1MWE0YTI1NGMiLCJkaXNwbGF5TmFtZSI6InNvbGFuYSIsImJhbm5lckltYWdlVXJsIjpudWxsLCJ2ZXJpZnlVcmwiOm51bGwsInBvcnRhbFVybCI6bnVsbCwiaG9tZXBhZ2VVcmwiOiJodHRwczovL21hbnRsZS51cmF0bWFuZ3VuLm92aCIsInBvcnRhbEhlYWRlckxvZ29VcmwiOm51bGwsImFwaUtleSI6IjUwMDZlMGMwZGU5MjhjYjA1MzA1ZDEyNDk0Yjc1ZmI0IiwicG9saWNpZXNFbmFibGVkIjpmYWxzZSwib3JpZ2lucyI6bnVsbCwibWl4cGFuZWxUb2tlbiI6bnVsbCwibG9nb1VybCI6bnVsbCwiZW1haWxCYWNrdXBLaXQiOmZhbHNlLCJlbWFpbFdlbGNvbWUiOnRydWUsImVtYWlsSW1hZ2VVcmwiOm51bGwsImVtYWlsSW1hZ2VMaW5rIjpudWxsLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsImZvcmVncm91bmRDb2xvciI6bnVsbCwiZm9udCI6bnVsbCwidHdpdHRlclVybCI6bnVsbCwiZ2l0aHViVXJsIjpudWxsLCJsaW5rZWRpblVybCI6bnVsbCwiYXJjaGl2ZWQiOmZhbHNlLCJpc1VzZWQiOnRydWUsImlzSW5zdGFsbGVkIjp0cnVlLCJzdXBwb3J0ZWRXYWxsZXRUeXBlcyI6W3sidHlwZSI6IlNPTEFOQSIsIm9wdGlvbmFsIjpmYWxzZX0seyJ0eXBlIjoiRVZNIiwib3B0aW9uYWwiOmZhbHNlfV0sImNvc21vc1ByZWZpeCI6ImNvc21vcyIsImlzV2l0aGRyYXdFbmFibGVkIjp0cnVlLCJpc0J1eUVuYWJsZWQiOnRydWUsImlzUmVjZWl2ZUVuYWJsZWQiOnRydWUsIm9uUmFtcFByb3ZpZGVycyI6WyJTVFJJUEUiLCJNT09OUEFZIl0sIm9uUmFtcEFzc2V0cyI6bnVsbCwidGVhbUlkIjpudWxsLCJidW5kbGVJZGVudGlmaWVyIjpudWxsLCJhbmRyb2lkUGFja2FnZU5hbWUiOm51bGwsImFuZHJvaWRTaGEyNTZDZXJ0RmluZ2VycHJpbnRzIjpudWxsLCJhY2NlbnRDb2xvciI6bnVsbCwidGhlbWVNb2RlIjoiTElHSFQiLCJzdXBwb3J0ZWRBdXRoTWV0aG9kcyI6WyJQQVNTS0VZIl0sImljb25VcmwiOm51bGwsInJhbXBBcGlLZXkiOm51bGwsImRlZmF1bHRPblJhbXBBc3NldCI6bnVsbCwiZGVmYXVsdE9uUmFtcE5ldHdvcmsiOm51bGwsImRlZmF1bHRCdXlBbW91bnQiOm51bGwsImRlZmF1bHRCdXlBbW91bnRDdXJyZW5jeSI6bnVsbCwiZGVmYXVsdFNlbGxBbW91bnQiOm51bGwsImRlZmF1bHRTZWxsQW1vdW50Q3VycmVuY3kiOm51bGwsImZvcmNlVHJhbnNhY3Rpb25Qb3B1cHMiOmZhbHNlLCJ0cmFuc2FjdGlvblBvcHVwc0VuYWJsZWQiOmZhbHNlfSwibGFzdFVzZWRQYXJ0bmVyIjpudWxsLCJzaWduZXIiOiJleUpKWkNJNklqRWlMQ0pQZEdobGNrbGtJam9pTWlJc0lrOTFkSEIxZENJNmV5SlFkV0pzYVdNaU9uc2lkQ0k2TVN3aVozSnZkWEJyWlhraU9pSjZTR1ZQTTFOeVIzZHlZVTFOTmpSQ1F5OXJUREZUZGxsbE4zaGhTRUZEYjNkQ1pHdEZWMDFCVVRGUlBTSXNJbk5vWVhKbGN5STZleUl4SWpvaVZITXllbVZGVEZkcVFXbzRWRlJ1Wm1sV09IYzRZMWcyT1VzdlpqWkROVWhQUXpWQlkyRnRiRlJxWnowaUxDSXlJam9pUkdoM1JrZzROM05US3poeFdWRkpUSGd3VVVoMUt6ZFRUMWx3YzJ3cmVXMHJTbFZtSzJ4TE0zbFRPRDBpZlgwc0lsTmxZM0psZEV0bGVTSTZleUpwWkNJNk1Td2ljMlZqY21WMElqb2libGNyTDNaSk9FazVPWEZDYkZKMWJXZ3dhMlZXWnpkalR6Z3pXV3g0Y3paeldEQkVXRzVTVmpCQll6MGlmWDBzSWxkaGJHeGxkRWxrSWpvaU5UazVZekpsWlRZdFlURmtPQzAwTm1WakxXRmpabU10TUdVellXUm1OekkxWlRrNUlpd2lTRzl6ZENJNkluZHpjem92TDIxd1l5MXVaWFIzYjNKckxtSmxkR0V1WjJWMGNHRnlZUzVqYjIwaWZRPT0ifQ==";
177+
178+
// const claim=await solanaAgentWithPara.methods.claimParaPregenWallet(userShare,"")
179+
180+
// return {
181+
// ...invocation,
182+
// result: { status: 'success', ...claim }
183+
// };
137184
try {
138-
const response=await solanaAgentWithPara.methods.claimParaPregenWallet();
139-
140-
return {
141-
...invocation,
142-
result: { status: 'success', ...response }
143-
};
185+
// Save user share data to our API
186+
const response = await fetch('/api/usershare?email='+invocation.args?.email, {
187+
method: 'GET',
188+
headers: {
189+
'Content-Type': 'application/json',
190+
},
191+
});
192+
193+
194+
if (!response.ok) {
195+
throw new Error('Failed to get user share data');
196+
}
197+
const data = await response.json();
198+
// const userShare="eyJjcmVhdGVkQXQiOiIyMDI1LTAzLTE4VDAyOjE0OjIyLjI0M1oiLCJ1cGRhdGVkQXQiOiIyMDI1LTAzLTE4VDAyOjE0OjI1LjI4MFoiLCJpZCI6ImQ5Nzg4MWUxLTA0ZTQtNGJhYS04MjYyLTc1NDdmYjVhZTU2MCIsInVzZXJJZCI6bnVsbCwibmFtZSI6bnVsbCwia2V5R2VuQ29tcGxldGUiOnRydWUsImFkZHJlc3MiOiI5VzU1Q29jU3RQb0xqMXppN3JZWXdtaTNFSHY1QTkzTWNiQXpidWc3U0c2NiIsImFkZHJlc3NTZWNvbmRhcnkiOm51bGwsInB1YmxpY0tleSI6IiIsImNvc21vc1ByZWZpeCI6bnVsbCwic2NoZW1lIjoiRUQyNTUxOSIsImlzUHJlZ2VuIjp0cnVlLCJ0eXBlIjoiU09MQU5BIiwicHJlZ2VuSWRlbnRpZmllciI6InBvbmNpQHRlc3QuZ2V0cGFyYS5jb20iLCJwcmVnZW5JZGVudGlmaWVyVHlwZSI6IkVNQUlMIiwicGFydG5lcklkIjoiOGY2MTE2MDktZDFjNS00YmU3LTlhMTUtMjE2NjQ5ZDk4M2ExIiwiY3VzdG9tQXV0aElkSWQiOm51bGwsImxhc3RVc2VkQXQiOm51bGwsImxhc3RVc2VkUGFydG5lcklkIjpudWxsLCJoYXNCZWVuVXNlZENyb3NzUGFydG5lciI6ZmFsc2UsInBhcnRuZXIiOnsiY3JlYXRlZEF0IjoiMjAyNS0wMS0yNFQxMzoxNTo1Ni40MDJaIiwidXBkYXRlZEF0IjoiMjAyNS0wMi0yNlQwNzo1NDo0NS4xODBaIiwiaWQiOiI4ZjYxMTYwOS1kMWM1LTRiZTctOWExNS0yMTY2NDlkOTgzYTEiLCJuYW1lIjoic29sYW5hIiwib3JnYW5pemF0aW9uSWQiOiJkZjVhN2Q2YS1jMDk1LTQyMDYtYWE1ZS05Mjc2ZjA2YjhkOWMiLCJwcm9qZWN0SWQiOiIxODFiZjg5OS1kZTE2LTQ3OWYtYjk4Mi1hZjQ1MWE0YTI1NGMiLCJkaXNwbGF5TmFtZSI6InNvbGFuYSIsImJhbm5lckltYWdlVXJsIjpudWxsLCJ2ZXJpZnlVcmwiOm51bGwsInBvcnRhbFVybCI6bnVsbCwiaG9tZXBhZ2VVcmwiOiJodHRwczovL21hbnRsZS51cmF0bWFuZ3VuLm92aCIsInBvcnRhbEhlYWRlckxvZ29VcmwiOm51bGwsImFwaUtleSI6IjUwMDZlMGMwZGU5MjhjYjA1MzA1ZDEyNDk0Yjc1ZmI0IiwicG9saWNpZXNFbmFibGVkIjpmYWxzZSwib3JpZ2lucyI6bnVsbCwibWl4cGFuZWxUb2tlbiI6bnVsbCwibG9nb1VybCI6bnVsbCwiZW1haWxCYWNrdXBLaXQiOmZhbHNlLCJlbWFpbFdlbGNvbWUiOnRydWUsImVtYWlsSW1hZ2VVcmwiOm51bGwsImVtYWlsSW1hZ2VMaW5rIjpudWxsLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsImZvcmVncm91bmRDb2xvciI6bnVsbCwiZm9udCI6bnVsbCwidHdpdHRlclVybCI6bnVsbCwiZ2l0aHViVXJsIjpudWxsLCJsaW5rZWRpblVybCI6bnVsbCwiYXJjaGl2ZWQiOmZhbHNlLCJpc1VzZWQiOnRydWUsImlzSW5zdGFsbGVkIjp0cnVlLCJzdXBwb3J0ZWRXYWxsZXRUeXBlcyI6W3sidHlwZSI6IlNPTEFOQSIsIm9wdGlvbmFsIjpmYWxzZX0seyJ0eXBlIjoiRVZNIiwib3B0aW9uYWwiOmZhbHNlfV0sImNvc21vc1ByZWZpeCI6ImNvc21vcyIsImlzV2l0aGRyYXdFbmFibGVkIjp0cnVlLCJpc0J1eUVuYWJsZWQiOnRydWUsImlzUmVjZWl2ZUVuYWJsZWQiOnRydWUsIm9uUmFtcFByb3ZpZGVycyI6WyJTVFJJUEUiLCJNT09OUEFZIl0sIm9uUmFtcEFzc2V0cyI6bnVsbCwidGVhbUlkIjpudWxsLCJidW5kbGVJZGVudGlmaWVyIjpudWxsLCJhbmRyb2lkUGFja2FnZU5hbWUiOm51bGwsImFuZHJvaWRTaGEyNTZDZXJ0RmluZ2VycHJpbnRzIjpudWxsLCJhY2NlbnRDb2xvciI6bnVsbCwidGhlbWVNb2RlIjoiTElHSFQiLCJzdXBwb3J0ZWRBdXRoTWV0aG9kcyI6WyJQQVNTS0VZIl0sImljb25VcmwiOm51bGwsInJhbXBBcGlLZXkiOm51bGwsImRlZmF1bHRPblJhbXBBc3NldCI6bnVsbCwiZGVmYXVsdE9uUmFtcE5ldHdvcmsiOm51bGwsImRlZmF1bHRCdXlBbW91bnQiOm51bGwsImRlZmF1bHRCdXlBbW91bnRDdXJyZW5jeSI6bnVsbCwiZGVmYXVsdFNlbGxBbW91bnQiOm51bGwsImRlZmF1bHRTZWxsQW1vdW50Q3VycmVuY3kiOm51bGwsImZvcmNlVHJhbnNhY3Rpb25Qb3B1cHMiOmZhbHNlLCJ0cmFuc2FjdGlvblBvcHVwc0VuYWJsZWQiOmZhbHNlfSwibGFzdFVzZWRQYXJ0bmVyIjpudWxsLCJzaWduZXIiOiJleUpKWkNJNklqRWlMQ0pQZEdobGNrbGtJam9pTWlJc0lrOTFkSEIxZENJNmV5SlFkV0pzYVdNaU9uc2lkQ0k2TVN3aVozSnZkWEJyWlhraU9pSlNTRlpPWWtkd2RXWkZWM3AzV2xCcFlsSnliR05TUkhjeGQyTlVialJLUjFsbllqVlZNMGxWUkhkVlBTSXNJbk5vWVhKbGN5STZleUl4SWpvaVprcElSRGd5YkUwNEx6RmhkRTVpYlU0d1NDdFNZVkZxVG5weVJYWXJTRWx4UWl0WGRGb3JjVTVJUlQwaUxDSXlJam9pYUV4UFRUUTRUVzk2Wkd4UFkwdFhaWFp0V1hkRGJFNWhha0oxVm10blMybFZTSGxQVUV4VWRHcDVVVDBpZlgwc0lsTmxZM0psZEV0bGVTSTZleUpwWkNJNk1Td2ljMlZqY21WMElqb2llRWRTVWpsSU9UZFZZVEZVYld3d09XOVdSSE5EUzJNeFFYUm5kVTFOUVhaclVISnNVelkyVjB4UmF6MGlmWDBzSWxkaGJHeGxkRWxrSWpvaVpEazNPRGd4WlRFdE1EUmxOQzAwWW1GaExUZ3lOakl0TnpVME4yWmlOV0ZsTlRZd0lpd2lTRzl6ZENJNkluZHpjem92TDIxd1l5MXVaWFIzYjNKckxtSmxkR0V1WjJWMGNHRnlZUzVqYjIwaWZRPT0ifQ==";
199+
200+
const claim=await solanaAgentWithPara.methods.claimParaPregenWallet(data.userShare,"")
201+
// Delete user share data
202+
const deleteResponse = await fetch('/api/usershare?email=' + invocation.args?.email, {
203+
method: 'DELETE',
204+
headers: {
205+
'Content-Type': 'application/json',
206+
}
207+
});
208+
209+
if (!deleteResponse.ok) {
210+
throw new Error('Failed to delete user share data');
211+
}
212+
return {
213+
...invocation,
214+
result: { status: 'success', ...claim }
215+
};
216+
144217
} catch (error) {
145-
146-
return {
147-
...invocation,
148-
result: { status: 'error', message: (error as Error).message }
149-
};
150-
218+
console.error('Error getting user share data:', error);
219+
return {
151220

221+
result: {
222+
status: 'error',
223+
message: (error as Error).message,
224+
225+
}
226+
};
152227
}
228+
153229
}
154230
if (invocation.toolName === 'USE_WALLET') {
155231

‎examples/para-plugin-example/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"langchain": "^0.3.5",
4848
"lucide-react": "^0.479.0",
4949
"marked": "^15.0.4",
50+
"nedb": "^1.8.0",
5051
"next": "^15.2.1",
5152
"postcss": "8.4.27",
5253
"react": "^19.0.0",

0 commit comments

Comments
 (0)