feat: NIP-96 server list

This commit is contained in:
2024-05-14 13:16:03 +01:00
parent 7d0d3030f4
commit 5763d91e8a
14 changed files with 192 additions and 72 deletions

View File

@ -34,6 +34,7 @@ const enum EventKind {
SearchRelaysList = 10_007, // NIP-51
InterestsList = 10_015, // NIP-51
EmojisList = 10_030, // NIP-51
StorageServerList = 10_096, // NIP-96 server list
FollowSet = 30_000, // NIP-51
RelaySet = 30_002, // NIP-51

View File

@ -76,7 +76,7 @@ export class QueryTrace extends EventEmitter<QueryTraceEvents> {
* Total time spent waiting for relay to respond
*/
get responseTime() {
return this.finished ? unwrap(this.eose) - unwrap(this.sent) : 0;
return this.finished ? unwrap(this.eose) - (this.sent ?? unixNowMs()) : 0;
}
/**

View File

@ -160,7 +160,7 @@ export class DiffSyncTags extends EventEmitter<SafeSyncEvents> {
? (change.tag as Array<Array<string>>)
: [change.tag as Array<string>];
for (const changeTag of changeTags) {
const existing = tags.findIndex(a => change.tag[0] === a[0] && change.tag[1] === a[1]);
const existing = tags.findIndex(a => changeTag[0] === a[0] && changeTag[1] === a[1]);
if (existing === -1) {
tags.push(changeTag);
} else {
@ -174,7 +174,7 @@ export class DiffSyncTags extends EventEmitter<SafeSyncEvents> {
? (change.tag as Array<Array<string>>)
: [change.tag as Array<string>];
for (const changeTag of changeTags) {
const existing = tags.findIndex(a => change.tag[0] === a[0] && change.tag[1] === a[1]);
const existing = tags.findIndex(a => changeTag[0] === a[0] && changeTag[1] === a[1]);
if (existing !== -1) {
tags.splice(existing, 1);
} else {
@ -188,7 +188,7 @@ export class DiffSyncTags extends EventEmitter<SafeSyncEvents> {
? (change.tag as Array<Array<string>>)
: [change.tag as Array<string>];
for (const changeTag of changeTags) {
const existing = tags.findIndex(a => change.tag[0] === a[0] && change.tag[1] === a[1]);
const existing = tags.findIndex(a => changeTag[0] === a[0] && changeTag[1] === a[1]);
if (existing !== -1) {
tags[existing] = changeTag;
} else {

View File

@ -88,7 +88,7 @@ export class UserState<TAppData> extends EventEmitter<UserStateEvents> {
}
// always track mute list
this.#checkIsStandardList(EventKind.MuteList);
this.checkIsStandardList(EventKind.MuteList);
this.#profile.on("change", () => this.emit("change", UserStateChangeType.Profile));
this.#contacts.on("change", () => this.emit("change", UserStateChangeType.Contacts));
@ -338,7 +338,7 @@ export class UserState<TAppData> extends EventEmitter<UserStateEvents> {
autoCommit = false,
encrypted = false,
) {
this.#checkIsStandardList(kind);
this.checkIsStandardList(kind);
this.#checkInit();
const list = this.#standardLists.get(kind);
const tags = removeUndefined(Array.isArray(links) ? links.map(a => a.toEventTag()) : [links.toEventTag()]);
@ -363,7 +363,7 @@ export class UserState<TAppData> extends EventEmitter<UserStateEvents> {
autoCommit = false,
encrypted = false,
) {
this.#checkIsStandardList(kind);
this.checkIsStandardList(kind);
this.#checkInit();
const list = this.#standardLists.get(kind);
const tags = removeUndefined(Array.isArray(links) ? links.map(a => a.toEventTag()) : [links.toEventTag()]);
@ -416,7 +416,7 @@ export class UserState<TAppData> extends EventEmitter<UserStateEvents> {
};
}
#checkIsStandardList(kind: EventKind) {
checkIsStandardList(kind: EventKind) {
if (!(kind >= 10_000 && kind < 20_000)) {
throw new Error("Not a standar list");
}