@nostrify/policies 0.36.5 → 0.36.7

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 (133) hide show
  1. package/.turbo/turbo-build.log +24 -2
  2. package/.turbo/turbo-setup.log +22 -0
  3. package/.turbo/turbo-test.log +53 -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/mod.ts +20 -20
  46. package/package.json +8 -6
  47. package/tsconfig.json +3 -1
  48. package/.turbo/daemon/7bb8240f68f7ad88-turbo.log.2025-07-29 +0 -0
  49. package/dist/AntiDuplicationPolicy.d.ts +0 -43
  50. package/dist/AntiDuplicationPolicy.d.ts.map +0 -1
  51. package/dist/AntiDuplicationPolicy.js +0 -59
  52. package/dist/AntiDuplicationPolicy.js.map +0 -1
  53. package/dist/AnyPolicy.d.ts +0 -8
  54. package/dist/AnyPolicy.d.ts.map +0 -1
  55. package/dist/AnyPolicy.js +0 -19
  56. package/dist/AnyPolicy.js.map +0 -1
  57. package/dist/AuthorPolicy.d.ts +0 -9
  58. package/dist/AuthorPolicy.d.ts.map +0 -1
  59. package/dist/AuthorPolicy.js +0 -23
  60. package/dist/AuthorPolicy.js.map +0 -1
  61. package/dist/DomainPolicy.d.ts +0 -21
  62. package/dist/DomainPolicy.d.ts.map +0 -1
  63. package/dist/DomainPolicy.js +0 -64
  64. package/dist/DomainPolicy.js.map +0 -1
  65. package/dist/FiltersPolicy.d.ts +0 -18
  66. package/dist/FiltersPolicy.d.ts.map +0 -1
  67. package/dist/FiltersPolicy.js +0 -26
  68. package/dist/FiltersPolicy.js.map +0 -1
  69. package/dist/HashtagPolicy.d.ts +0 -16
  70. package/dist/HashtagPolicy.d.ts.map +0 -1
  71. package/dist/HashtagPolicy.js +0 -25
  72. package/dist/HashtagPolicy.js.map +0 -1
  73. package/dist/HellthreadPolicy.d.ts +0 -14
  74. package/dist/HellthreadPolicy.d.ts.map +0 -1
  75. package/dist/HellthreadPolicy.js +0 -19
  76. package/dist/HellthreadPolicy.js.map +0 -1
  77. package/dist/InvertPolicy.d.ts +0 -9
  78. package/dist/InvertPolicy.d.ts.map +0 -1
  79. package/dist/InvertPolicy.js +0 -20
  80. package/dist/InvertPolicy.js.map +0 -1
  81. package/dist/KeywordPolicy.d.ts +0 -16
  82. package/dist/KeywordPolicy.d.ts.map +0 -1
  83. package/dist/KeywordPolicy.js +0 -25
  84. package/dist/KeywordPolicy.js.map +0 -1
  85. package/dist/NoOpPolicy.d.ts +0 -6
  86. package/dist/NoOpPolicy.d.ts.map +0 -1
  87. package/dist/NoOpPolicy.js +0 -8
  88. package/dist/NoOpPolicy.js.map +0 -1
  89. package/dist/OpenAIPolicy.d.ts +0 -80
  90. package/dist/OpenAIPolicy.d.ts.map +0 -1
  91. package/dist/OpenAIPolicy.js +0 -58
  92. package/dist/OpenAIPolicy.js.map +0 -1
  93. package/dist/PipePolicy.d.ts +0 -26
  94. package/dist/PipePolicy.d.ts.map +0 -1
  95. package/dist/PipePolicy.js +0 -35
  96. package/dist/PipePolicy.js.map +0 -1
  97. package/dist/PowPolicy.d.ts +0 -21
  98. package/dist/PowPolicy.d.ts.map +0 -1
  99. package/dist/PowPolicy.js +0 -32
  100. package/dist/PowPolicy.js.map +0 -1
  101. package/dist/PubkeyBanPolicy.d.ts +0 -15
  102. package/dist/PubkeyBanPolicy.d.ts.map +0 -1
  103. package/dist/PubkeyBanPolicy.js +0 -24
  104. package/dist/PubkeyBanPolicy.js.map +0 -1
  105. package/dist/ReadOnlyPolicy.d.ts +0 -6
  106. package/dist/ReadOnlyPolicy.d.ts.map +0 -1
  107. package/dist/ReadOnlyPolicy.js +0 -8
  108. package/dist/ReadOnlyPolicy.js.map +0 -1
  109. package/dist/RegexPolicy.d.ts +0 -15
  110. package/dist/RegexPolicy.d.ts.map +0 -1
  111. package/dist/RegexPolicy.js +0 -22
  112. package/dist/RegexPolicy.js.map +0 -1
  113. package/dist/ReplyBotPolicy.d.ts +0 -25
  114. package/dist/ReplyBotPolicy.d.ts.map +0 -1
  115. package/dist/ReplyBotPolicy.js +0 -41
  116. package/dist/ReplyBotPolicy.js.map +0 -1
  117. package/dist/SizePolicy.d.ts +0 -23
  118. package/dist/SizePolicy.d.ts.map +0 -1
  119. package/dist/SizePolicy.js +0 -27
  120. package/dist/SizePolicy.js.map +0 -1
  121. package/dist/WhitelistPolicy.d.ts +0 -16
  122. package/dist/WhitelistPolicy.d.ts.map +0 -1
  123. package/dist/WhitelistPolicy.js +0 -31
  124. package/dist/WhitelistPolicy.js.map +0 -1
  125. package/dist/WoTPolicy.d.ts +0 -26
  126. package/dist/WoTPolicy.d.ts.map +0 -1
  127. package/dist/WoTPolicy.js +0 -38
  128. package/dist/WoTPolicy.js.map +0 -1
  129. package/dist/mod.d.ts +0 -21
  130. package/dist/mod.d.ts.map +0 -1
  131. package/dist/mod.js +0 -21
  132. package/dist/mod.js.map +0 -1
  133. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,25 +0,0 @@
1
- /**
2
- * Reject events containing any of the banned hashtags.
3
- *
4
- * @example
5
- * ```ts
6
- * // Reject events with banned hashtags.
7
- * HashtagPolicy(['nsfw']);
8
- * ```
9
- */
10
- export class HashtagPolicy {
11
- hashtags;
12
- constructor(hashtags) {
13
- this.hashtags = hashtags;
14
- }
15
- // deno-lint-ignore require-await
16
- async call({ id, tags }) {
17
- for (const [name, value] of tags) {
18
- if (name === 't' && this.hashtags.includes(value.toLowerCase())) {
19
- return ['OK', id, false, 'blocked: contains a banned hashtag'];
20
- }
21
- }
22
- return ['OK', id, true, ''];
23
- }
24
- }
25
- //# sourceMappingURL=HashtagPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HashtagPolicy.js","sourceRoot":"","sources":["../HashtagPolicy.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACJ;IAApB,YAAoB,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAE1C,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAc;QACjC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAChE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,oCAAoC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -1,14 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /** Policy options for `HellthreadPolicy`. */
3
- interface HellthreadPolicyOpts {
4
- /** Total number of "p" tags a kind 1 note may have before it's rejected. Default: `100` */
5
- limit?: number;
6
- }
7
- /** Basic policy to demonstrate how policies work. Accepts all events. */
8
- export declare class HellthreadPolicy implements NPolicy {
9
- private opts;
10
- constructor(opts?: HellthreadPolicyOpts);
11
- call({ id, kind, tags }: NostrEvent): Promise<NostrRelayOK>;
12
- }
13
- export {};
14
- //# sourceMappingURL=HellthreadPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HellthreadPolicy.d.ts","sourceRoot":"","sources":["../HellthreadPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE,6CAA6C;AAC7C,UAAU,oBAAoB;IAC5B,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yEAAyE;AACzE,qBAAa,gBAAiB,YAAW,OAAO;IAClC,OAAO,CAAC,IAAI;gBAAJ,IAAI,GAAE,oBAAyB;IAG7C,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAalE"}
@@ -1,19 +0,0 @@
1
- /** Basic policy to demonstrate how policies work. Accepts all events. */
2
- export class HellthreadPolicy {
3
- opts;
4
- constructor(opts = {}) {
5
- this.opts = opts;
6
- }
7
- // deno-lint-ignore require-await
8
- async call({ id, kind, tags }) {
9
- const { limit = 100 } = this.opts;
10
- if (kind === 1) {
11
- const p = tags.filter((tag) => tag[0] === 'p');
12
- if (p.length > limit) {
13
- return ['OK', id, false, `blocked: rejected due to ${p.length} "p" tags (${limit} is the limit).`];
14
- }
15
- }
16
- return ['OK', id, true, ''];
17
- }
18
- }
19
- //# sourceMappingURL=HellthreadPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HellthreadPolicy.js","sourceRoot":"","sources":["../HellthreadPolicy.ts"],"names":[],"mappings":"AAQA,yEAAyE;AACzE,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,OAA6B,EAAE;QAA/B,SAAI,GAAJ,IAAI,CAA2B;IAAG,CAAC;IAEvD,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAc;QACvC,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAElC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAE/C,IAAI,CAAC,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,4BAA4B,CAAC,CAAC,MAAM,cAAc,KAAK,iBAAiB,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -1,9 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /** Rejects if the policy passes, passes if the policy rejects. */
3
- export declare class InvertPolicy implements NPolicy {
4
- private policy;
5
- private reason;
6
- constructor(policy: NPolicy, reason: string);
7
- call(event: NostrEvent): Promise<NostrRelayOK>;
8
- }
9
- //# sourceMappingURL=InvertPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InvertPolicy.d.ts","sourceRoot":"","sources":["../InvertPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE,kEAAkE;AAClE,qBAAa,YAAa,YAAW,OAAO;IAC9B,OAAO,CAAC,MAAM;IAAW,OAAO,CAAC,MAAM;gBAA/B,MAAM,EAAE,OAAO,EAAU,MAAM,EAAE,MAAM;IAErD,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAUrD"}
@@ -1,20 +0,0 @@
1
- /** Rejects if the policy passes, passes if the policy rejects. */
2
- export class InvertPolicy {
3
- policy;
4
- reason;
5
- constructor(policy, reason) {
6
- this.policy = policy;
7
- this.reason = reason;
8
- }
9
- async call(event) {
10
- const result = await this.policy.call(event);
11
- const ok = result[2];
12
- if (ok) {
13
- return ['OK', event.id, false, this.reason];
14
- }
15
- else {
16
- return ['OK', event.id, true, ''];
17
- }
18
- }
19
- }
20
- //# sourceMappingURL=InvertPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InvertPolicy.js","sourceRoot":"","sources":["../InvertPolicy.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,MAAM,OAAO,YAAY;IACH;IAAyB;IAA7C,YAAoB,MAAe,EAAU,MAAc;QAAvC,WAAM,GAAN,MAAM,CAAS;QAAU,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/D,KAAK,CAAC,IAAI,CAAC,KAAiB;QAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF"}
@@ -1,16 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /**
3
- * Reject events containing any of the strings in its content.
4
- *
5
- * @example
6
- * ```ts
7
- * // Reject events with bad words.
8
- * KeywordPolicy(['moo', 'oink', 'honk']);
9
- * ```
10
- */
11
- export declare class KeywordPolicy implements NPolicy {
12
- private words;
13
- constructor(words: Iterable<string>);
14
- call({ id, content }: NostrEvent): Promise<NostrRelayOK>;
15
- }
16
- //# sourceMappingURL=KeywordPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KeywordPolicy.d.ts","sourceRoot":"","sources":["../KeywordPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;;;;GAQG;AACH,qBAAa,aAAc,YAAW,OAAO;IAC/B,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC;IAGrC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAS/D"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Reject events containing any of the strings in its content.
3
- *
4
- * @example
5
- * ```ts
6
- * // Reject events with bad words.
7
- * KeywordPolicy(['moo', 'oink', 'honk']);
8
- * ```
9
- */
10
- export class KeywordPolicy {
11
- words;
12
- constructor(words) {
13
- this.words = words;
14
- }
15
- // deno-lint-ignore require-await
16
- async call({ id, content }) {
17
- for (const word of this.words) {
18
- if (content.toLowerCase().includes(word.toLowerCase())) {
19
- return ['OK', id, false, 'blocked: contains a banned word or phrase'];
20
- }
21
- }
22
- return ['OK', id, true, ''];
23
- }
24
- }
25
- //# sourceMappingURL=KeywordPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KeywordPolicy.js","sourceRoot":"","sources":["../KeywordPolicy.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACJ;IAApB,YAAoB,KAAuB;QAAvB,UAAK,GAAL,KAAK,CAAkB;IAAG,CAAC;IAE/C,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAc;QACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBACvD,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,2CAA2C,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -1,6 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /** Basic policy to demonstrate how policies work. Accepts all events. */
3
- export declare class NoOpPolicy implements NPolicy {
4
- call(event: NostrEvent): Promise<NostrRelayOK>;
5
- }
6
- //# sourceMappingURL=NoOpPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NoOpPolicy.d.ts","sourceRoot":"","sources":["../NoOpPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE,yEAAyE;AACzE,qBAAa,UAAW,YAAW,OAAO;IAElC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAGrD"}
@@ -1,8 +0,0 @@
1
- /** Basic policy to demonstrate how policies work. Accepts all events. */
2
- export class NoOpPolicy {
3
- // deno-lint-ignore require-await
4
- async call(event) {
5
- return ['OK', event.id, true, ''];
6
- }
7
- }
8
- //# sourceMappingURL=NoOpPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NoOpPolicy.js","sourceRoot":"","sources":["../NoOpPolicy.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,OAAO,UAAU;IACrB,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,KAAiB;QAC1B,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -1,80 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /**
3
- * OpenAI moderation result.
4
- *
5
- * https://platform.openai.com/docs/api-reference/moderations/create
6
- */
7
- interface OpenAIModerationResult {
8
- id: string;
9
- model: string;
10
- results: {
11
- categories: {
12
- 'hate': boolean;
13
- 'hate/threatening': boolean;
14
- 'self-harm': boolean;
15
- 'sexual': boolean;
16
- 'sexual/minors': boolean;
17
- 'violence': boolean;
18
- 'violence/graphic': boolean;
19
- };
20
- category_scores: {
21
- 'hate': number;
22
- 'hate/threatening': number;
23
- 'self-harm': number;
24
- 'sexual': number;
25
- 'sexual/minors': number;
26
- 'violence': number;
27
- 'violence/graphic': number;
28
- };
29
- flagged: boolean;
30
- }[];
31
- }
32
- /** Policy options for `OpenAIPolicy`. */
33
- interface OpenAIPolicyOpts {
34
- /**
35
- * Callback for fine control over the policy. It contains the event and the OpenAI moderation data.
36
- * Implementations should return `true` to **reject** the content, and `false` to accept.
37
- */
38
- handler?(event: NostrEvent, result: OpenAIModerationResult): boolean;
39
- /** Custom endpoint to use instead of `https://api.openai.com/v1/moderations`. */
40
- endpoint?: string;
41
- /** Custom fetch implementation. */
42
- fetch?: typeof fetch;
43
- /** Which event kinds to apply the policy to. */
44
- kinds?: number[];
45
- /** OpenAI API key for making the requests. */
46
- apiKey: string;
47
- }
48
- /**
49
- * Passes event content to OpenAI and then rejects flagged events.
50
- *
51
- * By default, this policy will reject kind 1 events that OpenAI flags.
52
- * It's possible to pass a custom handler for more control. An OpenAI API key is required.
53
- *
54
- * ```ts
55
- * // Default handler. It's so strict it's suitable for children.
56
- * new OpenAIPolicy({ apiKey: Deno.env.get('OPENAI_API_KEY') });
57
- *
58
- * // With a custom handler.
59
- * new OpenAIPolicy({
60
- * apiKey: Deno.env.get('OPENAI_API_KEY'),
61
- * handler(event, data) {
62
- * // Loop each result.
63
- * return data.results.some((result) => {
64
- * if (result.flagged) {
65
- * const { sexual, violence } = result.categories;
66
- * // Reject only events flagged as sexual and violent.
67
- * return sexual && violence;
68
- * }
69
- * });
70
- * },
71
- * });
72
- * ```
73
- */
74
- export declare class OpenAIPolicy implements NPolicy {
75
- private opts;
76
- constructor(opts: OpenAIPolicyOpts);
77
- call(event: NostrEvent, signal?: AbortSignal): Promise<NostrRelayOK>;
78
- }
79
- export {};
80
- //# sourceMappingURL=OpenAIPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenAIPolicy.d.ts","sourceRoot":"","sources":["../OpenAIPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;GAIG;AACH,UAAU,sBAAsB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,UAAU,EAAE;YACV,MAAM,EAAE,OAAO,CAAC;YAChB,kBAAkB,EAAE,OAAO,CAAC;YAC5B,WAAW,EAAE,OAAO,CAAC;YACrB,QAAQ,EAAE,OAAO,CAAC;YAClB,eAAe,EAAE,OAAO,CAAC;YACzB,UAAU,EAAE,OAAO,CAAC;YACpB,kBAAkB,EAAE,OAAO,CAAC;SAC7B,CAAC;QACF,eAAe,EAAE;YACf,MAAM,EAAE,MAAM,CAAC;YACf,kBAAkB,EAAE,MAAM,CAAC;YAC3B,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,eAAe,EAAE,MAAM,CAAC;YACxB,UAAU,EAAE,MAAM,CAAC;YACnB,kBAAkB,EAAE,MAAM,CAAC;SAC5B,CAAC;QACF,OAAO,EAAE,OAAO,CAAC;KAClB,EAAE,CAAC;CACL;AAED,yCAAyC;AACzC,UAAU,gBAAgB;IACxB;;;OAGG;IACH,OAAO,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC;IACrE,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,YAAa,YAAW,OAAO;IAC9B,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,gBAAgB;IAEpC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAiC3E"}
@@ -1,58 +0,0 @@
1
- /**
2
- * Passes event content to OpenAI and then rejects flagged events.
3
- *
4
- * By default, this policy will reject kind 1 events that OpenAI flags.
5
- * It's possible to pass a custom handler for more control. An OpenAI API key is required.
6
- *
7
- * ```ts
8
- * // Default handler. It's so strict it's suitable for children.
9
- * new OpenAIPolicy({ apiKey: Deno.env.get('OPENAI_API_KEY') });
10
- *
11
- * // With a custom handler.
12
- * new OpenAIPolicy({
13
- * apiKey: Deno.env.get('OPENAI_API_KEY'),
14
- * handler(event, data) {
15
- * // Loop each result.
16
- * return data.results.some((result) => {
17
- * if (result.flagged) {
18
- * const { sexual, violence } = result.categories;
19
- * // Reject only events flagged as sexual and violent.
20
- * return sexual && violence;
21
- * }
22
- * });
23
- * },
24
- * });
25
- * ```
26
- */
27
- export class OpenAIPolicy {
28
- opts;
29
- constructor(opts) {
30
- this.opts = opts;
31
- }
32
- async call(event, signal) {
33
- const { handler = (_, { results }) => results.some((r) => r.flagged), endpoint = 'https://api.openai.com/v1/moderations', kinds = [1, 30023], apiKey, } = this.opts;
34
- if (kinds.includes(event.kind)) {
35
- try {
36
- const resp = await fetch(endpoint, {
37
- headers: {
38
- 'Content-Type': 'application/json',
39
- 'Authorization': `Bearer ${apiKey}`,
40
- },
41
- body: JSON.stringify({
42
- input: event.content,
43
- }),
44
- signal,
45
- });
46
- const result = await resp.json();
47
- if (handler(event, result)) {
48
- return ['OK', event.id, false, 'blocked: content flagged by AI'];
49
- }
50
- }
51
- catch (_) {
52
- return ['OK', event.id, false, 'blocked: error analyzing content'];
53
- }
54
- }
55
- return ['OK', event.id, true, ''];
56
- }
57
- }
58
- //# sourceMappingURL=OpenAIPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenAIPolicy.js","sourceRoot":"","sources":["../OpenAIPolicy.ts"],"names":[],"mappings":"AAkDA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,IAAsB;QAAtB,SAAI,GAAJ,IAAI,CAAkB;IAAG,CAAC;IAE9C,KAAK,CAAC,IAAI,CAAC,KAAiB,EAAE,MAAoB;QAChD,MAAM,EACJ,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAC5D,QAAQ,GAAG,uCAAuC,EAClD,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAClB,MAAM,GACP,GAAG,IAAI,CAAC,IAAI,CAAC;QAEd,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;oBACjC,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,eAAe,EAAE,UAAU,MAAM,EAAE;qBACpC;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,KAAK,EAAE,KAAK,CAAC,OAAO;qBACrB,CAAC;oBACF,MAAM;iBACP,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEjC,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,gCAAgC,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,kCAAkC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -1,26 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /**
3
- * Processes events through multiple policies.
4
- *
5
- * If any policy rejects, the pipeline will stop and return the rejected message.
6
- *
7
- * ```ts
8
- * const policy = new PipePolicy([
9
- * new NoOpPolicy(),
10
- * new FiltersPolicy([{ kinds: [0, 1, 3, 5, 7, 1984, 9734, 9735, 10002] }]),
11
- * new KeywordPolicy(['https://t.me/']),
12
- * new RegexPolicy(/(🟠|🔥|😳)ChtaGPT/i),
13
- * new PubkeyBanPolicy(['e810fafa1e89cdf80cced8e013938e87e21b699b24c8570537be92aec4b12c18']),
14
- * new HellthreadPolicy({ limit: 100 }),
15
- * new AntiDuplicationPolicy({ kv: await Deno.openKv(), expireIn: 60000, minLength: 50 }),
16
- * ]);
17
- *
18
- * const [_, eventId, ok, reason] = await policy.call(event);
19
- * ```
20
- */
21
- export declare class PipePolicy implements NPolicy {
22
- private policies;
23
- constructor(policies: NPolicy[]);
24
- call(event: NostrEvent, signal?: AbortSignal): Promise<NostrRelayOK>;
25
- }
26
- //# sourceMappingURL=PipePolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PipePolicy.d.ts","sourceRoot":"","sources":["../PipePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,YAAW,OAAO;IAC5B,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,OAAO,EAAE;IAEjC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAW3E"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Processes events through multiple policies.
3
- *
4
- * If any policy rejects, the pipeline will stop and return the rejected message.
5
- *
6
- * ```ts
7
- * const policy = new PipePolicy([
8
- * new NoOpPolicy(),
9
- * new FiltersPolicy([{ kinds: [0, 1, 3, 5, 7, 1984, 9734, 9735, 10002] }]),
10
- * new KeywordPolicy(['https://t.me/']),
11
- * new RegexPolicy(/(🟠|🔥|😳)ChtaGPT/i),
12
- * new PubkeyBanPolicy(['e810fafa1e89cdf80cced8e013938e87e21b699b24c8570537be92aec4b12c18']),
13
- * new HellthreadPolicy({ limit: 100 }),
14
- * new AntiDuplicationPolicy({ kv: await Deno.openKv(), expireIn: 60000, minLength: 50 }),
15
- * ]);
16
- *
17
- * const [_, eventId, ok, reason] = await policy.call(event);
18
- * ```
19
- */
20
- export class PipePolicy {
21
- policies;
22
- constructor(policies) {
23
- this.policies = policies;
24
- }
25
- async call(event, signal) {
26
- for (const policy of this.policies) {
27
- const [_, eventId, ok, reason] = await policy.call(event, signal);
28
- if (!ok) {
29
- return [_, eventId, ok, reason];
30
- }
31
- }
32
- return ['OK', event.id, true, ''];
33
- }
34
- }
35
- //# sourceMappingURL=PipePolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PipePolicy.js","sourceRoot":"","sources":["../PipePolicy.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;IAAG,CAAC;IAE3C,KAAK,CAAC,IAAI,CAAC,KAAiB,EAAE,MAAoB;QAChD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAElE,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -1,21 +0,0 @@
1
- import { NostrEvent, NostrRelayInfo, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /** Policy options for `PowPolicy`. */
3
- interface PowPolicyOpts {
4
- /** Events will be rejected if their `id` does not contain at least this many leading 0 bits. Default: `1` */
5
- difficulty?: number;
6
- }
7
- /**
8
- * Reject events which don't meet Proof-of-Work ([NIP-13](https://github.com/nostr-protocol/nips/blob/master/13.md)) criteria.
9
- *
10
- * ```ts
11
- * new PowPolicy({ difficulty: 20 });
12
- * ```
13
- */
14
- export declare class PowPolicy implements NPolicy {
15
- private opts;
16
- constructor(opts?: PowPolicyOpts);
17
- call({ id, tags }: NostrEvent): Promise<NostrRelayOK>;
18
- get info(): NostrRelayInfo;
19
- }
20
- export {};
21
- //# sourceMappingURL=PowPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PowPolicy.d.ts","sourceRoot":"","sources":["../PowPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGpF,sCAAsC;AACtC,UAAU,aAAa;IACrB,6GAA6G;IAC7G,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,SAAU,YAAW,OAAO;IAC3B,OAAO,CAAC,IAAI;gBAAJ,IAAI,GAAE,aAAkB;IAGtC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAa3D,IAAI,IAAI,IAAI,cAAc,CAMzB;CACF"}
package/dist/PowPolicy.js DELETED
@@ -1,32 +0,0 @@
1
- import { nip13 } from 'nostr-tools';
2
- /**
3
- * Reject events which don't meet Proof-of-Work ([NIP-13](https://github.com/nostr-protocol/nips/blob/master/13.md)) criteria.
4
- *
5
- * ```ts
6
- * new PowPolicy({ difficulty: 20 });
7
- * ```
8
- */
9
- export class PowPolicy {
10
- opts;
11
- constructor(opts = {}) {
12
- this.opts = opts;
13
- }
14
- // deno-lint-ignore require-await
15
- async call({ id, tags }) {
16
- const { difficulty = 1 } = this.opts;
17
- const pow = nip13.getPow(id);
18
- const nonce = tags.find(([name]) => name === 'nonce');
19
- if (pow >= difficulty && nonce && Number(nonce[2]) >= difficulty) {
20
- return ['OK', id, true, ''];
21
- }
22
- return ['OK', id, false, `pow: insufficient proof-of-work (difficulty ${difficulty})`];
23
- }
24
- get info() {
25
- return {
26
- limitation: {
27
- min_pow_difficulty: this.opts.difficulty,
28
- },
29
- };
30
- }
31
- }
32
- //# sourceMappingURL=PowPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PowPolicy.js","sourceRoot":"","sources":["../PowPolicy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQpC;;;;;;GAMG;AACH,MAAM,OAAO,SAAS;IACA;IAApB,YAAoB,OAAsB,EAAE;QAAxB,SAAI,GAAJ,IAAI,CAAoB;IAAG,CAAC;IAEhD,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAc;QACjC,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAErC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAEtD,IAAI,GAAG,IAAI,UAAU,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;YACjE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,+CAA+C,UAAU,GAAG,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,IAAI;QACN,OAAO;YACL,UAAU,EAAE;gBACV,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;aACzC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /**
3
- * Ban events from individual pubkeys.
4
- *
5
- * ```ts
6
- * // Ban a specific pubkey.
7
- * new PubkeyBanPolicy(['e810fafa1e89cdf80cced8e013938e87e21b699b24c8570537be92aec4b12c18']);
8
- * ```
9
- */
10
- export declare class PubkeyBanPolicy implements NPolicy {
11
- private pubkeys;
12
- constructor(pubkeys: Iterable<string>);
13
- call({ id, pubkey }: NostrEvent): Promise<NostrRelayOK>;
14
- }
15
- //# sourceMappingURL=PubkeyBanPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PubkeyBanPolicy.d.ts","sourceRoot":"","sources":["../PubkeyBanPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;;;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;CAS9D"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Ban events from individual pubkeys.
3
- *
4
- * ```ts
5
- * // Ban a specific pubkey.
6
- * new PubkeyBanPolicy(['e810fafa1e89cdf80cced8e013938e87e21b699b24c8570537be92aec4b12c18']);
7
- * ```
8
- */
9
- export class PubkeyBanPolicy {
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, false, 'blocked: pubkey is banned'];
19
- }
20
- }
21
- return ['OK', id, true, ''];
22
- }
23
- }
24
- //# sourceMappingURL=PubkeyBanPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PubkeyBanPolicy.js","sourceRoot":"","sources":["../PubkeyBanPolicy.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;IAEjD,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAc;QACnC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -1,6 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /** This policy rejects all messages. */
3
- export declare class ReadOnlyPolicy implements NPolicy {
4
- call(event: NostrEvent): Promise<NostrRelayOK>;
5
- }
6
- //# sourceMappingURL=ReadOnlyPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReadOnlyPolicy.d.ts","sourceRoot":"","sources":["../ReadOnlyPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE,wCAAwC;AACxC,qBAAa,cAAe,YAAW,OAAO;IAEtC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAGrD"}
@@ -1,8 +0,0 @@
1
- /** This policy rejects all messages. */
2
- export class ReadOnlyPolicy {
3
- // deno-lint-ignore require-await
4
- async call(event) {
5
- return ['OK', event.id, false, 'blocked: the relay is read-only'];
6
- }
7
- }
8
- //# sourceMappingURL=ReadOnlyPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReadOnlyPolicy.js","sourceRoot":"","sources":["../ReadOnlyPolicy.ts"],"names":[],"mappings":"AAEA,wCAAwC;AACxC,MAAM,OAAO,cAAc;IACzB,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,KAAiB;QAC1B,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,iCAAiC,CAAC,CAAC;IACpE,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
- /**
3
- * Reject events whose content matches the regex.
4
- *
5
- * ```ts
6
- * // Ban events matching a regex.
7
- * new RegexPolicy(/(🟠|🔥|😳)ChtaGPT/i);
8
- * ```
9
- */
10
- export declare class RegexPolicy implements NPolicy {
11
- private regex;
12
- constructor(regex: RegExp);
13
- call({ id, content }: NostrEvent): Promise<NostrRelayOK>;
14
- }
15
- //# sourceMappingURL=RegexPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RegexPolicy.d.ts","sourceRoot":"","sources":["../RegexPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;;;GAOG;AACH,qBAAa,WAAY,YAAW,OAAO;IAC7B,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IAG3B,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAO/D"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Reject events whose content matches the regex.
3
- *
4
- * ```ts
5
- * // Ban events matching a regex.
6
- * new RegexPolicy(/(🟠|🔥|😳)ChtaGPT/i);
7
- * ```
8
- */
9
- export class RegexPolicy {
10
- regex;
11
- constructor(regex) {
12
- this.regex = regex;
13
- }
14
- // deno-lint-ignore require-await
15
- async call({ id, content }) {
16
- if (this.regex.test(content)) {
17
- return ['OK', id, false, 'blocked: text matches a banned expression'];
18
- }
19
- return ['OK', id, true, ''];
20
- }
21
- }
22
- //# sourceMappingURL=RegexPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RegexPolicy.js","sourceRoot":"","sources":["../RegexPolicy.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAErC,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAc;QACpC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,2CAA2C,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -1,25 +0,0 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy, NStore } from '@nostrify/types';
2
- /** Options for the ReplyBotPolicy. */
3
- export interface ReplyBotPolicyOpts {
4
- /** The store to use for fetching events. */
5
- store: NStore;
6
- /** The minimum time in seconds between two posts. */
7
- threshold?: number;
8
- /** The kinds of events to apply the policy to. */
9
- kinds?: number[];
10
- }
11
- /** Block events that reply too quickly to another event. */
12
- export declare class ReplyBotPolicy implements NPolicy {
13
- private opts;
14
- constructor(opts: ReplyBotPolicyOpts);
15
- call(event: NostrEvent, signal?: AbortSignal): Promise<NostrRelayOK>;
16
- /** Tag is a NIP-10 root tag. */
17
- private static isRootTag;
18
- /** Tag is a NIP-10 reply tag. */
19
- private static isReplyTag;
20
- /** Tag is an "e" tag without a NIP-10 marker. */
21
- private static isLegacyReplyTag;
22
- /** Get the "e" tag for the event being replied to, first according to the NIPs then falling back to the legacy way. */
23
- private static findReplyTag;
24
- }
25
- //# sourceMappingURL=ReplyBotPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReplyBotPolicy.d.ts","sourceRoot":"","sources":["../ReplyBotPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE5E,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,4DAA4D;AAC5D,qBAAa,cAAe,YAAW,OAAO;IAChC,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,kBAAkB;IAEtC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAuB1E,gCAAgC;IAChC,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,iCAAiC;IACjC,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,iDAAiD;IACjD,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B,uHAAuH;IACvH,OAAO,CAAC,MAAM,CAAC,YAAY;CAG5B"}