Re-work publishing of wrapped events

This commit is contained in:
Jon Staab
2025-10-17 11:33:22 -07:00
parent 543dbda64f
commit ca38cbe20b
11 changed files with 141 additions and 116 deletions
+8 -8
View File
@@ -105,7 +105,7 @@ describe("Events", () => {
it("should validate TrustedEvent", () => {
const unwrapped = {
...createHashedEvent(),
wrap: createSignedEvent(),
wraps: [createSignedEvent()],
}
expect(Events.isTrustedEvent(createHashedEvent())).toBe(false)
expect(Events.isTrustedEvent(createSignedEvent())).toBe(true)
@@ -115,7 +115,7 @@ describe("Events", () => {
it("should validate UnwrappedEvent", () => {
const unwrapped = {
...createHashedEvent(),
wrap: createSignedEvent(),
wraps: [createSignedEvent()],
}
expect(Events.isUnwrappedEvent(unwrapped)).toBe(true)
expect(Events.isUnwrappedEvent(createHashedEvent())).toBe(false)
@@ -152,10 +152,10 @@ describe("Events", () => {
const trustedEvent = {
...createHashedEvent(),
sig: sig,
wrap: createSignedEvent(),
wraps: [createSignedEvent()],
}
const result = Events.asSignedEvent(trustedEvent)
expect(result).not.toHaveProperty("wrap")
expect(result).not.toHaveProperty("wraps")
expect(result).toHaveProperty("sig")
})
@@ -163,10 +163,10 @@ describe("Events", () => {
const trustedEvent = {
...createHashedEvent(),
sig: sig,
wrap: createSignedEvent(),
wraps: [createSignedEvent()],
}
const result = Events.asUnwrappedEvent(trustedEvent)
expect(result).toHaveProperty("wrap")
expect(result).toHaveProperty("wraps")
expect(result).not.toHaveProperty("sig")
})
@@ -174,11 +174,11 @@ describe("Events", () => {
const trustedEvent = {
...createHashedEvent(),
sig: sig,
wrap: createSignedEvent(),
wraps: [createSignedEvent()],
}
const result = Events.asTrustedEvent(trustedEvent)
expect(result).toHaveProperty("sig")
expect(result).toHaveProperty("wrap")
expect(result).toHaveProperty("wraps")
})
})
+1 -1
View File
@@ -185,7 +185,7 @@ describe("Filters", () => {
it("should handle wrapped events", () => {
const event = createEvent({
wrap: createEvent(),
wraps: [createEvent()],
})
const result = getReplyFilters([event])
expect((result[0] as any)["#e"]).toHaveLength(2)
+5 -5
View File
@@ -41,12 +41,12 @@ export type SignedEvent = HashedEvent & {
}
export type UnwrappedEvent = HashedEvent & {
wrap: SignedEvent
wraps: SignedEvent[]
}
export type TrustedEvent = HashedEvent & {
sig?: string
wrap?: SignedEvent
wraps?: SignedEvent[]
[verifiedSymbol]?: boolean
}
@@ -111,7 +111,7 @@ export const isSignedEvent = (e: TrustedEvent): e is SignedEvent =>
Boolean(isHashedEvent(e) && typeof e.sig === "string" && e.sig.length > 0)
export const isUnwrappedEvent = (e: TrustedEvent): e is UnwrappedEvent =>
Boolean(isHashedEvent(e) && e.wrap && isSignedEvent(e.wrap))
Boolean(isHashedEvent(e) && e.wraps?.every(isSignedEvent))
export const isTrustedEvent = (e: TrustedEvent): e is TrustedEvent =>
isSignedEvent(e) || isUnwrappedEvent(e)
@@ -134,10 +134,10 @@ export const asSignedEvent = (e: SignedEvent): SignedEvent =>
pick(["kind", "tags", "content", "created_at", "pubkey", "id", "sig"], e)
export const asUnwrappedEvent = (e: UnwrappedEvent): UnwrappedEvent =>
pick(["kind", "tags", "content", "created_at", "pubkey", "id", "wrap"], e)
pick(["kind", "tags", "content", "created_at", "pubkey", "id", "wraps"], e)
export const asTrustedEvent = (e: TrustedEvent): TrustedEvent =>
pick(["kind", "tags", "content", "created_at", "pubkey", "id", "sig", "wrap"], e)
pick(["kind", "tags", "content", "created_at", "pubkey", "id", "sig", "wraps"], e)
// Utilities for working with events
+1 -3
View File
@@ -179,9 +179,7 @@ export const getReplyFilters = (events: TrustedEvent[], filter: Filter = {}) =>
a.push(getAddress(event))
}
if (event.wrap) {
e.push(event.wrap.id)
}
event.wraps?.forEach(wrap => e.push(wrap.id))
}
const filters = []
+5
View File
@@ -197,3 +197,8 @@ export const FOLLOW_PACK = 39089
export const DEPRECATED_RELAY_RECOMMENDATION = 2
export const DEPRECATED_DIRECT_MESSAGE = 4
export const DEPRECATED_NAMED_GENERIC = 30001
export const WRAPPED_KINDS = [
DIRECT_MESSAGE,
DIRECT_MESSAGE_FILE,
]