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.
- package/dist/index.d.ts +88 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +93 -3
- package/dist/index.js.map +1 -1
- package/dist/lnurl.d.ts +161 -0
- package/dist/lnurl.d.ts.map +1 -0
- package/dist/lnurl.js +343 -0
- package/dist/lnurl.js.map +1 -0
- package/dist/nip02.d.ts +27 -0
- package/dist/nip02.d.ts.map +1 -0
- package/dist/nip02.js +55 -0
- package/dist/nip02.js.map +1 -0
- package/dist/nip05.d.ts +24 -0
- package/dist/nip05.d.ts.map +1 -0
- package/dist/nip05.js +57 -0
- package/dist/nip05.js.map +1 -0
- package/dist/nip06.d.ts +26 -0
- package/dist/nip06.d.ts.map +1 -0
- package/dist/nip06.js +49 -0
- package/dist/nip06.js.map +1 -0
- package/dist/nip07.d.ts +8 -0
- package/dist/nip07.d.ts.map +1 -1
- package/dist/nip07.js +24 -0
- package/dist/nip07.js.map +1 -1
- package/dist/nip09.d.ts +34 -0
- package/dist/nip09.d.ts.map +1 -0
- package/dist/nip09.js +66 -0
- package/dist/nip09.js.map +1 -0
- package/dist/nip10.d.ts +40 -0
- package/dist/nip10.d.ts.map +1 -0
- package/dist/nip10.js +69 -0
- package/dist/nip10.js.map +1 -0
- package/dist/nip11.d.ts +41 -0
- package/dist/nip11.d.ts.map +1 -0
- package/dist/nip11.js +38 -0
- package/dist/nip11.js.map +1 -0
- package/dist/nip13.d.ts +26 -0
- package/dist/nip13.d.ts.map +1 -0
- package/dist/nip13.js +75 -0
- package/dist/nip13.js.map +1 -0
- package/dist/nip18.d.ts +28 -0
- package/dist/nip18.d.ts.map +1 -0
- package/dist/nip18.js +66 -0
- package/dist/nip18.js.map +1 -0
- package/dist/nip21.d.ts +14 -0
- package/dist/nip21.d.ts.map +1 -0
- package/dist/nip21.js +24 -0
- package/dist/nip21.js.map +1 -0
- package/dist/nip22.d.ts +26 -0
- package/dist/nip22.d.ts.map +1 -0
- package/dist/nip22.js +109 -0
- package/dist/nip22.js.map +1 -0
- package/dist/nip23.d.ts +24 -0
- package/dist/nip23.d.ts.map +1 -0
- package/dist/nip23.js +70 -0
- package/dist/nip23.js.map +1 -0
- package/dist/nip24.d.ts +31 -0
- package/dist/nip24.d.ts.map +1 -0
- package/dist/nip24.js +75 -0
- package/dist/nip24.js.map +1 -0
- package/dist/nip25.d.ts +32 -0
- package/dist/nip25.d.ts.map +1 -0
- package/dist/nip25.js +54 -0
- package/dist/nip25.js.map +1 -0
- package/dist/nip27.d.ts +16 -0
- package/dist/nip27.d.ts.map +1 -0
- package/dist/nip27.js +44 -0
- package/dist/nip27.js.map +1 -0
- package/dist/nip28.d.ts +52 -0
- package/dist/nip28.d.ts.map +1 -0
- package/dist/nip28.js +118 -0
- package/dist/nip28.js.map +1 -0
- package/dist/nip29.d.ts +60 -0
- package/dist/nip29.d.ts.map +1 -0
- package/dist/nip29.js +122 -0
- package/dist/nip29.js.map +1 -0
- package/dist/nip30.d.ts +18 -0
- package/dist/nip30.d.ts.map +1 -0
- package/dist/nip30.js +24 -0
- package/dist/nip30.js.map +1 -0
- package/dist/nip31.d.ts +11 -0
- package/dist/nip31.d.ts.map +1 -0
- package/dist/nip31.js +15 -0
- package/dist/nip31.js.map +1 -0
- package/dist/nip36.d.ts +14 -0
- package/dist/nip36.d.ts.map +1 -0
- package/dist/nip36.js +24 -0
- package/dist/nip36.js.map +1 -0
- package/dist/nip40.d.ts +14 -0
- package/dist/nip40.d.ts.map +1 -0
- package/dist/nip40.js +26 -0
- package/dist/nip40.js.map +1 -0
- package/dist/nip42.d.ts +20 -0
- package/dist/nip42.d.ts.map +1 -0
- package/dist/nip42.js +38 -0
- package/dist/nip42.js.map +1 -0
- package/dist/nip46.d.ts +17 -4
- package/dist/nip46.d.ts.map +1 -1
- package/dist/nip46.js +78 -38
- package/dist/nip46.js.map +1 -1
- package/dist/nip48.d.ts +23 -0
- package/dist/nip48.d.ts.map +1 -0
- package/dist/nip48.js +30 -0
- package/dist/nip48.js.map +1 -0
- package/dist/nip50.d.ts +23 -0
- package/dist/nip50.d.ts.map +1 -0
- package/dist/nip50.js +47 -0
- package/dist/nip50.js.map +1 -0
- package/dist/nip51.d.ts +57 -0
- package/dist/nip51.d.ts.map +1 -0
- package/dist/nip51.js +118 -0
- package/dist/nip51.js.map +1 -0
- package/dist/nip56.d.ts +28 -0
- package/dist/nip56.d.ts.map +1 -0
- package/dist/nip56.js +60 -0
- package/dist/nip56.js.map +1 -0
- package/dist/nip57.d.ts +48 -0
- package/dist/nip57.d.ts.map +1 -0
- package/dist/nip57.js +140 -0
- package/dist/nip57.js.map +1 -0
- package/dist/nip58.d.ts +82 -0
- package/dist/nip58.d.ts.map +1 -0
- package/dist/nip58.js +195 -0
- package/dist/nip58.js.map +1 -0
- package/dist/nip59.js +1 -1
- package/dist/nip65.d.ts +28 -0
- package/dist/nip65.d.ts.map +1 -0
- package/dist/nip65.js +83 -0
- package/dist/nip65.js.map +1 -0
- package/dist/nip98.d.ts +24 -0
- package/dist/nip98.d.ts.map +1 -0
- package/dist/nip98.js +68 -0
- package/dist/nip98.js.map +1 -0
- package/dist/relay.d.ts +2 -0
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +20 -0
- package/dist/relay.js.map +1 -1
- package/dist/signer.d.ts +4 -0
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +11 -0
- package/dist/signer.js.map +1 -1
- 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
|
-
|
|
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
|
-
|
|
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
|
|
43
|
-
}
|
|
44
|
-
if (
|
|
45
|
-
throw new Nip46Error('Invalid
|
|
46
|
-
}
|
|
47
|
-
|
|
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
|
-
|
|
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.
|
|
84
|
+
this.relayUrls = opts.relayUrls;
|
|
66
85
|
this.secretKey = opts.secretKey || randomBytes(32);
|
|
67
86
|
this.publicKey = getPublicKey(this.secretKey);
|
|
68
|
-
this.
|
|
87
|
+
this.secret = opts.secret;
|
|
69
88
|
}
|
|
70
89
|
get connected() {
|
|
71
90
|
return this._connected;
|
|
72
91
|
}
|
|
73
92
|
async connect() {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
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
|
|
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":"AAAA,OAAO,EAAc,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,aAAa,EAA2D,MAAM,YAAY,CAAA;AAEnG,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGlC,oBAAoB;AACpB,MAAM,UAAU,GAAG,KAAK,CAAA;AAExB,gBAAgB;AAEhB,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,IAAI,CAAQ;IACZ,YAAY,OAAe,EAAE,IAAI,GAAG,aAAa;QAC/C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,YAAY,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;QAC/B,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAA;QACxC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAA;QACpC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"nip46.js","sourceRoot":"","sources":["../src/nip46.ts"],"names":[],"mappings":"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"}
|
package/dist/nip48.d.ts
ADDED
|
@@ -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"}
|
package/dist/nip50.d.ts
ADDED
|
@@ -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"}
|
package/dist/nip51.d.ts
ADDED
|
@@ -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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"}
|
package/dist/nip56.d.ts
ADDED
|
@@ -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"}
|