create-message-kit 1.2.20 → 1.2.21
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/index.js
CHANGED
@@ -7,7 +7,7 @@ import { default as fs } from "fs-extra";
|
|
7
7
|
import { isCancel } from "@clack/prompts";
|
8
8
|
import { detect } from "detect-package-manager";
|
9
9
|
import pc from "picocolors";
|
10
|
-
const defVersion = "1.2.
|
10
|
+
const defVersion = "1.2.21";
|
11
11
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
12
12
|
|
13
13
|
// Read package.json to get the version
|
package/package.json
CHANGED
@@ -5,7 +5,6 @@ interface Participant {
|
|
5
5
|
response: string;
|
6
6
|
name: string;
|
7
7
|
address: string;
|
8
|
-
agent_address: string;
|
9
8
|
}
|
10
9
|
export interface TossData {
|
11
10
|
group_id: string;
|
@@ -18,7 +17,6 @@ export interface TossData {
|
|
18
17
|
end_time: string;
|
19
18
|
description: string;
|
20
19
|
participants: Participant[];
|
21
|
-
toss_wallet_address: string;
|
22
20
|
}
|
23
21
|
export async function checkTossCorrect(
|
24
22
|
context: XMTPContext,
|
@@ -64,8 +62,7 @@ export async function checkTossCorrect(
|
|
64
62
|
return undefined;
|
65
63
|
}
|
66
64
|
|
67
|
-
|
68
|
-
return { ...tossData, toss_id, pool };
|
65
|
+
return { ...tossData, toss_id };
|
69
66
|
}
|
70
67
|
|
71
68
|
export function extractTossId(message: string): string | null {
|
@@ -139,9 +139,13 @@ export async function handleTossCreation(context: XMTPContext) {
|
|
139
139
|
if (params.description && params.options && !isNaN(Number(params.amount))) {
|
140
140
|
const keys = await tossDBClient.keys("*");
|
141
141
|
let tossId = keys.length + 1;
|
142
|
-
const
|
143
|
-
tossId.
|
142
|
+
const isCreated = await walletService.createWallet(
|
143
|
+
tossId + ":" + sender.address,
|
144
144
|
);
|
145
|
+
if (!isCreated) {
|
146
|
+
await context.reply("Failed to create toss wallet");
|
147
|
+
return;
|
148
|
+
}
|
145
149
|
|
146
150
|
let tossData: TossData = {
|
147
151
|
toss_id: tossId.toString(),
|
@@ -158,20 +162,13 @@ export async function handleTossCreation(context: XMTPContext) {
|
|
158
162
|
? new Date(params.endTime).toLocaleString()
|
159
163
|
: new Date(Date.now() + 24 * 60 * 60 * 1000).toLocaleString(),
|
160
164
|
participants: [],
|
161
|
-
toss_wallet_address: createdTossWallet?.address,
|
162
165
|
};
|
163
|
-
await tossDBClient.set(
|
164
|
-
"toss:" + tossId.toString(),
|
165
|
-
JSON.stringify(tossData),
|
166
|
-
);
|
167
|
-
console.log(tossData);
|
166
|
+
await tossDBClient.set("toss:" + tossId, JSON.stringify(tossData));
|
168
167
|
if (tossId !== undefined) {
|
169
|
-
|
170
|
-
console.log(msg);
|
171
|
-
await context.send(msg);
|
168
|
+
await context.send(generateTossMessage(tossData));
|
172
169
|
} else {
|
173
170
|
await context.reply(
|
174
|
-
`An error occurred while creating the toss. ${
|
171
|
+
`An error occurred while creating the toss. ${tossId}`,
|
175
172
|
);
|
176
173
|
}
|
177
174
|
}
|
@@ -183,7 +180,7 @@ export async function handleJoinToss(context: XMTPContext) {
|
|
183
180
|
return;
|
184
181
|
}
|
185
182
|
|
186
|
-
const { toss_id, participants, amount } = tossData;
|
183
|
+
const { toss_id, participants, amount, admin_address } = tossData;
|
187
184
|
|
188
185
|
const {
|
189
186
|
message: {
|
@@ -192,7 +189,6 @@ export async function handleJoinToss(context: XMTPContext) {
|
|
192
189
|
params: { response },
|
193
190
|
},
|
194
191
|
},
|
195
|
-
group,
|
196
192
|
walletService,
|
197
193
|
} = context;
|
198
194
|
|
@@ -201,35 +197,16 @@ export async function handleJoinToss(context: XMTPContext) {
|
|
201
197
|
await context.reply("You have already joined this toss.");
|
202
198
|
return;
|
203
199
|
}
|
204
|
-
|
205
|
-
|
206
|
-
if (!tossWallet) {
|
207
|
-
await context.reply("Toss wallet not found");
|
208
|
-
return;
|
209
|
-
}
|
200
|
+
//Create wallet for sender
|
201
|
+
await walletService.createWallet(sender.address);
|
210
202
|
const balance = await walletService.checkBalance(sender.address);
|
211
|
-
|
212
|
-
if (balance < amount) {
|
213
|
-
await context.send("You need to fund your account. Check your DMs:");
|
214
|
-
await walletService.requestFunds(context, amount);
|
215
|
-
return;
|
216
|
-
}
|
203
|
+
if (balance < amount) return walletService.requestFunds(amount);
|
217
204
|
|
218
205
|
try {
|
219
|
-
|
220
|
-
|
221
|
-
await context.reply("Sender wallet not found");
|
222
|
-
return;
|
223
|
-
}
|
224
|
-
const transfer = await walletService.transfer(
|
225
|
-
senderWallet,
|
226
|
-
tossWallet,
|
227
|
-
amount,
|
228
|
-
);
|
229
|
-
console.log("Transfer:", transfer.getTransactionHash());
|
206
|
+
let tempWalletID = toss_id + ":" + admin_address;
|
207
|
+
await walletService.transfer(sender.address, tempWalletID, amount);
|
230
208
|
const participant = {
|
231
209
|
address: sender.address,
|
232
|
-
agent_address: senderWallet.address,
|
233
210
|
response: response,
|
234
211
|
name:
|
235
212
|
(await context.getUserInfo(sender.address))?.preferredName ??
|
@@ -274,49 +251,30 @@ export async function handleEndToss(context: XMTPContext) {
|
|
274
251
|
await context.reply("No participants for this toss.");
|
275
252
|
return;
|
276
253
|
} else if (admin_address.toLowerCase() !== sender.address.toLowerCase()) {
|
277
|
-
await context.reply("Only the admin can
|
278
|
-
return;
|
279
|
-
} else if (
|
280
|
-
!options
|
281
|
-
.split(",")
|
282
|
-
.map((o) => o.toLowerCase())
|
283
|
-
.includes(option.toLowerCase())
|
284
|
-
) {
|
285
|
-
await context.reply("Invalid option selected.");
|
254
|
+
await context.reply("Only the admin can cancel the toss.");
|
286
255
|
return;
|
287
256
|
}
|
288
|
-
const { winners, losers } = await extractWinners(participants ?? [], option);
|
289
257
|
|
290
|
-
|
291
|
-
|
258
|
+
let tempWalletID = toss_id + ":" + admin_address;
|
259
|
+
const balance = await walletService.checkBalance(tempWalletID);
|
260
|
+
const fundsNeeded = tossData.amount * participants?.length;
|
261
|
+
if (balance < fundsNeeded) {
|
262
|
+
await context.reply(
|
263
|
+
`Toss wallet does not have enough funds ${fundsNeeded}, has ${balance}`,
|
264
|
+
);
|
292
265
|
return;
|
293
266
|
}
|
294
267
|
|
268
|
+
//Winners
|
269
|
+
|
270
|
+
const { winners, losers } = await extractWinners(participants, option);
|
271
|
+
|
295
272
|
const prize =
|
296
273
|
(tossData.amount * (participants?.length ?? 0)) / (winners.length ?? 1);
|
297
274
|
|
298
275
|
try {
|
299
276
|
for (const winner of winners) {
|
300
|
-
|
301
|
-
|
302
|
-
if (!tossWallet) {
|
303
|
-
await context.reply("Toss wallet not found");
|
304
|
-
return;
|
305
|
-
}
|
306
|
-
const winnerWallet = await walletService.getUserWallet(
|
307
|
-
winner.address,
|
308
|
-
winner.address,
|
309
|
-
);
|
310
|
-
if (!winnerWallet) {
|
311
|
-
await context.reply("Winner wallet not found");
|
312
|
-
return;
|
313
|
-
}
|
314
|
-
const transfer = await walletService.transfer(
|
315
|
-
tossWallet,
|
316
|
-
winnerWallet,
|
317
|
-
prize,
|
318
|
-
);
|
319
|
-
console.log("Transfer:", transfer.getTransactionHash());
|
277
|
+
await walletService.transfer(tempWalletID, winner.address, prize);
|
320
278
|
await tossDBClient.set(
|
321
279
|
`toss:${toss_id}`,
|
322
280
|
JSON.stringify({ ...tossData, status: "closed" }),
|
@@ -357,31 +315,26 @@ export async function handleCancelToss(context: XMTPContext) {
|
|
357
315
|
return;
|
358
316
|
}
|
359
317
|
|
360
|
-
|
318
|
+
let tempWalletID = toss_id + ":" + admin_address;
|
319
|
+
const balance = await walletService.checkBalance(tempWalletID);
|
320
|
+
const fundsNeeded = tossData.amount * participants?.length;
|
321
|
+
if (balance < fundsNeeded) {
|
322
|
+
await context.reply(
|
323
|
+
`Toss wallet does not have enough funds ${fundsNeeded}, has ${balance}`,
|
324
|
+
);
|
325
|
+
return;
|
326
|
+
}
|
327
|
+
for (const participant of participants) {
|
361
328
|
try {
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
}
|
368
|
-
|
369
|
-
const participantWallet = await walletService.getUserWallet(
|
370
|
-
participant.address,
|
329
|
+
await walletService.transfer(tempWalletID, participant.address, amount);
|
330
|
+
} catch (error) {
|
331
|
+
console.error(
|
332
|
+
`Failed to send prize to ${participant.address} agent wallet:`,
|
333
|
+
error,
|
371
334
|
);
|
372
|
-
|
373
|
-
|
374
|
-
return;
|
375
|
-
}
|
376
|
-
const transfer = await walletService.transfer(
|
377
|
-
tossWallet,
|
378
|
-
participantWallet,
|
379
|
-
amount,
|
335
|
+
await context.reply(
|
336
|
+
`Failed to send prize to ${participant.address} agent wallet`,
|
380
337
|
);
|
381
|
-
console.log("Transfer:", transfer.getTransactionHash());
|
382
|
-
} catch (error) {
|
383
|
-
console.error(`Failed to send prize to ${participant.address}:`, error);
|
384
|
-
await context.reply(`Failed to send prize to ${participant.address}`);
|
385
338
|
}
|
386
339
|
}
|
387
340
|
|
@@ -424,20 +377,17 @@ export async function handleDM(context: XMTPContext) {
|
|
424
377
|
if (skill === "help") {
|
425
378
|
await context.send(DM_HELP_MESSAGE);
|
426
379
|
} else if (skill === "create") {
|
427
|
-
const walletExist = await walletService.
|
380
|
+
const walletExist = await walletService.getWallet(sender.address);
|
428
381
|
if (walletExist) {
|
429
382
|
await context.reply("You already have an agent wallet.");
|
430
383
|
return;
|
431
384
|
}
|
432
|
-
|
433
|
-
await context.reply(
|
434
|
-
`Your agent wallet address is ${userWallet.address}\nBalance: $${await walletService.checkBalance(sender.address)}`,
|
435
|
-
);
|
385
|
+
await walletService.createWallet(sender.address);
|
436
386
|
} else if (skill === "balance") {
|
437
|
-
const userWallet = await walletService.
|
387
|
+
const userWallet = await walletService.getWallet(sender.address);
|
438
388
|
|
439
389
|
context.sendTo(
|
440
|
-
`Your agent wallet address is ${
|
390
|
+
`Your agent wallet for address is ${sender.address}\nBalance: $${await walletService.checkBalance(sender.address)}`,
|
441
391
|
[sender.address],
|
442
392
|
);
|
443
393
|
} else if (skill === "fund") {
|
@@ -447,8 +397,7 @@ export async function handleDM(context: XMTPContext) {
|
|
447
397
|
return;
|
448
398
|
} else if (amount) {
|
449
399
|
if (amount + balance <= 10) {
|
450
|
-
|
451
|
-
return;
|
400
|
+
return walletService.requestFunds(Number(amount));
|
452
401
|
} else {
|
453
402
|
await context.send("Wrong amount. Max 10 USDC.");
|
454
403
|
return;
|
@@ -464,7 +413,7 @@ export async function handleDM(context: XMTPContext) {
|
|
464
413
|
`Please specify the amount of USDC to prefund (1 to ${10 - balance}):`,
|
465
414
|
options,
|
466
415
|
);
|
467
|
-
|
416
|
+
return walletService.requestFunds(Number(response));
|
468
417
|
} else if (skill === "withdraw") {
|
469
418
|
const balance = await walletService.checkBalance(sender.address);
|
470
419
|
if (balance === 0) {
|
@@ -478,6 +427,6 @@ export async function handleDM(context: XMTPContext) {
|
|
478
427
|
`Please specify the amount of USDC to withdraw (1 to ${balance}):`,
|
479
428
|
options,
|
480
429
|
);
|
481
|
-
await walletService.withdrawFunds(
|
430
|
+
await walletService.withdrawFunds(Number(response));
|
482
431
|
}
|
483
432
|
}
|