nostr-core 0.3.0 → 0.6.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 (142) hide show
  1. package/dist/index.d.ts +88 -4
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +93 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/lnurl.d.ts +161 -0
  6. package/dist/lnurl.d.ts.map +1 -0
  7. package/dist/lnurl.js +343 -0
  8. package/dist/lnurl.js.map +1 -0
  9. package/dist/nip02.d.ts +27 -0
  10. package/dist/nip02.d.ts.map +1 -0
  11. package/dist/nip02.js +55 -0
  12. package/dist/nip02.js.map +1 -0
  13. package/dist/nip05.d.ts +24 -0
  14. package/dist/nip05.d.ts.map +1 -0
  15. package/dist/nip05.js +57 -0
  16. package/dist/nip05.js.map +1 -0
  17. package/dist/nip06.d.ts +26 -0
  18. package/dist/nip06.d.ts.map +1 -0
  19. package/dist/nip06.js +49 -0
  20. package/dist/nip06.js.map +1 -0
  21. package/dist/nip07.d.ts +8 -0
  22. package/dist/nip07.d.ts.map +1 -1
  23. package/dist/nip07.js +24 -0
  24. package/dist/nip07.js.map +1 -1
  25. package/dist/nip09.d.ts +34 -0
  26. package/dist/nip09.d.ts.map +1 -0
  27. package/dist/nip09.js +66 -0
  28. package/dist/nip09.js.map +1 -0
  29. package/dist/nip10.d.ts +40 -0
  30. package/dist/nip10.d.ts.map +1 -0
  31. package/dist/nip10.js +69 -0
  32. package/dist/nip10.js.map +1 -0
  33. package/dist/nip11.d.ts +41 -0
  34. package/dist/nip11.d.ts.map +1 -0
  35. package/dist/nip11.js +38 -0
  36. package/dist/nip11.js.map +1 -0
  37. package/dist/nip13.d.ts +26 -0
  38. package/dist/nip13.d.ts.map +1 -0
  39. package/dist/nip13.js +75 -0
  40. package/dist/nip13.js.map +1 -0
  41. package/dist/nip18.d.ts +28 -0
  42. package/dist/nip18.d.ts.map +1 -0
  43. package/dist/nip18.js +66 -0
  44. package/dist/nip18.js.map +1 -0
  45. package/dist/nip21.d.ts +14 -0
  46. package/dist/nip21.d.ts.map +1 -0
  47. package/dist/nip21.js +24 -0
  48. package/dist/nip21.js.map +1 -0
  49. package/dist/nip22.d.ts +26 -0
  50. package/dist/nip22.d.ts.map +1 -0
  51. package/dist/nip22.js +109 -0
  52. package/dist/nip22.js.map +1 -0
  53. package/dist/nip23.d.ts +24 -0
  54. package/dist/nip23.d.ts.map +1 -0
  55. package/dist/nip23.js +70 -0
  56. package/dist/nip23.js.map +1 -0
  57. package/dist/nip24.d.ts +31 -0
  58. package/dist/nip24.d.ts.map +1 -0
  59. package/dist/nip24.js +75 -0
  60. package/dist/nip24.js.map +1 -0
  61. package/dist/nip25.d.ts +32 -0
  62. package/dist/nip25.d.ts.map +1 -0
  63. package/dist/nip25.js +54 -0
  64. package/dist/nip25.js.map +1 -0
  65. package/dist/nip27.d.ts +16 -0
  66. package/dist/nip27.d.ts.map +1 -0
  67. package/dist/nip27.js +44 -0
  68. package/dist/nip27.js.map +1 -0
  69. package/dist/nip28.d.ts +52 -0
  70. package/dist/nip28.d.ts.map +1 -0
  71. package/dist/nip28.js +118 -0
  72. package/dist/nip28.js.map +1 -0
  73. package/dist/nip29.d.ts +60 -0
  74. package/dist/nip29.d.ts.map +1 -0
  75. package/dist/nip29.js +122 -0
  76. package/dist/nip29.js.map +1 -0
  77. package/dist/nip30.d.ts +18 -0
  78. package/dist/nip30.d.ts.map +1 -0
  79. package/dist/nip30.js +24 -0
  80. package/dist/nip30.js.map +1 -0
  81. package/dist/nip31.d.ts +11 -0
  82. package/dist/nip31.d.ts.map +1 -0
  83. package/dist/nip31.js +15 -0
  84. package/dist/nip31.js.map +1 -0
  85. package/dist/nip36.d.ts +14 -0
  86. package/dist/nip36.d.ts.map +1 -0
  87. package/dist/nip36.js +24 -0
  88. package/dist/nip36.js.map +1 -0
  89. package/dist/nip40.d.ts +14 -0
  90. package/dist/nip40.d.ts.map +1 -0
  91. package/dist/nip40.js +26 -0
  92. package/dist/nip40.js.map +1 -0
  93. package/dist/nip42.d.ts +20 -0
  94. package/dist/nip42.d.ts.map +1 -0
  95. package/dist/nip42.js +38 -0
  96. package/dist/nip42.js.map +1 -0
  97. package/dist/nip46.d.ts +17 -4
  98. package/dist/nip46.d.ts.map +1 -1
  99. package/dist/nip46.js +78 -38
  100. package/dist/nip46.js.map +1 -1
  101. package/dist/nip48.d.ts +23 -0
  102. package/dist/nip48.d.ts.map +1 -0
  103. package/dist/nip48.js +30 -0
  104. package/dist/nip48.js.map +1 -0
  105. package/dist/nip50.d.ts +23 -0
  106. package/dist/nip50.d.ts.map +1 -0
  107. package/dist/nip50.js +47 -0
  108. package/dist/nip50.js.map +1 -0
  109. package/dist/nip51.d.ts +57 -0
  110. package/dist/nip51.d.ts.map +1 -0
  111. package/dist/nip51.js +118 -0
  112. package/dist/nip51.js.map +1 -0
  113. package/dist/nip56.d.ts +28 -0
  114. package/dist/nip56.d.ts.map +1 -0
  115. package/dist/nip56.js +60 -0
  116. package/dist/nip56.js.map +1 -0
  117. package/dist/nip57.d.ts +48 -0
  118. package/dist/nip57.d.ts.map +1 -0
  119. package/dist/nip57.js +140 -0
  120. package/dist/nip57.js.map +1 -0
  121. package/dist/nip58.d.ts +82 -0
  122. package/dist/nip58.d.ts.map +1 -0
  123. package/dist/nip58.js +195 -0
  124. package/dist/nip58.js.map +1 -0
  125. package/dist/nip59.js +1 -1
  126. package/dist/nip65.d.ts +28 -0
  127. package/dist/nip65.d.ts.map +1 -0
  128. package/dist/nip65.js +83 -0
  129. package/dist/nip65.js.map +1 -0
  130. package/dist/nip98.d.ts +24 -0
  131. package/dist/nip98.d.ts.map +1 -0
  132. package/dist/nip98.js +68 -0
  133. package/dist/nip98.js.map +1 -0
  134. package/dist/relay.d.ts +2 -0
  135. package/dist/relay.d.ts.map +1 -1
  136. package/dist/relay.js +20 -0
  137. package/dist/relay.js.map +1 -1
  138. package/dist/signer.d.ts +4 -0
  139. package/dist/signer.d.ts.map +1 -1
  140. package/dist/signer.js +11 -0
  141. package/dist/signer.js.map +1 -1
  142. package/package.json +33 -4
package/dist/nip46.js CHANGED
@@ -34,25 +34,44 @@ export class Nip46RemoteError extends Nip46Error {
34
34
  }
35
35
  // URI parsing
36
36
  export function parseConnectionURI(uri) {
37
- const normalized = uri.replace('nostrconnect://', 'http://');
37
+ // Accept both nostrconnect:// and bunker:// prefixes
38
+ let normalized;
39
+ if (uri.startsWith('nostrconnect://')) {
40
+ normalized = uri.replace('nostrconnect://', 'http://');
41
+ }
42
+ else if (uri.startsWith('bunker://')) {
43
+ normalized = uri.replace('bunker://', 'http://');
44
+ }
45
+ else {
46
+ throw new Nip46Error('Invalid connection URI: must start with nostrconnect:// or bunker://', 'INVALID_URI');
47
+ }
38
48
  const url = new URL(normalized);
39
49
  const remotePubkey = url.host || url.pathname.replace('//', '');
40
- const relayUrl = url.searchParams.get('relay');
50
+ // Collect all relay params (supports multiple ?relay= params)
51
+ const relayUrls = url.searchParams.getAll('relay');
41
52
  if (!remotePubkey) {
42
- throw new Nip46Error('Invalid nostrconnect URI: missing remote pubkey', 'INVALID_URI');
43
- }
44
- if (!relayUrl) {
45
- throw new Nip46Error('Invalid nostrconnect URI: missing relay parameter', 'INVALID_URI');
46
- }
47
- return { remotePubkey, relayUrl };
53
+ throw new Nip46Error('Invalid connection URI: missing remote pubkey', 'INVALID_URI');
54
+ }
55
+ if (relayUrls.length === 0) {
56
+ throw new Nip46Error('Invalid connection URI: missing relay parameter', 'INVALID_URI');
57
+ }
58
+ // Extract optional secret
59
+ const secret = url.searchParams.get('secret') || undefined;
60
+ // Extract optional app metadata
61
+ const name = url.searchParams.get('name') || undefined;
62
+ const appUrl = url.searchParams.get('url') || undefined;
63
+ const image = url.searchParams.get('image') || undefined;
64
+ const appMetadata = name || appUrl || image ? { name, url: appUrl, image } : undefined;
65
+ return { remotePubkey, relayUrls, secret, ...(appMetadata ? { appMetadata } : {}) };
48
66
  }
49
67
  // NostrConnect class
50
68
  export class NostrConnect {
51
69
  remotePubkey;
52
- relayUrl;
70
+ relayUrls;
53
71
  secretKey;
54
72
  publicKey;
55
73
  relay;
74
+ secret;
56
75
  _connected = false;
57
76
  pendingRequests = new Map();
58
77
  sub;
@@ -62,42 +81,55 @@ export class NostrConnect {
62
81
  ? parseConnectionURI(connectionOrOpts)
63
82
  : connectionOrOpts;
64
83
  this.remotePubkey = opts.remotePubkey;
65
- this.relayUrl = opts.relayUrl;
84
+ this.relayUrls = opts.relayUrls;
66
85
  this.secretKey = opts.secretKey || randomBytes(32);
67
86
  this.publicKey = getPublicKey(this.secretKey);
68
- this.relay = new Relay(this.relayUrl);
87
+ this.secret = opts.secret;
69
88
  }
70
89
  get connected() {
71
90
  return this._connected;
72
91
  }
73
92
  async connect() {
74
- try {
75
- await this.relay.connect({ timeout: 5000 });
76
- }
77
- catch (err) {
78
- throw new Nip46ConnectionError(`Failed to connect to relay ${this.relayUrl}: ${err.message}`);
79
- }
80
- // Subscribe to responses from the remote signer
81
- this.sub = this.relay.subscribe([
82
- {
83
- kinds: [NIP46_KIND],
84
- authors: [this.remotePubkey],
85
- '#p': [this.publicKey],
86
- },
87
- ], {
88
- onevent: (event) => {
89
- this._handleResponse(event);
90
- },
91
- });
92
- // Send connect RPC
93
- try {
94
- await this._sendRequest('connect', [this.publicKey]);
95
- }
96
- catch (err) {
97
- this.relay.close();
98
- throw new Nip46ConnectionError(`NIP-46 connect handshake failed: ${err.message}`);
93
+ // Try each relay until one succeeds
94
+ let lastError;
95
+ for (const relayUrl of this.relayUrls) {
96
+ const relay = new Relay(relayUrl);
97
+ try {
98
+ await relay.connect({ timeout: 5000 });
99
+ }
100
+ catch (err) {
101
+ lastError = err;
102
+ continue;
103
+ }
104
+ this.relay = relay;
105
+ // Subscribe to responses from the remote signer
106
+ this.sub = this.relay.subscribe([
107
+ {
108
+ kinds: [NIP46_KIND],
109
+ authors: [this.remotePubkey],
110
+ '#p': [this.publicKey],
111
+ },
112
+ ], {
113
+ onevent: (event) => {
114
+ this._handleResponse(event);
115
+ },
116
+ });
117
+ // Send connect RPC with optional secret
118
+ const params = this.secret
119
+ ? [this.publicKey, this.secret]
120
+ : [this.publicKey];
121
+ try {
122
+ await this._sendRequest('connect', params);
123
+ }
124
+ catch (err) {
125
+ this.relay.close();
126
+ lastError = err;
127
+ continue;
128
+ }
129
+ this._connected = true;
130
+ return;
99
131
  }
100
- this._connected = true;
132
+ throw new Nip46ConnectionError(`Failed to connect to any relay: ${lastError?.message || 'no relays provided'}`);
101
133
  }
102
134
  async disconnect() {
103
135
  if (!this._connected)
@@ -119,7 +151,7 @@ export class NostrConnect {
119
151
  }
120
152
  this.sub?.close();
121
153
  this.sub = undefined;
122
- this.relay.close();
154
+ this.relay?.close();
123
155
  this._connected = false;
124
156
  }
125
157
  async describe() {
@@ -142,6 +174,14 @@ export class NostrConnect {
142
174
  return this._sendRequest('nip04_decrypt', [pubkey, ciphertext]);
143
175
  },
144
176
  };
177
+ nip44 = {
178
+ encrypt: async (pubkey, plaintext) => {
179
+ return this._sendRequest('nip44_encrypt', [pubkey, plaintext]);
180
+ },
181
+ decrypt: async (pubkey, ciphertext) => {
182
+ return this._sendRequest('nip44_decrypt', [pubkey, ciphertext]);
183
+ },
184
+ };
145
185
  async getRelays() {
146
186
  const result = await this._sendRequest('get_relays', []);
147
187
  return JSON.parse(result);
package/dist/nip46.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nip46.js","sourceRoot":"","sources":["../src/nip46.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nip46.js","sourceRoot":"","sources":["../src/nip46.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { NostrEvent, EventTemplate } from './event.js';
2
+ export type ProxyProtocol = 'activitypub' | 'atproto' | 'rss' | 'web' | string;
3
+ export type ProxyTag = {
4
+ id: string;
5
+ protocol: ProxyProtocol;
6
+ };
7
+ /**
8
+ * Add a proxy tag to event tags, indicating the event was bridged from another protocol.
9
+ */
10
+ export declare function addProxyTag(tags: string[][], id: string, protocol: ProxyProtocol): string[][];
11
+ /**
12
+ * Get proxy tags from an event.
13
+ */
14
+ export declare function getProxyTags(event: NostrEvent | EventTemplate): ProxyTag[];
15
+ /**
16
+ * Check if an event was bridged from another protocol.
17
+ */
18
+ export declare function isProxied(event: NostrEvent | EventTemplate): boolean;
19
+ /**
20
+ * Get the first proxy tag matching a specific protocol.
21
+ */
22
+ export declare function getProxyByProtocol(event: NostrEvent | EventTemplate, protocol: ProxyProtocol): ProxyTag | undefined;
23
+ //# sourceMappingURL=nip48.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip48.d.ts","sourceRoot":"","sources":["../src/nip48.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE3D,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;AAE9E,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,aAAa,CAAA;CACxB,CAAA;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE,EAAE,CAE7F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,GAAG,QAAQ,EAAE,CAI1E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,CAEpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,EAAE,QAAQ,EAAE,aAAa,GAAG,QAAQ,GAAG,SAAS,CAInH"}
package/dist/nip48.js ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Add a proxy tag to event tags, indicating the event was bridged from another protocol.
3
+ */
4
+ export function addProxyTag(tags, id, protocol) {
5
+ return [...tags, ['proxy', id, protocol]];
6
+ }
7
+ /**
8
+ * Get proxy tags from an event.
9
+ */
10
+ export function getProxyTags(event) {
11
+ return event.tags
12
+ .filter(t => t[0] === 'proxy' && t[1] && t[2])
13
+ .map(t => ({ id: t[1], protocol: t[2] }));
14
+ }
15
+ /**
16
+ * Check if an event was bridged from another protocol.
17
+ */
18
+ export function isProxied(event) {
19
+ return event.tags.some(t => t[0] === 'proxy' && t[1] && t[2]);
20
+ }
21
+ /**
22
+ * Get the first proxy tag matching a specific protocol.
23
+ */
24
+ export function getProxyByProtocol(event, protocol) {
25
+ const tag = event.tags.find(t => t[0] === 'proxy' && t[2] === protocol);
26
+ if (!tag)
27
+ return undefined;
28
+ return { id: tag[1], protocol: tag[2] };
29
+ }
30
+ //# sourceMappingURL=nip48.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip48.js","sourceRoot":"","sources":["../src/nip48.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,EAAU,EAAE,QAAuB;IAC/E,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAiC;IAC5D,OAAO,KAAK,CAAC,IAAI;SACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAkB,EAAE,CAAC,CAAC,CAAA;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAiC;IACzD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiC,EAAE,QAAuB;IAC3F,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAA;IACvE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAC1B,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAkB,EAAE,CAAA;AAC1D,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { Filter } from './filter.js';
2
+ export type SearchFilter = Filter & {
3
+ search?: string;
4
+ };
5
+ /**
6
+ * Build a search filter for use with relays that support NIP-50.
7
+ * Adds the `search` field to a standard Nostr filter.
8
+ */
9
+ export declare function buildSearchFilter(query: string, filter?: Filter): SearchFilter;
10
+ /**
11
+ * Parse search modifiers from a search query string.
12
+ * Extracts key:value pairs and returns them with the remaining plain text.
13
+ * Modifiers: include:spam, domain:example.com, language:en, sentiment:positive, etc.
14
+ */
15
+ export declare function parseSearchQuery(query: string): {
16
+ text: string;
17
+ modifiers: Record<string, string>;
18
+ };
19
+ /**
20
+ * Build a search query string from text and modifiers.
21
+ */
22
+ export declare function buildSearchQuery(text: string, modifiers?: Record<string, string>): string;
23
+ //# sourceMappingURL=nip50.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip50.d.ts","sourceRoot":"","sources":["../src/nip50.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAK9E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC,CAmBA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQzF"}
package/dist/nip50.js ADDED
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Build a search filter for use with relays that support NIP-50.
3
+ * Adds the `search` field to a standard Nostr filter.
4
+ */
5
+ export function buildSearchFilter(query, filter) {
6
+ return {
7
+ ...filter,
8
+ search: query,
9
+ };
10
+ }
11
+ /**
12
+ * Parse search modifiers from a search query string.
13
+ * Extracts key:value pairs and returns them with the remaining plain text.
14
+ * Modifiers: include:spam, domain:example.com, language:en, sentiment:positive, etc.
15
+ */
16
+ export function parseSearchQuery(query) {
17
+ const modifiers = {};
18
+ const parts = [];
19
+ for (const token of query.split(/\s+/)) {
20
+ const colonIdx = token.indexOf(':');
21
+ if (colonIdx > 0 && colonIdx < token.length - 1) {
22
+ const key = token.slice(0, colonIdx);
23
+ const value = token.slice(colonIdx + 1);
24
+ modifiers[key] = value;
25
+ }
26
+ else {
27
+ parts.push(token);
28
+ }
29
+ }
30
+ return {
31
+ text: parts.join(' '),
32
+ modifiers,
33
+ };
34
+ }
35
+ /**
36
+ * Build a search query string from text and modifiers.
37
+ */
38
+ export function buildSearchQuery(text, modifiers) {
39
+ const parts = [text];
40
+ if (modifiers) {
41
+ for (const [key, value] of Object.entries(modifiers)) {
42
+ parts.push(`${key}:${value}`);
43
+ }
44
+ }
45
+ return parts.filter(Boolean).join(' ');
46
+ }
47
+ //# sourceMappingURL=nip50.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip50.js","sourceRoot":"","sources":["../src/nip50.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,MAAe;IAC9D,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,KAAK;KACd,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAI5C,MAAM,SAAS,GAA2B,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;YACvC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACrB,SAAS;KACV,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAkC;IAC/E,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;IACpB,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { type NostrEvent, type EventTemplate } from './event.js';
2
+ export type ListItem = {
3
+ tag: string;
4
+ value: string;
5
+ extra?: string[];
6
+ };
7
+ export type ParsedList = {
8
+ kind: number;
9
+ identifier?: string;
10
+ publicItems: ListItem[];
11
+ privateItems: ListItem[];
12
+ };
13
+ /**
14
+ * Create a list event template (unsigned).
15
+ * If privateItems and secretKey are provided, they are NIP-44 self-encrypted into the content.
16
+ */
17
+ export declare function createListEventTemplate(opts: {
18
+ kind: number;
19
+ identifier?: string;
20
+ publicItems: ListItem[];
21
+ privateItems?: ListItem[];
22
+ secretKey?: Uint8Array;
23
+ }): EventTemplate;
24
+ /**
25
+ * Create and sign a list event.
26
+ */
27
+ export declare function createListEvent(opts: {
28
+ kind: number;
29
+ identifier?: string;
30
+ publicItems: ListItem[];
31
+ privateItems?: ListItem[];
32
+ }, secretKey: Uint8Array): NostrEvent;
33
+ /**
34
+ * Parse a list event. If secretKey is provided, decrypt private items.
35
+ */
36
+ export declare function parseList(event: NostrEvent, secretKey?: Uint8Array): ParsedList;
37
+ /**
38
+ * Get event IDs from a parsed list.
39
+ */
40
+ export declare function getEventIds(list: ParsedList): string[];
41
+ /**
42
+ * Get pubkeys from a parsed list.
43
+ */
44
+ export declare function getPubkeys(list: ParsedList): string[];
45
+ /**
46
+ * Get hashtags from a parsed list.
47
+ */
48
+ export declare function getHashtags(list: ParsedList): string[];
49
+ /**
50
+ * Get relay URLs from a parsed list.
51
+ */
52
+ export declare function getRelayUrls(list: ParsedList): string[];
53
+ /**
54
+ * Get parameterized replaceable event addresses from a parsed list.
55
+ */
56
+ export declare function getAddresses(list: ParsedList): string[];
57
+ //# sourceMappingURL=nip51.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip51.d.ts","sourceRoot":"","sources":["../src/nip51.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/E,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,QAAQ,EAAE,CAAA;IACvB,YAAY,EAAE,QAAQ,EAAE,CAAA;CACzB,CAAA;AAoBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,QAAQ,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAA;IACzB,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB,GAAG,aAAa,CAqBhB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,QAAQ,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAA;CAC1B,EACD,SAAS,EAAE,UAAU,GACpB,UAAU,CAKZ;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,UAAU,GAAG,UAAU,CA0B/E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAItD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAIrD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAItD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAIvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAIvD"}
package/dist/nip51.js ADDED
@@ -0,0 +1,118 @@
1
+ import { finalizeEvent } from './event.js';
2
+ import { getConversationKey, encrypt, decrypt } from './nip44.js';
3
+ import { getPublicKey } from './crypto.js';
4
+ function tagsToItems(tags) {
5
+ return tags
6
+ .filter(t => t.length >= 2)
7
+ .map(t => ({
8
+ tag: t[0],
9
+ value: t[1],
10
+ extra: t.length > 2 ? t.slice(2) : undefined,
11
+ }));
12
+ }
13
+ function itemsToTags(items) {
14
+ return items.map(item => {
15
+ const tag = [item.tag, item.value];
16
+ if (item.extra)
17
+ tag.push(...item.extra);
18
+ return tag;
19
+ });
20
+ }
21
+ /**
22
+ * Create a list event template (unsigned).
23
+ * If privateItems and secretKey are provided, they are NIP-44 self-encrypted into the content.
24
+ */
25
+ export function createListEventTemplate(opts) {
26
+ const tags = itemsToTags(opts.publicItems);
27
+ if (opts.identifier !== undefined) {
28
+ tags.unshift(['d', opts.identifier]);
29
+ }
30
+ let content = '';
31
+ if (opts.privateItems && opts.privateItems.length > 0 && opts.secretKey) {
32
+ const pubkey = getPublicKey(opts.secretKey);
33
+ const conversationKey = getConversationKey(opts.secretKey, pubkey);
34
+ const privateTags = itemsToTags(opts.privateItems);
35
+ content = encrypt(JSON.stringify(privateTags), conversationKey);
36
+ }
37
+ return {
38
+ kind: opts.kind,
39
+ tags,
40
+ content,
41
+ created_at: Math.floor(Date.now() / 1000),
42
+ };
43
+ }
44
+ /**
45
+ * Create and sign a list event.
46
+ */
47
+ export function createListEvent(opts, secretKey) {
48
+ return finalizeEvent(createListEventTemplate({ ...opts, secretKey }), secretKey);
49
+ }
50
+ /**
51
+ * Parse a list event. If secretKey is provided, decrypt private items.
52
+ */
53
+ export function parseList(event, secretKey) {
54
+ const result = {
55
+ kind: event.kind,
56
+ publicItems: [],
57
+ privateItems: [],
58
+ };
59
+ const publicTags = event.tags.filter(t => t[0] !== 'd');
60
+ const dTag = event.tags.find(t => t[0] === 'd');
61
+ if (dTag)
62
+ result.identifier = dTag[1];
63
+ result.publicItems = tagsToItems(publicTags);
64
+ if (event.content && secretKey) {
65
+ try {
66
+ const pubkey = getPublicKey(secretKey);
67
+ const conversationKey = getConversationKey(secretKey, pubkey);
68
+ const decrypted = decrypt(event.content, conversationKey);
69
+ const privateTags = JSON.parse(decrypted);
70
+ result.privateItems = tagsToItems(privateTags);
71
+ }
72
+ catch {
73
+ // Decryption failed - leave privateItems empty
74
+ }
75
+ }
76
+ return result;
77
+ }
78
+ /**
79
+ * Get event IDs from a parsed list.
80
+ */
81
+ export function getEventIds(list) {
82
+ return [...list.publicItems, ...list.privateItems]
83
+ .filter(i => i.tag === 'e')
84
+ .map(i => i.value);
85
+ }
86
+ /**
87
+ * Get pubkeys from a parsed list.
88
+ */
89
+ export function getPubkeys(list) {
90
+ return [...list.publicItems, ...list.privateItems]
91
+ .filter(i => i.tag === 'p')
92
+ .map(i => i.value);
93
+ }
94
+ /**
95
+ * Get hashtags from a parsed list.
96
+ */
97
+ export function getHashtags(list) {
98
+ return [...list.publicItems, ...list.privateItems]
99
+ .filter(i => i.tag === 't')
100
+ .map(i => i.value);
101
+ }
102
+ /**
103
+ * Get relay URLs from a parsed list.
104
+ */
105
+ export function getRelayUrls(list) {
106
+ return [...list.publicItems, ...list.privateItems]
107
+ .filter(i => i.tag === 'relay')
108
+ .map(i => i.value);
109
+ }
110
+ /**
111
+ * Get parameterized replaceable event addresses from a parsed list.
112
+ */
113
+ export function getAddresses(list) {
114
+ return [...list.publicItems, ...list.privateItems]
115
+ .filter(i => i.tag === 'a')
116
+ .map(i => i.value);
117
+ }
118
+ //# sourceMappingURL=nip51.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip51.js","sourceRoot":"","sources":["../src/nip51.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type NostrEvent, type EventTemplate } from './event.js';
2
+ export type ReportType = 'nudity' | 'malware' | 'profanity' | 'illegal' | 'spam' | 'impersonation' | 'other';
3
+ export type ReportTarget = {
4
+ type: 'pubkey';
5
+ pubkey: string;
6
+ reportType: ReportType;
7
+ } | {
8
+ type: 'event';
9
+ eventId: string;
10
+ authorPubkey: string;
11
+ reportType: ReportType;
12
+ };
13
+ /**
14
+ * Create a kind 1984 report event template.
15
+ */
16
+ export declare function createReportEventTemplate(targets: ReportTarget[], content?: string): EventTemplate;
17
+ /**
18
+ * Create and sign a kind 1984 report event.
19
+ */
20
+ export declare function createReportEvent(targets: ReportTarget[], secretKey: Uint8Array, content?: string): NostrEvent;
21
+ /**
22
+ * Parse a kind 1984 report event.
23
+ */
24
+ export declare function parseReport(event: NostrEvent): {
25
+ targets: ReportTarget[];
26
+ content: string;
27
+ };
28
+ //# sourceMappingURL=nip56.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip56.d.ts","sourceRoot":"","sources":["../src/nip56.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/E,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,eAAe,GAAG,OAAO,CAAA;AAE5G,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAA;AAEpF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAkBlG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAE9G;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG;IAC9C,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;CAChB,CA8BA"}
package/dist/nip56.js ADDED
@@ -0,0 +1,60 @@
1
+ import { finalizeEvent } from './event.js';
2
+ /**
3
+ * Create a kind 1984 report event template.
4
+ */
5
+ export function createReportEventTemplate(targets, content) {
6
+ const tags = [];
7
+ for (const target of targets) {
8
+ if (target.type === 'pubkey') {
9
+ tags.push(['p', target.pubkey, target.reportType]);
10
+ }
11
+ else {
12
+ tags.push(['e', target.eventId, target.reportType]);
13
+ tags.push(['p', target.authorPubkey]);
14
+ }
15
+ }
16
+ return {
17
+ kind: 1984,
18
+ tags,
19
+ content: content ?? '',
20
+ created_at: Math.floor(Date.now() / 1000),
21
+ };
22
+ }
23
+ /**
24
+ * Create and sign a kind 1984 report event.
25
+ */
26
+ export function createReportEvent(targets, secretKey, content) {
27
+ return finalizeEvent(createReportEventTemplate(targets, content), secretKey);
28
+ }
29
+ /**
30
+ * Parse a kind 1984 report event.
31
+ */
32
+ export function parseReport(event) {
33
+ const targets = [];
34
+ const eTags = event.tags.filter(t => t[0] === 'e');
35
+ const pTags = event.tags.filter(t => t[0] === 'p');
36
+ // Event reports: e tags with report type
37
+ for (const eTag of eTags) {
38
+ if (eTag[2]) {
39
+ const authorTag = pTags.find(p => !p[2]); // p tag without report type
40
+ targets.push({
41
+ type: 'event',
42
+ eventId: eTag[1],
43
+ authorPubkey: authorTag?.[1] ?? '',
44
+ reportType: eTag[2],
45
+ });
46
+ }
47
+ }
48
+ // Pubkey reports: p tags with report type
49
+ for (const pTag of pTags) {
50
+ if (pTag[2]) {
51
+ targets.push({
52
+ type: 'pubkey',
53
+ pubkey: pTag[1],
54
+ reportType: pTag[2],
55
+ });
56
+ }
57
+ }
58
+ return { targets, content: event.content };
59
+ }
60
+ //# sourceMappingURL=nip56.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip56.js","sourceRoot":"","sources":["../src/nip56.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuC,MAAM,YAAY,CAAA;AAQ/E;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAuB,EAAE,OAAgB;IACjF,MAAM,IAAI,GAAe,EAAE,CAAA;IAE3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;QACpD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;YACnD,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QACV,IAAI;QACJ,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;KAC1C,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAuB,EAAE,SAAqB,EAAE,OAAgB;IAChG,OAAO,aAAa,CAAC,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAA;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiB;IAI3C,MAAM,OAAO,GAAmB,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;IAElD,yCAAyC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,4BAA4B;YACrE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBAChB,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;gBAClC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAe;aAClC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;gBACf,UAAU,EAAE,IAAI,CAAC,CAAC,CAAe;aAClC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA;AAC5C,CAAC"}