Converted static definitions.
This commit is contained in:
@@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* Matches 64-character lowercase hexadecimal strings.
|
||||||
|
* Used for validating event IDs and cryptographic keys.
|
||||||
|
*/
|
||||||
|
export const HEX_64_PATTERN = /^[a-f0-9]{64}$/;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Matches 128-character lowercase hexadecimal strings.
|
||||||
|
* Used for validating signatures.
|
||||||
|
*/
|
||||||
|
export const HEX_128_PATTERN = /^[a-f0-9]{128}$/;
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/**
|
||||||
|
* Public key is not 64 lowercase hex characters.
|
||||||
|
*/
|
||||||
|
export class MalformedPubKeyError extends Error {
|
||||||
|
constructor() {
|
||||||
|
super("public key must be 64 lowercase hex characters");
|
||||||
|
this.name = "MalformedPubKeyError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private key is not 64 lowercase hex characters.
|
||||||
|
*/
|
||||||
|
export class MalformedPrivKeyError extends Error {
|
||||||
|
constructor() {
|
||||||
|
super("private key must be 64 lowercase hex characters");
|
||||||
|
this.name = "MalformedPrivKeyError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event ID is not 64 hex characters.
|
||||||
|
*/
|
||||||
|
export class MalformedIDError extends Error {
|
||||||
|
constructor() {
|
||||||
|
super("event id must be 64 hex characters");
|
||||||
|
this.name = "MalformedIDError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event signature is not 128 hex characters.
|
||||||
|
*/
|
||||||
|
export class MalformedSigError extends Error {
|
||||||
|
constructor() {
|
||||||
|
super("event signature must be 128 hex characters");
|
||||||
|
this.name = "MalformedSigError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event tag contains fewer than two elements.
|
||||||
|
*/
|
||||||
|
export class MalformedTagError extends Error {
|
||||||
|
constructor() {
|
||||||
|
super("tags must contain at least two elements");
|
||||||
|
this.name = "MalformedTagError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event ID could not be computed during validation.
|
||||||
|
*/
|
||||||
|
export class FailedIDCompError extends Error {
|
||||||
|
constructor() {
|
||||||
|
super("failed to compute event id");
|
||||||
|
this.name = "FailedIDCompError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event ID field is empty.
|
||||||
|
*/
|
||||||
|
export class NoEventIDError extends Error {
|
||||||
|
constructor() {
|
||||||
|
super("event id is empty");
|
||||||
|
this.name = "NoEventIDError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event signature failed cryptographic validation.
|
||||||
|
*/
|
||||||
|
export class InvalidSigError extends Error {
|
||||||
|
constructor() {
|
||||||
|
super("event signature is invalid");
|
||||||
|
this.name = "InvalidSigError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
51
src/types.ts
51
src/types.ts
@@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* Tag represents a single tag within an event as an array of strings.
|
||||||
|
* The first element identifies the tag name, the second contains the value,
|
||||||
|
* and subsequent elements are optional.
|
||||||
|
*/
|
||||||
|
export type Tag = string[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event represents a Nostr protocol event with its seven required fields.
|
||||||
|
* All fields must be present for a valid event.
|
||||||
|
*/
|
||||||
|
export interface Event {
|
||||||
|
id: string;
|
||||||
|
pubkey: string;
|
||||||
|
created_at: number;
|
||||||
|
kind: number;
|
||||||
|
tags: Tag[];
|
||||||
|
content: string;
|
||||||
|
sig: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TagFilters maps tag names to arrays of values for tag-based filtering.
|
||||||
|
* Keys correspond to tag names without the "#" prefix.
|
||||||
|
*/
|
||||||
|
export interface TagFilters {
|
||||||
|
[tagName: string]: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FilterExtensions holds arbitrary additional filter fields as raw JSON values.
|
||||||
|
* Allows custom filter extensions without modifying the core Filter type.
|
||||||
|
*/
|
||||||
|
export interface FilterExtensions {
|
||||||
|
[key: string]: unknown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter defines subscription criteria for events.
|
||||||
|
* All conditions within a filter are applied with AND logic.
|
||||||
|
*/
|
||||||
|
export interface Filter {
|
||||||
|
ids?: string[];
|
||||||
|
authors?: string[];
|
||||||
|
kinds?: number[];
|
||||||
|
since?: number;
|
||||||
|
until?: number;
|
||||||
|
limit?: number;
|
||||||
|
tags?: TagFilters;
|
||||||
|
extensions?: FilterExtensions;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user