@welshman/util 0.0.1

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 (57) hide show
  1. package/README.md +14 -0
  2. package/build/Address.cjs +44 -0
  3. package/build/Address.cjs.map +1 -0
  4. package/build/Address.d.ts +21 -0
  5. package/build/Address.mjs +32 -0
  6. package/build/Address.mjs.map +1 -0
  7. package/build/Events.cjs +58 -0
  8. package/build/Events.cjs.map +1 -0
  9. package/build/Events.d.ts +34 -0
  10. package/build/Events.mjs +42 -0
  11. package/build/Events.mjs.map +1 -0
  12. package/build/Filters.cjs +139 -0
  13. package/build/Filters.cjs.map +1 -0
  14. package/build/Filters.d.ts +39 -0
  15. package/build/Filters.mjs +127 -0
  16. package/build/Filters.mjs.map +1 -0
  17. package/build/Kinds.cjs +83 -0
  18. package/build/Kinds.cjs.map +1 -0
  19. package/build/Kinds.d.ts +77 -0
  20. package/build/Kinds.mjs +78 -0
  21. package/build/Kinds.mjs.map +1 -0
  22. package/build/Links.cjs +8 -0
  23. package/build/Links.cjs.map +1 -0
  24. package/build/Links.d.ts +2 -0
  25. package/build/Links.mjs +3 -0
  26. package/build/Links.mjs.map +1 -0
  27. package/build/Relay.cjs +148 -0
  28. package/build/Relay.cjs.map +1 -0
  29. package/build/Relay.d.ts +23 -0
  30. package/build/Relay.mjs +144 -0
  31. package/build/Relay.mjs.map +1 -0
  32. package/build/Relays.cjs +36 -0
  33. package/build/Relays.cjs.map +1 -0
  34. package/build/Relays.d.ts +6 -0
  35. package/build/Relays.mjs +31 -0
  36. package/build/Relays.mjs.map +1 -0
  37. package/build/Router.cjs +205 -0
  38. package/build/Router.cjs.map +1 -0
  39. package/build/Router.d.ts +128 -0
  40. package/build/Router.mjs +200 -0
  41. package/build/Router.mjs.map +1 -0
  42. package/build/Tags.cjs +149 -0
  43. package/build/Tags.cjs.map +1 -0
  44. package/build/Tags.d.ts +77 -0
  45. package/build/Tags.mjs +144 -0
  46. package/build/Tags.mjs.map +1 -0
  47. package/build/Zaps.cjs +96 -0
  48. package/build/Zaps.cjs.map +1 -0
  49. package/build/Zaps.d.ts +19 -0
  50. package/build/Zaps.mjs +89 -0
  51. package/build/Zaps.mjs.map +1 -0
  52. package/build/index.cjs +27 -0
  53. package/build/index.cjs.map +1 -0
  54. package/build/index.d.ts +10 -0
  55. package/build/index.mjs +11 -0
  56. package/build/index.mjs.map +1 -0
  57. package/package.json +38 -0
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NOSTR_CONNECT = exports.NWC_RESPONSE = exports.NWC_REQUEST = exports.NWC_INFO = exports.CLIENT_AUTH = exports.LIGHTNING_PUB_RPC = exports.USER_LIST_EMOJIS = exports.USER_LIST_INTERESTS = exports.USER_LIST_SEARCH_RELAYS = exports.USER_LIST_BLOCKED_RELAYS = exports.USER_LIST_PUBLIC_CHATS = exports.USER_LIST_COMMUNITIES = exports.USER_LIST_BOOKMARKS = exports.USER_LIST_RELAYS = exports.USER_LIST_PINS = exports.USER_LIST_MUTES = exports.HIGHLIGHT = exports.ZAP_RESPONSE = exports.ZAP_REQUEST = exports.ZAP_GOAL = exports.JOB_FEEDBACK = exports.JOB_RESULT = exports.JOB_REQUEST = exports.COMMUNITY_POST_APPROVAL = exports.LABEL = exports.REPORT = exports.PROBLEM_TRACKER = exports.LIVE_CHAT_MESSAGE = exports.FILE_METADATA = exports.GIFT_WRAP = exports.OPEN_TIMESTAMP = exports.CHANNEL_MUTE_USER = exports.CHANNEL_HIDE_MESSAGE = exports.CHANNEL_MESSAGE = exports.CHANNEL_METADATA = exports.CHANNEL_CREATION = exports.GENERIC_REPOST = exports.BADGE_AWARD = exports.REACTION = exports.REPOST = exports.EVENT_DELETION = exports.DM = exports.RELAY = exports.NOTE = exports.PROFILE = exports.isReplaceableKind = exports.isParameterizedReplaceableKind = exports.isPlainReplaceableKind = exports.isEphemeralKind = exports.isRegularKind = void 0;
4
+ exports.GROUP_DEFINITION = exports.COMMUNITY_DEFINITION = exports.HANDLER_INFORMATION = exports.HANDLER_RECOMMENDATION = exports.CALENDAR_EVENT_RSVP = exports.CALENDAR_EVENT_TIME = exports.CALENDAR_EVENT_DATE = exports.CALENDAR = exports.DRAFT_CLASSIFIED_LISTING = exports.CLASSIFIED_LISTING = exports.USER_STATUSES = exports.LIVE_EVENT = exports.APPLICATION = exports.LONG_FORM_ARTICLE_DRAFT = exports.LONG_FORM_ARTICLE = exports.LIST_INTERESTS = exports.LIST_EMOJIS = exports.BADGE_DEFINITION = exports.PROFILE_BADGES = exports.LIST_CURATIONS = exports.LIST_BOOKMARKS = exports.LIST_RELAYS = exports.LIST_GENERIC = exports.LIST_PEOPLE = exports.LIST_FOLLOWS = exports.HTTP_AUTH = void 0;
5
+ const nostr_tools_1 = require("nostr-tools");
6
+ exports.isRegularKind = nostr_tools_1.kinds.isRegularKind;
7
+ exports.isEphemeralKind = nostr_tools_1.kinds.isEphemeralKind;
8
+ exports.isPlainReplaceableKind = nostr_tools_1.kinds.isReplaceableKind;
9
+ exports.isParameterizedReplaceableKind = nostr_tools_1.kinds.isParameterizedReplaceableKind;
10
+ const isReplaceableKind = (kind) => (0, exports.isPlainReplaceableKind)(kind) || (0, exports.isParameterizedReplaceableKind)(kind);
11
+ exports.isReplaceableKind = isReplaceableKind;
12
+ exports.PROFILE = 0;
13
+ exports.NOTE = 1;
14
+ exports.RELAY = 2;
15
+ exports.DM = 4;
16
+ exports.EVENT_DELETION = 5;
17
+ exports.REPOST = 6;
18
+ exports.REACTION = 7;
19
+ exports.BADGE_AWARD = 8;
20
+ exports.GENERIC_REPOST = 16;
21
+ exports.CHANNEL_CREATION = 40;
22
+ exports.CHANNEL_METADATA = 41;
23
+ exports.CHANNEL_MESSAGE = 42;
24
+ exports.CHANNEL_HIDE_MESSAGE = 43;
25
+ exports.CHANNEL_MUTE_USER = 44;
26
+ exports.OPEN_TIMESTAMP = 1040;
27
+ exports.GIFT_WRAP = 1059;
28
+ exports.FILE_METADATA = 1063;
29
+ exports.LIVE_CHAT_MESSAGE = 1311;
30
+ exports.PROBLEM_TRACKER = 1971;
31
+ exports.REPORT = 1984;
32
+ exports.LABEL = 1985;
33
+ exports.COMMUNITY_POST_APPROVAL = 4550;
34
+ exports.JOB_REQUEST = 5999;
35
+ exports.JOB_RESULT = 6999;
36
+ exports.JOB_FEEDBACK = 7000;
37
+ exports.ZAP_GOAL = 9041;
38
+ exports.ZAP_REQUEST = 9734;
39
+ exports.ZAP_RESPONSE = 9735;
40
+ exports.HIGHLIGHT = 9802;
41
+ exports.USER_LIST_MUTES = 10000;
42
+ exports.USER_LIST_PINS = 10001;
43
+ exports.USER_LIST_RELAYS = 10002;
44
+ exports.USER_LIST_BOOKMARKS = 10003;
45
+ exports.USER_LIST_COMMUNITIES = 10004;
46
+ exports.USER_LIST_PUBLIC_CHATS = 10005;
47
+ exports.USER_LIST_BLOCKED_RELAYS = 10006;
48
+ exports.USER_LIST_SEARCH_RELAYS = 10007;
49
+ exports.USER_LIST_INTERESTS = 10015;
50
+ exports.USER_LIST_EMOJIS = 10030;
51
+ exports.LIGHTNING_PUB_RPC = 21000;
52
+ exports.CLIENT_AUTH = 22242;
53
+ exports.NWC_INFO = 13194;
54
+ exports.NWC_REQUEST = 23194;
55
+ exports.NWC_RESPONSE = 23195;
56
+ exports.NOSTR_CONNECT = 24133;
57
+ exports.HTTP_AUTH = 27235;
58
+ exports.LIST_FOLLOWS = 3;
59
+ exports.LIST_PEOPLE = 30000;
60
+ exports.LIST_GENERIC = 30001;
61
+ exports.LIST_RELAYS = 30002;
62
+ exports.LIST_BOOKMARKS = 30003;
63
+ exports.LIST_CURATIONS = 30004;
64
+ exports.PROFILE_BADGES = 30008;
65
+ exports.BADGE_DEFINITION = 30009;
66
+ exports.LIST_EMOJIS = 30030;
67
+ exports.LIST_INTERESTS = 30015;
68
+ exports.LONG_FORM_ARTICLE = 30023;
69
+ exports.LONG_FORM_ARTICLE_DRAFT = 30024;
70
+ exports.APPLICATION = 30078;
71
+ exports.LIVE_EVENT = 30311;
72
+ exports.USER_STATUSES = 30315;
73
+ exports.CLASSIFIED_LISTING = 30402;
74
+ exports.DRAFT_CLASSIFIED_LISTING = 30403;
75
+ exports.CALENDAR = 31924;
76
+ exports.CALENDAR_EVENT_DATE = 31922;
77
+ exports.CALENDAR_EVENT_TIME = 31923;
78
+ exports.CALENDAR_EVENT_RSVP = 31925;
79
+ exports.HANDLER_RECOMMENDATION = 31989;
80
+ exports.HANDLER_INFORMATION = 31990;
81
+ exports.COMMUNITY_DEFINITION = 34550;
82
+ exports.GROUP_DEFINITION = 35834;
83
+ //# sourceMappingURL=Kinds.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Kinds.cjs","sourceRoot":"","sources":["../Kinds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { kinds } from 'nostr-tools';
2
+ export declare const isRegularKind: typeof kinds.isRegularKind;
3
+ export declare const isEphemeralKind: typeof kinds.isEphemeralKind;
4
+ export declare const isPlainReplaceableKind: typeof kinds.isReplaceableKind;
5
+ export declare const isParameterizedReplaceableKind: typeof kinds.isParameterizedReplaceableKind;
6
+ export declare const isReplaceableKind: (kind: number) => boolean;
7
+ export declare const PROFILE = 0;
8
+ export declare const NOTE = 1;
9
+ export declare const RELAY = 2;
10
+ export declare const DM = 4;
11
+ export declare const EVENT_DELETION = 5;
12
+ export declare const REPOST = 6;
13
+ export declare const REACTION = 7;
14
+ export declare const BADGE_AWARD = 8;
15
+ export declare const GENERIC_REPOST = 16;
16
+ export declare const CHANNEL_CREATION = 40;
17
+ export declare const CHANNEL_METADATA = 41;
18
+ export declare const CHANNEL_MESSAGE = 42;
19
+ export declare const CHANNEL_HIDE_MESSAGE = 43;
20
+ export declare const CHANNEL_MUTE_USER = 44;
21
+ export declare const OPEN_TIMESTAMP = 1040;
22
+ export declare const GIFT_WRAP = 1059;
23
+ export declare const FILE_METADATA = 1063;
24
+ export declare const LIVE_CHAT_MESSAGE = 1311;
25
+ export declare const PROBLEM_TRACKER = 1971;
26
+ export declare const REPORT = 1984;
27
+ export declare const LABEL = 1985;
28
+ export declare const COMMUNITY_POST_APPROVAL = 4550;
29
+ export declare const JOB_REQUEST = 5999;
30
+ export declare const JOB_RESULT = 6999;
31
+ export declare const JOB_FEEDBACK = 7000;
32
+ export declare const ZAP_GOAL = 9041;
33
+ export declare const ZAP_REQUEST = 9734;
34
+ export declare const ZAP_RESPONSE = 9735;
35
+ export declare const HIGHLIGHT = 9802;
36
+ export declare const USER_LIST_MUTES = 10000;
37
+ export declare const USER_LIST_PINS = 10001;
38
+ export declare const USER_LIST_RELAYS = 10002;
39
+ export declare const USER_LIST_BOOKMARKS = 10003;
40
+ export declare const USER_LIST_COMMUNITIES = 10004;
41
+ export declare const USER_LIST_PUBLIC_CHATS = 10005;
42
+ export declare const USER_LIST_BLOCKED_RELAYS = 10006;
43
+ export declare const USER_LIST_SEARCH_RELAYS = 10007;
44
+ export declare const USER_LIST_INTERESTS = 10015;
45
+ export declare const USER_LIST_EMOJIS = 10030;
46
+ export declare const LIGHTNING_PUB_RPC = 21000;
47
+ export declare const CLIENT_AUTH = 22242;
48
+ export declare const NWC_INFO = 13194;
49
+ export declare const NWC_REQUEST = 23194;
50
+ export declare const NWC_RESPONSE = 23195;
51
+ export declare const NOSTR_CONNECT = 24133;
52
+ export declare const HTTP_AUTH = 27235;
53
+ export declare const LIST_FOLLOWS = 3;
54
+ export declare const LIST_PEOPLE = 30000;
55
+ export declare const LIST_GENERIC = 30001;
56
+ export declare const LIST_RELAYS = 30002;
57
+ export declare const LIST_BOOKMARKS = 30003;
58
+ export declare const LIST_CURATIONS = 30004;
59
+ export declare const PROFILE_BADGES = 30008;
60
+ export declare const BADGE_DEFINITION = 30009;
61
+ export declare const LIST_EMOJIS = 30030;
62
+ export declare const LIST_INTERESTS = 30015;
63
+ export declare const LONG_FORM_ARTICLE = 30023;
64
+ export declare const LONG_FORM_ARTICLE_DRAFT = 30024;
65
+ export declare const APPLICATION = 30078;
66
+ export declare const LIVE_EVENT = 30311;
67
+ export declare const USER_STATUSES = 30315;
68
+ export declare const CLASSIFIED_LISTING = 30402;
69
+ export declare const DRAFT_CLASSIFIED_LISTING = 30403;
70
+ export declare const CALENDAR = 31924;
71
+ export declare const CALENDAR_EVENT_DATE = 31922;
72
+ export declare const CALENDAR_EVENT_TIME = 31923;
73
+ export declare const CALENDAR_EVENT_RSVP = 31925;
74
+ export declare const HANDLER_RECOMMENDATION = 31989;
75
+ export declare const HANDLER_INFORMATION = 31990;
76
+ export declare const COMMUNITY_DEFINITION = 34550;
77
+ export declare const GROUP_DEFINITION = 35834;
@@ -0,0 +1,78 @@
1
+ import { kinds } from 'nostr-tools';
2
+ export const isRegularKind = kinds.isRegularKind;
3
+ export const isEphemeralKind = kinds.isEphemeralKind;
4
+ export const isPlainReplaceableKind = kinds.isReplaceableKind;
5
+ export const isParameterizedReplaceableKind = kinds.isParameterizedReplaceableKind;
6
+ export const isReplaceableKind = (kind) => isPlainReplaceableKind(kind) || isParameterizedReplaceableKind(kind);
7
+ export const PROFILE = 0;
8
+ export const NOTE = 1;
9
+ export const RELAY = 2;
10
+ export const DM = 4;
11
+ export const EVENT_DELETION = 5;
12
+ export const REPOST = 6;
13
+ export const REACTION = 7;
14
+ export const BADGE_AWARD = 8;
15
+ export const GENERIC_REPOST = 16;
16
+ export const CHANNEL_CREATION = 40;
17
+ export const CHANNEL_METADATA = 41;
18
+ export const CHANNEL_MESSAGE = 42;
19
+ export const CHANNEL_HIDE_MESSAGE = 43;
20
+ export const CHANNEL_MUTE_USER = 44;
21
+ export const OPEN_TIMESTAMP = 1040;
22
+ export const GIFT_WRAP = 1059;
23
+ export const FILE_METADATA = 1063;
24
+ export const LIVE_CHAT_MESSAGE = 1311;
25
+ export const PROBLEM_TRACKER = 1971;
26
+ export const REPORT = 1984;
27
+ export const LABEL = 1985;
28
+ export const COMMUNITY_POST_APPROVAL = 4550;
29
+ export const JOB_REQUEST = 5999;
30
+ export const JOB_RESULT = 6999;
31
+ export const JOB_FEEDBACK = 7000;
32
+ export const ZAP_GOAL = 9041;
33
+ export const ZAP_REQUEST = 9734;
34
+ export const ZAP_RESPONSE = 9735;
35
+ export const HIGHLIGHT = 9802;
36
+ export const USER_LIST_MUTES = 10000;
37
+ export const USER_LIST_PINS = 10001;
38
+ export const USER_LIST_RELAYS = 10002;
39
+ export const USER_LIST_BOOKMARKS = 10003;
40
+ export const USER_LIST_COMMUNITIES = 10004;
41
+ export const USER_LIST_PUBLIC_CHATS = 10005;
42
+ export const USER_LIST_BLOCKED_RELAYS = 10006;
43
+ export const USER_LIST_SEARCH_RELAYS = 10007;
44
+ export const USER_LIST_INTERESTS = 10015;
45
+ export const USER_LIST_EMOJIS = 10030;
46
+ export const LIGHTNING_PUB_RPC = 21000;
47
+ export const CLIENT_AUTH = 22242;
48
+ export const NWC_INFO = 13194;
49
+ export const NWC_REQUEST = 23194;
50
+ export const NWC_RESPONSE = 23195;
51
+ export const NOSTR_CONNECT = 24133;
52
+ export const HTTP_AUTH = 27235;
53
+ export const LIST_FOLLOWS = 3;
54
+ export const LIST_PEOPLE = 30000;
55
+ export const LIST_GENERIC = 30001;
56
+ export const LIST_RELAYS = 30002;
57
+ export const LIST_BOOKMARKS = 30003;
58
+ export const LIST_CURATIONS = 30004;
59
+ export const PROFILE_BADGES = 30008;
60
+ export const BADGE_DEFINITION = 30009;
61
+ export const LIST_EMOJIS = 30030;
62
+ export const LIST_INTERESTS = 30015;
63
+ export const LONG_FORM_ARTICLE = 30023;
64
+ export const LONG_FORM_ARTICLE_DRAFT = 30024;
65
+ export const APPLICATION = 30078;
66
+ export const LIVE_EVENT = 30311;
67
+ export const USER_STATUSES = 30315;
68
+ export const CLASSIFIED_LISTING = 30402;
69
+ export const DRAFT_CLASSIFIED_LISTING = 30403;
70
+ export const CALENDAR = 31924;
71
+ export const CALENDAR_EVENT_DATE = 31922;
72
+ export const CALENDAR_EVENT_TIME = 31923;
73
+ export const CALENDAR_EVENT_RSVP = 31925;
74
+ export const HANDLER_RECOMMENDATION = 31989;
75
+ export const HANDLER_INFORMATION = 31990;
76
+ export const COMMUNITY_DEFINITION = 34550;
77
+ export const GROUP_DEFINITION = 35834;
78
+ //# sourceMappingURL=Kinds.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Kinds.mjs","sourceRoot":"","sources":["../Kinds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toNostrURI = exports.fromNostrURI = void 0;
4
+ const fromNostrURI = (s) => s.replace(/^[\w+]+:\/?\/?/, "");
5
+ exports.fromNostrURI = fromNostrURI;
6
+ const toNostrURI = (s) => `nostr:${s}`;
7
+ exports.toNostrURI = toNostrURI;
8
+ //# sourceMappingURL=Links.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Links.cjs","sourceRoot":"","sources":["../Links.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;AAA7D,QAAA,YAAY,gBAAiD;AAEnE,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAA;AAAxC,QAAA,UAAU,cAA8B"}
@@ -0,0 +1,2 @@
1
+ export declare const fromNostrURI: (s: string) => string;
2
+ export declare const toNostrURI: (s: string) => string;
@@ -0,0 +1,3 @@
1
+ export const fromNostrURI = (s) => s.replace(/^[\w+]+:\/?\/?/, "");
2
+ export const toNostrURI = (s) => `nostr:${s}`;
3
+ //# sourceMappingURL=Links.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Links.mjs","sourceRoot":"","sources":["../Links.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;AAE1E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAA"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Relay = exports.DAY = void 0;
4
+ const lib_1 = require("@welshman/lib");
5
+ const Filters_1 = require("./Filters.cjs");
6
+ const Address_1 = require("./Address.cjs");
7
+ const Events_1 = require("./Events.cjs");
8
+ exports.DAY = 86400;
9
+ const getDay = (ts) => Math.floor(ts / exports.DAY);
10
+ class Relay extends lib_1.Emitter {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.eventsById = new Map();
14
+ this.eventsByAddress = new Map();
15
+ this.eventsByTag = new Map();
16
+ this.eventsByDay = new Map();
17
+ this.eventsByAuthor = new Map();
18
+ this.subs = new Map();
19
+ this.deletes = new Map();
20
+ }
21
+ dump() {
22
+ return Array.from(this.eventsById.values());
23
+ }
24
+ load(events) {
25
+ for (const event of events) {
26
+ this._addEvent(event);
27
+ }
28
+ }
29
+ send(type, ...message) {
30
+ switch (type) {
31
+ case 'EVENT': return this._onEVENT(message);
32
+ case 'CLOSE': return this._onCLOSE(message);
33
+ case 'REQ': return this._onREQ(message);
34
+ }
35
+ }
36
+ _onEVENT([json]) {
37
+ let event;
38
+ try {
39
+ event = JSON.parse(json);
40
+ }
41
+ catch (e) {
42
+ return;
43
+ }
44
+ const duplicateById = this.eventsById.get(event.id);
45
+ if (duplicateById) {
46
+ return;
47
+ }
48
+ const hasAddress = (0, Events_1.isReplaceable)(event);
49
+ const address = (0, Address_1.encodeAddress)((0, Address_1.addressFromEvent)(event));
50
+ const duplicateByAddress = hasAddress ? this.eventsByAddress.get(address) : undefined;
51
+ if (duplicateByAddress && duplicateByAddress.created_at >= event.created_at) {
52
+ return;
53
+ }
54
+ this._addEvent(event, duplicateByAddress);
55
+ this.emit('OK', event.id, true, "");
56
+ if (!this._isDeleted(event)) {
57
+ for (const [subId, filters] of this.subs.entries()) {
58
+ if ((0, Filters_1.matchFilters)(filters, event)) {
59
+ this.emit('EVENT', subId, json);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ _onCLOSE([subId]) {
65
+ this.subs.delete(subId);
66
+ }
67
+ _onREQ([subId, ...filters]) {
68
+ this.subs.set(subId, filters);
69
+ const result = new Set();
70
+ for (let filter of filters) {
71
+ let events = this.eventsById.values();
72
+ if (filter.ids) {
73
+ filter = (0, lib_1.omit)(['ids'], filter);
74
+ events = filter.ids.map(id => this.eventsById.get(id)).filter(lib_1.identity);
75
+ }
76
+ else if (filter.authors) {
77
+ filter = (0, lib_1.omit)(['authors'], filter);
78
+ events = (0, lib_1.uniq)(filter.authors.flatMap(pubkey => this.eventsByAuthor.get(pubkey) || []));
79
+ }
80
+ else if (filter.since || filter.until) {
81
+ const sinceDay = getDay(filter.since || 0);
82
+ const untilDay = getDay(filter.since || (0, lib_1.now)());
83
+ filter = (0, lib_1.omit)(['since', 'until'], filter);
84
+ events = (0, lib_1.uniq)(Array.from((0, lib_1.range)(sinceDay, untilDay))
85
+ .flatMap((day) => this.eventsByDay.get(day) || []));
86
+ }
87
+ else {
88
+ for (const [k, values] of Object.entries(filter)) {
89
+ if (!k.startsWith('#') || k.length !== 2) {
90
+ continue;
91
+ }
92
+ filter = (0, lib_1.omit)([k], filter);
93
+ events = (0, lib_1.uniq)(values.flatMap(v => this.eventsByTag.get(`${k[1]}:${v}`) || []));
94
+ break;
95
+ }
96
+ }
97
+ for (const event of events) {
98
+ if (!this._isDeleted(event) && (0, Filters_1.matchFilter)(filter, event)) {
99
+ result.add(event);
100
+ }
101
+ }
102
+ }
103
+ for (const event of result) {
104
+ this.emit('EVENT', subId, JSON.stringify(event));
105
+ }
106
+ this.emit('EOSE', subId);
107
+ }
108
+ _isDeleted(event) {
109
+ const idDeletedAt = this.deletes.get(event.id) || 0;
110
+ if (idDeletedAt > event.created_at) {
111
+ return true;
112
+ }
113
+ if ((0, Events_1.isReplaceable)(event)) {
114
+ const address = (0, Address_1.encodeAddress)((0, Address_1.addressFromEvent)(event));
115
+ const addressDeletedAt = this.deletes.get(address) || 0;
116
+ if (addressDeletedAt > event.created_at) {
117
+ return true;
118
+ }
119
+ }
120
+ return false;
121
+ }
122
+ _addEvent(event, duplicate) {
123
+ this.eventsById.set(event.id, event);
124
+ if ((0, Events_1.isReplaceable)(event)) {
125
+ this.eventsByAddress.set((0, Address_1.encodeAddress)((0, Address_1.addressFromEvent)(event)), event);
126
+ }
127
+ this._updateIndex(this.eventsByDay, getDay(event.created_at), event, duplicate);
128
+ this._updateIndex(this.eventsByAuthor, event.pubkey, event, duplicate);
129
+ for (const tag of event.tags) {
130
+ if (tag[0].length === 1) {
131
+ this._updateIndex(this.eventsByTag, tag.slice(0, 2).join(':'), event, duplicate);
132
+ if (event.kind === 5) {
133
+ this.deletes.set(tag[1], Math.max(event.created_at, this.deletes.get(tag[1]) || 0));
134
+ }
135
+ }
136
+ }
137
+ }
138
+ _updateIndex(m, k, e, duplicate) {
139
+ let a = m.get(k) || [];
140
+ if (duplicate) {
141
+ a = a.filter((x) => x !== duplicate);
142
+ }
143
+ a.push(e);
144
+ m.set(k, a);
145
+ }
146
+ }
147
+ exports.Relay = Relay;
148
+ //# sourceMappingURL=Relay.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Relay.cjs","sourceRoot":"","sources":["../Relay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Emitter } from '@welshman/lib';
2
+ import type { Filter } from './Filters';
3
+ import type { Rumor } from './Events';
4
+ export declare const DAY = 86400;
5
+ export type Message = [string, ...any[]];
6
+ export declare class Relay<E extends Rumor> extends Emitter {
7
+ eventsById: Map<string, E>;
8
+ eventsByAddress: Map<string, E>;
9
+ eventsByTag: Map<string, E[]>;
10
+ eventsByDay: Map<number, E[]>;
11
+ eventsByAuthor: Map<string, E[]>;
12
+ subs: Map<string, Filter[]>;
13
+ deletes: Map<string, number>;
14
+ dump(): E[];
15
+ load(events: E[]): void;
16
+ send(type: string, ...message: any[]): void;
17
+ _onEVENT([json]: [string]): void;
18
+ _onCLOSE([subId]: [string]): void;
19
+ _onREQ([subId, ...filters]: [string, ...Filter[]]): void;
20
+ _isDeleted(event: E): boolean;
21
+ _addEvent(event: E, duplicate?: E): void;
22
+ _updateIndex<K>(m: Map<K, E[]>, k: K, e: E, duplicate?: E): void;
23
+ }
@@ -0,0 +1,144 @@
1
+ import { Emitter, uniq, omit, now, range, identity } from '@welshman/lib';
2
+ import { matchFilters, matchFilter } from "./Filters.mjs";
3
+ import { encodeAddress, addressFromEvent } from "./Address.mjs";
4
+ import { isReplaceable } from "./Events.mjs";
5
+ export const DAY = 86400;
6
+ const getDay = (ts) => Math.floor(ts / DAY);
7
+ export class Relay extends Emitter {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.eventsById = new Map();
11
+ this.eventsByAddress = new Map();
12
+ this.eventsByTag = new Map();
13
+ this.eventsByDay = new Map();
14
+ this.eventsByAuthor = new Map();
15
+ this.subs = new Map();
16
+ this.deletes = new Map();
17
+ }
18
+ dump() {
19
+ return Array.from(this.eventsById.values());
20
+ }
21
+ load(events) {
22
+ for (const event of events) {
23
+ this._addEvent(event);
24
+ }
25
+ }
26
+ send(type, ...message) {
27
+ switch (type) {
28
+ case 'EVENT': return this._onEVENT(message);
29
+ case 'CLOSE': return this._onCLOSE(message);
30
+ case 'REQ': return this._onREQ(message);
31
+ }
32
+ }
33
+ _onEVENT([json]) {
34
+ let event;
35
+ try {
36
+ event = JSON.parse(json);
37
+ }
38
+ catch (e) {
39
+ return;
40
+ }
41
+ const duplicateById = this.eventsById.get(event.id);
42
+ if (duplicateById) {
43
+ return;
44
+ }
45
+ const hasAddress = isReplaceable(event);
46
+ const address = encodeAddress(addressFromEvent(event));
47
+ const duplicateByAddress = hasAddress ? this.eventsByAddress.get(address) : undefined;
48
+ if (duplicateByAddress && duplicateByAddress.created_at >= event.created_at) {
49
+ return;
50
+ }
51
+ this._addEvent(event, duplicateByAddress);
52
+ this.emit('OK', event.id, true, "");
53
+ if (!this._isDeleted(event)) {
54
+ for (const [subId, filters] of this.subs.entries()) {
55
+ if (matchFilters(filters, event)) {
56
+ this.emit('EVENT', subId, json);
57
+ }
58
+ }
59
+ }
60
+ }
61
+ _onCLOSE([subId]) {
62
+ this.subs.delete(subId);
63
+ }
64
+ _onREQ([subId, ...filters]) {
65
+ this.subs.set(subId, filters);
66
+ const result = new Set();
67
+ for (let filter of filters) {
68
+ let events = this.eventsById.values();
69
+ if (filter.ids) {
70
+ filter = omit(['ids'], filter);
71
+ events = filter.ids.map(id => this.eventsById.get(id)).filter(identity);
72
+ }
73
+ else if (filter.authors) {
74
+ filter = omit(['authors'], filter);
75
+ events = uniq(filter.authors.flatMap(pubkey => this.eventsByAuthor.get(pubkey) || []));
76
+ }
77
+ else if (filter.since || filter.until) {
78
+ const sinceDay = getDay(filter.since || 0);
79
+ const untilDay = getDay(filter.since || now());
80
+ filter = omit(['since', 'until'], filter);
81
+ events = uniq(Array.from(range(sinceDay, untilDay))
82
+ .flatMap((day) => this.eventsByDay.get(day) || []));
83
+ }
84
+ else {
85
+ for (const [k, values] of Object.entries(filter)) {
86
+ if (!k.startsWith('#') || k.length !== 2) {
87
+ continue;
88
+ }
89
+ filter = omit([k], filter);
90
+ events = uniq(values.flatMap(v => this.eventsByTag.get(`${k[1]}:${v}`) || []));
91
+ break;
92
+ }
93
+ }
94
+ for (const event of events) {
95
+ if (!this._isDeleted(event) && matchFilter(filter, event)) {
96
+ result.add(event);
97
+ }
98
+ }
99
+ }
100
+ for (const event of result) {
101
+ this.emit('EVENT', subId, JSON.stringify(event));
102
+ }
103
+ this.emit('EOSE', subId);
104
+ }
105
+ _isDeleted(event) {
106
+ const idDeletedAt = this.deletes.get(event.id) || 0;
107
+ if (idDeletedAt > event.created_at) {
108
+ return true;
109
+ }
110
+ if (isReplaceable(event)) {
111
+ const address = encodeAddress(addressFromEvent(event));
112
+ const addressDeletedAt = this.deletes.get(address) || 0;
113
+ if (addressDeletedAt > event.created_at) {
114
+ return true;
115
+ }
116
+ }
117
+ return false;
118
+ }
119
+ _addEvent(event, duplicate) {
120
+ this.eventsById.set(event.id, event);
121
+ if (isReplaceable(event)) {
122
+ this.eventsByAddress.set(encodeAddress(addressFromEvent(event)), event);
123
+ }
124
+ this._updateIndex(this.eventsByDay, getDay(event.created_at), event, duplicate);
125
+ this._updateIndex(this.eventsByAuthor, event.pubkey, event, duplicate);
126
+ for (const tag of event.tags) {
127
+ if (tag[0].length === 1) {
128
+ this._updateIndex(this.eventsByTag, tag.slice(0, 2).join(':'), event, duplicate);
129
+ if (event.kind === 5) {
130
+ this.deletes.set(tag[1], Math.max(event.created_at, this.deletes.get(tag[1]) || 0));
131
+ }
132
+ }
133
+ }
134
+ }
135
+ _updateIndex(m, k, e, duplicate) {
136
+ let a = m.get(k) || [];
137
+ if (duplicate) {
138
+ a = a.filter((x) => x !== duplicate);
139
+ }
140
+ a.push(e);
141
+ m.set(k, a);
142
+ }
143
+ }
144
+ //# sourceMappingURL=Relay.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Relay.mjs","sourceRoot":"","sources":["../Relay.ts"],"names":[],"mappings":"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"}