nostr-tools 2.23.7 → 2.23.8
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.
- package/lib/cjs/index.js +16 -9
- package/lib/cjs/index.js.map +3 -3
- package/lib/cjs/nip10.js +5 -4
- package/lib/cjs/nip10.js.map +2 -2
- package/lib/cjs/nip22.js +11 -5
- package/lib/cjs/nip22.js.map +2 -2
- package/lib/cjs/nip46.js +7 -2
- package/lib/cjs/nip46.js.map +2 -2
- package/lib/esm/index.js +16 -9
- package/lib/esm/index.js.map +3 -3
- package/lib/esm/nip10.js +5 -4
- package/lib/esm/nip10.js.map +2 -2
- package/lib/esm/nip22.js +11 -5
- package/lib/esm/nip22.js.map +2 -2
- package/lib/esm/nip46.js +7 -2
- package/lib/esm/nip46.js.map +2 -2
- package/lib/nostr.bundle.js +16 -9
- package/lib/nostr.bundle.js.map +3 -3
- package/lib/types/nip46.d.ts +7 -5
- package/package.json +1 -1
package/lib/cjs/nip10.js
CHANGED
|
@@ -23,6 +23,7 @@ __export(nip10_exports, {
|
|
|
23
23
|
parse: () => parse
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(nip10_exports);
|
|
26
|
+
var HEX64 = /^[0-9a-fA-F]{64}$/;
|
|
26
27
|
function parse(event) {
|
|
27
28
|
const result = {
|
|
28
29
|
reply: void 0,
|
|
@@ -35,12 +36,12 @@ function parse(event) {
|
|
|
35
36
|
let maybeRoot;
|
|
36
37
|
for (let i = event.tags.length - 1; i >= 0; i--) {
|
|
37
38
|
const tag = event.tags[i];
|
|
38
|
-
if (tag[0] === "e" && tag[1]) {
|
|
39
|
+
if (tag[0] === "e" && tag[1] && HEX64.test(tag[1])) {
|
|
39
40
|
const [_, eTagEventId, eTagRelayUrl, eTagMarker, eTagAuthor] = tag;
|
|
40
41
|
const eventPointer = {
|
|
41
42
|
id: eTagEventId,
|
|
42
43
|
relays: eTagRelayUrl ? [eTagRelayUrl] : [],
|
|
43
|
-
author: eTagAuthor
|
|
44
|
+
author: eTagAuthor && HEX64.test(eTagAuthor) ? eTagAuthor : void 0
|
|
44
45
|
};
|
|
45
46
|
if (eTagMarker === "root") {
|
|
46
47
|
result.root = eventPointer;
|
|
@@ -62,14 +63,14 @@ function parse(event) {
|
|
|
62
63
|
result.mentions.push(eventPointer);
|
|
63
64
|
continue;
|
|
64
65
|
}
|
|
65
|
-
if (tag[0] === "q" && tag[1]) {
|
|
66
|
+
if (tag[0] === "q" && tag[1] && HEX64.test(tag[1])) {
|
|
66
67
|
const [_, eTagEventId, eTagRelayUrl] = tag;
|
|
67
68
|
result.quotes.push({
|
|
68
69
|
id: eTagEventId,
|
|
69
70
|
relays: eTagRelayUrl ? [eTagRelayUrl] : []
|
|
70
71
|
});
|
|
71
72
|
}
|
|
72
|
-
if (tag[0] === "p" && tag[1]) {
|
|
73
|
+
if (tag[0] === "p" && tag[1] && HEX64.test(tag[1])) {
|
|
73
74
|
result.profiles.push({
|
|
74
75
|
pubkey: tag[1],
|
|
75
76
|
relays: tag[2] ? [tag[2]] : []
|
package/lib/cjs/nip10.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../nip10.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Event } from './core.ts'\nimport type { EventPointer, ProfilePointer } from './nip19.ts'\n\nexport function parse(event: Pick<Event, 'tags'>): {\n /**\n * Pointer to the root of the thread.\n */\n root: EventPointer | undefined\n\n /**\n * Pointer to a \"parent\" event that parsed event replies to (responded to).\n */\n reply: EventPointer | undefined\n\n /**\n * Pointers to events that may or may not be in the reply chain.\n */\n mentions: EventPointer[]\n\n /**\n * Pointers to events that were directly quoted.\n */\n quotes: EventPointer[]\n\n /**\n * List of pubkeys that are involved in the thread in no particular order.\n */\n profiles: ProfilePointer[]\n} {\n const result: ReturnType<typeof parse> = {\n reply: undefined,\n root: undefined,\n mentions: [],\n profiles: [],\n quotes: [],\n }\n\n let maybeParent: EventPointer | undefined\n let maybeRoot: EventPointer | undefined\n\n for (let i = event.tags.length - 1; i >= 0; i--) {\n const tag = event.tags[i]\n\n if (tag[0] === 'e' && tag[1]) {\n const [_, eTagEventId, eTagRelayUrl, eTagMarker, eTagAuthor] = tag as [\n string,\n string,\n undefined | string,\n undefined | string,\n undefined | string,\n ]\n\n const eventPointer: EventPointer = {\n id: eTagEventId,\n relays: eTagRelayUrl ? [eTagRelayUrl] : [],\n author: eTagAuthor,\n }\n\n if (eTagMarker === 'root') {\n result.root = eventPointer\n continue\n }\n\n if (eTagMarker === 'reply') {\n result.reply = eventPointer\n continue\n }\n\n if (eTagMarker === 'mention') {\n result.mentions.push(eventPointer)\n continue\n }\n\n if (!maybeParent) {\n maybeParent = eventPointer\n } else {\n maybeRoot = eventPointer\n }\n\n result.mentions.push(eventPointer)\n continue\n }\n\n if (tag[0] === 'q' && tag[1]) {\n const [_, eTagEventId, eTagRelayUrl] = tag as [string, string, undefined | string]\n result.quotes.push({\n id: eTagEventId,\n relays: eTagRelayUrl ? [eTagRelayUrl] : [],\n })\n }\n\n if (tag[0] === 'p' && tag[1]) {\n result.profiles.push({\n pubkey: tag[1],\n relays: tag[2] ? [tag[2]] : [],\n })\n continue\n }\n }\n\n // get legacy (positional) markers, set reply to root and vice-versa if one of them is missing\n if (!result.root) {\n result.root = maybeRoot || maybeParent || result.reply\n }\n if (!result.reply) {\n result.reply = maybeParent || result.root\n }\n\n // remove root and reply from mentions, inherit relay hints from authors if any\n ;[result.reply, result.root].forEach(ref => {\n if (!ref) return\n\n let idx = result.mentions.indexOf(ref)\n if (idx !== -1) {\n result.mentions.splice(idx, 1)\n }\n if (ref.author) {\n let author = result.profiles.find(p => p.pubkey === ref.author)\n if (author && author.relays) {\n if (!ref.relays) {\n ref.relays = []\n }\n author.relays.forEach(url => {\n if (ref.relays!?.indexOf(url) === -1) ref.relays!.push(url)\n })\n author.relays = ref.relays\n }\n }\n })\n\n result.mentions.forEach(ref => {\n if (ref!.author) {\n let author = result.profiles.find(p => p.pubkey === ref.author)\n if (author && author.relays) {\n if (!ref.relays) {\n ref.relays = []\n }\n author.relays.forEach(url => {\n if (ref.relays!.indexOf(url) === -1) ref.relays!.push(url)\n })\n author.relays = ref.relays\n }\n }\n })\n\n return result\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import type { Event } from './core.ts'\nimport type { EventPointer, ProfilePointer } from './nip19.ts'\n\nconst HEX64 = /^[0-9a-fA-F]{64}$/\n\nexport function parse(event: Pick<Event, 'tags'>): {\n /**\n * Pointer to the root of the thread.\n */\n root: EventPointer | undefined\n\n /**\n * Pointer to a \"parent\" event that parsed event replies to (responded to).\n */\n reply: EventPointer | undefined\n\n /**\n * Pointers to events that may or may not be in the reply chain.\n */\n mentions: EventPointer[]\n\n /**\n * Pointers to events that were directly quoted.\n */\n quotes: EventPointer[]\n\n /**\n * List of pubkeys that are involved in the thread in no particular order.\n */\n profiles: ProfilePointer[]\n} {\n const result: ReturnType<typeof parse> = {\n reply: undefined,\n root: undefined,\n mentions: [],\n profiles: [],\n quotes: [],\n }\n\n let maybeParent: EventPointer | undefined\n let maybeRoot: EventPointer | undefined\n\n for (let i = event.tags.length - 1; i >= 0; i--) {\n const tag = event.tags[i]\n\n if (tag[0] === 'e' && tag[1] && HEX64.test(tag[1])) {\n const [_, eTagEventId, eTagRelayUrl, eTagMarker, eTagAuthor] = tag as [\n string,\n string,\n undefined | string,\n undefined | string,\n undefined | string,\n ]\n\n const eventPointer: EventPointer = {\n id: eTagEventId,\n relays: eTagRelayUrl ? [eTagRelayUrl] : [],\n author: eTagAuthor && HEX64.test(eTagAuthor) ? eTagAuthor : undefined,\n }\n\n if (eTagMarker === 'root') {\n result.root = eventPointer\n continue\n }\n\n if (eTagMarker === 'reply') {\n result.reply = eventPointer\n continue\n }\n\n if (eTagMarker === 'mention') {\n result.mentions.push(eventPointer)\n continue\n }\n\n if (!maybeParent) {\n maybeParent = eventPointer\n } else {\n maybeRoot = eventPointer\n }\n\n result.mentions.push(eventPointer)\n continue\n }\n\n if (tag[0] === 'q' && tag[1] && HEX64.test(tag[1])) {\n const [_, eTagEventId, eTagRelayUrl] = tag as [string, string, undefined | string]\n result.quotes.push({\n id: eTagEventId,\n relays: eTagRelayUrl ? [eTagRelayUrl] : [],\n })\n }\n\n if (tag[0] === 'p' && tag[1] && HEX64.test(tag[1])) {\n result.profiles.push({\n pubkey: tag[1],\n relays: tag[2] ? [tag[2]] : [],\n })\n continue\n }\n }\n\n // get legacy (positional) markers, set reply to root and vice-versa if one of them is missing\n if (!result.root) {\n result.root = maybeRoot || maybeParent || result.reply\n }\n if (!result.reply) {\n result.reply = maybeParent || result.root\n }\n\n // remove root and reply from mentions, inherit relay hints from authors if any\n ;[result.reply, result.root].forEach(ref => {\n if (!ref) return\n\n let idx = result.mentions.indexOf(ref)\n if (idx !== -1) {\n result.mentions.splice(idx, 1)\n }\n if (ref.author) {\n let author = result.profiles.find(p => p.pubkey === ref.author)\n if (author && author.relays) {\n if (!ref.relays) {\n ref.relays = []\n }\n author.relays.forEach(url => {\n if (ref.relays!?.indexOf(url) === -1) ref.relays!.push(url)\n })\n author.relays = ref.relays\n }\n }\n })\n\n result.mentions.forEach(ref => {\n if (ref!.author) {\n let author = result.profiles.find(p => p.pubkey === ref.author)\n if (author && author.relays) {\n if (!ref.relays) {\n ref.relays = []\n }\n author.relays.forEach(url => {\n if (ref.relays!.indexOf(url) === -1) ref.relays!.push(url)\n })\n author.relays = ref.relays\n }\n }\n })\n\n return result\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/lib/cjs/nip22.js
CHANGED
|
@@ -23,6 +23,7 @@ __export(nip22_exports, {
|
|
|
23
23
|
parse: () => parse
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(nip22_exports);
|
|
26
|
+
var HEX64 = /^[0-9a-fA-F]{64}$/;
|
|
26
27
|
function parseKind(kind) {
|
|
27
28
|
if (!kind)
|
|
28
29
|
return void 0;
|
|
@@ -36,9 +37,12 @@ function parseAddressPointer(value, relayUrl) {
|
|
|
36
37
|
const kind = parseInt(value.slice(0, idx), 10);
|
|
37
38
|
if (Number.isNaN(kind))
|
|
38
39
|
return void 0;
|
|
40
|
+
const pubkey = value.slice(idx + 1, idx2);
|
|
41
|
+
if (!HEX64.test(pubkey))
|
|
42
|
+
return void 0;
|
|
39
43
|
return {
|
|
40
44
|
kind,
|
|
41
|
-
pubkey
|
|
45
|
+
pubkey,
|
|
42
46
|
identifier: value.slice(idx2 + 1),
|
|
43
47
|
relays: relayUrl ? [relayUrl] : []
|
|
44
48
|
};
|
|
@@ -47,12 +51,12 @@ function parsePointer(tag) {
|
|
|
47
51
|
switch (tag[0]) {
|
|
48
52
|
case "E":
|
|
49
53
|
case "e":
|
|
50
|
-
if (!tag[1])
|
|
54
|
+
if (!tag[1] || !HEX64.test(tag[1]))
|
|
51
55
|
return void 0;
|
|
52
56
|
return {
|
|
53
57
|
id: tag[1],
|
|
54
58
|
relays: tag[2] ? [tag[2]] : [],
|
|
55
|
-
author: tag[3]
|
|
59
|
+
author: tag[3] && HEX64.test(tag[3]) ? tag[3] : void 0
|
|
56
60
|
};
|
|
57
61
|
case "A":
|
|
58
62
|
case "a":
|
|
@@ -75,10 +79,12 @@ function parseQuote(tag) {
|
|
|
75
79
|
if (tag[1].includes(":")) {
|
|
76
80
|
return parseAddressPointer(tag[1], tag[2]);
|
|
77
81
|
}
|
|
82
|
+
if (!HEX64.test(tag[1]))
|
|
83
|
+
return void 0;
|
|
78
84
|
return {
|
|
79
85
|
id: tag[1],
|
|
80
86
|
relays: tag[2] ? [tag[2]] : [],
|
|
81
|
-
author: tag[3]
|
|
87
|
+
author: tag[3] && HEX64.test(tag[3]) ? tag[3] : void 0
|
|
82
88
|
};
|
|
83
89
|
}
|
|
84
90
|
function choosePointer(candidates) {
|
|
@@ -138,7 +144,7 @@ function parse(event) {
|
|
|
138
144
|
result.quotes.push(pointer);
|
|
139
145
|
continue;
|
|
140
146
|
}
|
|
141
|
-
if ((tag[0] === "P" || tag[0] === "p") && tag[1]) {
|
|
147
|
+
if ((tag[0] === "P" || tag[0] === "p") && tag[1] && HEX64.test(tag[1])) {
|
|
142
148
|
result.profiles.push({
|
|
143
149
|
pubkey: tag[1],
|
|
144
150
|
relays: tag[2] ? [tag[2]] : []
|
package/lib/cjs/nip22.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../nip22.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Event } from './core.ts'\nimport type { AddressPointer, EventPointer, ProfilePointer } from './nip19.ts'\n\nexport type ExternalPointer = {\n value: string\n hint?: string\n}\n\nfunction parseKind(kind: string | undefined): number | string | undefined {\n if (!kind) return undefined\n return /^\\d+$/.test(kind) ? parseInt(kind, 10) : kind\n}\n\nfunction parseAddressPointer(value: string, relayUrl?: string): AddressPointer | undefined {\n const idx = value.indexOf(':')\n const idx2 = value.indexOf(':', idx + 1)\n if (idx === -1 || idx2 === -1) return undefined\n\n const kind = parseInt(value.slice(0, idx), 10)\n if (Number.isNaN(kind)) return undefined\n\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import type { Event } from './core.ts'\nimport type { AddressPointer, EventPointer, ProfilePointer } from './nip19.ts'\n\nconst HEX64 = /^[0-9a-fA-F]{64}$/\n\nexport type ExternalPointer = {\n value: string\n hint?: string\n}\n\nfunction parseKind(kind: string | undefined): number | string | undefined {\n if (!kind) return undefined\n return /^\\d+$/.test(kind) ? parseInt(kind, 10) : kind\n}\n\nfunction parseAddressPointer(value: string, relayUrl?: string): AddressPointer | undefined {\n const idx = value.indexOf(':')\n const idx2 = value.indexOf(':', idx + 1)\n if (idx === -1 || idx2 === -1) return undefined\n\n const kind = parseInt(value.slice(0, idx), 10)\n if (Number.isNaN(kind)) return undefined\n\n const pubkey = value.slice(idx + 1, idx2)\n if (!HEX64.test(pubkey)) return undefined\n\n return {\n kind,\n pubkey,\n identifier: value.slice(idx2 + 1),\n relays: relayUrl ? [relayUrl] : [],\n }\n}\n\nfunction parsePointer(tag: string[]): EventPointer | AddressPointer | ExternalPointer | undefined {\n switch (tag[0]) {\n case 'E':\n case 'e':\n if (!tag[1] || !HEX64.test(tag[1])) return undefined\n return {\n id: tag[1],\n relays: tag[2] ? [tag[2]] : [],\n author: tag[3] && HEX64.test(tag[3]) ? tag[3] : undefined,\n }\n case 'A':\n case 'a':\n if (!tag[1]) return undefined\n return parseAddressPointer(tag[1], tag[2])\n case 'I':\n case 'i':\n if (!tag[1]) return undefined\n return {\n value: tag[1],\n hint: tag[2],\n }\n }\n}\n\nfunction parseQuote(tag: string[]): EventPointer | AddressPointer | ExternalPointer | undefined {\n if (!tag[1]) return undefined\n\n if (tag[1].includes(':')) {\n return parseAddressPointer(tag[1], tag[2])\n }\n\n if (!HEX64.test(tag[1])) return undefined\n\n return {\n id: tag[1],\n relays: tag[2] ? [tag[2]] : [],\n author: tag[3] && HEX64.test(tag[3]) ? tag[3] : undefined,\n }\n}\n\nfunction choosePointer(\n candidates: Array<{ tagName: string; pointer: EventPointer | AddressPointer | ExternalPointer }>,\n): EventPointer | AddressPointer | ExternalPointer | undefined {\n return (\n candidates.findLast(candidate => candidate.tagName === 'A' || candidate.tagName === 'a')?.pointer ||\n candidates.findLast(candidate => candidate.tagName === 'I' || candidate.tagName === 'i')?.pointer ||\n candidates.findLast(candidate => candidate.tagName === 'E' || candidate.tagName === 'e')?.pointer\n )\n}\n\nfunction inheritRelayHints(\n pointer: EventPointer | AddressPointer | ExternalPointer | undefined,\n profiles: ProfilePointer[],\n) {\n if (!pointer || !('id' in pointer) || !pointer.author) return\n\n const author = profiles.find(profile => profile.pubkey === pointer.author)\n if (!author || !author.relays) return\n\n if (!pointer.relays) {\n pointer.relays = []\n }\n\n author.relays.forEach(url => {\n if (pointer.relays!.indexOf(url) === -1) pointer.relays!.push(url)\n })\n author.relays = pointer.relays\n}\n\nexport function parse(event: Pick<Event, 'tags'>): {\n /**\n * Pointer to root scope.\n */\n root: EventPointer | AddressPointer | ExternalPointer | undefined\n\n /**\n * Kind of root scope from `K` tag.\n */\n rootKind: number | string | undefined\n\n /**\n * Pointer to parent item being replied to.\n */\n reply: EventPointer | AddressPointer | ExternalPointer | undefined\n\n /**\n * Kind of parent item from `k` tag.\n */\n replyKind: number | string | undefined\n\n /**\n * Reserved for extra referenced items.\n */\n mentions: (EventPointer | AddressPointer | ExternalPointer)[]\n\n /**\n * Pointers directly quoted with `q` tags.\n */\n quotes: (EventPointer | AddressPointer | ExternalPointer)[]\n\n /**\n * Root and parent authors.\n */\n profiles: ProfilePointer[]\n} {\n const result: ReturnType<typeof parse> = {\n root: undefined,\n rootKind: undefined,\n reply: undefined,\n replyKind: undefined,\n mentions: [],\n quotes: [],\n profiles: [],\n }\n\n const rootCandidates: Array<{ tagName: string; pointer: EventPointer | AddressPointer | ExternalPointer }> = []\n const replyCandidates: Array<{ tagName: string; pointer: EventPointer | AddressPointer | ExternalPointer }> = []\n\n for (const tag of event.tags) {\n if ((tag[0] === 'E' || tag[0] === 'A' || tag[0] === 'I') && tag[1]) {\n const pointer = parsePointer(tag)\n if (pointer) rootCandidates.push({ tagName: tag[0], pointer })\n continue\n }\n\n if ((tag[0] === 'e' || tag[0] === 'a' || tag[0] === 'i') && tag[1]) {\n const pointer = parsePointer(tag)\n if (pointer) replyCandidates.push({ tagName: tag[0], pointer })\n continue\n }\n\n if (tag[0] === 'K') {\n result.rootKind = parseKind(tag[1])\n continue\n }\n\n if (tag[0] === 'k') {\n result.replyKind = parseKind(tag[1])\n continue\n }\n\n if (tag[0] === 'q') {\n const pointer = parseQuote(tag)\n if (pointer) result.quotes.push(pointer)\n continue\n }\n\n if ((tag[0] === 'P' || tag[0] === 'p') && tag[1] && HEX64.test(tag[1])) {\n result.profiles.push({\n pubkey: tag[1],\n relays: tag[2] ? [tag[2]] : [],\n })\n }\n }\n\n result.root = choosePointer(rootCandidates)\n result.reply = choosePointer(replyCandidates)\n\n inheritRelayHints(result.root, result.profiles)\n inheritRelayHints(result.reply, result.profiles)\n result.quotes.forEach(pointer => inheritRelayHints(pointer, result.profiles))\n\n return result\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/lib/cjs/nip46.js
CHANGED
|
@@ -1383,8 +1383,13 @@ var BunkerSigner = class {
|
|
|
1383
1383
|
if (resp !== "pong")
|
|
1384
1384
|
throw new Error(`result is not pong: ${resp}`);
|
|
1385
1385
|
}
|
|
1386
|
-
async connect() {
|
|
1387
|
-
|
|
1386
|
+
async connect(clientMetadata) {
|
|
1387
|
+
const params = [this.bp.pubkey, this.bp.secret || ""];
|
|
1388
|
+
if (clientMetadata) {
|
|
1389
|
+
params.push("");
|
|
1390
|
+
params.push(JSON.stringify(clientMetadata));
|
|
1391
|
+
}
|
|
1392
|
+
await this.sendRequest("connect", params);
|
|
1388
1393
|
}
|
|
1389
1394
|
async logout() {
|
|
1390
1395
|
let resp = await this.sendRequest("logout", []);
|