node-red-contrib-nostr
Version:
Node-RED nodes for seamless Nostr protocol integration. Features robust WebSocket handling, event filtering, and NPUB-based routing. Built with TypeScript for type safety and extensive testing. Perfect for Nostr automation flows.
68 lines (67 loc) • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MessageType = void 0;
exports.parseRelayMessage = parseRelayMessage;
exports.createEventMessage = createEventMessage;
exports.createSubscriptionMessage = createSubscriptionMessage;
exports.createCloseMessage = createCloseMessage;
var MessageType;
(function (MessageType) {
MessageType["EVENT"] = "EVENT";
MessageType["REQ"] = "REQ";
MessageType["CLOSE"] = "CLOSE";
MessageType["NOTICE"] = "NOTICE";
MessageType["EOSE"] = "EOSE";
MessageType["OK"] = "OK";
})(MessageType || (exports.MessageType = MessageType = {}));
function parseRelayMessage(message) {
try {
const parsed = JSON.parse(message);
if (!Array.isArray(parsed))
return null;
const [type, ...params] = parsed;
switch (type) {
case MessageType.EVENT: {
const [subscriptionId, event] = params;
return {
type: MessageType.EVENT,
subscriptionId,
event
};
}
case MessageType.NOTICE:
return {
type: MessageType.NOTICE,
message: params[0]
};
case MessageType.EOSE:
return {
type: MessageType.EOSE,
subscriptionId: params[0]
};
case MessageType.OK: {
const [eventId, success, message] = params;
return {
type: MessageType.OK,
message: eventId,
success,
error: message
};
}
default:
return null;
}
}
catch {
return null;
}
}
function createEventMessage(event) {
return JSON.stringify([MessageType.EVENT, event]);
}
function createSubscriptionMessage(subscriptionId, filters) {
return JSON.stringify([MessageType.REQ, subscriptionId, ...filters]);
}
function createCloseMessage(subscriptionId) {
return JSON.stringify([MessageType.CLOSE, subscriptionId]);
}