@nostrify/policies 0.36.4 → 0.36.6

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 (132) hide show
  1. package/.turbo/turbo-build.log +28 -5
  2. package/.turbo/turbo-setup.log +22 -0
  3. package/.turbo/turbo-test.log +4 -0
  4. package/AntiDuplicationPolicy.test.ts +54 -41
  5. package/AntiDuplicationPolicy.ts +7 -3
  6. package/AnyPolicy.test.ts +15 -14
  7. package/AnyPolicy.ts +5 -2
  8. package/AuthorPolicy.test.ts +8 -7
  9. package/AuthorPolicy.ts +9 -3
  10. package/CHANGELOG.md +18 -0
  11. package/DomainPolicy.test.ts +130 -77
  12. package/DomainPolicy.ts +3 -3
  13. package/FiltersPolicy.test.ts +14 -7
  14. package/FiltersPolicy.ts +5 -2
  15. package/HashtagPolicy.test.ts +25 -14
  16. package/HashtagPolicy.ts +5 -2
  17. package/HellthreadPolicy.test.ts +10 -9
  18. package/HellthreadPolicy.ts +6 -3
  19. package/InvertPolicy.test.ts +10 -9
  20. package/InvertPolicy.ts +8 -2
  21. package/KeywordPolicy.test.ts +18 -12
  22. package/KeywordPolicy.ts +5 -2
  23. package/NoOpPolicy.test.ts +8 -7
  24. package/NoOpPolicy.ts +1 -1
  25. package/OpenAIPolicy.test.ts +22 -9
  26. package/OpenAIPolicy.ts +5 -2
  27. package/PipePolicy.test.ts +18 -17
  28. package/PipePolicy.ts +5 -2
  29. package/PowPolicy.test.ts +14 -13
  30. package/PowPolicy.ts +6 -3
  31. package/PubkeyBanPolicy.test.ts +15 -8
  32. package/PubkeyBanPolicy.ts +5 -2
  33. package/ReadOnlyPolicy.test.ts +9 -8
  34. package/ReadOnlyPolicy.ts +1 -1
  35. package/RegexPolicy.test.ts +19 -10
  36. package/RegexPolicy.ts +5 -2
  37. package/ReplyBotPolicy.test.ts +43 -27
  38. package/ReplyBotPolicy.ts +6 -3
  39. package/SizePolicy.test.ts +9 -8
  40. package/SizePolicy.ts +6 -2
  41. package/WhitelistPolicy.test.ts +15 -8
  42. package/WhitelistPolicy.ts +6 -2
  43. package/WoTPolicy.test.ts +48 -22
  44. package/WoTPolicy.ts +5 -2
  45. package/dist/AntiDuplicationPolicy.d.ts +2 -2
  46. package/dist/AntiDuplicationPolicy.d.ts.map +1 -1
  47. package/dist/AntiDuplicationPolicy.js +41 -56
  48. package/dist/AnyPolicy.d.ts +1 -1
  49. package/dist/AnyPolicy.d.ts.map +1 -1
  50. package/dist/AnyPolicy.js +17 -16
  51. package/dist/AuthorPolicy.d.ts +1 -1
  52. package/dist/AuthorPolicy.d.ts.map +1 -1
  53. package/dist/AuthorPolicy.js +19 -20
  54. package/dist/DomainPolicy.d.ts +2 -2
  55. package/dist/DomainPolicy.d.ts.map +1 -1
  56. package/dist/DomainPolicy.js +57 -59
  57. package/dist/FiltersPolicy.d.ts +1 -1
  58. package/dist/FiltersPolicy.d.ts.map +1 -1
  59. package/dist/FiltersPolicy.js +15 -24
  60. package/dist/HashtagPolicy.d.ts +1 -1
  61. package/dist/HashtagPolicy.d.ts.map +1 -1
  62. package/dist/HashtagPolicy.js +16 -23
  63. package/dist/HellthreadPolicy.d.ts +1 -1
  64. package/dist/HellthreadPolicy.d.ts.map +1 -1
  65. package/dist/HellthreadPolicy.js +18 -17
  66. package/dist/InvertPolicy.d.ts +1 -1
  67. package/dist/InvertPolicy.d.ts.map +1 -1
  68. package/dist/InvertPolicy.js +18 -18
  69. package/dist/KeywordPolicy.d.ts +1 -1
  70. package/dist/KeywordPolicy.d.ts.map +1 -1
  71. package/dist/KeywordPolicy.js +16 -23
  72. package/dist/NoOpPolicy.d.ts +1 -1
  73. package/dist/NoOpPolicy.d.ts.map +1 -1
  74. package/dist/NoOpPolicy.js +8 -7
  75. package/dist/OpenAIPolicy.d.ts +1 -1
  76. package/dist/OpenAIPolicy.d.ts.map +1 -1
  77. package/dist/OpenAIPolicy.js +35 -55
  78. package/dist/PipePolicy.d.ts +1 -1
  79. package/dist/PipePolicy.d.ts.map +1 -1
  80. package/dist/PipePolicy.js +16 -33
  81. package/dist/PowPolicy.d.ts +1 -1
  82. package/dist/PowPolicy.d.ts.map +1 -1
  83. package/dist/PowPolicy.js +25 -30
  84. package/dist/PubkeyBanPolicy.d.ts +1 -1
  85. package/dist/PubkeyBanPolicy.d.ts.map +1 -1
  86. package/dist/PubkeyBanPolicy.js +16 -22
  87. package/dist/ReadOnlyPolicy.d.ts +1 -1
  88. package/dist/ReadOnlyPolicy.d.ts.map +1 -1
  89. package/dist/ReadOnlyPolicy.js +8 -7
  90. package/dist/RegexPolicy.d.ts +1 -1
  91. package/dist/RegexPolicy.d.ts.map +1 -1
  92. package/dist/RegexPolicy.js +14 -20
  93. package/dist/ReplyBotPolicy.d.ts +1 -1
  94. package/dist/ReplyBotPolicy.d.ts.map +1 -1
  95. package/dist/ReplyBotPolicy.js +39 -38
  96. package/dist/SizePolicy.d.ts +1 -1
  97. package/dist/SizePolicy.d.ts.map +1 -1
  98. package/dist/SizePolicy.js +17 -25
  99. package/dist/WhitelistPolicy.d.ts +1 -1
  100. package/dist/WhitelistPolicy.d.ts.map +1 -1
  101. package/dist/WhitelistPolicy.js +23 -29
  102. package/dist/WoTPolicy.d.ts +2 -2
  103. package/dist/WoTPolicy.d.ts.map +1 -1
  104. package/dist/WoTPolicy.js +34 -33
  105. package/dist/mod.d.ts +20 -20
  106. package/dist/mod.js +42 -21
  107. package/dist/mod.js.map +7 -1
  108. package/dist/tsconfig.tsbuildinfo +1 -1
  109. package/mod.ts +20 -20
  110. package/package.json +10 -6
  111. package/tsconfig.json +3 -1
  112. package/.turbo/daemon/7bb8240f68f7ad88-turbo.log.2025-07-29 +0 -0
  113. package/dist/AntiDuplicationPolicy.js.map +0 -1
  114. package/dist/AnyPolicy.js.map +0 -1
  115. package/dist/AuthorPolicy.js.map +0 -1
  116. package/dist/DomainPolicy.js.map +0 -1
  117. package/dist/FiltersPolicy.js.map +0 -1
  118. package/dist/HashtagPolicy.js.map +0 -1
  119. package/dist/HellthreadPolicy.js.map +0 -1
  120. package/dist/InvertPolicy.js.map +0 -1
  121. package/dist/KeywordPolicy.js.map +0 -1
  122. package/dist/NoOpPolicy.js.map +0 -1
  123. package/dist/OpenAIPolicy.js.map +0 -1
  124. package/dist/PipePolicy.js.map +0 -1
  125. package/dist/PowPolicy.js.map +0 -1
  126. package/dist/PubkeyBanPolicy.js.map +0 -1
  127. package/dist/ReadOnlyPolicy.js.map +0 -1
  128. package/dist/RegexPolicy.js.map +0 -1
  129. package/dist/ReplyBotPolicy.js.map +0 -1
  130. package/dist/SizePolicy.js.map +0 -1
  131. package/dist/WhitelistPolicy.js.map +0 -1
  132. package/dist/WoTPolicy.js.map +0 -1
@@ -1,41 +1,42 @@
1
- /** Block events that reply too quickly to another event. */
2
- export class ReplyBotPolicy {
3
- opts;
4
- constructor(opts) {
5
- this.opts = opts;
6
- }
7
- async call(event, signal) {
8
- const { store, threshold = 1, kinds = [1] } = this.opts;
9
- if (kinds.includes(event.kind)) {
10
- const [, replyToId] = ReplyBotPolicy.findReplyTag(event.tags) ?? [];
11
- if (replyToId) {
12
- const [prevEvent] = await store.query([{ ids: [replyToId] }], { signal });
13
- if (prevEvent) {
14
- const diff = event.created_at - prevEvent.created_at;
15
- const pTag = prevEvent.tags.find(([name, value]) => name === 'p' && value === event.pubkey);
16
- if (diff <= threshold && !pTag) {
17
- return ['OK', event.id, false, 'rate-limited: replied too quickly'];
18
- }
19
- }
20
- }
1
+ class ReplyBotPolicy {
2
+ opts;
3
+ constructor(opts) {
4
+ this.opts = opts;
5
+ }
6
+ async call(event, signal) {
7
+ const { store, threshold = 1, kinds = [1] } = this.opts;
8
+ if (kinds.includes(event.kind)) {
9
+ const [, replyToId] = ReplyBotPolicy.findReplyTag(event.tags) ?? [];
10
+ if (replyToId) {
11
+ const [prevEvent] = await store.query([{ ids: [replyToId] }], { signal });
12
+ if (prevEvent) {
13
+ const diff = event.created_at - prevEvent.created_at;
14
+ const pTag = prevEvent.tags.find(([name, value]) => name === "p" && value === event.pubkey);
15
+ if (diff <= threshold && !pTag) {
16
+ return ["OK", event.id, false, "rate-limited: replied too quickly"];
17
+ }
21
18
  }
22
- return ['OK', event.id, true, ''];
23
- }
24
- /** Tag is a NIP-10 root tag. */
25
- static isRootTag(tag) {
26
- return tag[0] === 'e' && tag[3] === 'root';
27
- }
28
- /** Tag is a NIP-10 reply tag. */
29
- static isReplyTag(tag) {
30
- return tag[0] === 'e' && tag[3] === 'reply';
31
- }
32
- /** Tag is an "e" tag without a NIP-10 marker. */
33
- static isLegacyReplyTag(tag) {
34
- return tag[0] === 'e' && !tag[3];
35
- }
36
- /** Get the "e" tag for the event being replied to, first according to the NIPs then falling back to the legacy way. */
37
- static findReplyTag(tags) {
38
- return tags.find(this.isReplyTag) || tags.find(this.isRootTag) || tags.findLast(this.isLegacyReplyTag);
19
+ }
39
20
  }
21
+ return ["OK", event.id, true, ""];
22
+ }
23
+ /** Tag is a NIP-10 root tag. */
24
+ static isRootTag(tag) {
25
+ return tag[0] === "e" && tag[3] === "root";
26
+ }
27
+ /** Tag is a NIP-10 reply tag. */
28
+ static isReplyTag(tag) {
29
+ return tag[0] === "e" && tag[3] === "reply";
30
+ }
31
+ /** Tag is an "e" tag without a NIP-10 marker. */
32
+ static isLegacyReplyTag(tag) {
33
+ return tag[0] === "e" && !tag[3];
34
+ }
35
+ /** Get the "e" tag for the event being replied to, first according to the NIPs then falling back to the legacy way. */
36
+ static findReplyTag(tags) {
37
+ return tags.find(this.isReplyTag) || tags.find(this.isRootTag) || tags.findLast(this.isLegacyReplyTag);
38
+ }
40
39
  }
41
- //# sourceMappingURL=ReplyBotPolicy.js.map
40
+ export {
41
+ ReplyBotPolicy
42
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /** Policy options for `SizePolicy`. */
3
3
  interface SizePolicyOpts {
4
4
  /** Maximum size of the message content in bytes. Default: 8192 (8KB) */
@@ -1 +1 @@
1
- {"version":3,"file":"SizePolicy.d.ts","sourceRoot":"","sources":["../SizePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE,uCAAuC;AACvC,UAAU,cAAc;IACtB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,qBAAa,UAAW,YAAW,OAAO;IAC5B,OAAO,CAAC,IAAI;gBAAJ,IAAI,GAAE,cAAmB;IAGvC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAYrD"}
1
+ {"version":3,"file":"SizePolicy.d.ts","sourceRoot":"","sources":["../SizePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE,uCAAuC;AACvC,UAAU,cAAc;IACtB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,qBAAa,UAAW,YAAW,OAAO;IACxC,OAAO,CAAC,IAAI,CAAiB;gBAEjB,IAAI,GAAE,cAAmB;IAK/B,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAYrD"}
@@ -1,27 +1,19 @@
1
- /**
2
- * Reject events larger than a specified size in bytes.
3
- *
4
- * ```ts
5
- * // Reject events larger than the default size (8KB) .
6
- * new SizePolicy();
7
- * // Reject events larger than a custom size (15KB).
8
- * new SizePolicy({ maxBytes: 15 * 1024 });
9
- * ```
10
- */
11
- export class SizePolicy {
12
- opts;
13
- constructor(opts = {}) {
14
- this.opts = opts;
15
- }
16
- // deno-lint-ignore require-await
17
- async call(event) {
18
- const { maxBytes = 8 * 1024 } = this.opts;
19
- const json = JSON.stringify(event);
20
- const size = new TextEncoder().encode(json).length;
21
- if (size > maxBytes) {
22
- return ['OK', event.id, false, `blocked: event is too large`];
23
- }
24
- return ['OK', event.id, true, ''];
1
+ class SizePolicy {
2
+ opts;
3
+ constructor(opts = {}) {
4
+ this.opts = opts;
5
+ }
6
+ // deno-lint-ignore require-await
7
+ async call(event) {
8
+ const { maxBytes = 8 * 1024 } = this.opts;
9
+ const json = JSON.stringify(event);
10
+ const size = new TextEncoder().encode(json).length;
11
+ if (size > maxBytes) {
12
+ return ["OK", event.id, false, `blocked: event is too large`];
25
13
  }
14
+ return ["OK", event.id, true, ""];
15
+ }
26
16
  }
27
- //# sourceMappingURL=SizePolicy.js.map
17
+ export {
18
+ SizePolicy
19
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayInfo, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayInfo, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /**
3
3
  * Allows only the listed pubkeys to post. All other events are rejected.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"WhitelistPolicy.d.ts","sourceRoot":"","sources":["../WhitelistPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpF;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,OAAO;IACjC,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;IAGvC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAU7D,IAAI,IAAI,IAAI,cAAc,CAMzB;CACF"}
1
+ {"version":3,"file":"WhitelistPolicy.d.ts","sourceRoot":"","sources":["../WhitelistPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzF;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,OAAO;IAC7C,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;IAK/B,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAU7D,IAAI,IAAI,IAAI,cAAc,CAMzB;CACF"}
@@ -1,31 +1,25 @@
1
- /**
2
- * Allows only the listed pubkeys to post. All other events are rejected.
3
- *
4
- * ```ts
5
- * // Only the given pubkey may post.
6
- * new WhitelistPolicy(['e810fafa1e89cdf80cced8e013938e87e21b699b24c8570537be92aec4b12c18']);
7
- * ```
8
- */
9
- export class WhitelistPolicy {
10
- pubkeys;
11
- constructor(pubkeys) {
12
- this.pubkeys = pubkeys;
13
- }
14
- // deno-lint-ignore require-await
15
- async call({ id, pubkey }) {
16
- for (const p of this.pubkeys) {
17
- if (p === pubkey) {
18
- return ['OK', id, true, ''];
19
- }
20
- }
21
- return ['OK', id, false, 'blocked: only certain pubkeys are allowed to post'];
22
- }
23
- get info() {
24
- return {
25
- limitation: {
26
- restricted_writes: true,
27
- },
28
- };
1
+ class WhitelistPolicy {
2
+ pubkeys;
3
+ constructor(pubkeys) {
4
+ this.pubkeys = pubkeys;
5
+ }
6
+ // deno-lint-ignore require-await
7
+ async call({ id, pubkey }) {
8
+ for (const p of this.pubkeys) {
9
+ if (p === pubkey) {
10
+ return ["OK", id, true, ""];
11
+ }
29
12
  }
13
+ return ["OK", id, false, "blocked: only certain pubkeys are allowed to post"];
14
+ }
15
+ get info() {
16
+ return {
17
+ limitation: {
18
+ restricted_writes: true
19
+ }
20
+ };
21
+ }
30
22
  }
31
- //# sourceMappingURL=WhitelistPolicy.js.map
23
+ export {
24
+ WhitelistPolicy
25
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy, NStore } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy, NStore } from '@nostrify/types';
2
2
  /** Options for the `WoTPolicy`. */
3
3
  interface WoTPolicyOpts {
4
4
  /** Store to get kind 3 follow lists from. */
@@ -15,8 +15,8 @@ interface WoTPolicyOpts {
15
15
  }
16
16
  /** Whitelist pubkeys the given user follows, people those users follow, etc. up to `depth`. */
17
17
  export declare class WoTPolicy implements NPolicy {
18
- private opts;
19
18
  private pubkeys;
19
+ private opts;
20
20
  constructor(opts: WoTPolicyOpts);
21
21
  call(event: NostrEvent): Promise<NostrRelayOK>;
22
22
  /** Retrieve the complete set of pubkeys to whitelist. */
@@ -1 +1 @@
1
- {"version":3,"file":"WoTPolicy.d.ts","sourceRoot":"","sources":["../WoTPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE5E,mCAAmC;AACnC,UAAU,aAAa;IACrB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+FAA+F;AAC/F,qBAAa,SAAU,YAAW,OAAO;IAG3B,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,OAAO,CAAmC;gBAE9B,IAAI,EAAE,aAAa;IAEjC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAWpD,yDAAyD;YAC3C,UAAU;CAyBzB"}
1
+ {"version":3,"file":"WoTPolicy.d.ts","sourceRoot":"","sources":["../WoTPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEjF,mCAAmC;AACnC,UAAU,aAAa;IACrB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+FAA+F;AAC/F,qBAAa,SAAU,YAAW,OAAO;IACvC,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,IAAI,CAAgB;gBAEhB,IAAI,EAAE,aAAa;IAIzB,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAWpD,yDAAyD;YAC3C,UAAU;CAyBzB"}
package/dist/WoTPolicy.js CHANGED
@@ -1,38 +1,39 @@
1
- /** Whitelist pubkeys the given user follows, people those users follow, etc. up to `depth`. */
2
- export class WoTPolicy {
3
- opts;
4
- pubkeys;
5
- constructor(opts) {
6
- this.opts = opts;
1
+ class WoTPolicy {
2
+ pubkeys;
3
+ opts;
4
+ constructor(opts) {
5
+ this.opts = opts;
6
+ }
7
+ async call(event) {
8
+ this.pubkeys ??= this.getPubkeys();
9
+ const pubkeys = await this.pubkeys;
10
+ if (pubkeys.has(event.pubkey)) {
11
+ return ["OK", event.id, true, ""];
7
12
  }
8
- async call(event) {
9
- this.pubkeys ??= this.getPubkeys();
10
- const pubkeys = await this.pubkeys;
11
- if (pubkeys.has(event.pubkey)) {
12
- return ['OK', event.id, true, ''];
13
- }
14
- return ['OK', event.id, false, 'blocked: only certain pubkeys are allowed to post'];
15
- }
16
- /** Retrieve the complete set of pubkeys to whitelist. */
17
- async getPubkeys() {
18
- const { store, depth } = this.opts;
19
- const pubkeys = new Set([...this.opts.pubkeys]);
20
- const authors = new Set(pubkeys);
21
- for (let i = 0; i < depth; i++) {
22
- const events = await store.query([{ kinds: [3], authors: [...authors] }]);
23
- authors.clear();
24
- for (const event of events) {
25
- for (const [name, value] of event.tags) {
26
- if (name === 'p') {
27
- if (!pubkeys.has(value)) { // Avoid infinite loops.
28
- authors.add(value);
29
- }
30
- pubkeys.add(value);
31
- }
32
- }
13
+ return ["OK", event.id, false, "blocked: only certain pubkeys are allowed to post"];
14
+ }
15
+ /** Retrieve the complete set of pubkeys to whitelist. */
16
+ async getPubkeys() {
17
+ const { store, depth } = this.opts;
18
+ const pubkeys = /* @__PURE__ */ new Set([...this.opts.pubkeys]);
19
+ const authors = new Set(pubkeys);
20
+ for (let i = 0; i < depth; i++) {
21
+ const events = await store.query([{ kinds: [3], authors: [...authors] }]);
22
+ authors.clear();
23
+ for (const event of events) {
24
+ for (const [name, value] of event.tags) {
25
+ if (name === "p") {
26
+ if (!pubkeys.has(value)) {
27
+ authors.add(value);
33
28
  }
29
+ pubkeys.add(value);
30
+ }
34
31
  }
35
- return pubkeys;
32
+ }
36
33
  }
34
+ return pubkeys;
35
+ }
37
36
  }
38
- //# sourceMappingURL=WoTPolicy.js.map
37
+ export {
38
+ WoTPolicy
39
+ };
package/dist/mod.d.ts CHANGED
@@ -1,21 +1,21 @@
1
- export { AntiDuplicationPolicy } from './AntiDuplicationPolicy.js';
2
- export { AnyPolicy } from './AnyPolicy.js';
3
- export { AuthorPolicy } from './AuthorPolicy.js';
4
- export { DomainPolicy } from './DomainPolicy.js';
5
- export { FiltersPolicy } from './FiltersPolicy.js';
6
- export { HashtagPolicy } from './HashtagPolicy.js';
7
- export { HellthreadPolicy } from './HellthreadPolicy.js';
8
- export { InvertPolicy } from './InvertPolicy.js';
9
- export { KeywordPolicy } from './KeywordPolicy.js';
10
- export { NoOpPolicy } from './NoOpPolicy.js';
11
- export { OpenAIPolicy } from './OpenAIPolicy.js';
12
- export { PipePolicy } from './PipePolicy.js';
13
- export { PowPolicy } from './PowPolicy.js';
14
- export { PubkeyBanPolicy } from './PubkeyBanPolicy.js';
15
- export { ReadOnlyPolicy } from './ReadOnlyPolicy.js';
16
- export { RegexPolicy } from './RegexPolicy.js';
17
- export { ReplyBotPolicy } from './ReplyBotPolicy.js';
18
- export { SizePolicy } from './SizePolicy.js';
19
- export { WhitelistPolicy } from './WhitelistPolicy.js';
20
- export { WoTPolicy } from './WoTPolicy.js';
1
+ export { AntiDuplicationPolicy } from './AntiDuplicationPolicy.ts';
2
+ export { AnyPolicy } from './AnyPolicy.ts';
3
+ export { AuthorPolicy } from './AuthorPolicy.ts';
4
+ export { DomainPolicy } from './DomainPolicy.ts';
5
+ export { FiltersPolicy } from './FiltersPolicy.ts';
6
+ export { HashtagPolicy } from './HashtagPolicy.ts';
7
+ export { HellthreadPolicy } from './HellthreadPolicy.ts';
8
+ export { InvertPolicy } from './InvertPolicy.ts';
9
+ export { KeywordPolicy } from './KeywordPolicy.ts';
10
+ export { NoOpPolicy } from './NoOpPolicy.ts';
11
+ export { OpenAIPolicy } from './OpenAIPolicy.ts';
12
+ export { PipePolicy } from './PipePolicy.ts';
13
+ export { PowPolicy } from './PowPolicy.ts';
14
+ export { PubkeyBanPolicy } from './PubkeyBanPolicy.ts';
15
+ export { ReadOnlyPolicy } from './ReadOnlyPolicy.ts';
16
+ export { RegexPolicy } from './RegexPolicy.ts';
17
+ export { ReplyBotPolicy } from './ReplyBotPolicy.ts';
18
+ export { SizePolicy } from './SizePolicy.ts';
19
+ export { WhitelistPolicy } from './WhitelistPolicy.ts';
20
+ export { WoTPolicy } from './WoTPolicy.ts';
21
21
  //# sourceMappingURL=mod.d.ts.map
package/dist/mod.js CHANGED
@@ -1,21 +1,42 @@
1
- export { AntiDuplicationPolicy } from './AntiDuplicationPolicy.js';
2
- export { AnyPolicy } from './AnyPolicy.js';
3
- export { AuthorPolicy } from './AuthorPolicy.js';
4
- export { DomainPolicy } from './DomainPolicy.js';
5
- export { FiltersPolicy } from './FiltersPolicy.js';
6
- export { HashtagPolicy } from './HashtagPolicy.js';
7
- export { HellthreadPolicy } from './HellthreadPolicy.js';
8
- export { InvertPolicy } from './InvertPolicy.js';
9
- export { KeywordPolicy } from './KeywordPolicy.js';
10
- export { NoOpPolicy } from './NoOpPolicy.js';
11
- export { OpenAIPolicy } from './OpenAIPolicy.js';
12
- export { PipePolicy } from './PipePolicy.js';
13
- export { PowPolicy } from './PowPolicy.js';
14
- export { PubkeyBanPolicy } from './PubkeyBanPolicy.js';
15
- export { ReadOnlyPolicy } from './ReadOnlyPolicy.js';
16
- export { RegexPolicy } from './RegexPolicy.js';
17
- export { ReplyBotPolicy } from './ReplyBotPolicy.js';
18
- export { SizePolicy } from './SizePolicy.js';
19
- export { WhitelistPolicy } from './WhitelistPolicy.js';
20
- export { WoTPolicy } from './WoTPolicy.js';
21
- //# sourceMappingURL=mod.js.map
1
+ import { AntiDuplicationPolicy } from "./AntiDuplicationPolicy.js";
2
+ import { AnyPolicy } from "./AnyPolicy.js";
3
+ import { AuthorPolicy } from "./AuthorPolicy.js";
4
+ import { DomainPolicy } from "./DomainPolicy.js";
5
+ import { FiltersPolicy } from "./FiltersPolicy.js";
6
+ import { HashtagPolicy } from "./HashtagPolicy.js";
7
+ import { HellthreadPolicy } from "./HellthreadPolicy.js";
8
+ import { InvertPolicy } from "./InvertPolicy.js";
9
+ import { KeywordPolicy } from "./KeywordPolicy.js";
10
+ import { NoOpPolicy } from "./NoOpPolicy.js";
11
+ import { OpenAIPolicy } from "./OpenAIPolicy.js";
12
+ import { PipePolicy } from "./PipePolicy.js";
13
+ import { PowPolicy } from "./PowPolicy.js";
14
+ import { PubkeyBanPolicy } from "./PubkeyBanPolicy.js";
15
+ import { ReadOnlyPolicy } from "./ReadOnlyPolicy.js";
16
+ import { RegexPolicy } from "./RegexPolicy.js";
17
+ import { ReplyBotPolicy } from "./ReplyBotPolicy.js";
18
+ import { SizePolicy } from "./SizePolicy.js";
19
+ import { WhitelistPolicy } from "./WhitelistPolicy.js";
20
+ import { WoTPolicy } from "./WoTPolicy.js";
21
+ export {
22
+ AntiDuplicationPolicy,
23
+ AnyPolicy,
24
+ AuthorPolicy,
25
+ DomainPolicy,
26
+ FiltersPolicy,
27
+ HashtagPolicy,
28
+ HellthreadPolicy,
29
+ InvertPolicy,
30
+ KeywordPolicy,
31
+ NoOpPolicy,
32
+ OpenAIPolicy,
33
+ PipePolicy,
34
+ PowPolicy,
35
+ PubkeyBanPolicy,
36
+ ReadOnlyPolicy,
37
+ RegexPolicy,
38
+ ReplyBotPolicy,
39
+ SizePolicy,
40
+ WhitelistPolicy,
41
+ WoTPolicy
42
+ };
package/dist/mod.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../mod.ts"],
4
+ "sourcesContent": ["export { AntiDuplicationPolicy } from './AntiDuplicationPolicy.ts';\nexport { AnyPolicy } from './AnyPolicy.ts';\nexport { AuthorPolicy } from './AuthorPolicy.ts';\nexport { DomainPolicy } from './DomainPolicy.ts';\nexport { FiltersPolicy } from './FiltersPolicy.ts';\nexport { HashtagPolicy } from './HashtagPolicy.ts';\nexport { HellthreadPolicy } from './HellthreadPolicy.ts';\nexport { InvertPolicy } from './InvertPolicy.ts';\nexport { KeywordPolicy } from './KeywordPolicy.ts';\nexport { NoOpPolicy } from './NoOpPolicy.ts';\nexport { OpenAIPolicy } from './OpenAIPolicy.ts';\nexport { PipePolicy } from './PipePolicy.ts';\nexport { PowPolicy } from './PowPolicy.ts';\nexport { PubkeyBanPolicy } from './PubkeyBanPolicy.ts';\nexport { ReadOnlyPolicy } from './ReadOnlyPolicy.ts';\nexport { RegexPolicy } from './RegexPolicy.ts';\nexport { ReplyBotPolicy } from './ReplyBotPolicy.ts';\nexport { SizePolicy } from './SizePolicy.ts';\nexport { WhitelistPolicy } from './WhitelistPolicy.ts';\nexport { WoTPolicy } from './WoTPolicy.ts';\n"],
5
+ "mappings": ";AAAA,SAAS,6BAA6B;AACtC,SAAS,iBAAiB;AAC1B,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAC/B,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,iBAAiB;",
6
+ "names": []
7
+ }