mirror of
https://github.com/nostr-connect/connect.git
synced 2026-01-30 01:24:20 +01:00
lint
This commit is contained in:
91
src/rpc.ts
91
src/rpc.ts
@@ -1,15 +1,15 @@
|
||||
import {
|
||||
relayInit,
|
||||
Event,
|
||||
Filter,
|
||||
getEventHash,
|
||||
signEvent,
|
||||
validateEvent,
|
||||
verifySignature,
|
||||
getPublicKey,
|
||||
nip04,
|
||||
Event,
|
||||
Sub,
|
||||
Filter,
|
||||
Relay,
|
||||
relayInit,
|
||||
signEvent,
|
||||
Sub,
|
||||
validateEvent,
|
||||
verifySignature,
|
||||
} from 'nostr-tools';
|
||||
|
||||
export interface NostrRPCRequest {
|
||||
@@ -65,7 +65,7 @@ export class NostrRPC {
|
||||
if (opts && opts.skipResponse === true) return Promise.resolve();
|
||||
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
let sub = relay.sub([
|
||||
const sub = relay.sub([
|
||||
{
|
||||
kinds: [4],
|
||||
authors: [target],
|
||||
@@ -76,12 +76,9 @@ export class NostrRPC {
|
||||
|
||||
sub.on('event', async (event: Event) => {
|
||||
let payload;
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
try {
|
||||
const plaintext = await nip04.decrypt(
|
||||
this.self.secret,
|
||||
event.pubkey,
|
||||
event.content
|
||||
);
|
||||
const plaintext = await nip04.decrypt(this.self.secret, event.pubkey, event.content);
|
||||
if (!plaintext) throw new Error('failed to decrypt event');
|
||||
payload = JSON.parse(plaintext);
|
||||
} catch (ignore) {
|
||||
@@ -110,7 +107,7 @@ export class NostrRPC {
|
||||
async listen(): Promise<Sub> {
|
||||
const relay = await connectToRelay(this.relay);
|
||||
|
||||
let sub = relay.sub([
|
||||
const sub = relay.sub([
|
||||
{
|
||||
kinds: [4],
|
||||
'#p': [this.self.pubkey],
|
||||
@@ -120,12 +117,9 @@ export class NostrRPC {
|
||||
|
||||
sub.on('event', async (event: Event) => {
|
||||
let payload: NostrRPCRequest;
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
try {
|
||||
const plaintext = await nip04.decrypt(
|
||||
this.self.secret,
|
||||
event.pubkey,
|
||||
event.content
|
||||
);
|
||||
const plaintext = await nip04.decrypt(this.self.secret, event.pubkey, event.content);
|
||||
if (!plaintext) throw new Error('failed to decrypt event');
|
||||
payload = JSON.parse(plaintext);
|
||||
} catch (ignore) {
|
||||
@@ -139,17 +133,9 @@ export class NostrRPC {
|
||||
if (typeof this[payload.method] !== 'function') Promise.resolve();
|
||||
const response = await this.handleRequest(payload, event);
|
||||
|
||||
const body = prepareResponse(
|
||||
response.id,
|
||||
response.result,
|
||||
response.error
|
||||
);
|
||||
const body = prepareResponse(response.id, response.result, response.error);
|
||||
|
||||
const responseEvent = await prepareEvent(
|
||||
this.self.secret,
|
||||
event.pubkey,
|
||||
body
|
||||
);
|
||||
const responseEvent = await prepareEvent(this.self.secret, event.pubkey, body);
|
||||
|
||||
// send response via relay
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
@@ -166,10 +152,7 @@ export class NostrRPC {
|
||||
return sub;
|
||||
}
|
||||
|
||||
private async handleRequest(
|
||||
request: NostrRPCRequest,
|
||||
event: Event
|
||||
): Promise<NostrRPCResponse> {
|
||||
private async handleRequest(request: NostrRPCRequest, event: Event): Promise<NostrRPCResponse> {
|
||||
const { id, method, params } = request;
|
||||
let result = null;
|
||||
let error = null;
|
||||
@@ -196,26 +179,20 @@ export function now(): number {
|
||||
return Math.floor(Date.now() / 1000);
|
||||
}
|
||||
export function randomID(): string {
|
||||
return Math.random()
|
||||
.toString()
|
||||
.slice(2);
|
||||
return Math.random().toString().slice(2);
|
||||
}
|
||||
export function prepareRequest(
|
||||
id: string,
|
||||
method: string,
|
||||
params: any[]
|
||||
): string {
|
||||
export function prepareRequest(id: string, method: string, params: any[]): string {
|
||||
return JSON.stringify({
|
||||
id,
|
||||
method: method,
|
||||
params: params,
|
||||
method,
|
||||
params,
|
||||
});
|
||||
}
|
||||
export function prepareResponse(id: string, result: any, error: any): string {
|
||||
return JSON.stringify({
|
||||
id: id,
|
||||
result: result,
|
||||
error: error,
|
||||
id,
|
||||
result,
|
||||
error,
|
||||
});
|
||||
}
|
||||
export async function prepareEvent(
|
||||
@@ -237,8 +214,8 @@ export async function prepareEvent(
|
||||
const sig = signEvent(event, secretKey);
|
||||
|
||||
const signedEvent = { ...event, id, sig };
|
||||
let ok = validateEvent(signedEvent);
|
||||
let veryOk = verifySignature(signedEvent);
|
||||
const ok = validateEvent(signedEvent);
|
||||
const veryOk = verifySignature(signedEvent);
|
||||
if (!ok || !veryOk) {
|
||||
throw new Error('Event is not valid');
|
||||
}
|
||||
@@ -250,12 +227,7 @@ export function isValidRequest(payload: any): boolean {
|
||||
if (!payload) return false;
|
||||
|
||||
const keys = Object.keys(payload);
|
||||
if (
|
||||
!keys.includes('id') ||
|
||||
!keys.includes('method') ||
|
||||
!keys.includes('params')
|
||||
)
|
||||
return false;
|
||||
if (!keys.includes('id') || !keys.includes('method') || !keys.includes('params')) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -264,12 +236,7 @@ export function isValidResponse(payload: any): boolean {
|
||||
if (!payload) return false;
|
||||
|
||||
const keys = Object.keys(payload);
|
||||
if (
|
||||
!keys.includes('id') ||
|
||||
!keys.includes('result') ||
|
||||
!keys.includes('error')
|
||||
)
|
||||
return false;
|
||||
if (!keys.includes('id') || !keys.includes('result') || !keys.includes('error')) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -282,7 +249,7 @@ export async function connectToRelay(realayURL: string) {
|
||||
resolve();
|
||||
});
|
||||
relay.on('error', () => {
|
||||
reject(`not possible to connect to ${relay.url}`);
|
||||
reject(new Error(`not possible to connect to ${relay.url}`));
|
||||
});
|
||||
});
|
||||
return relay;
|
||||
@@ -291,7 +258,7 @@ export async function broadcastToRelay(relay: Relay, event: Event) {
|
||||
// send request via relay
|
||||
return await new Promise<void>((resolve, reject) => {
|
||||
relay.on('error', () => {
|
||||
reject(`failed to connect to ${relay.url}`);
|
||||
reject(new Error(`failed to connect to ${relay.url}`));
|
||||
});
|
||||
const pub = relay.publish(event);
|
||||
pub.on('failed', (reason: any) => {
|
||||
|
||||
Reference in New Issue
Block a user