useSignerStream: simplify with nostrify
This commit is contained in:
parent
df407381b2
commit
49a25f2eb0
|
@ -1,19 +1,8 @@
|
||||||
import { type NostrEvent } from '@nostrify/nostrify';
|
import { NostrEvent, NostrConnectResponse, NSchema as n } from '@nostrify/nostrify';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
|
|
||||||
import { useNostr } from 'soapbox/contexts/nostr-context';
|
import { useNostr } from 'soapbox/contexts/nostr-context';
|
||||||
import { connectRequestSchema, nwcRequestSchema } from 'soapbox/schemas/nostr';
|
import { nwcRequestSchema } from 'soapbox/schemas/nostr';
|
||||||
import { jsonSchema } from 'soapbox/schemas/utils';
|
|
||||||
|
|
||||||
/** NIP-46 [response](https://github.com/nostr-protocol/nips/blob/master/46.md#response-events-kind24133) content. */
|
|
||||||
interface NostrConnectResponse {
|
|
||||||
/** Request ID that this response is for. */
|
|
||||||
id: string;
|
|
||||||
/** Result of the call (this can be either a string or a JSON stringified object) */
|
|
||||||
result: string;
|
|
||||||
/** Error in string form, if any. Its presence indicates an error with the request. */
|
|
||||||
error?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
function useSignerStream() {
|
function useSignerStream() {
|
||||||
const { relay, pubkey, signer } = useNostr();
|
const { relay, pubkey, signer } = useNostr();
|
||||||
|
@ -35,7 +24,7 @@ function useSignerStream() {
|
||||||
if (!relay || !pubkey || !signer) return;
|
if (!relay || !pubkey || !signer) return;
|
||||||
const decrypted = await signer.nip04!.decrypt(pubkey, event.content);
|
const decrypted = await signer.nip04!.decrypt(pubkey, event.content);
|
||||||
|
|
||||||
const reqMsg = jsonSchema.pipe(connectRequestSchema).safeParse(decrypted);
|
const reqMsg = n.json().pipe(n.connectRequest()).safeParse(decrypted);
|
||||||
if (!reqMsg.success) {
|
if (!reqMsg.success) {
|
||||||
console.warn(decrypted);
|
console.warn(decrypted);
|
||||||
console.warn(reqMsg.error);
|
console.warn(reqMsg.error);
|
||||||
|
@ -104,7 +93,7 @@ function useSignerStream() {
|
||||||
|
|
||||||
const decrypted = await signer.nip04!.decrypt(pubkey, event.content);
|
const decrypted = await signer.nip04!.decrypt(pubkey, event.content);
|
||||||
|
|
||||||
const reqMsg = jsonSchema.pipe(nwcRequestSchema).safeParse(decrypted);
|
const reqMsg = n.json().pipe(nwcRequestSchema).safeParse(decrypted);
|
||||||
if (!reqMsg.success) {
|
if (!reqMsg.success) {
|
||||||
console.warn(decrypted);
|
console.warn(decrypted);
|
||||||
console.warn(reqMsg.error);
|
console.warn(reqMsg.error);
|
||||||
|
|
|
@ -1,35 +1,9 @@
|
||||||
|
import { NSchema as n } from '@nostrify/nostrify';
|
||||||
import { verifyEvent } from 'nostr-tools';
|
import { verifyEvent } from 'nostr-tools';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
/** Schema to validate Nostr hex IDs such as event IDs and pubkeys. */
|
|
||||||
const nostrIdSchema = z.string().regex(/^[0-9a-f]{64}$/);
|
|
||||||
/** Nostr kinds are positive integers. */
|
|
||||||
const kindSchema = z.number().int().nonnegative();
|
|
||||||
|
|
||||||
/** Nostr event template schema. */
|
|
||||||
const eventTemplateSchema = z.object({
|
|
||||||
kind: kindSchema,
|
|
||||||
tags: z.array(z.array(z.string())),
|
|
||||||
content: z.string(),
|
|
||||||
created_at: z.number(),
|
|
||||||
});
|
|
||||||
|
|
||||||
/** Nostr event schema. */
|
|
||||||
const eventSchema = eventTemplateSchema.extend({
|
|
||||||
id: nostrIdSchema,
|
|
||||||
pubkey: nostrIdSchema,
|
|
||||||
sig: z.string(),
|
|
||||||
});
|
|
||||||
|
|
||||||
/** Nostr event schema that also verifies the event's signature. */
|
/** Nostr event schema that also verifies the event's signature. */
|
||||||
const signedEventSchema = eventSchema.refine(verifyEvent);
|
const signedEventSchema = n.event().refine(verifyEvent);
|
||||||
|
|
||||||
/** NIP-46 request content schema. */
|
|
||||||
const connectRequestSchema = z.object({
|
|
||||||
id: z.string(),
|
|
||||||
method: z.string(),
|
|
||||||
params: z.string().array(),
|
|
||||||
});
|
|
||||||
|
|
||||||
/** NIP-47 signer response. */
|
/** NIP-47 signer response. */
|
||||||
const nwcRequestSchema = z.object({
|
const nwcRequestSchema = z.object({
|
||||||
|
@ -39,4 +13,4 @@ const nwcRequestSchema = z.object({
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
export { nostrIdSchema, kindSchema, eventSchema, signedEventSchema, connectRequestSchema, nwcRequestSchema };
|
export { signedEventSchema, nwcRequestSchema };
|
Loading…
Reference in New Issue