@nostrify/nostrify 0.46.4
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/.turbo/turbo-build.log +5 -0
- package/BunkerURI.test.ts +28 -0
- package/BunkerURI.ts +58 -0
- package/CHANGELOG.md +562 -0
- package/LICENSE +21 -0
- package/NBrowserSigner.test.ts +170 -0
- package/NBrowserSigner.ts +100 -0
- package/NCache.bench.ts +81 -0
- package/NCache.test.ts +22 -0
- package/NCache.ts +73 -0
- package/NConnectSigner.test.ts +102 -0
- package/NConnectSigner.ts +189 -0
- package/NIP05.test.ts +67 -0
- package/NIP05.ts +52 -0
- package/NIP50.test.ts +58 -0
- package/NIP50.ts +24 -0
- package/NIP98.test.ts +181 -0
- package/NIP98.ts +97 -0
- package/NKinds.test.ts +42 -0
- package/NKinds.ts +26 -0
- package/NPool.test.ts +117 -0
- package/NPool.ts +224 -0
- package/NRelay1.test.ts +174 -0
- package/NRelay1.ts +440 -0
- package/NSchema.test.ts +94 -0
- package/NSchema.ts +255 -0
- package/NSecSigner.bench.ts +55 -0
- package/NSecSigner.test.ts +26 -0
- package/NSecSigner.ts +60 -0
- package/NSet.bench.ts +10 -0
- package/NSet.test.ts +92 -0
- package/NSet.ts +203 -0
- package/README.md +314 -0
- package/RelayError.test.ts +23 -0
- package/RelayError.ts +22 -0
- package/dist/BunkerURI.d.ts +23 -0
- package/dist/BunkerURI.d.ts.map +1 -0
- package/dist/BunkerURI.js +52 -0
- package/dist/BunkerURI.js.map +1 -0
- package/dist/NBrowserSigner.d.ts +27 -0
- package/dist/NBrowserSigner.d.ts.map +1 -0
- package/dist/NBrowserSigner.js +96 -0
- package/dist/NBrowserSigner.js.map +1 -0
- package/dist/NCache.d.ts +34 -0
- package/dist/NCache.d.ts.map +1 -0
- package/dist/NCache.js +63 -0
- package/dist/NCache.js.map +1 -0
- package/dist/NConnectSigner.d.ts +50 -0
- package/dist/NConnectSigner.d.ts.map +1 -0
- package/dist/NConnectSigner.js +130 -0
- package/dist/NConnectSigner.js.map +1 -0
- package/dist/NIP05.d.ts +15 -0
- package/dist/NIP05.d.ts.map +1 -0
- package/dist/NIP05.js +40 -0
- package/dist/NIP05.js.map +1 -0
- package/dist/NIP50.d.ts +10 -0
- package/dist/NIP50.d.ts.map +1 -0
- package/dist/NIP50.js +26 -0
- package/dist/NIP50.js.map +1 -0
- package/dist/NIP98.d.ts +15 -0
- package/dist/NIP98.d.ts.map +1 -0
- package/dist/NIP98.js +71 -0
- package/dist/NIP98.js.map +1 -0
- package/dist/NKinds.d.ts +13 -0
- package/dist/NKinds.d.ts.map +1 -0
- package/dist/NKinds.js +27 -0
- package/dist/NKinds.js.map +1 -0
- package/dist/NPool.d.ts +91 -0
- package/dist/NPool.d.ts.map +1 -0
- package/dist/NPool.js +185 -0
- package/dist/NPool.js.map +1 -0
- package/dist/NRelay1.d.ts +80 -0
- package/dist/NRelay1.d.ts.map +1 -0
- package/dist/NRelay1.js +336 -0
- package/dist/NRelay1.js.map +1 -0
- package/dist/NSchema.d.ts +73 -0
- package/dist/NSchema.d.ts.map +1 -0
- package/dist/NSchema.js +215 -0
- package/dist/NSchema.js.map +1 -0
- package/dist/NSecSigner.d.ts +29 -0
- package/dist/NSecSigner.d.ts.map +1 -0
- package/dist/NSecSigner.js +52 -0
- package/dist/NSecSigner.js.map +1 -0
- package/dist/NSet.d.ts +76 -0
- package/dist/NSet.d.ts.map +1 -0
- package/dist/NSet.js +174 -0
- package/dist/NSet.js.map +1 -0
- package/dist/RelayError.d.ts +10 -0
- package/dist/RelayError.d.ts.map +1 -0
- package/dist/RelayError.js +23 -0
- package/dist/RelayError.js.map +1 -0
- package/dist/ln/LNURL.d.ts +55 -0
- package/dist/ln/LNURL.d.ts.map +1 -0
- package/dist/ln/LNURL.js +105 -0
- package/dist/ln/LNURL.js.map +1 -0
- package/dist/ln/mod.d.ts +4 -0
- package/dist/ln/mod.d.ts.map +1 -0
- package/dist/ln/mod.js +6 -0
- package/dist/ln/mod.js.map +1 -0
- package/dist/ln/types/LNURLCallback.d.ts +8 -0
- package/dist/ln/types/LNURLCallback.d.ts.map +1 -0
- package/dist/ln/types/LNURLCallback.js +3 -0
- package/dist/ln/types/LNURLCallback.js.map +1 -0
- package/dist/ln/types/LNURLDetails.d.ts +20 -0
- package/dist/ln/types/LNURLDetails.d.ts.map +1 -0
- package/dist/ln/types/LNURLDetails.js +3 -0
- package/dist/ln/types/LNURLDetails.js.map +1 -0
- package/dist/mod.d.ts +16 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +32 -0
- package/dist/mod.js.map +1 -0
- package/dist/test/ErrorRelay.d.ts +21 -0
- package/dist/test/ErrorRelay.d.ts.map +1 -0
- package/dist/test/ErrorRelay.js +26 -0
- package/dist/test/ErrorRelay.js.map +1 -0
- package/dist/test/MockRelay.d.ts +20 -0
- package/dist/test/MockRelay.d.ts.map +1 -0
- package/dist/test/MockRelay.js +66 -0
- package/dist/test/MockRelay.js.map +1 -0
- package/dist/test/TestRelayServer.d.ts +25 -0
- package/dist/test/TestRelayServer.d.ts.map +1 -0
- package/dist/test/TestRelayServer.js +134 -0
- package/dist/test/TestRelayServer.js.map +1 -0
- package/dist/test/mod.d.ts +8 -0
- package/dist/test/mod.d.ts.map +1 -0
- package/dist/test/mod.js +28 -0
- package/dist/test/mod.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/uploaders/BlossomUploader.d.ts +26 -0
- package/dist/uploaders/BlossomUploader.d.ts.map +1 -0
- package/dist/uploaders/BlossomUploader.js +71 -0
- package/dist/uploaders/BlossomUploader.js.map +1 -0
- package/dist/uploaders/NostrBuildUploader.d.ts +24 -0
- package/dist/uploaders/NostrBuildUploader.d.ts.map +1 -0
- package/dist/uploaders/NostrBuildUploader.js +67 -0
- package/dist/uploaders/NostrBuildUploader.js.map +1 -0
- package/dist/uploaders/mod.d.ts +3 -0
- package/dist/uploaders/mod.d.ts.map +1 -0
- package/dist/uploaders/mod.js +8 -0
- package/dist/uploaders/mod.js.map +1 -0
- package/dist/utils/CircularSet.d.ts +13 -0
- package/dist/utils/CircularSet.d.ts.map +1 -0
- package/dist/utils/CircularSet.js +35 -0
- package/dist/utils/CircularSet.js.map +1 -0
- package/dist/utils/Machina.d.ts +36 -0
- package/dist/utils/Machina.d.ts.map +1 -0
- package/dist/utils/Machina.js +66 -0
- package/dist/utils/Machina.js.map +1 -0
- package/dist/utils/N64.d.ts +9 -0
- package/dist/utils/N64.d.ts.map +1 -0
- package/dist/utils/N64.js +23 -0
- package/dist/utils/N64.js.map +1 -0
- package/dist/utils/mod.d.ts +3 -0
- package/dist/utils/mod.d.ts.map +1 -0
- package/dist/utils/mod.js +8 -0
- package/dist/utils/mod.js.map +1 -0
- package/ln/LNURL.test.ts +87 -0
- package/ln/LNURL.ts +146 -0
- package/ln/mod.ts +4 -0
- package/ln/types/LNURLCallback.ts +7 -0
- package/ln/types/LNURLDetails.ts +19 -0
- package/mod.ts +16 -0
- package/package.json +23 -0
- package/test/ErrorRelay.test.ts +19 -0
- package/test/ErrorRelay.ts +40 -0
- package/test/MockRelay.test.ts +20 -0
- package/test/MockRelay.ts +92 -0
- package/test/TestRelayServer.ts +156 -0
- package/test/mod.ts +28 -0
- package/tsconfig.json +14 -0
- package/uploaders/BlossomUploader.test.ts +26 -0
- package/uploaders/BlossomUploader.ts +98 -0
- package/uploaders/NostrBuildUploader.test.ts +22 -0
- package/uploaders/NostrBuildUploader.ts +89 -0
- package/uploaders/mod.ts +2 -0
- package/utils/CircularSet.test.ts +15 -0
- package/utils/CircularSet.ts +34 -0
- package/utils/Machina.test.ts +91 -0
- package/utils/Machina.ts +66 -0
- package/utils/N64.test.ts +27 -0
- package/utils/N64.ts +23 -0
- package/utils/mod.ts +2 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { NostrClientAUTH, NostrClientCLOSE, NostrClientCOUNT, NostrClientEVENT, NostrClientMsg, NostrClientREQ, NostrConnectRequest, NostrConnectResponse, NostrEvent, NostrFilter, NostrMetadata, NostrRelayAUTH, NostrRelayCLOSED, NostrRelayCOUNT, NostrRelayEOSE, NostrRelayEVENT, NostrRelayMsg, NostrRelayNOTICE, NostrRelayOK } from '@nostrify/types';
|
|
3
|
+
/**
|
|
4
|
+
* A suite of [zod](https://github.com/colinhacks/zod) schemas for Nostr.
|
|
5
|
+
*
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { NSchema as n } from '@nostrify/nostrify';
|
|
8
|
+
*
|
|
9
|
+
* const event: NostrEvent = n.event().parse(eventData);
|
|
10
|
+
* const metadata: NostrMetadata = n.json().pipe(n.metadata()).parse(event.content);
|
|
11
|
+
* const msg: NostrRelayMsg = n.relayMsg().parse(e.data);
|
|
12
|
+
* const nsec: `nsec1${string}` = n.bech32('nsec').parse(token);
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare class NSchema {
|
|
16
|
+
/** Schema to validate Nostr hex IDs such as event IDs and pubkeys. */
|
|
17
|
+
static id(): z.ZodString;
|
|
18
|
+
/** Nostr event schema. */
|
|
19
|
+
static event(): z.ZodType<NostrEvent>;
|
|
20
|
+
/** Nostr filter schema. */
|
|
21
|
+
static filter(): z.ZodType<NostrFilter>;
|
|
22
|
+
/**
|
|
23
|
+
* Bech32 string.
|
|
24
|
+
* @see https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32
|
|
25
|
+
*/
|
|
26
|
+
static bech32<P extends string>(prefix?: P): z.ZodType<`${P}1${string}`>;
|
|
27
|
+
/** WebSocket URL starting with `ws://` or `wss://`. */
|
|
28
|
+
static relayUrl(): z.ZodType<`ws://${string}` | `wss://${string}`>;
|
|
29
|
+
/** NIP-01 `EVENT` message from client to relay. */
|
|
30
|
+
static clientEVENT(): z.ZodType<NostrClientEVENT>;
|
|
31
|
+
/** NIP-01 `REQ` message from client to relay. */
|
|
32
|
+
static clientREQ(): z.ZodType<NostrClientREQ>;
|
|
33
|
+
/** NIP-45 `COUNT` message from client to relay. */
|
|
34
|
+
static clientCOUNT(): z.ZodType<NostrClientCOUNT>;
|
|
35
|
+
/** NIP-01 `CLOSE` message from client to relay. */
|
|
36
|
+
static clientCLOSE(): z.ZodType<NostrClientCLOSE>;
|
|
37
|
+
/** NIP-42 `AUTH` message from client to relay. */
|
|
38
|
+
static clientAUTH(): z.ZodType<NostrClientAUTH>;
|
|
39
|
+
/** NIP-01 message from client to relay. */
|
|
40
|
+
static clientMsg(): z.ZodType<NostrClientMsg>;
|
|
41
|
+
/** NIP-01 `EVENT` message from relay to client. */
|
|
42
|
+
static relayEVENT(): z.ZodType<NostrRelayEVENT>;
|
|
43
|
+
/** NIP-01 `OK` message from relay to client. */
|
|
44
|
+
static relayOK(): z.ZodType<NostrRelayOK>;
|
|
45
|
+
/** NIP-01 `EOSE` message from relay to client. */
|
|
46
|
+
static relayEOSE(): z.ZodType<NostrRelayEOSE>;
|
|
47
|
+
/** NIP-01 `NOTICE` message from relay to client. */
|
|
48
|
+
static relayNOTICE(): z.ZodType<NostrRelayNOTICE>;
|
|
49
|
+
/** NIP-01 `CLOSED` message from relay to client. */
|
|
50
|
+
static relayCLOSED(): z.ZodType<NostrRelayCLOSED>;
|
|
51
|
+
/** NIP-42 `AUTH` message from relay to client. */
|
|
52
|
+
static relayAUTH(): z.ZodType<NostrRelayAUTH>;
|
|
53
|
+
/** NIP-45 `COUNT` message from relay to client. */
|
|
54
|
+
static relayCOUNT(): z.ZodType<NostrRelayCOUNT>;
|
|
55
|
+
/** NIP-01 message from relay to client. */
|
|
56
|
+
static relayMsg(): z.ZodType<NostrRelayMsg>;
|
|
57
|
+
/** Kind 0 content schema. */
|
|
58
|
+
static metadata(): z.ZodType<NostrMetadata>;
|
|
59
|
+
/** NIP-46 request content schema. */
|
|
60
|
+
static connectRequest(): z.ZodType<NostrConnectRequest>;
|
|
61
|
+
/** NIP-46 response content schema. */
|
|
62
|
+
static connectResponse(): z.ZodType<NostrConnectResponse>;
|
|
63
|
+
/**
|
|
64
|
+
* Helper schema to parse a JSON string. It should then be piped into another schema. For example:
|
|
65
|
+
*
|
|
66
|
+
* ```ts
|
|
67
|
+
* const event = NSchema.json().pipe(NSchema.event()).parse(data);
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
static json(): z.ZodType<unknown>;
|
|
71
|
+
}
|
|
72
|
+
export { NSchema, z };
|
|
73
|
+
//# sourceMappingURL=NSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSchema.d.ts","sourceRoot":"","sources":["../NSchema.ts"],"names":[],"mappings":"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"}
|
package/dist/NSchema.js
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.z = exports.NSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
Object.defineProperty(exports, "z", { enumerable: true, get: function () { return zod_1.z; } });
|
|
6
|
+
/**
|
|
7
|
+
* A suite of [zod](https://github.com/colinhacks/zod) schemas for Nostr.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { NSchema as n } from '@nostrify/nostrify';
|
|
11
|
+
*
|
|
12
|
+
* const event: NostrEvent = n.event().parse(eventData);
|
|
13
|
+
* const metadata: NostrMetadata = n.json().pipe(n.metadata()).parse(event.content);
|
|
14
|
+
* const msg: NostrRelayMsg = n.relayMsg().parse(e.data);
|
|
15
|
+
* const nsec: `nsec1${string}` = n.bech32('nsec').parse(token);
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
class NSchema {
|
|
19
|
+
/** Schema to validate Nostr hex IDs such as event IDs and pubkeys. */
|
|
20
|
+
static id() {
|
|
21
|
+
return zod_1.z.string().regex(/^[0-9a-f]{64}$/);
|
|
22
|
+
}
|
|
23
|
+
/** Nostr event schema. */
|
|
24
|
+
static event() {
|
|
25
|
+
// @ts-expect-error This should be fine.
|
|
26
|
+
return zod_1.z.object({
|
|
27
|
+
id: NSchema.id(),
|
|
28
|
+
kind: zod_1.z.number().int().nonnegative(),
|
|
29
|
+
pubkey: NSchema.id(),
|
|
30
|
+
tags: zod_1.z.string().array().array(),
|
|
31
|
+
content: zod_1.z.string(),
|
|
32
|
+
created_at: zod_1.z.number().int().nonnegative(),
|
|
33
|
+
sig: zod_1.z.string(),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/** Nostr filter schema. */
|
|
37
|
+
static filter() {
|
|
38
|
+
return zod_1.z.object({
|
|
39
|
+
kinds: zod_1.z.number().int().nonnegative().array().optional(),
|
|
40
|
+
ids: NSchema.id().array().optional(),
|
|
41
|
+
authors: NSchema.id().array().optional(),
|
|
42
|
+
since: zod_1.z.number().int().nonnegative().optional(),
|
|
43
|
+
until: zod_1.z.number().int().nonnegative().optional(),
|
|
44
|
+
limit: zod_1.z.number().int().nonnegative().optional(),
|
|
45
|
+
search: zod_1.z.string().optional(),
|
|
46
|
+
})
|
|
47
|
+
.passthrough()
|
|
48
|
+
.transform((value) => {
|
|
49
|
+
const keys = ['kinds', 'ids', 'authors', 'since', 'until', 'limit', 'search'];
|
|
50
|
+
return Object.entries(value).reduce((acc, [key, val]) => {
|
|
51
|
+
if (keys.includes(key) || key.startsWith('#')) {
|
|
52
|
+
acc[key] = val;
|
|
53
|
+
}
|
|
54
|
+
return acc;
|
|
55
|
+
}, {});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Bech32 string.
|
|
60
|
+
* @see https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32
|
|
61
|
+
*/
|
|
62
|
+
static bech32(prefix) {
|
|
63
|
+
return zod_1.z
|
|
64
|
+
.string()
|
|
65
|
+
.regex(/^[\x21-\x7E]{1,83}1[023456789acdefghjklmnpqrstuvwxyz]{6,}$/)
|
|
66
|
+
.refine((value) => prefix ? value.startsWith(`${prefix}1`) : true);
|
|
67
|
+
}
|
|
68
|
+
/** WebSocket URL starting with `ws://` or `wss://`. */
|
|
69
|
+
static relayUrl() {
|
|
70
|
+
return zod_1.z
|
|
71
|
+
.string()
|
|
72
|
+
.url()
|
|
73
|
+
.regex(/^wss?:\/\//);
|
|
74
|
+
}
|
|
75
|
+
/** NIP-01 `EVENT` message from client to relay. */
|
|
76
|
+
static clientEVENT() {
|
|
77
|
+
// @ts-expect-error This should be fine.
|
|
78
|
+
return zod_1.z.tuple([zod_1.z.literal('EVENT'), NSchema.event()]);
|
|
79
|
+
}
|
|
80
|
+
/** NIP-01 `REQ` message from client to relay. */
|
|
81
|
+
static clientREQ() {
|
|
82
|
+
return zod_1.z.tuple([zod_1.z.literal('REQ'), zod_1.z.string()]).rest(NSchema.filter());
|
|
83
|
+
}
|
|
84
|
+
/** NIP-45 `COUNT` message from client to relay. */
|
|
85
|
+
static clientCOUNT() {
|
|
86
|
+
return zod_1.z.tuple([zod_1.z.literal('COUNT'), zod_1.z.string()]).rest(NSchema.filter());
|
|
87
|
+
}
|
|
88
|
+
/** NIP-01 `CLOSE` message from client to relay. */
|
|
89
|
+
static clientCLOSE() {
|
|
90
|
+
// @ts-expect-error This should be fine.
|
|
91
|
+
return zod_1.z.tuple([zod_1.z.literal('CLOSE'), zod_1.z.string()]);
|
|
92
|
+
}
|
|
93
|
+
/** NIP-42 `AUTH` message from client to relay. */
|
|
94
|
+
static clientAUTH() {
|
|
95
|
+
// @ts-expect-error This should be fine.
|
|
96
|
+
return zod_1.z.tuple([zod_1.z.literal('AUTH'), NSchema.event()]);
|
|
97
|
+
}
|
|
98
|
+
/** NIP-01 message from client to relay. */
|
|
99
|
+
static clientMsg() {
|
|
100
|
+
return zod_1.z.union([
|
|
101
|
+
NSchema.clientEVENT(),
|
|
102
|
+
NSchema.clientREQ(),
|
|
103
|
+
NSchema.clientCOUNT(),
|
|
104
|
+
NSchema.clientCLOSE(),
|
|
105
|
+
NSchema.clientAUTH(),
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
/** NIP-01 `EVENT` message from relay to client. */
|
|
109
|
+
static relayEVENT() {
|
|
110
|
+
// @ts-expect-error This should be fine.
|
|
111
|
+
return zod_1.z.tuple([zod_1.z.literal('EVENT'), zod_1.z.string(), NSchema.event()]);
|
|
112
|
+
}
|
|
113
|
+
/** NIP-01 `OK` message from relay to client. */
|
|
114
|
+
static relayOK() {
|
|
115
|
+
// @ts-expect-error This should be fine.
|
|
116
|
+
return zod_1.z.tuple([zod_1.z.literal('OK'), NSchema.id(), zod_1.z.boolean(), zod_1.z.string()]);
|
|
117
|
+
}
|
|
118
|
+
/** NIP-01 `EOSE` message from relay to client. */
|
|
119
|
+
static relayEOSE() {
|
|
120
|
+
// @ts-expect-error This should be fine.
|
|
121
|
+
return zod_1.z.tuple([zod_1.z.literal('EOSE'), zod_1.z.string()]);
|
|
122
|
+
}
|
|
123
|
+
/** NIP-01 `NOTICE` message from relay to client. */
|
|
124
|
+
static relayNOTICE() {
|
|
125
|
+
// @ts-expect-error This should be fine.
|
|
126
|
+
return zod_1.z.tuple([zod_1.z.literal('NOTICE'), zod_1.z.string()]);
|
|
127
|
+
}
|
|
128
|
+
/** NIP-01 `CLOSED` message from relay to client. */
|
|
129
|
+
static relayCLOSED() {
|
|
130
|
+
// @ts-expect-error This should be fine.
|
|
131
|
+
return zod_1.z.tuple([zod_1.z.literal('CLOSED'), zod_1.z.string(), zod_1.z.string()]);
|
|
132
|
+
}
|
|
133
|
+
/** NIP-42 `AUTH` message from relay to client. */
|
|
134
|
+
static relayAUTH() {
|
|
135
|
+
// @ts-expect-error This should be fine.
|
|
136
|
+
return zod_1.z.tuple([zod_1.z.literal('AUTH'), zod_1.z.string()]);
|
|
137
|
+
}
|
|
138
|
+
/** NIP-45 `COUNT` message from relay to client. */
|
|
139
|
+
static relayCOUNT() {
|
|
140
|
+
// @ts-expect-error This should be fine.
|
|
141
|
+
return zod_1.z.tuple([
|
|
142
|
+
zod_1.z.literal('COUNT'),
|
|
143
|
+
zod_1.z.string(),
|
|
144
|
+
zod_1.z.object({
|
|
145
|
+
count: zod_1.z.number().int().nonnegative(),
|
|
146
|
+
approximate: zod_1.z.boolean().optional(),
|
|
147
|
+
}),
|
|
148
|
+
]);
|
|
149
|
+
}
|
|
150
|
+
/** NIP-01 message from relay to client. */
|
|
151
|
+
static relayMsg() {
|
|
152
|
+
return zod_1.z.union([
|
|
153
|
+
NSchema.relayEVENT(),
|
|
154
|
+
NSchema.relayOK(),
|
|
155
|
+
NSchema.relayEOSE(),
|
|
156
|
+
NSchema.relayNOTICE(),
|
|
157
|
+
NSchema.relayCLOSED(),
|
|
158
|
+
NSchema.relayAUTH(),
|
|
159
|
+
NSchema.relayCOUNT(),
|
|
160
|
+
]);
|
|
161
|
+
}
|
|
162
|
+
/** Kind 0 content schema. */
|
|
163
|
+
static metadata() {
|
|
164
|
+
return zod_1.z.object({
|
|
165
|
+
about: zod_1.z.string().optional().catch(undefined),
|
|
166
|
+
banner: zod_1.z.string().url().optional().catch(undefined),
|
|
167
|
+
bot: zod_1.z.boolean().optional().catch(undefined),
|
|
168
|
+
display_name: zod_1.z.string().optional().catch(undefined),
|
|
169
|
+
lud06: NSchema.bech32('lnurl').optional().catch(undefined),
|
|
170
|
+
lud16: zod_1.z.string().email().optional().catch(undefined),
|
|
171
|
+
name: zod_1.z.string().optional().catch(undefined),
|
|
172
|
+
nip05: zod_1.z.string().email().optional().catch(undefined),
|
|
173
|
+
picture: zod_1.z.string().url().optional().catch(undefined),
|
|
174
|
+
website: zod_1.z.string().url().optional().catch(undefined),
|
|
175
|
+
}).passthrough();
|
|
176
|
+
}
|
|
177
|
+
/** NIP-46 request content schema. */
|
|
178
|
+
static connectRequest() {
|
|
179
|
+
// @ts-expect-error This should be fine.
|
|
180
|
+
return zod_1.z.object({
|
|
181
|
+
id: zod_1.z.string(),
|
|
182
|
+
method: zod_1.z.string(),
|
|
183
|
+
params: zod_1.z.string().array(),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/** NIP-46 response content schema. */
|
|
187
|
+
static connectResponse() {
|
|
188
|
+
// @ts-expect-error This should be fine.
|
|
189
|
+
return zod_1.z.object({
|
|
190
|
+
id: zod_1.z.string(),
|
|
191
|
+
result: zod_1.z.string(),
|
|
192
|
+
error: zod_1.z.string().optional(),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Helper schema to parse a JSON string. It should then be piped into another schema. For example:
|
|
197
|
+
*
|
|
198
|
+
* ```ts
|
|
199
|
+
* const event = NSchema.json().pipe(NSchema.event()).parse(data);
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
static json() {
|
|
203
|
+
return zod_1.z.string().transform((value, ctx) => {
|
|
204
|
+
try {
|
|
205
|
+
return JSON.parse(value);
|
|
206
|
+
}
|
|
207
|
+
catch (_e) {
|
|
208
|
+
ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, message: 'Invalid JSON' });
|
|
209
|
+
return zod_1.z.NEVER;
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.NSchema = NSchema;
|
|
215
|
+
//# sourceMappingURL=NSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSchema.js","sourceRoot":"","sources":["../NSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { NostrEvent } from '@nostrify/types';
|
|
2
|
+
import { NostrSigner } from '@nostrify/types';
|
|
3
|
+
/**
|
|
4
|
+
* NIP-07-compatible signer with secret key. It is a drop-in replacement for `window.nostr`.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* const signer = new NSecSigner(secretKey);
|
|
10
|
+
* const pubkey = await signer.getPublicKey();
|
|
11
|
+
* const event = await signer.signEvent({ kind: 1, content: 'Hello, world!', tags: [], created_at: 0 });
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare class NSecSigner implements NostrSigner {
|
|
15
|
+
#private;
|
|
16
|
+
private pubkey?;
|
|
17
|
+
constructor(secretKey: Uint8Array);
|
|
18
|
+
getPublicKey(): Promise<string>;
|
|
19
|
+
signEvent(event: Omit<NostrEvent, 'id' | 'pubkey' | 'sig'>): Promise<NostrEvent>;
|
|
20
|
+
readonly nip04: {
|
|
21
|
+
encrypt: (pubkey: string, plaintext: string) => Promise<string>;
|
|
22
|
+
decrypt: (pubkey: string, ciphertext: string) => Promise<string>;
|
|
23
|
+
};
|
|
24
|
+
readonly nip44: {
|
|
25
|
+
encrypt: (pubkey: string, plaintext: string) => Promise<string>;
|
|
26
|
+
decrypt: (pubkey: string, ciphertext: string) => Promise<string>;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=NSecSigner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSecSigner.d.ts","sourceRoot":"","sources":["../NSecSigner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,YAAW,WAAW;;IAE5C,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,SAAS,EAAE,UAAU;IAI3B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAItF,QAAQ,CAAC,KAAK;0BACY,MAAM,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;0BAI3C,MAAM,cAAc,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;MAGpE;IAMF,QAAQ,CAAC,KAAK;0BACY,MAAM,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;0BAK3C,MAAM,cAAc,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;MAIpE;CACH"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// deno-lint-ignore-file require-await
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NSecSigner = void 0;
|
|
5
|
+
const nostr_tools_1 = require("nostr-tools");
|
|
6
|
+
/**
|
|
7
|
+
* NIP-07-compatible signer with secret key. It is a drop-in replacement for `window.nostr`.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* const signer = new NSecSigner(secretKey);
|
|
13
|
+
* const pubkey = await signer.getPublicKey();
|
|
14
|
+
* const event = await signer.signEvent({ kind: 1, content: 'Hello, world!', tags: [], created_at: 0 });
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
class NSecSigner {
|
|
18
|
+
#secretKey;
|
|
19
|
+
pubkey;
|
|
20
|
+
constructor(secretKey) {
|
|
21
|
+
this.#secretKey = secretKey;
|
|
22
|
+
}
|
|
23
|
+
async getPublicKey() {
|
|
24
|
+
return this.pubkey ??= (0, nostr_tools_1.getPublicKey)(this.#secretKey);
|
|
25
|
+
}
|
|
26
|
+
async signEvent(event) {
|
|
27
|
+
return (0, nostr_tools_1.finalizeEvent)(event, this.#secretKey);
|
|
28
|
+
}
|
|
29
|
+
nip04 = {
|
|
30
|
+
encrypt: async (pubkey, plaintext) => {
|
|
31
|
+
return nostr_tools_1.nip04.encrypt(this.#secretKey, pubkey, plaintext);
|
|
32
|
+
},
|
|
33
|
+
decrypt: async (pubkey, ciphertext) => {
|
|
34
|
+
return nostr_tools_1.nip04.decrypt(this.#secretKey, pubkey, ciphertext);
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
#getConversationKey(pubkey) {
|
|
38
|
+
return nostr_tools_1.nip44.v2.utils.getConversationKey(this.#secretKey, pubkey);
|
|
39
|
+
}
|
|
40
|
+
nip44 = {
|
|
41
|
+
encrypt: async (pubkey, plaintext) => {
|
|
42
|
+
const conversationKey = this.#getConversationKey(pubkey);
|
|
43
|
+
return nostr_tools_1.nip44.v2.encrypt(plaintext, conversationKey);
|
|
44
|
+
},
|
|
45
|
+
decrypt: async (pubkey, ciphertext) => {
|
|
46
|
+
const conversationKey = this.#getConversationKey(pubkey);
|
|
47
|
+
return nostr_tools_1.nip44.v2.decrypt(ciphertext, conversationKey);
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
exports.NSecSigner = NSecSigner;
|
|
52
|
+
//# sourceMappingURL=NSecSigner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSecSigner.js","sourceRoot":"","sources":["../NSecSigner.ts"],"names":[],"mappings":";AAAA,sCAAsC;;;AAEtC,6CAAwE;AAKxE;;;;;;;;;;GAUG;AACH,MAAa,UAAU;IACrB,UAAU,CAAa;IACf,MAAM,CAAU;IAExB,YAAY,SAAqB;QAC/B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,IAAA,0BAAY,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAgD;QAC9D,OAAO,IAAA,2BAAa,EAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAEQ,KAAK,GAAG;QACf,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,SAAiB,EAAmB,EAAE;YACpE,OAAO,mBAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,UAAkB,EAAmB,EAAE;YACrE,OAAO,mBAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC;IAEF,mBAAmB,CAAC,MAAc;QAChC,OAAO,mBAAK,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IAEQ,KAAK,GAAG;QACf,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,SAAiB,EAAmB,EAAE;YACpE,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO,mBAAK,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,UAAkB,EAAmB,EAAE;YACrE,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO,mBAAK,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;CACH;AAzCD,gCAyCC"}
|
package/dist/NSet.d.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { NostrEvent } from '@nostrify/types';
|
|
2
|
+
/**
|
|
3
|
+
* Nostr event implementation of the `Set` interface.
|
|
4
|
+
*
|
|
5
|
+
* NSet is an implementation of the theory that a Nostr Storage is actually just a Set.
|
|
6
|
+
* Events are Nostr's only data type, and they are immutable, making the Set interface ideal.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* const events = new NSet();
|
|
10
|
+
*
|
|
11
|
+
* // Events can be added like a regular `Set`:
|
|
12
|
+
* events.add(event1);
|
|
13
|
+
* events.add(event2);
|
|
14
|
+
*
|
|
15
|
+
* // Can be iterated:
|
|
16
|
+
* for (const event of events) {
|
|
17
|
+
* if (matchFilters(filters, event)) {
|
|
18
|
+
* console.log(event);
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* `NSet` will handle kind `5` deletions, removing events from the set.
|
|
24
|
+
* Replaceable (and parameterized) events will keep only the newest version.
|
|
25
|
+
* However, verification of `id` and `sig` is NOT performed.
|
|
26
|
+
*
|
|
27
|
+
* Any `Map` instance can be passed into `new NSet()`, making it compatible with
|
|
28
|
+
* [lru-cache](https://www.npmjs.com/package/lru-cache), among others.
|
|
29
|
+
*/
|
|
30
|
+
declare class NSet {
|
|
31
|
+
#private;
|
|
32
|
+
protected cache: Map<string, NostrEvent>;
|
|
33
|
+
constructor(map?: Map<string, NostrEvent>);
|
|
34
|
+
get size(): number;
|
|
35
|
+
add(event: NostrEvent): this;
|
|
36
|
+
clear(): void;
|
|
37
|
+
delete(event: NostrEvent): boolean;
|
|
38
|
+
forEach(callbackfn: (event: NostrEvent, key: NostrEvent, set: typeof this) => void, thisArg?: any): void;
|
|
39
|
+
has(event: NostrEvent): boolean;
|
|
40
|
+
entries(): IterableIterator<[NostrEvent, NostrEvent]>;
|
|
41
|
+
keys(): IterableIterator<NostrEvent>;
|
|
42
|
+
values(): IterableIterator<NostrEvent>;
|
|
43
|
+
[Symbol.iterator](): IterableIterator<NostrEvent>;
|
|
44
|
+
[Symbol.toStringTag]: string;
|
|
45
|
+
/** Event kind is **replaceable**, which means that, for each combination of `pubkey` and `kind`, only the latest event is expected to (SHOULD) be stored by relays, older versions are expected to be discarded. */
|
|
46
|
+
protected static isReplaceable(kind: number): boolean;
|
|
47
|
+
/** Event kind is **parameterized replaceable**, which means that, for each combination of `pubkey`, `kind` and the `d` tag, only the latest event is expected to be stored by relays, older versions are expected to be discarded. */
|
|
48
|
+
protected static isAddressable(kind: number): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Returns true if `event` replaces `target`.
|
|
51
|
+
*
|
|
52
|
+
* Both events must be replaceable, belong to the same kind and pubkey (and `d` tag, for parameterized events), and the `event` must be newer than the `target`.
|
|
53
|
+
*/
|
|
54
|
+
protected static replaces(event: NostrEvent, target: NostrEvent): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Returns true if the `event` deletes`target`.
|
|
57
|
+
*
|
|
58
|
+
* `event` must be a kind `5` event, and both events must share the same `pubkey`.
|
|
59
|
+
*/
|
|
60
|
+
protected static deletes(event: NostrEvent, target: NostrEvent): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Sort events in reverse-chronological order by the `created_at` timestamp,
|
|
63
|
+
* and then by the event `id` (lexicographically) in case of ties.
|
|
64
|
+
* This mutates the array.
|
|
65
|
+
*/
|
|
66
|
+
protected static sortEvents(events: NostrEvent[]): NostrEvent[];
|
|
67
|
+
union<U>(_other: Set<U>): Set<NostrEvent | U>;
|
|
68
|
+
intersection<U>(_other: Set<U>): Set<NostrEvent & U>;
|
|
69
|
+
difference<U>(_other: Set<U>): Set<NostrEvent>;
|
|
70
|
+
symmetricDifference<U>(_other: Set<U>): Set<NostrEvent | U>;
|
|
71
|
+
isSubsetOf(_other: Set<unknown>): boolean;
|
|
72
|
+
isSupersetOf(_other: Set<unknown>): boolean;
|
|
73
|
+
isDisjointFrom(_other: Set<unknown>): boolean;
|
|
74
|
+
}
|
|
75
|
+
export { NSet };
|
|
76
|
+
//# sourceMappingURL=NSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSet.d.ts","sourceRoot":"","sources":["../NSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,cAAM,IAAI;;IACR,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAE7B,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAIzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA4B5B,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAIlC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,IAAI,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxG,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAI9B,OAAO,IAAI,gBAAgB,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAMtD,IAAI,IAAI,gBAAgB,CAAC,UAAU,CAAC;IAInC,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC;IAMvC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC;IAIjD,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAU;IAEtC,oNAAoN;IACpN,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrD,sOAAsO;IACtO,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrD;;;;OAIG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO;IAoBzE;;;;OAIG;IACH,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO;IAYxE;;;;OAIG;IACH,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE;IAS/D,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IAI7C,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IAIpD,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC;IAI9C,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IAI3D,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO;IAIzC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO;IAI3C,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO;CAG9C;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
package/dist/NSet.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NSet = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Nostr event implementation of the `Set` interface.
|
|
6
|
+
*
|
|
7
|
+
* NSet is an implementation of the theory that a Nostr Storage is actually just a Set.
|
|
8
|
+
* Events are Nostr's only data type, and they are immutable, making the Set interface ideal.
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* const events = new NSet();
|
|
12
|
+
*
|
|
13
|
+
* // Events can be added like a regular `Set`:
|
|
14
|
+
* events.add(event1);
|
|
15
|
+
* events.add(event2);
|
|
16
|
+
*
|
|
17
|
+
* // Can be iterated:
|
|
18
|
+
* for (const event of events) {
|
|
19
|
+
* if (matchFilters(filters, event)) {
|
|
20
|
+
* console.log(event);
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* `NSet` will handle kind `5` deletions, removing events from the set.
|
|
26
|
+
* Replaceable (and parameterized) events will keep only the newest version.
|
|
27
|
+
* However, verification of `id` and `sig` is NOT performed.
|
|
28
|
+
*
|
|
29
|
+
* Any `Map` instance can be passed into `new NSet()`, making it compatible with
|
|
30
|
+
* [lru-cache](https://www.npmjs.com/package/lru-cache), among others.
|
|
31
|
+
*/
|
|
32
|
+
class NSet {
|
|
33
|
+
cache;
|
|
34
|
+
constructor(map) {
|
|
35
|
+
this.cache = map ?? new Map();
|
|
36
|
+
}
|
|
37
|
+
get size() {
|
|
38
|
+
return this.cache.size;
|
|
39
|
+
}
|
|
40
|
+
add(event) {
|
|
41
|
+
this.#processDeletions(event);
|
|
42
|
+
for (const e of this) {
|
|
43
|
+
if (NSet.deletes(e, event) || NSet.replaces(e, event)) {
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
else if (NSet.replaces(event, e)) {
|
|
47
|
+
this.delete(e);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
this.cache.set(event.id, event);
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
#processDeletions(event) {
|
|
54
|
+
if (event.kind === 5) {
|
|
55
|
+
for (const tag of event.tags) {
|
|
56
|
+
if (tag[0] === 'e') {
|
|
57
|
+
const e = this.cache.get(tag[1]);
|
|
58
|
+
if (e && e.pubkey === event.pubkey) {
|
|
59
|
+
this.delete(e);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
clear() {
|
|
66
|
+
this.cache.clear();
|
|
67
|
+
}
|
|
68
|
+
delete(event) {
|
|
69
|
+
return this.cache.delete(event.id);
|
|
70
|
+
}
|
|
71
|
+
forEach(callbackfn, thisArg) {
|
|
72
|
+
return this.cache.forEach((event, _id) => callbackfn(event, event, this), thisArg);
|
|
73
|
+
}
|
|
74
|
+
has(event) {
|
|
75
|
+
return this.cache.has(event.id);
|
|
76
|
+
}
|
|
77
|
+
*entries() {
|
|
78
|
+
for (const event of this.values()) {
|
|
79
|
+
yield [event, event];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
keys() {
|
|
83
|
+
return this.values();
|
|
84
|
+
}
|
|
85
|
+
*values() {
|
|
86
|
+
for (const event of NSet.sortEvents([...this.cache.values()])) {
|
|
87
|
+
yield event;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
[Symbol.iterator]() {
|
|
91
|
+
return this.values();
|
|
92
|
+
}
|
|
93
|
+
[Symbol.toStringTag] = 'NSet';
|
|
94
|
+
/** Event kind is **replaceable**, which means that, for each combination of `pubkey` and `kind`, only the latest event is expected to (SHOULD) be stored by relays, older versions are expected to be discarded. */
|
|
95
|
+
static isReplaceable(kind) {
|
|
96
|
+
return [0, 3].includes(kind) || (10000 <= kind && kind < 20000);
|
|
97
|
+
}
|
|
98
|
+
/** Event kind is **parameterized replaceable**, which means that, for each combination of `pubkey`, `kind` and the `d` tag, only the latest event is expected to be stored by relays, older versions are expected to be discarded. */
|
|
99
|
+
static isAddressable(kind) {
|
|
100
|
+
return 30000 <= kind && kind < 40000;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Returns true if `event` replaces `target`.
|
|
104
|
+
*
|
|
105
|
+
* Both events must be replaceable, belong to the same kind and pubkey (and `d` tag, for parameterized events), and the `event` must be newer than the `target`.
|
|
106
|
+
*/
|
|
107
|
+
static replaces(event, target) {
|
|
108
|
+
const { kind, pubkey } = event;
|
|
109
|
+
if (NSet.isReplaceable(kind)) {
|
|
110
|
+
return kind === target.kind && pubkey === target.pubkey && NSet.sortEvents([event, target])[0] === event;
|
|
111
|
+
}
|
|
112
|
+
if (NSet.isAddressable(kind)) {
|
|
113
|
+
const d1 = event.tags.find(([name]) => name === 'd')?.[1] || '';
|
|
114
|
+
const d2 = target.tags.find(([name]) => name === 'd')?.[1] || '';
|
|
115
|
+
return kind === target.kind &&
|
|
116
|
+
pubkey === target.pubkey &&
|
|
117
|
+
NSet.sortEvents([event, target])[0] === event &&
|
|
118
|
+
d1 === d2;
|
|
119
|
+
}
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Returns true if the `event` deletes`target`.
|
|
124
|
+
*
|
|
125
|
+
* `event` must be a kind `5` event, and both events must share the same `pubkey`.
|
|
126
|
+
*/
|
|
127
|
+
static deletes(event, target) {
|
|
128
|
+
const { kind, pubkey, tags } = event;
|
|
129
|
+
if (kind === 5 && pubkey === target.pubkey) {
|
|
130
|
+
for (const [name, value] of tags) {
|
|
131
|
+
if (name === 'e' && value === target.id) {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Sort events in reverse-chronological order by the `created_at` timestamp,
|
|
140
|
+
* and then by the event `id` (lexicographically) in case of ties.
|
|
141
|
+
* This mutates the array.
|
|
142
|
+
*/
|
|
143
|
+
static sortEvents(events) {
|
|
144
|
+
return events.sort((a, b) => {
|
|
145
|
+
if (a.created_at !== b.created_at) {
|
|
146
|
+
return b.created_at - a.created_at;
|
|
147
|
+
}
|
|
148
|
+
return a.id.localeCompare(b.id);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
union(_other) {
|
|
152
|
+
throw new Error('Method not implemented.');
|
|
153
|
+
}
|
|
154
|
+
intersection(_other) {
|
|
155
|
+
throw new Error('Method not implemented.');
|
|
156
|
+
}
|
|
157
|
+
difference(_other) {
|
|
158
|
+
throw new Error('Method not implemented.');
|
|
159
|
+
}
|
|
160
|
+
symmetricDifference(_other) {
|
|
161
|
+
throw new Error('Method not implemented.');
|
|
162
|
+
}
|
|
163
|
+
isSubsetOf(_other) {
|
|
164
|
+
throw new Error('Method not implemented.');
|
|
165
|
+
}
|
|
166
|
+
isSupersetOf(_other) {
|
|
167
|
+
throw new Error('Method not implemented.');
|
|
168
|
+
}
|
|
169
|
+
isDisjointFrom(_other) {
|
|
170
|
+
throw new Error('Method not implemented.');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.NSet = NSet;
|
|
174
|
+
//# sourceMappingURL=NSet.js.map
|
package/dist/NSet.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSet.js","sourceRoot":"","sources":["../NSet.ts"],"names":[],"mappings":"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"}
|