@welshman/util 0.8.16 → 0.9.0-pre2

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 (75) hide show
  1. package/dist/lib/src/Tools.d.ts +13 -0
  2. package/dist/lib/src/Tools.d.ts.map +1 -1
  3. package/dist/lib/src/Tools.js +30 -1
  4. package/dist/lib/src/Tools.js.map +1 -1
  5. package/dist/tsconfig.build.tsbuildinfo +1 -1
  6. package/dist/util/src/Events.d.ts +0 -12
  7. package/dist/util/src/Events.d.ts.map +1 -1
  8. package/dist/util/src/Events.js +3 -25
  9. package/dist/util/src/Events.js.map +1 -1
  10. package/dist/util/src/Handles.d.ts +15 -0
  11. package/dist/util/src/Handles.d.ts.map +1 -0
  12. package/dist/util/src/Handles.js +25 -0
  13. package/dist/util/src/Handles.js.map +1 -0
  14. package/dist/util/src/Kinds.d.ts +6 -1
  15. package/dist/util/src/Kinds.d.ts.map +1 -1
  16. package/dist/util/src/Kinds.js +8 -2
  17. package/dist/util/src/Kinds.js.map +1 -1
  18. package/dist/util/src/Lightning.d.ts +6 -0
  19. package/dist/util/src/Lightning.d.ts.map +1 -0
  20. package/dist/util/src/Lightning.js +59 -0
  21. package/dist/util/src/Lightning.js.map +1 -0
  22. package/dist/util/src/Nip86.d.ts +75 -25
  23. package/dist/util/src/Nip86.d.ts.map +1 -1
  24. package/dist/util/src/Nip86.js +169 -24
  25. package/dist/util/src/Nip86.js.map +1 -1
  26. package/dist/util/src/Pow.js +2 -2
  27. package/dist/util/src/Pow.js.map +1 -1
  28. package/dist/util/src/Pubkey.d.ts.map +1 -1
  29. package/dist/util/src/Pubkey.js +2 -1
  30. package/dist/util/src/Pubkey.js.map +1 -1
  31. package/dist/util/src/Relay.d.ts +0 -29
  32. package/dist/util/src/Relay.d.ts.map +1 -1
  33. package/dist/util/src/Relay.js +0 -10
  34. package/dist/util/src/Relay.js.map +1 -1
  35. package/dist/util/src/RelaySelection.d.ts +101 -0
  36. package/dist/util/src/RelaySelection.d.ts.map +1 -0
  37. package/dist/util/src/RelaySelection.js +98 -0
  38. package/dist/util/src/RelaySelection.js.map +1 -0
  39. package/dist/util/src/Tags.d.ts +16 -35
  40. package/dist/util/src/Tags.d.ts.map +1 -1
  41. package/dist/util/src/Tags.js +23 -74
  42. package/dist/util/src/Tags.js.map +1 -1
  43. package/dist/util/src/Topics.d.ts +2 -0
  44. package/dist/util/src/Topics.d.ts.map +1 -0
  45. package/dist/util/src/Topics.js +2 -0
  46. package/dist/util/src/Topics.js.map +1 -0
  47. package/dist/util/src/index.d.ts +3 -6
  48. package/dist/util/src/index.d.ts.map +1 -1
  49. package/dist/util/src/index.js +3 -6
  50. package/dist/util/src/index.js.map +1 -1
  51. package/package.json +3 -3
  52. package/dist/util/src/Encryptable.d.ts +0 -34
  53. package/dist/util/src/Encryptable.d.ts.map +0 -1
  54. package/dist/util/src/Encryptable.js +0 -52
  55. package/dist/util/src/Encryptable.js.map +0 -1
  56. package/dist/util/src/Handler.d.ts +0 -17
  57. package/dist/util/src/Handler.d.ts.map +0 -1
  58. package/dist/util/src/Handler.js +0 -33
  59. package/dist/util/src/Handler.js.map +0 -1
  60. package/dist/util/src/List.d.ts +0 -42
  61. package/dist/util/src/List.d.ts.map +0 -1
  62. package/dist/util/src/List.js +0 -86
  63. package/dist/util/src/List.js.map +0 -1
  64. package/dist/util/src/Profile.d.ts +0 -26
  65. package/dist/util/src/Profile.d.ts.map +0 -1
  66. package/dist/util/src/Profile.js +0 -50
  67. package/dist/util/src/Profile.js.map +0 -1
  68. package/dist/util/src/Room.d.ts +0 -63
  69. package/dist/util/src/Room.d.ts.map +0 -1
  70. package/dist/util/src/Room.js +0 -94
  71. package/dist/util/src/Room.js.map +0 -1
  72. package/dist/util/src/Zaps.d.ts +0 -55
  73. package/dist/util/src/Zaps.d.ts.map +0 -1
  74. package/dist/util/src/Zaps.js +0 -135
  75. package/dist/util/src/Zaps.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Relay.js","sourceRoot":"","sources":["../../../src/Relay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Relay.js","sourceRoot":"","sources":["../../../src/Relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,YAAY,EAAE,aAAa,EAAC,MAAM,eAAe,CAAA;AAE/D,6BAA6B;AAE7B,MAAM,CAAC,MAAM,eAAe,GAAG,yBAAyB,CAAA;AAExD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE;IACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAA;IACtB,CAAC;IAED,IAAI,MAAW,CAAA;IACf,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAA;IAEnD,qEAAqE;IACrE,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAElC,iEAAiE;IACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW;QAAE,OAAO,KAAK,CAAA;IAEnF,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAA;AAEnG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;AAEvF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;AAEpF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;AAEhG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,EAAE;IAC/C,IAAI,GAAG,KAAK,eAAe;QAAE,OAAO,GAAG,CAAA;IAEvC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAErF,+BAA+B;IAC/B,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAC,CAAC,CAAA;IAEtE,gCAAgC;IAChC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IAEtC,+DAA+D;IAC/D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,GAAG,IAAI,GAAG,CAAA;IACZ,CAAC;IAED,OAAO,MAAM,GAAG,GAAG,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA"}
@@ -0,0 +1,101 @@
1
+ import type { MaybeAsync } from "@welshman/lib";
2
+ export type EventRef = {
3
+ id?: string;
4
+ pubkey?: string;
5
+ kind?: number;
6
+ identifier?: string;
7
+ relays?: string[];
8
+ };
9
+ export type RelayRoute = {
10
+ type: "userInbox";
11
+ } | {
12
+ type: "userOutbox";
13
+ } | {
14
+ type: "userMessaging";
15
+ } | {
16
+ type: "pubkeyInbox";
17
+ pubkey: string;
18
+ } | {
19
+ type: "pubkeyOutbox";
20
+ pubkey: string;
21
+ } | {
22
+ type: "pubkeyMessaging";
23
+ pubkey: string;
24
+ } | {
25
+ type: "eventInbox";
26
+ ref: EventRef;
27
+ } | {
28
+ type: "eventOutbox";
29
+ ref: EventRef;
30
+ } | {
31
+ type: "seen";
32
+ ref: EventRef;
33
+ } | {
34
+ type: "relay";
35
+ url: string;
36
+ } | {
37
+ type: "index";
38
+ } | {
39
+ type: "search";
40
+ };
41
+ export type RelaySelection = {
42
+ route: RelayRoute;
43
+ weight: number;
44
+ };
45
+ export declare const inbox: (pubkey: string, weight?: number) => RelaySelection;
46
+ export declare const outbox: (pubkey: string, weight?: number) => RelaySelection;
47
+ export declare const messaging: (pubkey: string, weight?: number) => RelaySelection;
48
+ export declare const userInbox: (weight?: number) => RelaySelection;
49
+ export declare const userOutbox: (weight?: number) => RelaySelection;
50
+ export declare const userMessaging: (weight?: number) => RelaySelection;
51
+ export declare const eventInbox: (ref: EventRef, weight?: number) => RelaySelection;
52
+ export declare const eventOutbox: (ref: EventRef, weight?: number) => RelaySelection;
53
+ export declare const seen: (ref: EventRef, weight?: number) => RelaySelection;
54
+ export declare const relay: (url: string, weight?: number) => RelaySelection;
55
+ export declare const relays: (urls: string[], weight?: number) => RelaySelection[];
56
+ export declare const inboxes: (pubkeys: string[], weight?: number) => RelaySelection[];
57
+ export declare const indexers: (weight?: number) => RelaySelection;
58
+ export declare const searchRelays: (weight?: number) => RelaySelection;
59
+ export type Selection = {
60
+ weight: number;
61
+ relays: string[];
62
+ };
63
+ export declare const makeSelection: (relays: string[], weight?: number) => Selection;
64
+ export type FallbackPolicy = (count: number, limit: number) => number;
65
+ export declare const addNoFallbacks: (count: number, limit: number) => number;
66
+ export declare const addMinimalFallbacks: (count: number, limit: number) => 1 | 0;
67
+ export declare const addMaximalFallbacks: (count: number, limit: number) => number;
68
+ export type RelayScenarioOptions = {
69
+ policy?: FallbackPolicy;
70
+ limit?: number;
71
+ allowLocal?: boolean;
72
+ allowOnion?: boolean;
73
+ allowInsecure?: boolean;
74
+ getRelayQuality?: (url: string) => number;
75
+ getDefaultRelays?: () => string[];
76
+ };
77
+ export declare class RelayScenario {
78
+ readonly selections: Selection[];
79
+ readonly options: RelayScenarioOptions;
80
+ constructor(selections: Selection[], options?: RelayScenarioOptions);
81
+ clone: (options: RelayScenarioOptions) => RelayScenario;
82
+ limit: (limit: number) => RelayScenario;
83
+ policy: (policy: FallbackPolicy) => RelayScenario;
84
+ allowLocal: (allowLocal: boolean) => RelayScenario;
85
+ allowOnion: (allowOnion: boolean) => RelayScenario;
86
+ allowInsecure: (allowInsecure: boolean) => RelayScenario;
87
+ getLimit: () => number;
88
+ getPolicy: () => (count: number, limit: number) => number;
89
+ getUrls: () => string[];
90
+ getUrl: () => string | undefined;
91
+ }
92
+ export type ResolveRoute = (route: RelayRoute) => MaybeAsync<string[]>;
93
+ export declare class Resolver {
94
+ readonly routeResolver: ResolveRoute;
95
+ readonly options: RelayScenarioOptions;
96
+ constructor(routeResolver: ResolveRoute, options?: RelayScenarioOptions);
97
+ scenario(selections: RelaySelection[]): Promise<RelayScenario>;
98
+ relays(selections: RelaySelection[]): Promise<string[]>;
99
+ relay(selections: RelaySelection[]): Promise<string | undefined>;
100
+ }
101
+ //# sourceMappingURL=RelaySelection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelaySelection.d.ts","sourceRoot":"","sources":["../../../src/RelaySelection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import { add, inc, take, sortBy, shuffle, first, uniq } from "@welshman/lib";
2
+ import { isRelayUrl, isOnionUrl, isLocalUrl, normalizeRelayUrl } from "./Relay.js";
3
+ // DSL constructors ----------------------------------------------------------
4
+ const sel = (route, weight = 1) => ({ route, weight });
5
+ export const inbox = (pubkey, weight = 1) => sel({ type: "pubkeyInbox", pubkey }, weight);
6
+ export const outbox = (pubkey, weight = 1) => sel({ type: "pubkeyOutbox", pubkey }, weight);
7
+ export const messaging = (pubkey, weight = 1) => sel({ type: "pubkeyMessaging", pubkey }, weight);
8
+ export const userInbox = (weight = 1) => sel({ type: "userInbox" }, weight);
9
+ export const userOutbox = (weight = 1) => sel({ type: "userOutbox" }, weight);
10
+ export const userMessaging = (weight = 1) => sel({ type: "userMessaging" }, weight);
11
+ export const eventInbox = (ref, weight = 1) => sel({ type: "eventInbox", ref }, weight);
12
+ export const eventOutbox = (ref, weight = 1) => sel({ type: "eventOutbox", ref }, weight);
13
+ // Relays the given event was found on (its tracker relays plus any ref hints).
14
+ export const seen = (ref, weight = 1) => sel({ type: "seen", ref }, weight);
15
+ export const relay = (url, weight = 1) => sel({ type: "relay", url }, weight);
16
+ export const relays = (urls, weight = 1) => urls.map(url => relay(url, weight));
17
+ // Inbox selections for a set of pubkeys (mentions/recipients).
18
+ export const inboxes = (pubkeys, weight = 1) => uniq(pubkeys).map(pubkey => inbox(pubkey, weight));
19
+ export const indexers = (weight = 1) => sel({ type: "index" }, weight);
20
+ export const searchRelays = (weight = 1) => sel({ type: "search" }, weight);
21
+ export const makeSelection = (relays, weight = 1) => ({
22
+ relays: relays.filter(isRelayUrl).map(normalizeRelayUrl),
23
+ weight,
24
+ });
25
+ export const addNoFallbacks = (count, limit) => 0;
26
+ export const addMinimalFallbacks = (count, limit) => (count > 0 ? 0 : 1);
27
+ export const addMaximalFallbacks = (count, limit) => limit - count;
28
+ export class RelayScenario {
29
+ selections;
30
+ options;
31
+ constructor(selections, options = {}) {
32
+ this.selections = selections;
33
+ this.options = options;
34
+ }
35
+ clone = (options) => new RelayScenario(this.selections, { ...this.options, ...options });
36
+ limit = (limit) => this.clone({ limit });
37
+ policy = (policy) => this.clone({ policy });
38
+ allowLocal = (allowLocal) => this.clone({ allowLocal });
39
+ allowOnion = (allowOnion) => this.clone({ allowOnion });
40
+ allowInsecure = (allowInsecure) => this.clone({ allowInsecure });
41
+ getLimit = () => this.options.limit || 3;
42
+ getPolicy = () => this.options.policy || addNoFallbacks;
43
+ getUrls = () => {
44
+ const limit = this.getLimit();
45
+ const fallbackPolicy = this.getPolicy();
46
+ const relayWeights = new Map();
47
+ const { getRelayQuality, getDefaultRelays, allowOnion, allowLocal, allowInsecure } = this.options;
48
+ for (const { weight, relays } of this.selections) {
49
+ for (const relay of relays) {
50
+ if (!isRelayUrl(relay))
51
+ continue;
52
+ if (!allowOnion && isOnionUrl(relay))
53
+ continue;
54
+ if (!allowLocal && isLocalUrl(relay))
55
+ continue;
56
+ if (!allowInsecure && relay.startsWith("ws://") && !isOnionUrl(relay))
57
+ continue;
58
+ relayWeights.set(relay, add(weight, relayWeights.get(relay)));
59
+ }
60
+ }
61
+ const scoreRelay = (relay) => {
62
+ const weight = relayWeights.get(relay);
63
+ const quality = getRelayQuality ? getRelayQuality(relay) : 1;
64
+ // Log the weight, since it's a straight count which ends up over-weighting
65
+ // hubs. Also add some random noise so that we'll occasionally pick lower
66
+ // quality/less popular relays.
67
+ return -(quality * inc(Math.log(weight)) * Math.random());
68
+ };
69
+ const relays = take(limit, sortBy(scoreRelay, Array.from(relayWeights.keys()).filter(scoreRelay)));
70
+ const fallbacksNeeded = fallbackPolicy(relays.length, limit);
71
+ const allFallbackRelays = getDefaultRelays?.() || [];
72
+ const fallbackRelays = shuffle(allFallbackRelays).slice(0, fallbacksNeeded);
73
+ for (const fallbackRelay of fallbackRelays) {
74
+ relays.push(fallbackRelay);
75
+ }
76
+ return relays;
77
+ };
78
+ getUrl = () => first(this.getUrls());
79
+ }
80
+ export class Resolver {
81
+ routeResolver;
82
+ options;
83
+ constructor(routeResolver, options = {}) {
84
+ this.routeResolver = routeResolver;
85
+ this.options = options;
86
+ }
87
+ async scenario(selections) {
88
+ const resolved = await Promise.all(selections.map(async ({ route, weight }) => makeSelection(await this.routeResolver(route), weight)));
89
+ return new RelayScenario(resolved, this.options);
90
+ }
91
+ async relays(selections) {
92
+ return (await this.scenario(selections)).getUrls();
93
+ }
94
+ async relay(selections) {
95
+ return (await this.scenario(selections)).getUrl();
96
+ }
97
+ }
98
+ //# sourceMappingURL=RelaySelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelaySelection.js","sourceRoot":"","sources":["../../../src/RelaySelection.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,18 @@
1
- export declare const getTags: (types: string | string[], tags: string[][]) => string[][];
2
- export declare const getTag: (types: string | string[], tags: string[][]) => string[] | undefined;
3
- export declare const getTagValues: (types: string | string[], tags: string[][]) => string[];
4
- export declare const getTagValue: (types: string | string[], tags: string[][]) => string | undefined;
5
- export declare const getEventTags: (tags: string[][]) => string[][];
6
- export declare const getEventTagValues: (tags: string[][]) => string[];
7
- export declare const getAddressTags: (tags: string[][]) => string[][];
8
- export declare const getAddressTagValues: (tags: string[][]) => string[];
9
- export declare const getPubkeyTags: (tags: string[][]) => string[][];
10
- export declare const getPubkeyTagValues: (tags: string[][]) => string[];
11
- export declare const getTopicTags: (tags: string[][]) => string[][];
12
- export declare const getTopicTagValues: (tags: string[][]) => string[];
13
- export declare const getRelayTags: (tags: string[][]) => string[][];
14
- export declare const getRelayTagValues: (tags: string[][]) => string[];
15
- export declare const getGroupTags: (tags: string[][]) => string[][];
16
- export declare const getGroupTagValues: (tags: string[][]) => string[];
17
- export declare const getKindTags: (tags: string[][]) => string[][];
18
- export declare const getKindTagValues: (tags: string[][]) => number[];
19
- export declare const getCommentTags: (tags: string[][]) => {
20
- roots: string[][];
21
- replies: string[][];
1
+ export type TagSpec<T = string> = {
2
+ keys: string[];
3
+ matchValue?: (value: string) => boolean;
4
+ normalizeValue?: (value: string) => T;
22
5
  };
23
- export declare const getCommentTagValues: (tags: string[][]) => Record<string, string[]>;
24
- export declare const getReplyTags: (tags: string[][]) => {
25
- roots: string[][];
26
- replies: string[][];
27
- mentions: string[][];
28
- };
29
- export declare const getReplyTagValues: (tags: string[][]) => Record<string, string[]>;
30
- export declare const getEmojiTags: (name: string, tags: string[][]) => string[][];
31
- export declare const getEmojiTag: (name: string, tags: string[][]) => string[] | undefined;
32
- export declare const getEmojiTagUrls: (name: string, tags: string[][]) => string[];
33
- export declare const getEmojiTagUrl: (name: string, tags: string[][]) => string | undefined;
34
- export declare const uniqTags: (tags: string[][]) => string[][];
35
- export declare const tagsFromIMeta: (imeta: string[]) => string[][];
36
- export declare const tagger: (name: string) => (value: string, ...args: unknown[]) => string[];
6
+ export declare const tagSpec: <T = string>(keys: string | string[], matchValue?: (value: string) => boolean, normalizeValue?: (value: string) => T) => TagSpec<T>;
7
+ export declare const hexTags: (keys: string | string[]) => TagSpec<string>;
8
+ export declare const kindTags: (keys: string | string[]) => TagSpec<number | undefined>;
9
+ export declare const topicTags: (keys: string | string[]) => TagSpec<string>;
10
+ export declare const addressTags: (keys: string | string[]) => TagSpec<string>;
11
+ export declare const relayTags: (keys: string | string[]) => TagSpec<string>;
12
+ export declare const tagMatcher: (spec: TagSpec<any>) => (tag: string[]) => boolean;
13
+ export declare const matchTags: <T>(spec: TagSpec<T>, tags: string[][]) => string[][];
14
+ export declare const matchTag: <T>(spec: TagSpec<T>, tags: string[][]) => string[] | undefined;
15
+ export declare const tagValueExtractor: <T>(spec: TagSpec<T>) => (tag: string[]) => T;
16
+ export declare const tagValues: <T>(spec: TagSpec<T>, tags: string[][]) => NonNullable<T>[];
17
+ export declare const tagValue: <T>(spec: TagSpec<T>, tags: string[][]) => T | undefined;
37
18
  //# sourceMappingURL=Tags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tags.d.ts","sourceRoot":"","sources":["../../../src/Tags.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,eAIjE,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,yBAIhE,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,aACrC,CAAA;AAElC,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,uBAA6B,CAAA;AAEnG,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,EAAE,eACiB,CAAA;AAE9D,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,EAAE,aAAmC,CAAA;AAErF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,EAAE,eACoB,CAAA;AAEnE,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,EAAE,aAAqC,CAAA;AAEzF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,EAAE,eACgB,CAAA;AAE9D,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,EAAE,aAAoC,CAAA;AAEvF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,EAAE,eAA+B,CAAA;AAE5E,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,EAAE,aACG,CAAA;AAErD,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,EAAE,eAC8B,CAAA;AAE3E,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,EAAE,aAAmC,CAAA;AAErF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,EAAE,eACsC,CAAA;AAEnF,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,EAAE,aAAmC,CAAA;AAErF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,EAAE,eACmB,CAAA;AAE/D,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,EAAE,aAA+C,CAAA;AAEhG,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,EAAE;;;CAK9C,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,EAAE,6BAIjD,CAAA;AAEH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,EAAE;;;;CAkC5C,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,EAAE,6BACK,CAAA;AAEvD,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,EAAE,eAAuC,CAAA;AAElG,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,EAAE,yBAAoC,CAAA;AAE9F,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,EAAE,aACxB,CAAA;AAEtC,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,EAAE,uBAAuC,CAAA;AAEpG,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,EAAE,eAA+C,CAAA;AAExF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,EAAE,eAA2C,CAAA;AAExF,eAAO,MAAM,MAAM,GAChB,MAAM,MAAM,MACZ,OAAO,MAAM,EAAE,GAAG,MAAM,OAAO,EAAE,aAAkB,CAAA"}
1
+ {"version":3,"file":"Tags.d.ts","sourceRoot":"","sources":["../../../src/Tags.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,MAAM,IAAI;IAChC,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACvC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAA;CACtC,CAAA;AAGD,eAAO,MAAM,OAAO,GAAI,CAAC,GAAC,MAAM,EAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,EACvB,aAAa,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,EACvC,iBAAiB,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,KACpC,OAAO,CAAC,CAAC,CAA6D,CAAA;AAEzE,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,oBAA2B,CAAA;AAE1E,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,gCAAyC,CAAA;AAEzF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,oBAA6C,CAAA;AAE9F,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,oBACD,CAAA;AAElD,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,oBAA8B,CAAA;AAE/E,eAAO,MAAM,UAAU,GAAI,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,YAK/D,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,EAAE,EAAE,eAAkC,CAAA;AAEjG,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,EAAE,EAAE,yBAAgC,CAAA;AAE9F,eAAO,MAAM,iBAAiB,GAC3B,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,MACnB,KAAK,MAAM,EAAE,KAAG,CACkD,CAAA;AAErE,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,EAAE,EAAE,KAAG,WAAW,CAAC,CAAC,CAAC,EACX,CAAA;AAErE,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,EAAE,EAAE,KAAG,CAAC,GAAG,SAIpE,CAAA"}
@@ -1,79 +1,28 @@
1
- import { uniqBy, first, spec, mapVals, nth, nthEq, ensurePlural } from "@welshman/lib";
1
+ import { ensurePlural, isHex32, removeUndefined } from "@welshman/lib";
2
2
  import { isRelayUrl } from "./Relay.js";
3
3
  import { Address } from "./Address.js";
4
- export const getTags = (types, tags) => {
5
- types = ensurePlural(types);
6
- return tags.filter(t => types.includes(t[0]));
4
+ import { isKind, normalizeKind } from "./Kinds.js";
5
+ import { normalizeTopic } from "./Topics.js";
6
+ // prettier-ignore
7
+ export const tagSpec = (keys, matchValue, normalizeValue) => ({ keys: ensurePlural(keys), matchValue, normalizeValue });
8
+ export const hexTags = (keys) => tagSpec(keys, isHex32);
9
+ export const kindTags = (keys) => tagSpec(keys, isKind, normalizeKind);
10
+ export const topicTags = (keys) => tagSpec(keys, undefined, normalizeTopic);
11
+ export const addressTags = (keys) => tagSpec(keys, value => Address.isAddress(value));
12
+ export const relayTags = (keys) => tagSpec(keys, isRelayUrl);
13
+ export const tagMatcher = (spec) => (tag) => {
14
+ if (!spec.keys.includes(tag[0]))
15
+ return false;
16
+ if (spec.matchValue && (!tag[1] || !spec.matchValue(tag[1])))
17
+ return false;
18
+ return true;
7
19
  };
8
- export const getTag = (types, tags) => {
9
- types = ensurePlural(types);
10
- return tags.find(t => types.includes(t[0]));
20
+ export const matchTags = (spec, tags) => tags.filter(tagMatcher(spec));
21
+ export const matchTag = (spec, tags) => tags.find(tagMatcher(spec));
22
+ export const tagValueExtractor = (spec) => (tag) => (spec.normalizeValue ? spec.normalizeValue(tag[1]) : tag[1]);
23
+ export const tagValues = (spec, tags) => removeUndefined(matchTags(spec, tags).map(tagValueExtractor(spec)));
24
+ export const tagValue = (spec, tags) => {
25
+ const tag = matchTag(spec, tags);
26
+ return tag ? tagValueExtractor(spec)(tag) : undefined;
11
27
  };
12
- export const getTagValues = (types, tags) => getTags(types, tags).map(nth(1));
13
- export const getTagValue = (types, tags) => getTag(types, tags)?.[1];
14
- export const getEventTags = (tags) => tags.filter(t => ["e"].includes(t[0]) && t[1].length === 64);
15
- export const getEventTagValues = (tags) => getEventTags(tags).map(nth(1));
16
- export const getAddressTags = (tags) => tags.filter(t => ["a"].includes(t[0]) && Address.isAddress(t[1]));
17
- export const getAddressTagValues = (tags) => getAddressTags(tags).map(nth(1));
18
- export const getPubkeyTags = (tags) => tags.filter(t => ["p"].includes(t[0]) && t[1].length === 64);
19
- export const getPubkeyTagValues = (tags) => getPubkeyTags(tags).map(nth(1));
20
- export const getTopicTags = (tags) => tags.filter(nthEq(0, "t"));
21
- export const getTopicTagValues = (tags) => getTopicTags(tags).map(t => t[1].replace(/^#/, ""));
22
- export const getRelayTags = (tags) => tags.filter(t => ["r", "relay"].includes(t[0]) && isRelayUrl(t[1] || ""));
23
- export const getRelayTagValues = (tags) => getRelayTags(tags).map(nth(1));
24
- export const getGroupTags = (tags) => tags.filter(t => ["h", "group"].includes(t[0]) && t[1] && isRelayUrl(t[2] || ""));
25
- export const getGroupTagValues = (tags) => getGroupTags(tags).map(nth(1));
26
- export const getKindTags = (tags) => tags.filter(t => ["k"].includes(t[0]) && t[1].match(/^\d+$/));
27
- export const getKindTagValues = (tags) => getKindTags(tags).map(t => parseInt(t[1]));
28
- export const getCommentTags = (tags) => {
29
- const roots = tags.filter(t => ["A", "E", "P", "K"].includes(t[0]));
30
- const replies = tags.filter(t => ["a", "e", "p", "k"].includes(t[0]));
31
- return { roots, replies };
32
- };
33
- export const getCommentTagValues = (tags) => mapVals(tags => tags.filter(t => ["a", "e"].includes(t[0].toLowerCase())).map(nth(1)), getCommentTags(tags));
34
- export const getReplyTags = (tags) => {
35
- const validTags = tags.filter(t => ["a", "e", "q"].includes(t[0]));
36
- const mentionTags = validTags.filter(nthEq(0, "q"));
37
- const roots = [];
38
- const replies = [];
39
- const mentions = [];
40
- const dispatchTags = (thisTags) => thisTags.forEach((t, i) => {
41
- if (t[3] === "root") {
42
- if (validTags.filter(nthEq(3, "reply")).length === 0) {
43
- replies.push(t);
44
- }
45
- else {
46
- roots.push(t);
47
- }
48
- }
49
- else if (t[3] === "reply") {
50
- replies.push(t);
51
- }
52
- else if (t[3] === "mention") {
53
- mentions.push(t);
54
- }
55
- else if (i === thisTags.length - 1) {
56
- replies.push(t);
57
- }
58
- else if (i === 0) {
59
- roots.push(t);
60
- }
61
- else {
62
- mentions.push(t);
63
- }
64
- });
65
- // Add different types separately so positional logic works
66
- dispatchTags(validTags.filter(nthEq(0, "e")));
67
- dispatchTags(validTags.filter(nthEq(0, "a")).filter(t => Boolean(t[3])));
68
- mentionTags.forEach((t) => mentions.push(t));
69
- return { roots, replies, mentions };
70
- };
71
- export const getReplyTagValues = (tags) => mapVals(tags => tags.map(nth(1)), getReplyTags(tags));
72
- export const getEmojiTags = (name, tags) => tags.filter(spec(["emoji", name]));
73
- export const getEmojiTag = (name, tags) => first(getEmojiTags(name, tags));
74
- export const getEmojiTagUrls = (name, tags) => getEmojiTags(name, tags).map(nth(2));
75
- export const getEmojiTagUrl = (name, tags) => first(getEmojiTagUrls(name, tags));
76
- export const uniqTags = (tags) => uniqBy(t => t.slice(0, 2).join(":"), tags);
77
- export const tagsFromIMeta = (imeta) => imeta.map((m) => m.split(" "));
78
- export const tagger = (name) => (value, ...args) => [name, value];
79
28
  //# sourceMappingURL=Tags.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tags.js","sourceRoot":"","sources":["../../../src/Tags.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tags.js","sourceRoot":"","sources":["../../../src/Tags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const normalizeTopic: (t: string) => string;
2
+ //# sourceMappingURL=Topics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Topics.d.ts","sourceRoot":"","sources":["../../../src/Topics.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,WAAwB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const normalizeTopic = (t) => t.replace(/^#/, "");
2
+ //# sourceMappingURL=Topics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Topics.js","sourceRoot":"","sources":["../../../src/Topics.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA"}
@@ -1,22 +1,19 @@
1
1
  export * from "./Address.js";
2
2
  export * from "./Blossom.js";
3
- export * from "./Encryptable.js";
4
3
  export * from "./Events.js";
5
4
  export * from "./Filters.js";
6
- export * from "./Handler.js";
5
+ export * from "./Handles.js";
7
6
  export * from "./Keys.js";
8
7
  export * from "./Kinds.js";
9
8
  export * from "./Links.js";
10
- export * from "./List.js";
11
9
  export * from "./Nip42.js";
12
10
  export * from "./Nip86.js";
13
11
  export * from "./Nip98.js";
14
12
  export * from "./Pow.js";
15
- export * from "./Profile.js";
16
13
  export * from "./Pubkey.js";
17
14
  export * from "./Relay.js";
18
- export * from "./Room.js";
15
+ export * from "./RelaySelection.js";
19
16
  export * from "./Tags.js";
20
17
  export * from "./Wallet.js";
21
- export * from "./Zaps.js";
18
+ export * from "./Lightning.js";
22
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
@@ -1,22 +1,19 @@
1
1
  export * from "./Address.js";
2
2
  export * from "./Blossom.js";
3
- export * from "./Encryptable.js";
4
3
  export * from "./Events.js";
5
4
  export * from "./Filters.js";
6
- export * from "./Handler.js";
5
+ export * from "./Handles.js";
7
6
  export * from "./Keys.js";
8
7
  export * from "./Kinds.js";
9
8
  export * from "./Links.js";
10
- export * from "./List.js";
11
9
  export * from "./Nip42.js";
12
10
  export * from "./Nip86.js";
13
11
  export * from "./Nip98.js";
14
12
  export * from "./Pow.js";
15
- export * from "./Profile.js";
16
13
  export * from "./Pubkey.js";
17
14
  export * from "./Relay.js";
18
- export * from "./Room.js";
15
+ export * from "./RelaySelection.js";
19
16
  export * from "./Tags.js";
20
17
  export * from "./Wallet.js";
21
- export * from "./Zaps.js";
18
+ export * from "./Lightning.js";
22
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@welshman/util",
3
- "version": "0.8.16",
3
+ "version": "0.9.0-pre2",
4
4
  "author": "hodlbod",
5
5
  "license": "MIT",
6
6
  "description": "A collection of nostr-related utilities.",
@@ -21,14 +21,14 @@
21
21
  "peerDependencies": {
22
22
  "@noble/curves": "^1.9.7",
23
23
  "nostr-tools": "^2.19.4",
24
- "@welshman/lib": "0.8.16"
24
+ "@welshman/lib": "0.9.0-pre2"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@noble/curves": "^1.9.7",
28
28
  "nostr-tools": "^2.19.4",
29
29
  "rimraf": "~6.0.0",
30
30
  "typescript": "~5.8.0",
31
- "@welshman/lib": "0.8.16"
31
+ "@welshman/lib": "0.9.0-pre2"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "pnpm run clean && pnpm run compile --force",
@@ -1,34 +0,0 @@
1
- import type { EventContent, TrustedEvent, EventTemplate } from "./Events.js";
2
- export type Encrypt = (x: string) => Promise<string>;
3
- export type EncryptableUpdates = Partial<EventContent>;
4
- export type DecryptedEvent = TrustedEvent & {
5
- plaintext: EncryptableUpdates;
6
- };
7
- export declare const asDecryptedEvent: (event: TrustedEvent, plaintext?: EncryptableUpdates) => DecryptedEvent;
8
- /**
9
- * Represents an encryptable event with optional updates.
10
- */
11
- export declare class Encryptable<T extends EventTemplate> {
12
- readonly event: Partial<T>;
13
- readonly updates: EncryptableUpdates;
14
- /**
15
- * Creates an instance of Encryptable.
16
- * @param event - An EventTemplate with optional tags and content.
17
- * @param updates - Plaintext updates to be applied to the event content.
18
- * @example
19
- * Here's an example which enables updating a private mute list:
20
- * ```
21
- * const event = {kind: 10000, content: "", tags: []} // An event, only kind is required
22
- * const encryptable = new Encryptable(event, {content: JSON.stringify([["e", "bad word"]])})
23
- * const eventTemplate = await encryptable.reconcile(myEncryptFunction)
24
- * ```
25
- */
26
- constructor(event: Partial<T>, updates: EncryptableUpdates);
27
- /**
28
- * Encrypts plaintext updates and merges them into the event template.
29
- * @param encrypt - The encryption function to be used.
30
- * @returns A promise that resolves to the reconciled and encrypted event.
31
- */
32
- reconcile(encrypt: Encrypt): Promise<T>;
33
- }
34
- //# sourceMappingURL=Encryptable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Encryptable.d.ts","sourceRoot":"","sources":["../../../src/Encryptable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAC,MAAM,aAAa,CAAA;AAE1E,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAEpD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;AAEtD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG;IAC1C,SAAS,EAAE,kBAAkB,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,OAAO,YAAY,EAAE,YAAW,kBAAuB,KAC3D,cAAc,CAAA;AAE3C;;GAEG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,aAAa;IAc5C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,kBAAkB;IAdtC;;;;;;;;;;;OAWG;gBAEQ,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EACjB,OAAO,EAAE,kBAAkB;IAGtC;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,OAAO;CA4BjC"}