@welshman/store 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/dist/lib/src/Deferred.d.ts +21 -0
  3. package/dist/lib/src/Deferred.d.ts.map +1 -0
  4. package/dist/lib/src/Deferred.js +21 -0
  5. package/dist/lib/src/Deferred.js.map +1 -0
  6. package/dist/lib/src/Emitter.d.ts +14 -0
  7. package/dist/lib/src/Emitter.d.ts.map +1 -0
  8. package/dist/lib/src/Emitter.js +18 -0
  9. package/dist/lib/src/Emitter.js.map +1 -0
  10. package/dist/lib/src/LRUCache.d.ts +42 -0
  11. package/dist/lib/src/LRUCache.d.ts.map +1 -0
  12. package/dist/lib/src/LRUCache.js +62 -0
  13. package/dist/lib/src/LRUCache.js.map +1 -0
  14. package/dist/lib/src/TaskQueue.d.ts +20 -0
  15. package/dist/lib/src/TaskQueue.d.ts.map +1 -0
  16. package/dist/lib/src/TaskQueue.js +57 -0
  17. package/dist/lib/src/TaskQueue.js.map +1 -0
  18. package/dist/lib/src/Tools.d.ts +727 -0
  19. package/dist/lib/src/Tools.d.ts.map +1 -0
  20. package/dist/lib/src/Tools.js +1224 -0
  21. package/dist/lib/src/Tools.js.map +1 -0
  22. package/dist/lib/src/index.d.ts +7 -0
  23. package/dist/lib/src/index.d.ts.map +1 -0
  24. package/dist/lib/src/index.js +7 -0
  25. package/dist/lib/src/index.js.map +1 -0
  26. package/dist/lib/src/normalize-url/index.d.ts +286 -0
  27. package/dist/lib/src/normalize-url/index.d.ts.map +1 -0
  28. package/dist/lib/src/normalize-url/index.js +252 -0
  29. package/dist/lib/src/normalize-url/index.js.map +1 -0
  30. package/dist/relay/src/index.d.ts +3 -0
  31. package/dist/relay/src/index.d.ts.map +1 -0
  32. package/dist/relay/src/index.js +3 -0
  33. package/dist/relay/src/index.js.map +1 -0
  34. package/dist/relay/src/relay.d.ts +13 -0
  35. package/dist/relay/src/relay.d.ts.map +1 -0
  36. package/dist/relay/src/relay.js +48 -0
  37. package/dist/relay/src/relay.js.map +1 -0
  38. package/dist/relay/src/repository.d.ts +63 -0
  39. package/dist/relay/src/repository.d.ts.map +1 -0
  40. package/dist/relay/src/repository.js +270 -0
  41. package/dist/relay/src/repository.js.map +1 -0
  42. package/dist/store/src/collection.d.ts +32 -0
  43. package/dist/store/src/collection.d.ts.map +1 -0
  44. package/dist/store/src/collection.js +81 -0
  45. package/dist/store/src/collection.js.map +1 -0
  46. package/dist/store/src/custom.d.ts +10 -0
  47. package/dist/store/src/custom.d.ts.map +1 -0
  48. package/dist/store/src/custom.js +41 -0
  49. package/dist/store/src/custom.js.map +1 -0
  50. package/dist/store/src/getter.d.ts +11 -0
  51. package/dist/store/src/getter.d.ts.map +1 -0
  52. package/dist/store/src/getter.js +11 -0
  53. package/dist/store/src/getter.js.map +1 -0
  54. package/dist/store/src/index.d.ts +7 -0
  55. package/dist/store/src/index.d.ts.map +1 -0
  56. package/dist/store/src/index.js +7 -0
  57. package/dist/store/src/index.js.map +1 -0
  58. package/dist/store/src/repository.d.ts +16 -0
  59. package/dist/store/src/repository.d.ts.map +1 -0
  60. package/{build/src/index.js → dist/store/src/repository.js} +4 -74
  61. package/dist/store/src/repository.js.map +1 -0
  62. package/dist/store/src/synced.d.ts +2 -0
  63. package/dist/store/src/synced.d.ts.map +1 -0
  64. package/dist/store/src/synced.js +9 -0
  65. package/dist/store/src/synced.js.map +1 -0
  66. package/dist/store/src/throttle.d.ts +3 -0
  67. package/dist/store/src/throttle.d.ts.map +1 -0
  68. package/dist/store/src/throttle.js +9 -0
  69. package/dist/store/src/throttle.js.map +1 -0
  70. package/dist/tsconfig.build.tsbuildinfo +1 -0
  71. package/dist/util/src/Address.d.ts +21 -0
  72. package/dist/util/src/Address.d.ts.map +1 -0
  73. package/dist/util/src/Address.js +43 -0
  74. package/dist/util/src/Address.js.map +1 -0
  75. package/dist/util/src/Encryptable.d.ts +34 -0
  76. package/dist/util/src/Encryptable.d.ts.map +1 -0
  77. package/dist/util/src/Encryptable.js +52 -0
  78. package/dist/util/src/Encryptable.js.map +1 -0
  79. package/dist/util/src/Events.d.ts +77 -0
  80. package/dist/util/src/Events.d.ts.map +1 -0
  81. package/dist/util/src/Events.js +63 -0
  82. package/dist/util/src/Events.js.map +1 -0
  83. package/dist/util/src/Filters.d.ts +48 -0
  84. package/dist/util/src/Filters.d.ts.map +1 -0
  85. package/dist/util/src/Filters.js +185 -0
  86. package/dist/util/src/Filters.js.map +1 -0
  87. package/dist/util/src/Handler.d.ts +17 -0
  88. package/dist/util/src/Handler.d.ts.map +1 -0
  89. package/dist/util/src/Handler.js +33 -0
  90. package/dist/util/src/Handler.js.map +1 -0
  91. package/dist/util/src/Kinds.d.ts +159 -0
  92. package/dist/util/src/Kinds.d.ts.map +1 -0
  93. package/dist/util/src/Kinds.js +160 -0
  94. package/dist/util/src/Kinds.js.map +1 -0
  95. package/dist/util/src/Links.d.ts +3 -0
  96. package/dist/util/src/Links.d.ts.map +1 -0
  97. package/dist/util/src/Links.js +3 -0
  98. package/dist/util/src/Links.js.map +1 -0
  99. package/dist/util/src/List.d.ts +34 -0
  100. package/dist/util/src/List.d.ts.map +1 -0
  101. package/dist/util/src/List.js +74 -0
  102. package/dist/util/src/List.js.map +1 -0
  103. package/dist/util/src/Profile.d.ts +26 -0
  104. package/dist/util/src/Profile.d.ts.map +1 -0
  105. package/dist/util/src/Profile.js +50 -0
  106. package/dist/util/src/Profile.js.map +1 -0
  107. package/dist/util/src/Relay.d.ts +32 -0
  108. package/dist/util/src/Relay.d.ts.map +1 -0
  109. package/dist/util/src/Relay.js +49 -0
  110. package/dist/util/src/Relay.js.map +1 -0
  111. package/dist/util/src/Tags.d.ts +32 -0
  112. package/dist/util/src/Tags.d.ts.map +1 -0
  113. package/dist/util/src/Tags.js +74 -0
  114. package/dist/util/src/Tags.js.map +1 -0
  115. package/dist/util/src/Zaps.d.ts +20 -0
  116. package/dist/util/src/Zaps.d.ts.map +1 -0
  117. package/dist/util/src/Zaps.js +93 -0
  118. package/dist/util/src/Zaps.js.map +1 -0
  119. package/dist/util/src/index.d.ts +13 -0
  120. package/dist/util/src/index.d.ts.map +1 -0
  121. package/dist/util/src/index.js +13 -0
  122. package/dist/util/src/index.js.map +1 -0
  123. package/package.json +17 -20
  124. package/README.md +0 -17
  125. package/build/src/index.d.ts +0 -44
  126. package/build/src/index.js.map +0 -1
  127. package/build/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getter.d.ts","sourceRoot":"","sources":["../../../src/getter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,MAAM,cAAc,CAAA;AAE/C,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,YAQ3C,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC,CAAA;CAAC,CAAA;AAChE,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC,CAAA;CAAC,CAAA;AAEhE,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;AACxE,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ export const getter = (store) => {
2
+ let value;
3
+ store.subscribe((newValue) => {
4
+ value = newValue;
5
+ });
6
+ return () => value;
7
+ };
8
+ export function withGetter(store) {
9
+ return { ...store, get: getter(store) };
10
+ }
11
+ //# sourceMappingURL=getter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getter.js","sourceRoot":"","sources":["../../../src/getter.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,KAAkB,EAAE,EAAE;IAC9C,IAAI,KAAQ,CAAA;IAEZ,KAAK,CAAC,SAAS,CAAC,CAAC,QAAW,EAAE,EAAE;QAC9B,KAAK,GAAG,QAAQ,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,EAAE,CAAC,KAAK,CAAA;AACpB,CAAC,CAAA;AAOD,MAAM,UAAU,UAAU,CAAI,KAAgC;IAC5D,OAAO,EAAC,GAAG,KAAK,EAAE,GAAG,EAAE,MAAM,CAAI,KAAK,CAAC,EAAC,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from "./synced.js";
2
+ export * from "./getter.js";
3
+ export * from "./throttle.js";
4
+ export * from "./custom.js";
5
+ export * from "./repository.js";
6
+ export * from "./collection.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,7 @@
1
+ export * from "./synced.js";
2
+ export * from "./getter.js";
3
+ export * from "./throttle.js";
4
+ export * from "./custom.js";
5
+ export * from "./repository.js";
6
+ export * from "./collection.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { Repository } from "@welshman/relay";
2
+ import { Filter, TrustedEvent } from "@welshman/util";
3
+ export type DeriveEventsMappedOptions<T> = {
4
+ filters: Filter[];
5
+ eventToItem: (event: TrustedEvent) => T | T[] | Promise<T | T[]> | undefined;
6
+ itemToEvent: (item: T) => TrustedEvent;
7
+ throttle?: number;
8
+ includeDeleted?: boolean;
9
+ };
10
+ export declare const deriveEventsMapped: <T>(repository: Repository, { filters, eventToItem, itemToEvent, throttle, includeDeleted, }: DeriveEventsMappedOptions<T>) => import("./getter.js").WritableWithGetter<T[]>;
11
+ export type DeriveEventsOptions<T> = Omit<DeriveEventsMappedOptions<T>, "itemToEvent" | "eventToItem">;
12
+ export declare const deriveEvents: <T>(repository: Repository, opts: DeriveEventsOptions<T>) => import("./getter.js").WritableWithGetter<TrustedEvent[]>;
13
+ export declare const deriveEvent: (repository: Repository, idOrAddress: string) => import("svelte/store").Readable<TrustedEvent | undefined>;
14
+ export declare const deriveIsDeleted: (repository: Repository, event: TrustedEvent) => import("./getter.js").WritableWithGetter<boolean>;
15
+ export declare const deriveIsDeletedByAddress: (repository: Repository, event: TrustedEvent) => import("./getter.js").WritableWithGetter<boolean>;
16
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAA8C,MAAM,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAGhG,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI;IACzC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;IAC5E,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,YAAY,CAAA;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAClC,YAAY,UAAU,EACtB,kEAMG,yBAAyB,CAAC,CAAC,CAAC,kDAkG9B,CAAA;AAEH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,IAAI,CACvC,yBAAyB,CAAC,CAAC,CAAC,EAC5B,aAAa,GAAG,aAAa,CAC9B,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,YAAY,UAAU,EAAE,MAAM,mBAAmB,CAAC,CAAC,CAAC,6DAKhF,CAAA;AAEJ,eAAO,MAAM,WAAW,GAAI,YAAY,UAAU,EAAE,aAAa,MAAM,8DAOpE,CAAA;AAEH,eAAO,MAAM,eAAe,GAAI,YAAY,UAAU,EAAE,OAAO,YAAY,sDASvE,CAAA;AAEJ,eAAO,MAAM,wBAAwB,GAAI,YAAY,UAAU,EAAE,OAAO,YAAY,sDAShF,CAAA"}
@@ -1,77 +1,7 @@
1
- import { derived, writable } from "svelte/store";
2
- import { identity, throttle, ensurePlural, getJson, setJson, batch, partition, first, } from "@welshman/lib";
1
+ import { derived } from "svelte/store";
2
+ import { identity, ensurePlural, batch, partition, first } from "@welshman/lib";
3
3
  import { matchFilters, getIdAndAddress, getIdFilters } from "@welshman/util";
4
- // Sync with localstorage
5
- export const synced = (key, defaultValue) => {
6
- const init = getJson(key);
7
- const store = writable(init === undefined ? defaultValue : init);
8
- store.subscribe((value) => setJson(key, value));
9
- return store;
10
- };
11
- // Getters
12
- export const getter = (store) => {
13
- let value;
14
- store.subscribe((newValue) => {
15
- value = newValue;
16
- });
17
- return () => value;
18
- };
19
- export function withGetter(store) {
20
- return { ...store, get: getter(store) };
21
- }
22
- // Throttle
23
- export const throttled = (delay, store) => {
24
- if (delay) {
25
- const { subscribe } = store;
26
- store = { ...store, subscribe: (f) => subscribe(throttle(delay, f)) };
27
- }
28
- return store;
29
- };
30
- export const custom = (start, opts = {}) => {
31
- const subs = [];
32
- let value;
33
- let stop;
34
- const set = (newValue) => {
35
- for (const sub of subs) {
36
- sub(newValue);
37
- }
38
- value = newValue;
39
- };
40
- return {
41
- get: () => value,
42
- set: (newValue) => {
43
- set(newValue);
44
- opts.set?.(newValue);
45
- },
46
- update: (f) => {
47
- const newValue = f(value);
48
- set(newValue);
49
- opts.set?.(newValue);
50
- },
51
- subscribe: (sub) => {
52
- if (opts.throttle) {
53
- sub = throttle(opts.throttle, sub);
54
- }
55
- if (subs.length === 0) {
56
- stop = start(set);
57
- }
58
- subs.push(sub);
59
- sub(value);
60
- return () => {
61
- subs.splice(subs.findIndex(s => s === sub), 1);
62
- if (subs.length === 0) {
63
- stop();
64
- }
65
- };
66
- },
67
- };
68
- };
69
- // Simple adapter
70
- export const adapter = ({ store, forward, backward, }) => ({
71
- ...derived(store, forward),
72
- set: (x) => store.set(backward(x)),
73
- update: (f) => store.update((x) => backward(f(forward(x)))),
74
- });
4
+ import { custom } from "./custom.js";
75
5
  export const deriveEventsMapped = (repository, { filters, eventToItem, itemToEvent, throttle = 0, includeDeleted = false, }) => custom(setter => {
76
6
  let data = [];
77
7
  const deferred = new Set();
@@ -167,4 +97,4 @@ export const deriveIsDeletedByAddress = (repository, event) => custom(setter =>
167
97
  repository.on("update", onUpdate);
168
98
  return () => repository.off("update", onUpdate);
169
99
  });
170
- //# sourceMappingURL=index.js.map
100
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const synced: <T>(key: string, defaultValue: T) => import("svelte/store").Writable<T>;
2
+ //# sourceMappingURL=synced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synced.d.ts","sourceRoot":"","sources":["../../../src/synced.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,KAAK,MAAM,EAAE,cAAc,CAAC,uCAOrD,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { writable } from "svelte/store";
2
+ import { getJson, setJson } from "@welshman/lib";
3
+ export const synced = (key, defaultValue) => {
4
+ const init = getJson(key);
5
+ const store = writable(init === undefined ? defaultValue : init);
6
+ store.subscribe((value) => setJson(key, value));
7
+ return store;
8
+ };
9
+ //# sourceMappingURL=synced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synced.js","sourceRoot":"","sources":["../../../src/synced.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAA;AACrC,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,GAAW,EAAE,YAAe,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACzB,MAAM,KAAK,GAAG,QAAQ,CAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAEnE,KAAK,CAAC,SAAS,CAAC,CAAC,KAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;IAElD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Readable } from "svelte/store";
2
+ export declare const throttled: <T, S extends Readable<T>>(delay: number, store: S) => S;
3
+ //# sourceMappingURL=throttle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../src/throttle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAa,MAAM,cAAc,CAAA;AAGjD,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,MAAM,EAAE,OAAO,CAAC,MAQ1E,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { throttle } from "@welshman/lib";
2
+ export const throttled = (delay, store) => {
3
+ if (delay) {
4
+ const { subscribe } = store;
5
+ store = { ...store, subscribe: (f) => subscribe(throttle(delay, f)) };
6
+ }
7
+ return store;
8
+ };
9
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/throttle.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AAEtC,MAAM,CAAC,MAAM,SAAS,GAAG,CAA2B,KAAa,EAAE,KAAQ,EAAE,EAAE;IAC7E,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,EAAC,SAAS,EAAC,GAAG,KAAK,CAAA;QAEzB,KAAK,GAAG,EAAC,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC,CAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAC,CAAA;IACpF,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"root":["../src/collection.ts","../src/custom.ts","../src/getter.ts","../src/index.ts","../src/repository.ts","../src/synced.ts","../src/throttle.ts"],"version":"5.8.2"}
@@ -0,0 +1,21 @@
1
+ type AddressableEvent = {
2
+ kind: number;
3
+ pubkey: string;
4
+ tags: string[][];
5
+ };
6
+ export declare class Address {
7
+ readonly kind: number;
8
+ readonly pubkey: string;
9
+ readonly identifier: string;
10
+ readonly relays: string[];
11
+ constructor(kind: number, pubkey: string, identifier: string, relays?: string[]);
12
+ static isAddress(address: string): boolean;
13
+ static from(address: string, relays?: string[]): Address;
14
+ static fromNaddr(naddr: string): Address;
15
+ static fromEvent(event: AddressableEvent, relays?: string[]): Address;
16
+ toString: () => string;
17
+ toNaddr: () => `naddr1${string}`;
18
+ }
19
+ export declare const getAddress: (e: AddressableEvent) => string;
20
+ export {};
21
+ //# sourceMappingURL=Address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Address.d.ts","sourceRoot":"","sources":["../../../../util/src/Address.ts"],"names":[],"mappings":"AAGA,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;CACjB,CAAA;AAED,qBAAa,OAAO;IAEhB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE;gBAHhB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAM,EAAO;IAGhC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM;IAIhC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO;IAMlD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM;IAkB9B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,GAAE,MAAM,EAAO;IAM/D,QAAQ,eAAyD;IAEjE,OAAO,0BAA0B;CAClC;AAID,eAAO,MAAM,UAAU,GAAI,GAAG,gBAAgB,WAAoC,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { decode, naddrEncode } from "nostr-tools/nip19";
2
+ export class Address {
3
+ kind;
4
+ pubkey;
5
+ identifier;
6
+ relays;
7
+ constructor(kind, pubkey, identifier, relays = []) {
8
+ this.kind = kind;
9
+ this.pubkey = pubkey;
10
+ this.identifier = identifier;
11
+ this.relays = relays;
12
+ }
13
+ static isAddress(address) {
14
+ return Boolean(address.match(/^\d+:\w+:.*$/));
15
+ }
16
+ static from(address, relays = []) {
17
+ const [kind, pubkey, identifier = ""] = address.match(/^(\d+):(\w+):(.*)$/).slice(1);
18
+ return new Address(parseInt(kind), pubkey, identifier, relays);
19
+ }
20
+ static fromNaddr(naddr) {
21
+ let decoded;
22
+ try {
23
+ decoded = decode(naddr);
24
+ }
25
+ catch (e) {
26
+ // pass
27
+ }
28
+ if (decoded?.type !== "naddr") {
29
+ throw new Error(`Invalid naddr ${naddr}`);
30
+ }
31
+ const { kind, pubkey, identifier, relays } = decoded.data;
32
+ return new Address(kind, pubkey, identifier, relays);
33
+ }
34
+ static fromEvent(event, relays = []) {
35
+ const identifier = event.tags.find(t => t[0] === "d")?.[1] || "";
36
+ return new Address(event.kind, event.pubkey, identifier, relays);
37
+ }
38
+ toString = () => `${this.kind}:${this.pubkey}:${this.identifier}`;
39
+ toNaddr = () => naddrEncode(this);
40
+ }
41
+ // Utils
42
+ export const getAddress = (e) => Address.fromEvent(e).toString();
43
+ //# sourceMappingURL=Address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Address.js","sourceRoot":"","sources":["../../../../util/src/Address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,mBAAmB,CAAA;AASrD,MAAM,OAAO,OAAO;IAEP;IACA;IACA;IACA;IAJX,YACW,IAAY,EACZ,MAAc,EACd,UAAkB,EAClB,SAAmB,EAAE;QAHrB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAe;IAC7B,CAAC;IAEJ,MAAM,CAAC,SAAS,CAAC,OAAe;QAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,SAAmB,EAAE;QAChD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAErF,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAa;QAC5B,IAAI,OAAY,CAAA;QAEhB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,IAAI,OAAO,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,EAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC,IAAI,CAAA;QAEvD,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IACtD,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAuB,EAAE,SAAmB,EAAE;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAEhE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IAClE,CAAC;IAED,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;IAEjE,OAAO,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;CAClC;AAED,QAAQ;AAER,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,34 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Encryptable.d.ts","sourceRoot":"","sources":["../../../../util/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"}
@@ -0,0 +1,52 @@
1
+ export const asDecryptedEvent = (event, plaintext = {}) => ({ ...event, plaintext });
2
+ /**
3
+ * Represents an encryptable event with optional updates.
4
+ */
5
+ export class Encryptable {
6
+ event;
7
+ updates;
8
+ /**
9
+ * Creates an instance of Encryptable.
10
+ * @param event - An EventTemplate with optional tags and content.
11
+ * @param updates - Plaintext updates to be applied to the event content.
12
+ * @example
13
+ * Here's an example which enables updating a private mute list:
14
+ * ```
15
+ * const event = {kind: 10000, content: "", tags: []} // An event, only kind is required
16
+ * const encryptable = new Encryptable(event, {content: JSON.stringify([["e", "bad word"]])})
17
+ * const eventTemplate = await encryptable.reconcile(myEncryptFunction)
18
+ * ```
19
+ */
20
+ constructor(event, updates) {
21
+ this.event = event;
22
+ this.updates = updates;
23
+ }
24
+ /**
25
+ * Encrypts plaintext updates and merges them into the event template.
26
+ * @param encrypt - The encryption function to be used.
27
+ * @returns A promise that resolves to the reconciled and encrypted event.
28
+ */
29
+ async reconcile(encrypt) {
30
+ const encryptContent = () => {
31
+ if (!this.updates.content)
32
+ return null;
33
+ return encrypt(this.updates.content);
34
+ };
35
+ const encryptTags = () => {
36
+ if (!this.updates.tags)
37
+ return null;
38
+ return Promise.all(this.updates.tags.map(async (tag) => {
39
+ tag[1] = await encrypt(tag[1]);
40
+ return tag;
41
+ }));
42
+ };
43
+ const [content, tags] = await Promise.all([encryptContent(), encryptTags()]);
44
+ // Updates are optional. If not provided, fall back to the event's content and tags.
45
+ return {
46
+ ...this.event,
47
+ tags: tags || this.event.tags || [],
48
+ content: content || this.event.content || "",
49
+ };
50
+ }
51
+ }
52
+ //# sourceMappingURL=Encryptable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Encryptable.js","sourceRoot":"","sources":["../../../../util/src/Encryptable.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAE,YAAgC,EAAE,EAAE,EAAE,CAC1F,CAAC,EAAC,GAAG,KAAK,EAAE,SAAS,EAAC,CAAmB,CAAA;AAE3C;;GAEG;AACH,MAAM,OAAO,WAAW;IAcX;IACA;IAdX;;;;;;;;;;;OAWG;IACH,YACW,KAAiB,EACjB,OAA2B;QAD3B,UAAK,GAAL,KAAK,CAAY;QACjB,YAAO,GAAP,OAAO,CAAoB;IACnC,CAAC;IAEJ;;;;OAIG;IACH,KAAK,CAAC,SAAS,CAAC,OAAgB;QAC9B,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAA;YAEtC,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACtC,CAAC,CAAA;QAED,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAA;YAEnC,OAAO,OAAO,CAAC,GAAG,CAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;gBAChC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE9B,OAAO,GAAG,CAAA;YACZ,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QAE5E,oFAAoF;QACpF,OAAO;YACL,GAAG,IAAI,CAAC,KAAK;YACb,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;YACnC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE;SACxC,CAAA;IACR,CAAC;CACF"}
@@ -0,0 +1,77 @@
1
+ import { verifiedSymbol } from "nostr-tools/pure";
2
+ export type EventContent = {
3
+ tags: string[][];
4
+ content: string;
5
+ };
6
+ export type EventTemplate = EventContent & {
7
+ kind: number;
8
+ };
9
+ export type StampedEvent = EventTemplate & {
10
+ created_at: number;
11
+ };
12
+ export type OwnedEvent = StampedEvent & {
13
+ pubkey: string;
14
+ };
15
+ export type HashedEvent = OwnedEvent & {
16
+ id: string;
17
+ };
18
+ export type SignedEvent = HashedEvent & {
19
+ sig: string;
20
+ [verifiedSymbol]?: boolean;
21
+ };
22
+ export type UnwrappedEvent = HashedEvent & {
23
+ wrap: SignedEvent;
24
+ };
25
+ export type TrustedEvent = HashedEvent & {
26
+ sig?: string;
27
+ wrap?: SignedEvent;
28
+ [verifiedSymbol]?: boolean;
29
+ };
30
+ export type MakeEventOpts = {
31
+ content?: string;
32
+ tags?: string[][];
33
+ created_at?: number;
34
+ };
35
+ export declare const makeEvent: (kind: number, { content, tags, created_at }?: MakeEventOpts) => {
36
+ kind: number;
37
+ content: string;
38
+ tags: string[][];
39
+ created_at: number;
40
+ };
41
+ export declare const createEvent: (kind: number, { content, tags, created_at }?: MakeEventOpts) => {
42
+ kind: number;
43
+ content: string;
44
+ tags: string[][];
45
+ created_at: number;
46
+ };
47
+ export declare const verifyEvent: (event: TrustedEvent) => boolean;
48
+ export declare const isEventTemplate: (e: EventTemplate) => e is EventTemplate;
49
+ export declare const isStampedEvent: (e: StampedEvent) => e is StampedEvent;
50
+ export declare const isOwnedEvent: (e: OwnedEvent) => e is OwnedEvent;
51
+ export declare const isHashedEvent: (e: HashedEvent) => e is HashedEvent;
52
+ export declare const isSignedEvent: (e: TrustedEvent) => e is SignedEvent;
53
+ export declare const isUnwrappedEvent: (e: TrustedEvent) => e is UnwrappedEvent;
54
+ export declare const isTrustedEvent: (e: TrustedEvent) => e is TrustedEvent;
55
+ export declare const asEventTemplate: (e: EventTemplate) => EventTemplate;
56
+ export declare const asStampedEvent: (e: StampedEvent) => StampedEvent;
57
+ export declare const asOwnedEvent: (e: OwnedEvent) => OwnedEvent;
58
+ export declare const asHashedEvent: (e: HashedEvent) => HashedEvent;
59
+ export declare const asSignedEvent: (e: SignedEvent) => SignedEvent;
60
+ export declare const asUnwrappedEvent: (e: UnwrappedEvent) => UnwrappedEvent;
61
+ export declare const asTrustedEvent: (e: TrustedEvent) => TrustedEvent;
62
+ export declare const getIdentifier: (e: EventTemplate) => string | undefined;
63
+ export declare const getIdOrAddress: (e: HashedEvent) => string;
64
+ export declare const getIdAndAddress: (e: HashedEvent) => string[];
65
+ export declare const isEphemeral: (e: EventTemplate) => boolean;
66
+ export declare const isReplaceable: (e: EventTemplate) => boolean;
67
+ export declare const isPlainReplaceable: (e: EventTemplate) => boolean;
68
+ export declare const isParameterizedReplaceable: (e: EventTemplate) => boolean;
69
+ export declare const getAncestors: ({ kind, tags }: EventTemplate) => Record<string, string[]>;
70
+ export declare const getParentIdsAndAddrs: (event: EventTemplate) => string[];
71
+ export declare const getParentIdOrAddr: (event: EventTemplate) => string | undefined;
72
+ export declare const getParentIds: (event: EventTemplate) => string[];
73
+ export declare const getParentId: (event: EventTemplate) => string | undefined;
74
+ export declare const getParentAddrs: (event: EventTemplate) => string[];
75
+ export declare const getParentAddr: (event: EventTemplate) => string | undefined;
76
+ export declare const isChildOf: (child: EventTemplate, parent: HashedEvent) => boolean;
77
+ //# sourceMappingURL=Events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../../../util/src/Events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { verifiedSymbol, verifyEvent as verifyEventPure } from "nostr-tools/pure";
2
+ import { setNostrWasm, verifyEvent as verifyEventWasm } from "nostr-tools/wasm";
3
+ import { initNostrWasm } from "nostr-wasm";
4
+ import { mapVals, first, pick, now } from "@welshman/lib";
5
+ import { getReplyTagValues, getCommentTagValues } from "./Tags.js";
6
+ import { getAddress, Address } from "./Address.js";
7
+ import { COMMENT, isEphemeralKind, isReplaceableKind, isPlainReplaceableKind, isParameterizedReplaceableKind, } from "./Kinds.js";
8
+ export const makeEvent = (kind, { content = "", tags = [], created_at = now() } = {}) => ({ kind, content, tags, created_at });
9
+ export const createEvent = makeEvent;
10
+ export const verifyEvent = (() => {
11
+ let verify = verifyEventPure;
12
+ if (typeof WebAssembly === "object") {
13
+ initNostrWasm().then(nostrWasm => {
14
+ setNostrWasm(nostrWasm);
15
+ verify = verifyEventWasm;
16
+ }, e => {
17
+ console.warn(e);
18
+ });
19
+ }
20
+ return (event) => Boolean(event.sig && (event[verifiedSymbol] || verify(event)));
21
+ })();
22
+ export const isEventTemplate = (e) => Boolean(typeof e.kind === "number" && Array.isArray(e.tags) && typeof e.content === "string");
23
+ export const isStampedEvent = (e) => Boolean(isEventTemplate(e) && e.created_at >= 0);
24
+ export const isOwnedEvent = (e) => Boolean(isStampedEvent(e) && e.pubkey);
25
+ export const isHashedEvent = (e) => Boolean(isOwnedEvent(e) && e.id);
26
+ export const isSignedEvent = (e) => Boolean(isHashedEvent(e) && e.sig);
27
+ export const isUnwrappedEvent = (e) => Boolean(isHashedEvent(e) && e.wrap);
28
+ export const isTrustedEvent = (e) => isSignedEvent(e) || isUnwrappedEvent(e);
29
+ export const asEventTemplate = (e) => pick(["kind", "tags", "content"], e);
30
+ export const asStampedEvent = (e) => pick(["kind", "tags", "content", "created_at"], e);
31
+ export const asOwnedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey"], e);
32
+ export const asHashedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey", "id"], e);
33
+ export const asSignedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey", "id", "sig"], e);
34
+ export const asUnwrappedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey", "id", "wrap"], e);
35
+ export const asTrustedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey", "id", "sig", "wrap"], e);
36
+ export const getIdentifier = (e) => e.tags.find(t => t[0] === "d")?.[1];
37
+ export const getIdOrAddress = (e) => (isReplaceable(e) ? getAddress(e) : e.id);
38
+ export const getIdAndAddress = (e) => isReplaceable(e) ? [e.id, getAddress(e)] : [e.id];
39
+ export const isEphemeral = (e) => isEphemeralKind(e.kind);
40
+ export const isReplaceable = (e) => isReplaceableKind(e.kind);
41
+ export const isPlainReplaceable = (e) => isPlainReplaceableKind(e.kind);
42
+ export const isParameterizedReplaceable = (e) => isParameterizedReplaceableKind(e.kind);
43
+ export const getAncestors = ({ kind, tags }) => kind === COMMENT ? getCommentTagValues(tags) : getReplyTagValues(tags);
44
+ export const getParentIdsAndAddrs = (event) => {
45
+ const { roots, replies } = getAncestors(event);
46
+ return replies.length > 0 ? replies : roots;
47
+ };
48
+ export const getParentIdOrAddr = (event) => first(getParentIdsAndAddrs(event));
49
+ export const getParentIds = (event) => {
50
+ const { roots, replies } = mapVals(ids => ids.filter(id => !Address.isAddress(id)), getAncestors(event));
51
+ return replies.length > 0 ? replies : roots;
52
+ };
53
+ export const getParentId = (event) => first(getParentIds(event));
54
+ export const getParentAddrs = (event) => {
55
+ const { roots, replies } = mapVals(ids => ids.filter(id => Address.isAddress(id)), getAncestors(event));
56
+ return replies.length > 0 ? replies : roots;
57
+ };
58
+ export const getParentAddr = (event) => first(getParentAddrs(event));
59
+ export const isChildOf = (child, parent) => {
60
+ const idsAndAddrs = getParentIdsAndAddrs(child);
61
+ return getIdAndAddress(parent).some(x => idsAndAddrs.includes(x));
62
+ };
63
+ //# sourceMappingURL=Events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Events.js","sourceRoot":"","sources":["../../../../util/src/Events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,WAAW,IAAI,eAAe,EAAC,MAAM,kBAAkB,CAAA;AAC/E,OAAO,EAAC,YAAY,EAAE,WAAW,IAAI,eAAe,EAAC,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAA;AACxC,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAC,MAAM,eAAe,CAAA;AACvD,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,WAAW,CAAA;AAChE,OAAO,EAAC,UAAU,EAAE,OAAO,EAAC,MAAM,cAAc,CAAA;AAChD,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,YAAY,CAAA;AA4CnB,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,IAAY,EACZ,EAAC,OAAO,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,GAAG,GAAG,EAAE,KAAmB,EAAE,EACjE,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAC,CAAC,CAAA;AAExC,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAA;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE;IAC/B,IAAI,MAAM,GAAG,eAAe,CAAA;IAE5B,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,aAAa,EAAE,CAAC,IAAI,CAClB,SAAS,CAAC,EAAE;YACV,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,MAAM,GAAG,eAAe,CAAA;QAC1B,CAAC,EACD,CAAC,CAAC,EAAE;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC,CACF,CAAA;IACH,CAAC;IAED,OAAO,CAAC,KAAmB,EAAE,EAAE,CAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,KAAoB,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC,CAAC,EAAE,CAAA;AAEJ,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAgB,EAAsB,EAAE,CACtE,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAA;AAE/F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAe,EAAqB,EAAE,CACnE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAA;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAa,EAAmB,EAAE,CAC7D,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAA;AAExC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAc,EAAoB,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;AAEnG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAe,EAAoB,EAAE,CACjE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;AAEpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAe,EAAuB,EAAE,CACvE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAe,EAAqB,EAAE,CACnE,aAAa,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAgB,EAAiB,EAAE,CACjE,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;AAEtC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAe,EAAgB,EAAE,CAC9D,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAA;AAEpD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAa,EAAc,EAAE,CACxD,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;AAE9D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAc,EAAe,EAAE,CAC3D,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AAEpE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAc,EAAe,EAAE,CAC3D,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AAE3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAiB,EAAkB,EAAE,CACpE,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;AAE5E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAe,EAAgB,EAAE,CAC9D,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;AAEnF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAEtF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAE3F,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAc,EAAE,EAAE,CAChD,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAEnD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAExE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAE5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAEtF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAgB,EAAE,EAAE,CAC7D,8BAA8B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAExC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAC,IAAI,EAAE,IAAI,EAAgB,EAAE,EAAE,CAC1D,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;AAExE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC3D,MAAM,EAAC,KAAK,EAAE,OAAO,EAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAE5C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAA;AAE7F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAE,EAAE;IACnD,MAAM,EAAC,KAAK,EAAE,OAAO,EAAC,GAAG,OAAO,CAC9B,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAC/C,YAAY,CAAC,KAAK,CAAC,CACpB,CAAA;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAoB,EAAE,EAAE;IACrD,MAAM,EAAC,KAAK,EAAE,OAAO,EAAC,GAAG,OAAO,CAC9B,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAC9C,YAAY,CAAC,KAAK,CAAC,CACpB,CAAA;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;AAEnF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAE,MAAmB,EAAE,EAAE;IACrE,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAE/C,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA"}
@@ -0,0 +1,48 @@
1
+ import type { HashedEvent, TrustedEvent } from "./Events.js";
2
+ export declare const EPOCH = 1609459200;
3
+ export declare const neverFilter: {
4
+ ids: never[];
5
+ };
6
+ export type Filter = {
7
+ ids?: string[];
8
+ kinds?: number[];
9
+ authors?: string[];
10
+ since?: number;
11
+ until?: number;
12
+ limit?: number;
13
+ search?: string;
14
+ [key: `#${string}`]: string[];
15
+ };
16
+ export declare const matchFilter: <E extends HashedEvent>(filter: Filter, event: E) => boolean;
17
+ export declare const matchFilters: <E extends HashedEvent>(filters: Filter[], event: E) => boolean;
18
+ export declare const getFilterId: (filter: Filter) => string;
19
+ export declare const calculateFilterGroup: ({ since, until, limit, search, ...filter }: Filter) => string;
20
+ export declare const unionFilters: (filters: Filter[]) => Filter[];
21
+ export declare const intersectFilters: (groups: Filter[][]) => Filter[];
22
+ export declare const getIdFilters: (idsOrAddresses: string[]) => Filter[];
23
+ export declare const getReplyFilters: (events: TrustedEvent[], filter?: Filter) => ({
24
+ "#a": string[];
25
+ ids?: string[];
26
+ kinds?: number[];
27
+ authors?: string[];
28
+ since?: number;
29
+ until?: number;
30
+ limit?: number;
31
+ search?: string;
32
+ } | {
33
+ "#e": string[];
34
+ ids?: string[];
35
+ kinds?: number[];
36
+ authors?: string[];
37
+ since?: number;
38
+ until?: number;
39
+ limit?: number;
40
+ search?: string;
41
+ })[];
42
+ export declare const addRepostFilters: (filters: Filter[]) => Filter[];
43
+ export declare const getFilterGenerality: (filter: Filter) => number;
44
+ export declare const guessFilterDelta: (filters: Filter[], max?: number) => number;
45
+ export declare const getFilterResultCardinality: (filter: Filter) => number | undefined;
46
+ export declare const trimFilter: (filter: Filter) => Filter;
47
+ export declare const trimFilters: (filters: Filter[]) => Filter[];
48
+ //# sourceMappingURL=Filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filters.d.ts","sourceRoot":"","sources":["../../../../util/src/Filters.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAC,WAAW,EAAE,YAAY,EAAc,MAAM,aAAa,CAAA;AAIvE,eAAO,MAAM,KAAK,aAAa,CAAA;AAE/B,eAAO,MAAM,WAAW;;CAAY,CAAA;AAEpC,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,WAAW,EAAE,QAAQ,MAAM,EAAE,OAAO,CAAC,YAmB1E,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,WAAW,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,YAQ9E,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,WAczC,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,4CAA0C,MAAM,WASpF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,EAAE,aAmB7C,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,EAAE,EAAE,aA8BlD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,gBAAgB,MAAM,EAAE,aAyBpD,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,YAAY,EAAE,EAAE,SAAQ,MAAW;;UApJnE,MAAM,EAAE;YACN,MAAM,EAAE;cACN,MAAM,EAAE;YACV,MAAM;YACN,MAAM;YACN,MAAM;aACL,MAAM;;;UANT,MAAM,EAAE;YACN,MAAM,EAAE;cACN,MAAM,EAAE;YACV,MAAM;YACN,MAAM;YACN,MAAM;aACL,MAAM;IAyKhB,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,EAAE,aAmB9C,CAAA;AAEJ,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,WAgBjD,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,EAAE,EAAE,YAAkB,WACO,CAAA;AAG7E,eAAO,MAAM,0BAA0B,GAAI,QAAQ,MAAM,uBAMxD,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,MAI/B,CAAA;AAEb,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,EAAE,aAA4B,CAAA"}