OpChan/packages/core/dist/services/MessageService.js
2025-09-11 14:29:55 +05:30

78 lines
2.9 KiB
JavaScript

import messageManager from '../waku';
export class MessageService {
constructor(delegationManager) {
this.delegationManager = delegationManager;
}
/**
* Sign and send a message to the Waku network
*/
async sendMessage(message) {
try {
const signedMessage = await this.delegationManager.signMessage(message);
if (!signedMessage) {
// Check if delegation exists but is expired
const delegationStatus = await this.delegationManager.getStatus();
const isDelegationExpired = !delegationStatus.isValid;
return {
success: false,
error: isDelegationExpired
? 'Key delegation expired. Please re-delegate your key through the profile menu.'
: 'Key delegation required. Please delegate a signing key from your profile menu to post without wallet approval for each action.',
};
}
await messageManager.sendMessage(signedMessage);
return {
success: true,
message: signedMessage,
};
}
catch (error) {
console.error('Error signing and sending message:', error);
let errorMessage = 'Failed to sign and send message. Please try again.';
if (error instanceof Error) {
if (error.message.includes('timeout') ||
error.message.includes('network')) {
errorMessage =
'Network issue detected. Please check your connection and try again.';
}
else if (error.message.includes('rejected') ||
error.message.includes('denied')) {
errorMessage =
'Wallet signature request was rejected. Please approve signing to continue.';
}
else {
errorMessage = error.message;
}
}
return {
success: false,
error: errorMessage,
};
}
}
/**
* Sign and broadcast a message (simplified version for profile updates)
*/
async signAndBroadcastMessage(message) {
try {
const signedMessage = await this.delegationManager.signMessage(message);
if (!signedMessage) {
console.error('Failed to sign message');
return null;
}
await messageManager.sendMessage(signedMessage);
return signedMessage;
}
catch (error) {
console.error('Error signing and broadcasting message:', error);
return null;
}
}
/**
* Verify a message signature
*/
async verifyMessage(message) {
return await this.delegationManager.verify(message);
}
}
//# sourceMappingURL=MessageService.js.map