@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,25 +1,18 @@
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, ''];
1
+ class HashtagPolicy {
2
+ hashtags;
3
+ constructor(hashtags) {
4
+ this.hashtags = hashtags;
5
+ }
6
+ // deno-lint-ignore require-await
7
+ async call({ id, tags }) {
8
+ for (const [name, value] of tags) {
9
+ if (name === "t" && this.hashtags.includes(value.toLowerCase())) {
10
+ return ["OK", id, false, "blocked: contains a banned hashtag"];
11
+ }
23
12
  }
13
+ return ["OK", id, true, ""];
14
+ }
24
15
  }
25
- //# sourceMappingURL=HashtagPolicy.js.map
16
+ export {
17
+ HashtagPolicy
18
+ };
@@ -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 `HellthreadPolicy`. */
3
3
  interface HellthreadPolicyOpts {
4
4
  /** Total number of "p" tags a kind 1 note may have before it's rejected. Default: `100` */
@@ -1 +1 @@
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
+ {"version":3,"file":"HellthreadPolicy.d.ts","sourceRoot":"","sources":["../HellthreadPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE,6CAA6C;AAC7C,UAAU,oBAAoB;IAC5B,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yEAAyE;AACzE,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,OAAO,CAAC,IAAI,CAAuB;gBACvB,IAAI,GAAE,oBAAyB;IAKrC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAalE"}
@@ -1,19 +1,20 @@
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, ''];
1
+ class HellthreadPolicy {
2
+ opts;
3
+ constructor(opts = {}) {
4
+ this.opts = opts;
5
+ }
6
+ // deno-lint-ignore require-await
7
+ async call({ id, kind, tags }) {
8
+ const { limit = 100 } = this.opts;
9
+ if (kind === 1) {
10
+ const p = tags.filter((tag) => tag[0] === "p");
11
+ if (p.length > limit) {
12
+ return ["OK", id, false, `blocked: rejected due to ${p.length} "p" tags (${limit} is the limit).`];
13
+ }
17
14
  }
15
+ return ["OK", id, true, ""];
16
+ }
18
17
  }
19
- //# sourceMappingURL=HellthreadPolicy.js.map
18
+ export {
19
+ HellthreadPolicy
20
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /** Rejects if the policy passes, passes if the policy rejects. */
3
3
  export declare class InvertPolicy implements NPolicy {
4
4
  private policy;
@@ -1 +1 @@
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
+ {"version":3,"file":"InvertPolicy.d.ts","sourceRoot":"","sources":["../InvertPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE,kEAAkE;AAClE,qBAAa,YAAa,YAAW,OAAO;IAC1C,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAKrC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAUrD"}
@@ -1,20 +1,20 @@
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
- }
1
+ class InvertPolicy {
2
+ policy;
3
+ reason;
4
+ constructor(policy, reason) {
5
+ this.policy = policy;
6
+ this.reason = reason;
7
+ }
8
+ async call(event) {
9
+ const result = await this.policy.call(event);
10
+ const ok = result[2];
11
+ if (ok) {
12
+ return ["OK", event.id, false, this.reason];
13
+ } else {
14
+ return ["OK", event.id, true, ""];
18
15
  }
16
+ }
19
17
  }
20
- //# sourceMappingURL=InvertPolicy.js.map
18
+ export {
19
+ InvertPolicy
20
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /**
3
3
  * Reject events containing any of the strings in its content.
4
4
  *
@@ -1 +1 @@
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
+ {"version":3,"file":"KeywordPolicy.d.ts","sourceRoot":"","sources":["../KeywordPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;;;;;;;GAQG;AACH,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO,CAAC,KAAK,CAAmB;gBACpB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC;IAK7B,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAS/D"}
@@ -1,25 +1,18 @@
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, ''];
1
+ class KeywordPolicy {
2
+ words;
3
+ constructor(words) {
4
+ this.words = words;
5
+ }
6
+ // deno-lint-ignore require-await
7
+ async call({ id, content }) {
8
+ for (const word of this.words) {
9
+ if (content.toLowerCase().includes(word.toLowerCase())) {
10
+ return ["OK", id, false, "blocked: contains a banned word or phrase"];
11
+ }
23
12
  }
13
+ return ["OK", id, true, ""];
14
+ }
24
15
  }
25
- //# sourceMappingURL=KeywordPolicy.js.map
16
+ export {
17
+ KeywordPolicy
18
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /** Basic policy to demonstrate how policies work. Accepts all events. */
3
3
  export declare class NoOpPolicy implements NPolicy {
4
4
  call(event: NostrEvent): Promise<NostrRelayOK>;
@@ -1 +1 @@
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
+ {"version":3,"file":"NoOpPolicy.d.ts","sourceRoot":"","sources":["../NoOpPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE,yEAAyE;AACzE,qBAAa,UAAW,YAAW,OAAO;IAElC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAGrD"}
@@ -1,8 +1,9 @@
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
- }
1
+ class NoOpPolicy {
2
+ // deno-lint-ignore require-await
3
+ async call(event) {
4
+ return ["OK", event.id, true, ""];
5
+ }
7
6
  }
8
- //# sourceMappingURL=NoOpPolicy.js.map
7
+ export {
8
+ NoOpPolicy
9
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /**
3
3
  * OpenAI moderation result.
4
4
  *
@@ -1 +1 @@
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
+ {"version":3,"file":"OpenAIPolicy.d.ts","sourceRoot":"","sources":["../OpenAIPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;;;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;IAC1C,OAAO,CAAC,IAAI,CAAmB;gBACnB,IAAI,EAAE,gBAAgB;IAI5B,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAiC3E"}
@@ -1,58 +1,38 @@
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
- }
1
+ class OpenAIPolicy {
2
+ opts;
3
+ constructor(opts) {
4
+ this.opts = opts;
5
+ }
6
+ async call(event, signal) {
7
+ const {
8
+ handler = (_, { results }) => results.some((r) => r.flagged),
9
+ endpoint = "https://api.openai.com/v1/moderations",
10
+ kinds = [1, 30023],
11
+ apiKey
12
+ } = this.opts;
13
+ if (kinds.includes(event.kind)) {
14
+ try {
15
+ const resp = await fetch(endpoint, {
16
+ headers: {
17
+ "Content-Type": "application/json",
18
+ "Authorization": `Bearer ${apiKey}`
19
+ },
20
+ body: JSON.stringify({
21
+ input: event.content
22
+ }),
23
+ signal
24
+ });
25
+ const result = await resp.json();
26
+ if (handler(event, result)) {
27
+ return ["OK", event.id, false, "blocked: content flagged by AI"];
54
28
  }
55
- return ['OK', event.id, true, ''];
29
+ } catch (_) {
30
+ return ["OK", event.id, false, "blocked: error analyzing content"];
31
+ }
56
32
  }
33
+ return ["OK", event.id, true, ""];
34
+ }
57
35
  }
58
- //# sourceMappingURL=OpenAIPolicy.js.map
36
+ export {
37
+ OpenAIPolicy
38
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /**
3
3
  * Processes events through multiple policies.
4
4
  *
@@ -1 +1 @@
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
+ {"version":3,"file":"PipePolicy.d.ts","sourceRoot":"","sources":["../PipePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,YAAW,OAAO;IACxC,OAAO,CAAC,QAAQ,CAAiB;gBACrB,QAAQ,EAAE,OAAO,EAAE;IAIzB,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAW3E"}
@@ -1,35 +1,18 @@
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, ''];
1
+ class PipePolicy {
2
+ policies = [];
3
+ constructor(policies) {
4
+ this.policies = policies;
5
+ }
6
+ async call(event, signal) {
7
+ for (const policy of this.policies) {
8
+ const [_, eventId, ok, reason] = await policy.call(event, signal);
9
+ if (!ok) {
10
+ return [_, eventId, ok, reason];
11
+ }
33
12
  }
13
+ return ["OK", event.id, true, ""];
14
+ }
34
15
  }
35
- //# sourceMappingURL=PipePolicy.js.map
16
+ export {
17
+ PipePolicy
18
+ };
@@ -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
  /** Policy options for `PowPolicy`. */
3
3
  interface PowPolicyOpts {
4
4
  /** Events will be rejected if their `id` does not contain at least this many leading 0 bits. Default: `1` */
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"PowPolicy.d.ts","sourceRoot":"","sources":["../PowPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGzF,sCAAsC;AACtC,UAAU,aAAa;IACrB,6GAA6G;IAC7G,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,SAAU,YAAW,OAAO;IACvC,OAAO,CAAC,IAAI,CAAgB;gBAChB,IAAI,GAAE,aAAkB;IAK9B,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 CHANGED
@@ -1,32 +1,27 @@
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
- };
1
+ import { nip13 } from "nostr-tools";
2
+ class PowPolicy {
3
+ opts;
4
+ constructor(opts = {}) {
5
+ this.opts = opts;
6
+ }
7
+ // deno-lint-ignore require-await
8
+ async call({ id, tags }) {
9
+ const { difficulty = 1 } = this.opts;
10
+ const pow = nip13.getPow(id);
11
+ const nonce = tags.find(([name]) => name === "nonce");
12
+ if (pow >= difficulty && nonce && Number(nonce[2]) >= difficulty) {
13
+ return ["OK", id, true, ""];
30
14
  }
15
+ return ["OK", id, false, `pow: insufficient proof-of-work (difficulty ${difficulty})`];
16
+ }
17
+ get info() {
18
+ return {
19
+ limitation: {
20
+ min_pow_difficulty: this.opts.difficulty
21
+ }
22
+ };
23
+ }
31
24
  }
32
- //# sourceMappingURL=PowPolicy.js.map
25
+ export {
26
+ PowPolicy
27
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /**
3
3
  * Ban events from individual pubkeys.
4
4
  *
@@ -1 +1 @@
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
+ {"version":3,"file":"PubkeyBanPolicy.d.ts","sourceRoot":"","sources":["../PubkeyBanPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,OAAO;IAC7C,OAAO,CAAC,OAAO,CAAmB;gBACtB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;IAK/B,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAS9D"}
@@ -1,24 +1,18 @@
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, ''];
1
+ class PubkeyBanPolicy {
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, false, "blocked: pubkey is banned"];
11
+ }
22
12
  }
13
+ return ["OK", id, true, ""];
14
+ }
23
15
  }
24
- //# sourceMappingURL=PubkeyBanPolicy.js.map
16
+ export {
17
+ PubkeyBanPolicy
18
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /** This policy rejects all messages. */
3
3
  export declare class ReadOnlyPolicy implements NPolicy {
4
4
  call(event: NostrEvent): Promise<NostrRelayOK>;
@@ -1 +1 @@
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
+ {"version":3,"file":"ReadOnlyPolicy.d.ts","sourceRoot":"","sources":["../ReadOnlyPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE,wCAAwC;AACxC,qBAAa,cAAe,YAAW,OAAO;IAEtC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAGrD"}
@@ -1,8 +1,9 @@
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
- }
1
+ class ReadOnlyPolicy {
2
+ // deno-lint-ignore require-await
3
+ async call(event) {
4
+ return ["OK", event.id, false, "blocked: the relay is read-only"];
5
+ }
7
6
  }
8
- //# sourceMappingURL=ReadOnlyPolicy.js.map
7
+ export {
8
+ ReadOnlyPolicy
9
+ };
@@ -1,4 +1,4 @@
1
- import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
1
+ import type { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/types';
2
2
  /**
3
3
  * Reject events whose content matches the regex.
4
4
  *
@@ -1 +1 @@
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
+ {"version":3,"file":"RegexPolicy.d.ts","sourceRoot":"","sources":["../RegexPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;;;;;;GAOG;AACH,qBAAa,WAAY,YAAW,OAAO;IACzC,OAAO,CAAC,KAAK,CAAS;gBACV,KAAK,EAAE,MAAM;IAKnB,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAO/D"}
@@ -1,22 +1,16 @@
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, ''];
1
+ class RegexPolicy {
2
+ regex;
3
+ constructor(regex) {
4
+ this.regex = regex;
5
+ }
6
+ // deno-lint-ignore require-await
7
+ async call({ id, content }) {
8
+ if (this.regex.test(content)) {
9
+ return ["OK", id, false, "blocked: text matches a banned expression"];
20
10
  }
11
+ return ["OK", id, true, ""];
12
+ }
21
13
  }
22
- //# sourceMappingURL=RegexPolicy.js.map
14
+ export {
15
+ RegexPolicy
16
+ };
@@ -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 ReplyBotPolicy. */
3
3
  export interface ReplyBotPolicyOpts {
4
4
  /** The store to use for fetching events. */
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"ReplyBotPolicy.d.ts","sourceRoot":"","sources":["../ReplyBotPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEjF,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;IAC5C,OAAO,CAAC,IAAI,CAAqB;gBACrB,IAAI,EAAE,kBAAkB;IAI9B,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"}