NBunker: DRY the subscription
This commit is contained in:
parent
f67abaa3cd
commit
78bf71bdf9
|
@ -63,48 +63,43 @@ export class NBunker {
|
||||||
|
|
||||||
private async subscribeAuthorization(authorization: NBunkerAuthorization): Promise<void> {
|
private async subscribeAuthorization(authorization: NBunkerAuthorization): Promise<void> {
|
||||||
const { signers } = authorization;
|
const { signers } = authorization;
|
||||||
|
|
||||||
const bunkerPubkey = await signers.bunker.getPublicKey();
|
const bunkerPubkey = await signers.bunker.getPublicKey();
|
||||||
const signal = this.controller.signal;
|
|
||||||
|
|
||||||
const filters: NostrFilter[] = [
|
const filters: NostrFilter[] = [
|
||||||
{ kinds: [24133], '#p': [bunkerPubkey], limit: 0 },
|
{ kinds: [24133], '#p': [bunkerPubkey], limit: 0 },
|
||||||
];
|
];
|
||||||
|
|
||||||
for await (const msg of this.relay.req(filters, { signal })) {
|
for await (const { event, request } of this.subscribe(filters, signers)) {
|
||||||
if (msg[0] === 'EVENT') {
|
if (request.method === 'connect') {
|
||||||
const [,, event] = msg;
|
this.handleConnect(event, request, authorization);
|
||||||
|
|
||||||
try {
|
|
||||||
const request = await this.decryptRequest(event, signers);
|
|
||||||
|
|
||||||
if (request.method === 'connect') {
|
|
||||||
this.handleConnect(event, request, authorization);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.warn(error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async subscribeConnection(connection: NBunkerConnection): Promise<void> {
|
private async subscribeConnection(connection: NBunkerConnection): Promise<void> {
|
||||||
const { authorizedPubkey, signers } = connection;
|
const { authorizedPubkey, signers } = connection;
|
||||||
|
|
||||||
const bunkerPubkey = await signers.bunker.getPublicKey();
|
const bunkerPubkey = await signers.bunker.getPublicKey();
|
||||||
const signal = this.controller.signal;
|
|
||||||
|
|
||||||
const filters: NostrFilter[] = [
|
const filters: NostrFilter[] = [
|
||||||
{ kinds: [24133], authors: [authorizedPubkey], '#p': [bunkerPubkey], limit: 0 },
|
{ kinds: [24133], authors: [authorizedPubkey], '#p': [bunkerPubkey], limit: 0 },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
for await (const { event, request } of this.subscribe(filters, signers)) {
|
||||||
|
this.handleRequest(event, request, connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async *subscribe(filters: NostrFilter[], signers: NBunkerSigners): AsyncIterable<{ event: NostrEvent; request: NostrConnectRequest }> {
|
||||||
|
const signal = this.controller.signal;
|
||||||
|
|
||||||
for await (const msg of this.relay.req(filters, { signal })) {
|
for await (const msg of this.relay.req(filters, { signal })) {
|
||||||
if (msg[0] === 'EVENT') {
|
if (msg[0] === 'EVENT') {
|
||||||
const [,, event] = msg;
|
const [,, event] = msg;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const request = await this.decryptRequest(event, signers);
|
const decrypted = await this.decrypt(signers.bunker, event.pubkey, event.content);
|
||||||
this.handleRequest(event, request, connection);
|
const request = n.json().pipe(n.connectRequest()).parse(decrypted);
|
||||||
|
yield { event, request };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn(error);
|
console.warn(error);
|
||||||
}
|
}
|
||||||
|
@ -112,11 +107,6 @@ export class NBunker {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async decryptRequest(event: NostrEvent, signers: NBunkerSigners): Promise<NostrConnectRequest> {
|
|
||||||
const decrypted = await this.decrypt(signers.bunker, event.pubkey, event.content);
|
|
||||||
return n.json().pipe(n.connectRequest()).parse(decrypted);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async handleRequest(event: NostrEvent, request: NostrConnectRequest, connection: NBunkerConnection): Promise<void> {
|
private async handleRequest(event: NostrEvent, request: NostrConnectRequest, connection: NBunkerConnection): Promise<void> {
|
||||||
const { signers, authorizedPubkey } = connection;
|
const { signers, authorizedPubkey } = connection;
|
||||||
const { user } = signers;
|
const { user } = signers;
|
||||||
|
|
Loading…
Reference in New Issue