From 303fa2ff4bf7bc30a0cfbc1950c4e6cd9335d390 Mon Sep 17 00:00:00 2001 From: ennmichael Date: Mon, 27 Feb 2023 14:11:10 +0100 Subject: [PATCH] add unixTimestamp() --- packages/nostr/src/client/conn.ts | 10 +++------- packages/nostr/src/event.ts | 7 ++++--- packages/nostr/src/util.ts | 6 ++++++ 3 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 packages/nostr/src/util.ts diff --git a/packages/nostr/src/client/conn.ts b/packages/nostr/src/client/conn.ts index 4e3f330..8d6a3c5 100644 --- a/packages/nostr/src/client/conn.ts +++ b/packages/nostr/src/client/conn.ts @@ -2,6 +2,7 @@ import { ProtocolError } from "../error" import { Filters, SubscriptionId } from "." import { RawEvent, SignedEvent } from "../event" import WebSocket from "ws" +import { unixTimestamp } from "../util" /** * The connection to a relay. This is the lowest layer of the nostr protocol. @@ -241,15 +242,10 @@ function serializeFilters(filters: Filters): RawFilters { kinds: filters.kinds?.map((kind) => kind), ["#e"]: filters.eventTags?.map((e) => e.toString()), ["#p"]: filters.pubkeyTags?.map((p) => p.toString()), - // TODO The Math.floor has been repeated too many times at this point, have a unix timestamp function in event.ts since: - filters.since !== undefined - ? Math.floor(filters.since.getTime() / 1000) - : undefined, + filters.since !== undefined ? unixTimestamp(filters.since) : undefined, until: - filters.until !== undefined - ? Math.floor(filters.until.getTime() / 1000) - : undefined, + filters.until !== undefined ? unixTimestamp(filters.until) : undefined, limit: filters.limit, } } diff --git a/packages/nostr/src/event.ts b/packages/nostr/src/event.ts index 499b635..5ed1d3d 100644 --- a/packages/nostr/src/event.ts +++ b/packages/nostr/src/event.ts @@ -1,6 +1,7 @@ import { ProtocolError } from "./error" import * as secp from "@noble/secp256k1" import { PublicKey, PrivateKey } from "./keypair" +import { unixTimestamp } from "./util" // TODO This file is missing proper documentation // TODO Add remaining event types @@ -76,8 +77,8 @@ export class EventId { const serializedTags = `[${tags .map((tag) => `[${tag.map((v) => `"${v}"`).join(",")}]`) .join(",")}]` - const serialized = `[0,"${event.pubkey}",${Math.floor( - event.createdAt.getTime() / 1000 + const serialized = `[0,"${event.pubkey}",${unixTimestamp( + event.createdAt )},${event.kind},${serializedTags},"${content}"]` const hash = await secp.utils.sha256( Uint8Array.from(charCodes(serialized)) @@ -153,7 +154,7 @@ export class SignedEvent { return { id: id.toString(), pubkey: event.pubkey.toString(), - created_at: Math.floor(event.createdAt.getTime() / 1000), + created_at: unixTimestamp(event.createdAt), kind: event.kind, tags, content, diff --git a/packages/nostr/src/util.ts b/packages/nostr/src/util.ts new file mode 100644 index 0000000..5f1858e --- /dev/null +++ b/packages/nostr/src/util.ts @@ -0,0 +1,6 @@ +/** + * Calculate the unix timestamp (seconds since epoch) of the `Date`. + */ +export function unixTimestamp(date: Date): number { + return Math.floor(date.getTime() / 1000) +}