nostr-tools 2.23.12 → 2.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/lib/cjs/abstract-pool.js +11 -21
  2. package/lib/cjs/abstract-pool.js.map +3 -3
  3. package/lib/cjs/abstract-relay.js +1 -1
  4. package/lib/cjs/abstract-relay.js.map +2 -2
  5. package/lib/cjs/core.js +17 -1
  6. package/lib/cjs/core.js.map +3 -3
  7. package/lib/cjs/filter.js.map +1 -1
  8. package/lib/cjs/index.js +124 -123
  9. package/lib/cjs/index.js.map +4 -4
  10. package/lib/cjs/kinds.js +17 -1
  11. package/lib/cjs/kinds.js.map +3 -3
  12. package/lib/cjs/nip04.js.map +1 -1
  13. package/lib/cjs/nip10.js +20 -5
  14. package/lib/cjs/nip10.js.map +3 -3
  15. package/lib/cjs/nip13.js.map +1 -1
  16. package/lib/cjs/nip17.js +30 -23
  17. package/lib/cjs/nip17.js.map +4 -4
  18. package/lib/cjs/nip18.js +21 -14
  19. package/lib/cjs/nip18.js.map +4 -4
  20. package/lib/cjs/nip19.js.map +1 -1
  21. package/lib/cjs/nip21.js.map +1 -1
  22. package/lib/cjs/nip22.js +22 -7
  23. package/lib/cjs/nip22.js.map +3 -3
  24. package/lib/cjs/nip25.js +21 -14
  25. package/lib/cjs/nip25.js.map +4 -4
  26. package/lib/cjs/nip27.js.map +1 -1
  27. package/lib/cjs/nip28.js +21 -14
  28. package/lib/cjs/nip28.js.map +4 -4
  29. package/lib/cjs/nip29.js.map +1 -1
  30. package/lib/cjs/nip30.js.map +2 -2
  31. package/lib/cjs/nip42.js.map +2 -2
  32. package/lib/cjs/nip44.js.map +1 -1
  33. package/lib/cjs/nip45.js +22 -9
  34. package/lib/cjs/nip45.js.map +4 -4
  35. package/lib/cjs/nip46.js +63 -63
  36. package/lib/cjs/nip46.js.map +4 -4
  37. package/lib/cjs/nip47.js +25 -18
  38. package/lib/cjs/nip47.js.map +4 -4
  39. package/lib/cjs/nip57.js +23 -16
  40. package/lib/cjs/nip57.js.map +4 -4
  41. package/lib/cjs/nip58.js.map +2 -2
  42. package/lib/cjs/nip59.js +16 -7
  43. package/lib/cjs/nip59.js.map +3 -3
  44. package/lib/cjs/nip75.js.map +1 -1
  45. package/lib/cjs/nip94.js.map +1 -1
  46. package/lib/cjs/nip98.js +23 -16
  47. package/lib/cjs/nip98.js.map +4 -4
  48. package/lib/cjs/nip99.js.map +2 -2
  49. package/lib/cjs/nipb0.js +34 -16
  50. package/lib/cjs/nipb0.js.map +4 -4
  51. package/lib/cjs/nipb7.js +13 -7
  52. package/lib/cjs/nipb7.js.map +2 -2
  53. package/lib/cjs/pool.js +54 -54
  54. package/lib/cjs/pool.js.map +4 -4
  55. package/lib/cjs/pure.js +21 -14
  56. package/lib/cjs/pure.js.map +4 -4
  57. package/lib/cjs/references.js.map +1 -1
  58. package/lib/cjs/relay.js +43 -36
  59. package/lib/cjs/relay.js.map +4 -4
  60. package/lib/cjs/signer.js +21 -14
  61. package/lib/cjs/signer.js.map +4 -4
  62. package/lib/cjs/utils.js +10 -0
  63. package/lib/cjs/utils.js.map +2 -2
  64. package/lib/cjs/wasm.js +16 -2
  65. package/lib/cjs/wasm.js.map +4 -4
  66. package/lib/esm/abstract-pool.js +11 -21
  67. package/lib/esm/abstract-pool.js.map +3 -3
  68. package/lib/esm/abstract-relay.js +1 -1
  69. package/lib/esm/abstract-relay.js.map +2 -2
  70. package/lib/esm/core.js +15 -1
  71. package/lib/esm/core.js.map +3 -3
  72. package/lib/esm/filter.js.map +1 -1
  73. package/lib/esm/index.js +74 -73
  74. package/lib/esm/index.js.map +4 -4
  75. package/lib/esm/kinds.js +17 -1
  76. package/lib/esm/kinds.js.map +3 -3
  77. package/lib/esm/nip04.js.map +1 -1
  78. package/lib/esm/nip10.js +18 -5
  79. package/lib/esm/nip10.js.map +3 -3
  80. package/lib/esm/nip13.js.map +1 -1
  81. package/lib/esm/nip17.js +15 -8
  82. package/lib/esm/nip17.js.map +4 -4
  83. package/lib/esm/nip18.js +15 -8
  84. package/lib/esm/nip18.js.map +4 -4
  85. package/lib/esm/nip19.js.map +1 -1
  86. package/lib/esm/nip21.js.map +1 -1
  87. package/lib/esm/nip22.js +20 -7
  88. package/lib/esm/nip22.js.map +3 -3
  89. package/lib/esm/nip25.js +15 -8
  90. package/lib/esm/nip25.js.map +4 -4
  91. package/lib/esm/nip27.js.map +1 -1
  92. package/lib/esm/nip28.js +15 -8
  93. package/lib/esm/nip28.js.map +4 -4
  94. package/lib/esm/nip29.js.map +1 -1
  95. package/lib/esm/nip30.js.map +2 -2
  96. package/lib/esm/nip42.js.map +2 -2
  97. package/lib/esm/nip44.js.map +1 -1
  98. package/lib/esm/nip45.js +23 -10
  99. package/lib/esm/nip45.js.map +4 -4
  100. package/lib/esm/nip46.js +47 -47
  101. package/lib/esm/nip46.js.map +4 -4
  102. package/lib/esm/nip47.js +15 -8
  103. package/lib/esm/nip47.js.map +4 -4
  104. package/lib/esm/nip57.js +17 -10
  105. package/lib/esm/nip57.js.map +4 -4
  106. package/lib/esm/nip58.js.map +2 -2
  107. package/lib/esm/nip59.js +10 -1
  108. package/lib/esm/nip59.js.map +3 -3
  109. package/lib/esm/nip75.js.map +1 -1
  110. package/lib/esm/nip94.js.map +1 -1
  111. package/lib/esm/nip98.js +15 -8
  112. package/lib/esm/nip98.js.map +4 -4
  113. package/lib/esm/nip99.js.map +2 -2
  114. package/lib/esm/nipb0.js +35 -17
  115. package/lib/esm/nipb0.js.map +4 -4
  116. package/lib/esm/nipb7.js +13 -7
  117. package/lib/esm/nipb7.js.map +2 -2
  118. package/lib/esm/pool.js +47 -47
  119. package/lib/esm/pool.js.map +4 -4
  120. package/lib/esm/pure.js +15 -8
  121. package/lib/esm/pure.js.map +4 -4
  122. package/lib/esm/references.js.map +1 -1
  123. package/lib/esm/relay.js +37 -30
  124. package/lib/esm/relay.js.map +4 -4
  125. package/lib/esm/signer.js +15 -8
  126. package/lib/esm/signer.js.map +4 -4
  127. package/lib/esm/utils.js +10 -0
  128. package/lib/esm/utils.js.map +2 -2
  129. package/lib/esm/wasm.js +17 -3
  130. package/lib/esm/wasm.js.map +4 -4
  131. package/lib/nostr.bundle.js +73 -70
  132. package/lib/nostr.bundle.js.map +4 -4
  133. package/lib/types/abstract-pool.d.ts +6 -4
  134. package/lib/types/abstract-relay.d.ts +2 -2
  135. package/lib/types/kinds.d.ts +2 -0
  136. package/lib/types/nipb0.d.ts +0 -1
  137. package/lib/types/nipb0.test.d.ts +1 -0
  138. package/lib/types/nipb7.d.ts +0 -1
  139. package/lib/types/utils.d.ts +4 -0
  140. package/package.json +1 -1
  141. package/lib/types/helpers.d.ts +0 -2
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../wasm.ts", "../../core.ts"],
4
- "sourcesContent": ["import { bytesToHex } from '@noble/hashes/utils.js'\nimport { Nostr as NostrWasm } from 'nostr-wasm'\nimport { EventTemplate, Event, Nostr, VerifiedEvent, verifiedSymbol } from './core.ts'\n\nlet nw: NostrWasm\n\nexport function setNostrWasm(x: NostrWasm) {\n nw = x\n}\n\nclass Wasm implements Nostr {\n generateSecretKey(): Uint8Array {\n return nw.generateSecretKey()\n }\n getPublicKey(secretKey: Uint8Array): string {\n return bytesToHex(nw.getPublicKey(secretKey))\n }\n finalizeEvent(t: EventTemplate, secretKey: Uint8Array): VerifiedEvent {\n nw.finalizeEvent(t as any, secretKey)\n return t as VerifiedEvent\n }\n verifyEvent(event: Event): event is VerifiedEvent {\n try {\n nw.verifyEvent(event)\n event[verifiedSymbol] = true\n return true\n } catch (err) {\n return false\n }\n }\n}\n\nconst i: Wasm = new Wasm()\nexport const generateSecretKey = i.generateSecretKey\nexport const getPublicKey = i.getPublicKey\nexport const finalizeEvent = i.finalizeEvent\nexport const verifyEvent = i.verifyEvent\nexport * from './core.ts'\n", "export interface Nostr {\n generateSecretKey(): Uint8Array\n getPublicKey(secretKey: Uint8Array): string\n finalizeEvent(event: EventTemplate, secretKey: Uint8Array): VerifiedEvent\n verifyEvent(event: Event): event is VerifiedEvent\n}\n\n/** Designates a verified event signature. */\nexport const verifiedSymbol = Symbol('verified')\n\nexport type NostrEvent = {\n kind: number\n tags: string[][]\n content: string\n created_at: number\n pubkey: string\n id: string\n sig: string\n [verifiedSymbol]?: boolean\n}\n\nexport type Event = NostrEvent\nexport type EventTemplate = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at'>\nexport type UnsignedEvent = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at' | 'pubkey'>\n\n/** An event whose signature has been verified. */\nexport interface VerifiedEvent extends Event {\n [verifiedSymbol]: true\n}\n\nconst isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object\n\nexport function validateEvent<T>(event: T): event is T & UnsignedEvent {\n if (!isRecord(event)) return false\n if (typeof event.kind !== 'number') return false\n if (typeof event.content !== 'string') return false\n if (typeof event.created_at !== 'number') return false\n if (typeof event.pubkey !== 'string') return false\n if (!event.pubkey.match(/^[a-f0-9]{64}$/)) return false\n\n if (!Array.isArray(event.tags)) return false\n for (let i = 0; i < event.tags.length; i++) {\n let tag = event.tags[i]\n if (!Array.isArray(tag)) return false\n for (let j = 0; j < tag.length; j++) {\n if (typeof tag[j] !== 'string') return false\n }\n }\n\n return true\n}\n\n/**\n * Sort events in reverse-chronological order by the `created_at` timestamp,\n * and then by the event `id` (lexicographically) in case of ties.\n * This mutates the array.\n */\nexport function sortEvents(events: Event[]): Event[] {\n return events.sort((a: NostrEvent, b: NostrEvent): number => {\n if (a.created_at !== b.created_at) {\n return b.created_at - a.created_at\n }\n return a.id.localeCompare(b.id)\n })\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA2B;;;ACQpB,IAAM,iBAAiB,OAAO,UAAU;AAsB/C,IAAM,WAAW,CAAC,QAAiD,eAAe;AAE3E,SAAS,cAAiB,OAAsC;AACrE,MAAI,CAAC,SAAS,KAAK;AAAG,WAAO;AAC7B,MAAI,OAAO,MAAM,SAAS;AAAU,WAAO;AAC3C,MAAI,OAAO,MAAM,YAAY;AAAU,WAAO;AAC9C,MAAI,OAAO,MAAM,eAAe;AAAU,WAAO;AACjD,MAAI,OAAO,MAAM,WAAW;AAAU,WAAO;AAC7C,MAAI,CAAC,MAAM,OAAO,MAAM,gBAAgB;AAAG,WAAO;AAElD,MAAI,CAAC,MAAM,QAAQ,MAAM,IAAI;AAAG,WAAO;AACvC,WAASA,KAAI,GAAGA,KAAI,MAAM,KAAK,QAAQA,MAAK;AAC1C,QAAI,MAAM,MAAM,KAAKA;AACrB,QAAI,CAAC,MAAM,QAAQ,GAAG;AAAG,aAAO;AAChC,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAI,OAAO,IAAI,OAAO;AAAU,eAAO;AAAA,IACzC;AAAA,EACF;AAEA,SAAO;AACT;AAOO,SAAS,WAAW,QAA0B;AACnD,SAAO,OAAO,KAAK,CAAC,GAAe,MAA0B;AAC3D,QAAI,EAAE,eAAe,EAAE,YAAY;AACjC,aAAO,EAAE,aAAa,EAAE;AAAA,IAC1B;AACA,WAAO,EAAE,GAAG,cAAc,EAAE,EAAE;AAAA,EAChC,CAAC;AACH;;;AD5DA,IAAI;AAEG,SAAS,aAAa,GAAc;AACzC,OAAK;AACP;AAEA,IAAM,OAAN,MAA4B;AAAA,EAC1B,oBAAgC;AAC9B,WAAO,GAAG,kBAAkB;AAAA,EAC9B;AAAA,EACA,aAAa,WAA+B;AAC1C,eAAO,yBAAW,GAAG,aAAa,SAAS,CAAC;AAAA,EAC9C;AAAA,EACA,cAAc,GAAkB,WAAsC;AACpE,OAAG,cAAc,GAAU,SAAS;AACpC,WAAO;AAAA,EACT;AAAA,EACA,YAAY,OAAsC;AAChD,QAAI;AACF,SAAG,YAAY,KAAK;AACpB,YAAM,kBAAkB;AACxB,aAAO;AAAA,IACT,SAAS,KAAP;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,IAAM,IAAU,IAAI,KAAK;AAClB,IAAM,oBAAoB,EAAE;AAC5B,IAAM,eAAe,EAAE;AACvB,IAAM,gBAAgB,EAAE;AACxB,IAAM,cAAc,EAAE;",
6
- "names": ["i"]
3
+ "sources": ["../../wasm.ts", "../../utils.ts", "../../core.ts"],
4
+ "sourcesContent": ["import { bytesToHex } from '@noble/hashes/utils.js'\nimport { Nostr as NostrWasm } from 'nostr-wasm'\nimport { EventTemplate, Event, Nostr, VerifiedEvent, verifiedSymbol } from './core.ts'\n\nlet nw: NostrWasm\n\nexport function setNostrWasm(x: NostrWasm) {\n nw = x\n}\n\nclass Wasm implements Nostr {\n generateSecretKey(): Uint8Array {\n return nw.generateSecretKey()\n }\n getPublicKey(secretKey: Uint8Array): string {\n return bytesToHex(nw.getPublicKey(secretKey))\n }\n finalizeEvent(t: EventTemplate, secretKey: Uint8Array): VerifiedEvent {\n nw.finalizeEvent(t as any, secretKey)\n return t as VerifiedEvent\n }\n verifyEvent(event: Event): event is VerifiedEvent {\n try {\n nw.verifyEvent(event)\n event[verifiedSymbol] = true\n return true\n } catch (err) {\n return false\n }\n }\n}\n\nconst i: Wasm = new Wasm()\nexport const generateSecretKey = i.generateSecretKey\nexport const getPublicKey = i.getPublicKey\nexport const finalizeEvent = i.finalizeEvent\nexport const verifyEvent = i.verifyEvent\nexport * from './core.ts'\n", "import type { NostrEvent } from './core.ts'\n\nexport const utf8Decoder: TextDecoder = new TextDecoder('utf-8')\nexport const utf8Encoder: TextEncoder = new TextEncoder()\n\nexport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js'\n\nexport function normalizeURL(url: string): string {\n try {\n if (url.indexOf('://') === -1) url = 'wss://' + url\n let p = new URL(url)\n if (p.protocol === 'http:') p.protocol = 'ws:'\n else if (p.protocol === 'https:') p.protocol = 'wss:'\n p.pathname = p.pathname.replace(/\\/+/g, '/')\n if (p.pathname.endsWith('/')) p.pathname = p.pathname.slice(0, -1)\n if ((p.port === '80' && p.protocol === 'ws:') || (p.port === '443' && p.protocol === 'wss:')) p.port = ''\n p.searchParams.sort()\n p.hash = ''\n return p.toString()\n } catch (e) {\n throw new Error(`Invalid URL: ${url}`)\n }\n}\n\nexport function insertEventIntoDescendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return b.created_at - event.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function insertEventIntoAscendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return event.created_at - b.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function binarySearch<T>(arr: T[], compare: (b: T) => number): [number, boolean] {\n let start = 0\n let end = arr.length - 1\n\n while (start <= end) {\n const mid = Math.floor((start + end) / 2)\n const cmp = compare(arr[mid])\n\n if (cmp === 0) {\n return [mid, true]\n }\n\n if (cmp < 0) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return [start, false]\n}\n\nexport function mergeReverseSortedLists(list1: NostrEvent[], list2: NostrEvent[]): NostrEvent[] {\n const result: NostrEvent[] = new Array(list1.length + list2.length)\n result.length = 0\n let i1 = 0\n let i2 = 0\n let sameTimestampIds: string[] = []\n\n while (i1 < list1.length && i2 < list2.length) {\n let next: NostrEvent\n if (list1[i1]?.created_at > list2[i2]?.created_at) {\n next = list1[i1]\n i1++\n } else {\n next = list2[i2]\n i2++\n }\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i1 < list1.length) {\n const next = list1[i1]\n i1++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i2 < list2.length) {\n const next = list2[i2]\n i2++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n return result\n}\n\n/**\n * Checks if a string is a 64-char lowercase hex string as most Nostr ids and pubkeys.\n */\nexport function isHex32(input: string): boolean {\n for (let i = 0; i < 64; i++) {\n let cc = input.charCodeAt(i)\n if (isNaN(cc) || cc < 48 || cc > 102 || (cc > 57 && cc < 97)) {\n return false\n }\n }\n return true\n}\n", "import { isHex32 } from './utils.ts'\n\nexport interface Nostr {\n generateSecretKey(): Uint8Array\n getPublicKey(secretKey: Uint8Array): string\n finalizeEvent(event: EventTemplate, secretKey: Uint8Array): VerifiedEvent\n verifyEvent(event: Event): event is VerifiedEvent\n}\n\n/** Designates a verified event signature. */\nexport const verifiedSymbol = Symbol('verified')\n\nexport type NostrEvent = {\n kind: number\n tags: string[][]\n content: string\n created_at: number\n pubkey: string\n id: string\n sig: string\n [verifiedSymbol]?: boolean\n}\n\nexport type Event = NostrEvent\nexport type EventTemplate = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at'>\nexport type UnsignedEvent = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at' | 'pubkey'>\n\n/** An event whose signature has been verified. */\nexport interface VerifiedEvent extends Event {\n [verifiedSymbol]: true\n}\n\nconst isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object\n\nexport function validateEvent<T>(event: T): event is T & UnsignedEvent {\n if (!isRecord(event)) return false\n if (typeof event.kind !== 'number') return false\n if (typeof event.content !== 'string') return false\n if (typeof event.created_at !== 'number') return false\n if (typeof event.pubkey !== 'string') return false\n if (!isHex32(event.pubkey)) return false\n\n if (!Array.isArray(event.tags)) return false\n for (let i = 0; i < event.tags.length; i++) {\n let tag = event.tags[i]\n if (!Array.isArray(tag)) return false\n for (let j = 0; j < tag.length; j++) {\n if (typeof tag[j] !== 'string') return false\n }\n }\n\n return true\n}\n\n/**\n * Sort events in reverse-chronological order by the `created_at` timestamp,\n * and then by the event `id` (lexicographically) in case of ties.\n * This mutates the array.\n */\nexport function sortEvents(events: Event[]): Event[] {\n return events.sort((a: NostrEvent, b: NostrEvent): number => {\n if (a.created_at !== b.created_at) {\n return b.created_at - a.created_at\n }\n return a.id.localeCompare(b.id)\n })\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,gBAA2B;;;ACK3B,mBAAuC;AAHhC,IAAM,cAA2B,IAAI,YAAY,OAAO;AACxD,IAAM,cAA2B,IAAI,YAAY;AA8HjD,SAAS,QAAQ,OAAwB;AAC9C,WAASC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAC3B,QAAI,KAAK,MAAM,WAAWA,EAAC;AAC3B,QAAI,MAAM,EAAE,KAAK,KAAK,MAAM,KAAK,OAAQ,KAAK,MAAM,KAAK,IAAK;AAC5D,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;AC/HO,IAAM,iBAAiB,OAAO,UAAU;AAsB/C,IAAM,WAAW,CAAC,QAAiD,eAAe;AAE3E,SAAS,cAAiB,OAAsC;AACrE,MAAI,CAAC,SAAS,KAAK;AAAG,WAAO;AAC7B,MAAI,OAAO,MAAM,SAAS;AAAU,WAAO;AAC3C,MAAI,OAAO,MAAM,YAAY;AAAU,WAAO;AAC9C,MAAI,OAAO,MAAM,eAAe;AAAU,WAAO;AACjD,MAAI,OAAO,MAAM,WAAW;AAAU,WAAO;AAC7C,MAAI,CAAC,QAAQ,MAAM,MAAM;AAAG,WAAO;AAEnC,MAAI,CAAC,MAAM,QAAQ,MAAM,IAAI;AAAG,WAAO;AACvC,WAASC,KAAI,GAAGA,KAAI,MAAM,KAAK,QAAQA,MAAK;AAC1C,QAAI,MAAM,MAAM,KAAKA;AACrB,QAAI,CAAC,MAAM,QAAQ,GAAG;AAAG,aAAO;AAChC,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAI,OAAO,IAAI,OAAO;AAAU,eAAO;AAAA,IACzC;AAAA,EACF;AAEA,SAAO;AACT;AAOO,SAAS,WAAW,QAA0B;AACnD,SAAO,OAAO,KAAK,CAAC,GAAe,MAA0B;AAC3D,QAAI,EAAE,eAAe,EAAE,YAAY;AACjC,aAAO,EAAE,aAAa,EAAE;AAAA,IAC1B;AACA,WAAO,EAAE,GAAG,cAAc,EAAE,EAAE;AAAA,EAChC,CAAC;AACH;;;AF9DA,IAAI;AAEG,SAAS,aAAa,GAAc;AACzC,OAAK;AACP;AAEA,IAAM,OAAN,MAA4B;AAAA,EAC1B,oBAAgC;AAC9B,WAAO,GAAG,kBAAkB;AAAA,EAC9B;AAAA,EACA,aAAa,WAA+B;AAC1C,eAAO,0BAAW,GAAG,aAAa,SAAS,CAAC;AAAA,EAC9C;AAAA,EACA,cAAc,GAAkB,WAAsC;AACpE,OAAG,cAAc,GAAU,SAAS;AACpC,WAAO;AAAA,EACT;AAAA,EACA,YAAY,OAAsC;AAChD,QAAI;AACF,SAAG,YAAY,KAAK;AACpB,YAAM,kBAAkB;AACxB,aAAO;AAAA,IACT,SAAS,KAAP;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,IAAM,IAAU,IAAI,KAAK;AAClB,IAAM,oBAAoB,EAAE;AAC5B,IAAM,eAAe,EAAE;AACvB,IAAM,gBAAgB,EAAE;AACxB,IAAM,cAAc,EAAE;",
6
+ "names": ["import_utils", "i", "i"]
7
7
  }
@@ -1,6 +1,3 @@
1
- // core.ts
2
- var verifiedSymbol = Symbol("verified");
3
-
4
1
  // utils.ts
5
2
  import { bytesToHex, hexToBytes } from "@noble/hashes/utils.js";
6
3
  var utf8Decoder = new TextDecoder("utf-8");
@@ -471,7 +468,7 @@ var AbstractRelay = class {
471
468
  case "EVENT": {
472
469
  const so = this.openSubs.get(data[1]);
473
470
  const event = data[2];
474
- if (this.verifyEvent(event) && matchFilters(so.filters, event)) {
471
+ if (matchFilters(so.filters, event) && this.verifyEvent(event, this.url)) {
475
472
  so.onevent(event);
476
473
  } else {
477
474
  so.oninvalidevent?.(event);
@@ -627,12 +624,6 @@ var Subscription = class {
627
624
  }
628
625
  };
629
626
 
630
- // helpers.ts
631
- var alwaysTrue = (t) => {
632
- t[verifiedSymbol] = true;
633
- return true;
634
- };
635
-
636
627
  // nip45.ts
637
628
  import { sha256 } from "@noble/hashes/sha2.js";
638
629
  import { bytesToHex as bytesToHex2 } from "@noble/hashes/utils.js";
@@ -659,7 +650,7 @@ function newHll() {
659
650
  return new Uint8Array(M);
660
651
  }
661
652
  function hllDecode(hex) {
662
- if (hex.length !== HLL_HEX_LENGTH || !/^[0-9a-fA-F]+$/.test(hex))
653
+ if (hex.length !== HLL_HEX_LENGTH || !/^[0-9a-f]+$/.test(hex))
663
654
  return void 0;
664
655
  const registers = new Uint8Array(M);
665
656
  for (let i = 0; i < M; i++) {
@@ -700,7 +691,6 @@ var AbstractSimplePool = class {
700
691
  enableReconnect;
701
692
  idleTimeout = 2e4;
702
693
  automaticallyAuth;
703
- trustedRelayURLs = /* @__PURE__ */ new Set();
704
694
  onRelayConnectionFailure;
705
695
  onRelayConnectionSuccess;
706
696
  allowConnectingToRelay;
@@ -724,7 +714,7 @@ var AbstractSimplePool = class {
724
714
  let relay = this.relays.get(url);
725
715
  if (!relay) {
726
716
  relay = new AbstractRelay(url, {
727
- verifyEvent: this.trustedRelayURLs.has(url) ? alwaysTrue : this.verifyEvent,
717
+ verifyEvent: this.verifyEvent,
728
718
  websocketImplementation: this._WebSocket,
729
719
  enablePing: this.enablePing,
730
720
  enableReconnect: this.enableReconnect,
@@ -808,11 +798,11 @@ var AbstractSimplePool = class {
808
798
  }
809
799
  };
810
800
  const closesReceived = [];
811
- let handleClose = (i, reason) => {
801
+ let handleClose = (i, url, reason) => {
812
802
  if (closesReceived[i])
813
803
  return;
814
804
  handleEose(i);
815
- closesReceived[i] = reason;
805
+ closesReceived[i] = { url, reason };
816
806
  if (closesReceived.filter((a) => a).length === groupedRequests.length) {
817
807
  params.onclose?.(closesReceived);
818
808
  handleClose = () => {
@@ -830,7 +820,7 @@ var AbstractSimplePool = class {
830
820
  const allOpened = Promise.all(
831
821
  groupedRequests.map(async ({ url, filters }, i) => {
832
822
  if (this.allowConnectingToRelay?.(url, ["read", filters]) === false) {
833
- handleClose(i, "connection skipped by allowConnectingToRelay");
823
+ handleClose(i, url, "connection skipped by allowConnectingToRelay");
834
824
  return;
835
825
  }
836
826
  let relay;
@@ -841,7 +831,7 @@ var AbstractSimplePool = class {
841
831
  });
842
832
  } catch (err) {
843
833
  this.onRelayConnectionFailure?.(url);
844
- handleClose(i, err?.message || String(err));
834
+ handleClose(i, url, err?.message || String(err));
845
835
  return;
846
836
  }
847
837
  this.onRelayConnectionSuccess?.(url);
@@ -855,17 +845,17 @@ var AbstractSimplePool = class {
855
845
  ...params,
856
846
  oneose: () => handleEose(i),
857
847
  onclose: (reason2) => {
858
- handleClose(i, reason2);
848
+ handleClose(i, url, reason2);
859
849
  },
860
850
  alreadyHaveEvent: localAlreadyHaveEventHandler,
861
851
  eoseTimeout: params.maxWait,
862
852
  abort: params.abort
863
853
  });
864
854
  }).catch((err) => {
865
- handleClose(i, `auth was required and attempted, but failed with: ${err}`);
855
+ handleClose(i, url, `auth was required and attempted, but failed with: ${err}`);
866
856
  });
867
857
  } else {
868
- handleClose(i, reason);
858
+ handleClose(i, url, reason);
869
859
  }
870
860
  },
871
861
  alreadyHaveEvent: localAlreadyHaveEventHandler,
@@ -893,7 +883,7 @@ var AbstractSimplePool = class {
893
883
  if (subcloser)
894
884
  subcloser.close(reason);
895
885
  else
896
- params.onclose?.(relays.map((_) => reason));
886
+ params.onclose?.(relays.map((url) => ({ url, reason })));
897
887
  }
898
888
  });
899
889
  return subcloser;