@atproto/ozone 0.1.139 → 0.1.141

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 (106) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/api/moderation/emitEvent.d.ts.map +1 -1
  3. package/dist/api/moderation/emitEvent.js +3 -0
  4. package/dist/api/moderation/emitEvent.js.map +1 -1
  5. package/dist/api/report/createReport.d.ts.map +1 -1
  6. package/dist/api/report/createReport.js +7 -5
  7. package/dist/api/report/createReport.js.map +1 -1
  8. package/dist/api/util.d.ts +2 -3
  9. package/dist/api/util.d.ts.map +1 -1
  10. package/dist/api/util.js +7 -17
  11. package/dist/api/util.js.map +1 -1
  12. package/dist/config/config.d.ts +1 -0
  13. package/dist/config/config.d.ts.map +1 -1
  14. package/dist/config/config.js +1 -0
  15. package/dist/config/config.js.map +1 -1
  16. package/dist/config/env.d.ts +1 -0
  17. package/dist/config/env.d.ts.map +1 -1
  18. package/dist/config/env.js +1 -0
  19. package/dist/config/env.js.map +1 -1
  20. package/dist/context.d.ts +3 -0
  21. package/dist/context.d.ts.map +1 -1
  22. package/dist/context.js +6 -0
  23. package/dist/context.js.map +1 -1
  24. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts +5 -0
  25. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts.map +1 -0
  26. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.js +228 -0
  27. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.js.map +1 -0
  28. package/dist/db/migrations/index.d.ts +1 -0
  29. package/dist/db/migrations/index.d.ts.map +1 -1
  30. package/dist/db/migrations/index.js +2 -1
  31. package/dist/db/migrations/index.js.map +1 -1
  32. package/dist/lexicon/index.d.ts +60 -0
  33. package/dist/lexicon/index.d.ts.map +1 -1
  34. package/dist/lexicon/index.js +83 -1
  35. package/dist/lexicon/index.js.map +1 -1
  36. package/dist/lexicon/lexicons.d.ts +758 -16
  37. package/dist/lexicon/lexicons.d.ts.map +1 -1
  38. package/dist/lexicon/lexicons.js +485 -7
  39. package/dist/lexicon/lexicons.js.map +1 -1
  40. package/dist/lexicon/types/app/bsky/bookmark/createBookmark.d.ts +16 -0
  41. package/dist/lexicon/types/app/bsky/bookmark/createBookmark.d.ts.map +1 -0
  42. package/dist/lexicon/types/app/bsky/bookmark/createBookmark.js +7 -0
  43. package/dist/lexicon/types/app/bsky/bookmark/createBookmark.js.map +1 -0
  44. package/dist/lexicon/types/app/bsky/bookmark/defs.d.ts +25 -0
  45. package/dist/lexicon/types/app/bsky/bookmark/defs.d.ts.map +1 -0
  46. package/dist/lexicon/types/app/bsky/bookmark/defs.js +25 -0
  47. package/dist/lexicon/types/app/bsky/bookmark/defs.js.map +1 -0
  48. package/dist/lexicon/types/app/bsky/bookmark/deleteBookmark.d.ts +15 -0
  49. package/dist/lexicon/types/app/bsky/bookmark/deleteBookmark.d.ts.map +1 -0
  50. package/dist/lexicon/types/app/bsky/bookmark/deleteBookmark.js +7 -0
  51. package/dist/lexicon/types/app/bsky/bookmark/deleteBookmark.js.map +1 -0
  52. package/dist/lexicon/types/app/bsky/bookmark/getBookmarks.d.ts +24 -0
  53. package/dist/lexicon/types/app/bsky/bookmark/getBookmarks.d.ts.map +1 -0
  54. package/dist/lexicon/types/app/bsky/bookmark/getBookmarks.js +7 -0
  55. package/dist/lexicon/types/app/bsky/bookmark/getBookmarks.js.map +1 -0
  56. package/dist/lexicon/types/app/bsky/feed/defs.d.ts +2 -0
  57. package/dist/lexicon/types/app/bsky/feed/defs.d.ts.map +1 -1
  58. package/dist/lexicon/types/app/bsky/feed/defs.js.map +1 -1
  59. package/dist/lexicon/types/com/atproto/moderation/defs.d.ts +8 -8
  60. package/dist/lexicon/types/com/atproto/moderation/defs.d.ts.map +1 -1
  61. package/dist/lexicon/types/com/atproto/moderation/defs.js +7 -7
  62. package/dist/lexicon/types/com/atproto/moderation/defs.js.map +1 -1
  63. package/dist/lexicon/types/com/atproto/temp/dereferenceScope.d.ts +24 -0
  64. package/dist/lexicon/types/com/atproto/temp/dereferenceScope.d.ts.map +1 -0
  65. package/dist/lexicon/types/com/atproto/temp/dereferenceScope.js +7 -0
  66. package/dist/lexicon/types/com/atproto/temp/dereferenceScope.js.map +1 -0
  67. package/dist/lexicon/types/tools/ozone/report/defs.d.ts +92 -0
  68. package/dist/lexicon/types/tools/ozone/report/defs.d.ts.map +1 -0
  69. package/dist/lexicon/types/tools/ozone/report/defs.js +98 -0
  70. package/dist/lexicon/types/tools/ozone/report/defs.js.map +1 -0
  71. package/dist/mod-service/profile.d.ts +15 -0
  72. package/dist/mod-service/profile.d.ts.map +1 -0
  73. package/dist/mod-service/profile.js +135 -0
  74. package/dist/mod-service/profile.js.map +1 -0
  75. package/dist/mod-service/status.d.ts.map +1 -1
  76. package/dist/mod-service/status.js +18 -17
  77. package/dist/mod-service/status.js.map +1 -1
  78. package/dist/tag-service/util.d.ts.map +1 -1
  79. package/dist/tag-service/util.js +7 -1
  80. package/dist/tag-service/util.js.map +1 -1
  81. package/package.json +9 -9
  82. package/src/api/moderation/emitEvent.ts +4 -0
  83. package/src/api/report/createReport.ts +9 -9
  84. package/src/api/util.ts +7 -28
  85. package/src/config/config.ts +3 -1
  86. package/src/config/env.ts +2 -0
  87. package/src/context.ts +14 -0
  88. package/src/db/migrations/20250718T150931000Z-update-appeal-reason-stats.ts +311 -0
  89. package/src/db/migrations/index.ts +1 -0
  90. package/src/lexicon/index.ts +131 -0
  91. package/src/lexicon/lexicons.ts +503 -7
  92. package/src/lexicon/types/app/bsky/bookmark/createBookmark.ts +35 -0
  93. package/src/lexicon/types/app/bsky/bookmark/defs.ts +54 -0
  94. package/src/lexicon/types/app/bsky/bookmark/deleteBookmark.ts +34 -0
  95. package/src/lexicon/types/app/bsky/bookmark/getBookmarks.ts +42 -0
  96. package/src/lexicon/types/app/bsky/feed/defs.ts +2 -0
  97. package/src/lexicon/types/com/atproto/moderation/defs.ts +52 -7
  98. package/src/lexicon/types/com/atproto/temp/dereferenceScope.ts +42 -0
  99. package/src/lexicon/types/tools/ozone/report/defs.ts +154 -0
  100. package/src/mod-service/profile.ts +143 -0
  101. package/src/mod-service/status.ts +3 -2
  102. package/src/tag-service/util.ts +9 -1
  103. package/tests/__snapshots__/report-reason.test.ts.snap +14 -0
  104. package/tests/report-reason.test.ts +154 -0
  105. package/tsconfig.build.tsbuildinfo +1 -1
  106. package/tsconfig.tests.tsbuildinfo +1 -1
@@ -0,0 +1,15 @@
1
+ import AtpAgent, { AppBskyLabelerDefs } from '@atproto/api';
2
+ import { OzoneConfig } from '../config';
3
+ export declare const NEW_TO_OLD_REASON_MAPPING: Record<string, string>;
4
+ export type ModerationServiceProfileCreator = () => ModerationServiceProfile;
5
+ export declare class ModerationServiceProfile {
6
+ private cfg;
7
+ private appviewAgent;
8
+ private cache;
9
+ private CACHE_TTL;
10
+ constructor(cfg: OzoneConfig, appviewAgent: AtpAgent, cacheTTL?: number);
11
+ static creator(cfg: OzoneConfig, appviewAgent: AtpAgent): ModerationServiceProfileCreator;
12
+ getProfile(): Promise<AppBskyLabelerDefs.LabelerViewDetailed | null>;
13
+ validateReasonType(reasonType: string): Promise<string>;
14
+ }
15
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/mod-service/profile.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAYvC,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqD5D,CAAA;AAOD,MAAM,MAAM,+BAA+B,GAAG,MAAM,wBAAwB,CAAA;AAE5E,qBAAa,wBAAwB;IAKjC,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,YAAY;IALtB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,SAAS,CAAQ;gBAGf,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,QAAQ,EAC9B,QAAQ,CAAC,EAAE,MAAM;IAKnB,MAAM,CAAC,OAAO,CACZ,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,QAAQ,GACrB,+BAA+B;IAI5B,UAAU;IAyBV,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAsB9D"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModerationServiceProfile = exports.NEW_TO_OLD_REASON_MAPPING = void 0;
4
+ const api_1 = require("@atproto/api");
5
+ const xrpc_server_1 = require("@atproto/xrpc-server");
6
+ const defs_1 = require("../lexicon/types/com/atproto/moderation/defs");
7
+ const logger_1 = require("../logger");
8
+ // Reverse mapping from new ozone namespaced reason types to old com.atproto namespaced reason types
9
+ exports.NEW_TO_OLD_REASON_MAPPING = {
10
+ 'tools.ozone.report.defs#reasonMisleadingSpam': defs_1.REASONSPAM,
11
+ 'tools.ozone.report.defs#reasonRuleOther': defs_1.REASONVIOLATION,
12
+ 'tools.ozone.report.defs#reasonMisleadingOther': defs_1.REASONMISLEADING,
13
+ 'tools.ozone.report.defs#reasonSexualUnlabeled': defs_1.REASONSEXUAL,
14
+ 'tools.ozone.report.defs#reasonHarassmentOther': defs_1.REASONRUDE,
15
+ 'tools.ozone.report.defs#reasonAppeal': defs_1.REASONAPPEAL,
16
+ // Map all violence-related reasons to REASONVIOLATION
17
+ 'tools.ozone.report.defs#reasonViolenceAnimalWelfare': defs_1.REASONVIOLATION,
18
+ 'tools.ozone.report.defs#reasonViolenceThreats': defs_1.REASONVIOLATION,
19
+ 'tools.ozone.report.defs#reasonViolenceGraphicContent': defs_1.REASONVIOLATION,
20
+ 'tools.ozone.report.defs#reasonViolenceSelfHarm': defs_1.REASONVIOLATION,
21
+ 'tools.ozone.report.defs#reasonViolenceGlorification': defs_1.REASONVIOLATION,
22
+ 'tools.ozone.report.defs#reasonViolenceExtremistContent': defs_1.REASONVIOLATION,
23
+ 'tools.ozone.report.defs#reasonViolenceTrafficking': defs_1.REASONVIOLATION,
24
+ 'tools.ozone.report.defs#reasonViolenceOther': defs_1.REASONVIOLATION,
25
+ // Map all sexual-related reasons to REASONSEXUAL
26
+ 'tools.ozone.report.defs#reasonSexualAbuseContent': defs_1.REASONSEXUAL,
27
+ 'tools.ozone.report.defs#reasonSexualNCII': defs_1.REASONSEXUAL,
28
+ 'tools.ozone.report.defs#reasonSexualSextortion': defs_1.REASONSEXUAL,
29
+ 'tools.ozone.report.defs#reasonSexualDeepfake': defs_1.REASONSEXUAL,
30
+ 'tools.ozone.report.defs#reasonSexualAnimal': defs_1.REASONSEXUAL,
31
+ 'tools.ozone.report.defs#reasonSexualOther': defs_1.REASONSEXUAL,
32
+ // Map all child safety reasons to REASONVIOLATION
33
+ 'tools.ozone.report.defs#reasonChildSafetyCSAM': defs_1.REASONVIOLATION,
34
+ 'tools.ozone.report.defs#reasonChildSafetyGroom': defs_1.REASONVIOLATION,
35
+ 'tools.ozone.report.defs#reasonChildSafetyMinorPrivacy': defs_1.REASONVIOLATION,
36
+ 'tools.ozone.report.defs#reasonChildSafetyEndangerment': defs_1.REASONVIOLATION,
37
+ 'tools.ozone.report.defs#reasonChildSafetyHarassment': defs_1.REASONVIOLATION,
38
+ 'tools.ozone.report.defs#reasonChildSafetyPromotion': defs_1.REASONVIOLATION,
39
+ 'tools.ozone.report.defs#reasonChildSafetyOther': defs_1.REASONVIOLATION,
40
+ // Map all harassment reasons to REASONRUDE
41
+ 'tools.ozone.report.defs#reasonHarassmentTroll': defs_1.REASONRUDE,
42
+ 'tools.ozone.report.defs#reasonHarassmentTargeted': defs_1.REASONRUDE,
43
+ 'tools.ozone.report.defs#reasonHarassmentHateSpeech': defs_1.REASONRUDE,
44
+ 'tools.ozone.report.defs#reasonHarassmentDoxxing': defs_1.REASONRUDE,
45
+ // Map all misleading reasons to REASONMISLEADING
46
+ 'tools.ozone.report.defs#reasonMisleadingBot': defs_1.REASONMISLEADING,
47
+ 'tools.ozone.report.defs#reasonMisleadingImpersonation': defs_1.REASONMISLEADING,
48
+ 'tools.ozone.report.defs#reasonMisleadingScam': defs_1.REASONMISLEADING,
49
+ 'tools.ozone.report.defs#reasonMisleadingSyntheticContent': defs_1.REASONMISLEADING,
50
+ 'tools.ozone.report.defs#reasonMisleadingMisinformation': defs_1.REASONMISLEADING,
51
+ // Map all rule-related reasons to REASONVIOLATION
52
+ 'tools.ozone.report.defs#reasonRuleSiteSecurity': defs_1.REASONVIOLATION,
53
+ 'tools.ozone.report.defs#reasonRuleStolenContent': defs_1.REASONVIOLATION,
54
+ 'tools.ozone.report.defs#reasonRuleProhibitedSales': defs_1.REASONVIOLATION,
55
+ 'tools.ozone.report.defs#reasonRuleBanEvasion': defs_1.REASONVIOLATION,
56
+ // Map all civic reasons to REASONMISLEADING
57
+ 'tools.ozone.report.defs#reasonCivicElectoralProcess': defs_1.REASONMISLEADING,
58
+ 'tools.ozone.report.defs#reasonCivicDisclosure': defs_1.REASONMISLEADING,
59
+ 'tools.ozone.report.defs#reasonCivicInterference': defs_1.REASONMISLEADING,
60
+ 'tools.ozone.report.defs#reasonCivicMisinformation': defs_1.REASONMISLEADING,
61
+ 'tools.ozone.report.defs#reasonCivicImpersonation': defs_1.REASONMISLEADING,
62
+ };
63
+ class ModerationServiceProfile {
64
+ constructor(cfg, appviewAgent, cacheTTL) {
65
+ Object.defineProperty(this, "cfg", {
66
+ enumerable: true,
67
+ configurable: true,
68
+ writable: true,
69
+ value: cfg
70
+ });
71
+ Object.defineProperty(this, "appviewAgent", {
72
+ enumerable: true,
73
+ configurable: true,
74
+ writable: true,
75
+ value: appviewAgent
76
+ });
77
+ Object.defineProperty(this, "cache", {
78
+ enumerable: true,
79
+ configurable: true,
80
+ writable: true,
81
+ value: null
82
+ });
83
+ Object.defineProperty(this, "CACHE_TTL", {
84
+ enumerable: true,
85
+ configurable: true,
86
+ writable: true,
87
+ value: void 0
88
+ });
89
+ this.CACHE_TTL = cacheTTL || cfg.service.serviceRecordCacheTTL;
90
+ }
91
+ static creator(cfg, appviewAgent) {
92
+ return () => new ModerationServiceProfile(cfg, appviewAgent);
93
+ }
94
+ async getProfile() {
95
+ const now = Date.now();
96
+ if (!this.cache || now - this.cache.timestamp > this.CACHE_TTL) {
97
+ try {
98
+ const { data } = await this.appviewAgent.app.bsky.labeler.getServices({
99
+ dids: [this.cfg.service.did],
100
+ detailed: true,
101
+ });
102
+ if (api_1.AppBskyLabelerDefs.isLabelerViewDetailed(data.views?.[0])) {
103
+ this.cache = {
104
+ profile: data.views[0],
105
+ timestamp: now,
106
+ };
107
+ }
108
+ }
109
+ catch (e) {
110
+ // On error, fail open
111
+ logger_1.httpLogger.error(`Failed to fetch labeler profile: ${e?.['message']}`);
112
+ }
113
+ }
114
+ return this.cache?.profile || null;
115
+ }
116
+ async validateReasonType(reasonType) {
117
+ const profile = await this.getProfile();
118
+ if (!Array.isArray(profile?.reasonTypes)) {
119
+ return reasonType;
120
+ }
121
+ const supportedReasonTypes = profile.reasonTypes;
122
+ // Check if the reason type is directly supported
123
+ if (supportedReasonTypes.includes(reasonType)) {
124
+ return reasonType;
125
+ }
126
+ // Allow new reason types only if they map to a supported old reason type
127
+ const mappedOldReason = exports.NEW_TO_OLD_REASON_MAPPING[reasonType];
128
+ if (mappedOldReason && supportedReasonTypes.includes(mappedOldReason)) {
129
+ return reasonType;
130
+ }
131
+ throw new xrpc_server_1.InvalidRequestError(`Invalid reason type: ${reasonType}`);
132
+ }
133
+ }
134
+ exports.ModerationServiceProfile = ModerationServiceProfile;
135
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/mod-service/profile.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/mod-service/status.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAS7C,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAsMxE,eAAO,MAAM,mCAAmC,GAAI,IAAI,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ucAgDrE,CAAA;AAKD,eAAO,MAAM,6BAA6B,GACxC,IAAI,QAAQ,EACZ,iBAAiB,kBAAkB,EACnC,WAAW,MAAM,EAAE,KAClB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAyN3C,CAAA;AAED,eAAO,MAAM,8BAA8B,GACzC,SAAS,MAAM,GAAG,KAAK,KACtB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAkBnC,CAAA"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/mod-service/status.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAQ7C,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAsMxE,eAAO,MAAM,mCAAmC,GAAI,IAAI,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ucAgDrE,CAAA;AAKD,eAAO,MAAM,6BAA6B,GACxC,IAAI,QAAQ,EACZ,iBAAiB,kBAAkB,EACnC,WAAW,MAAM,EAAE,KAClB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CA0N3C,CAAA;AAED,eAAO,MAAM,8BAA8B,GACzC,SAAS,MAAM,GAAG,KAAK,KACtB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAkBnC,CAAA"}
@@ -4,35 +4,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.getStatusIdentifierFromSubject = exports.adjustModerationSubjectStatus = exports.moderationSubjectStatusQueryBuilder = void 0;
5
5
  const common_1 = require("@atproto/common");
6
6
  const syntax_1 = require("@atproto/syntax");
7
+ const util_1 = require("../api/util");
7
8
  const types_1 = require("../db/types");
8
- const defs_1 = require("../lexicon/types/com/atproto/moderation/defs");
9
- const defs_2 = require("../lexicon/types/tools/ozone/moderation/defs");
9
+ const defs_1 = require("../lexicon/types/tools/ozone/moderation/defs");
10
10
  const getSubjectStatusForModerationEvent = ({ currentStatus, action, createdBy, createdAt, durationInHours, }) => {
11
11
  const defaultReviewState = currentStatus
12
12
  ? currentStatus.reviewState
13
- : defs_2.REVIEWNONE;
13
+ : defs_1.REVIEWNONE;
14
14
  switch (action) {
15
15
  case 'tools.ozone.moderation.defs#modEventAcknowledge':
16
16
  return {
17
17
  lastReviewedBy: createdBy,
18
- reviewState: defs_2.REVIEWCLOSED,
18
+ reviewState: defs_1.REVIEWCLOSED,
19
19
  lastReviewedAt: createdAt,
20
20
  };
21
21
  case 'tools.ozone.moderation.defs#modEventReport':
22
22
  return {
23
- reviewState: defs_2.REVIEWOPEN,
23
+ reviewState: defs_1.REVIEWOPEN,
24
24
  lastReportedAt: createdAt,
25
25
  };
26
26
  case 'tools.ozone.moderation.defs#modEventEscalate':
27
27
  return {
28
28
  lastReviewedBy: createdBy,
29
- reviewState: defs_2.REVIEWESCALATED,
29
+ reviewState: defs_1.REVIEWESCALATED,
30
30
  lastReviewedAt: createdAt,
31
31
  };
32
32
  case 'tools.ozone.moderation.defs#modEventReverseTakedown':
33
33
  return {
34
34
  lastReviewedBy: createdBy,
35
- reviewState: defs_2.REVIEWCLOSED,
35
+ reviewState: defs_1.REVIEWCLOSED,
36
36
  takendown: false,
37
37
  suspendUntil: null,
38
38
  lastReviewedAt: createdAt,
@@ -61,7 +61,7 @@ const getSubjectStatusForModerationEvent = ({ currentStatus, action, createdBy,
61
61
  ...(currentStatus?.appealed ? { appealed: false } : {}),
62
62
  takendown: true,
63
63
  lastReviewedBy: createdBy,
64
- reviewState: defs_2.REVIEWCLOSED,
64
+ reviewState: defs_1.REVIEWCLOSED,
65
65
  lastReviewedAt: createdAt,
66
66
  suspendUntil: durationInHours
67
67
  ? new Date(Date.now() + durationInHours * common_1.HOUR).toISOString()
@@ -232,7 +232,7 @@ const adjustModerationSubjectStatus = async (db, moderationEvent, blobCids) => {
232
232
  ...newStatus,
233
233
  // newStatus doesn't contain a reviewState or takendown so in case this is a new entry
234
234
  // we need to set a default values so that the insert doesn't fail
235
- reviewState: currentStatus ? currentStatus.reviewState : defs_2.REVIEWNONE,
235
+ reviewState: currentStatus ? currentStatus.reviewState : defs_1.REVIEWNONE,
236
236
  // @TODO: should we try to update this based on status property of account event?
237
237
  // For now we're the only one emitting takedowns so i don't think it makes too much of a difference
238
238
  takendown: currentStatus ? currentStatus.takendown : false,
@@ -255,7 +255,8 @@ const adjustModerationSubjectStatus = async (db, moderationEvent, blobCids) => {
255
255
  return currentStatus || null;
256
256
  }
257
257
  const isAppealEvent = action === 'tools.ozone.moderation.defs#modEventReport' &&
258
- meta?.reportType === defs_1.REASONAPPEAL;
258
+ meta?.reportType &&
259
+ (0, util_1.isAppealReport)(`${meta.reportType}`);
259
260
  const subjectStatus = getSubjectStatusForModerationEvent({
260
261
  currentStatus,
261
262
  action,
@@ -263,13 +264,13 @@ const adjustModerationSubjectStatus = async (db, moderationEvent, blobCids) => {
263
264
  createdAt,
264
265
  durationInHours: moderationEvent.durationInHours,
265
266
  });
266
- if (currentStatus?.reviewState === defs_2.REVIEWESCALATED &&
267
- subjectStatus.reviewState !== defs_2.REVIEWCLOSED) {
267
+ if (currentStatus?.reviewState === defs_1.REVIEWESCALATED &&
268
+ subjectStatus.reviewState !== defs_1.REVIEWCLOSED) {
268
269
  // If the current status is escalated only allow incoming events to move the state to
269
270
  // reviewClosed because escalated subjects should never move to any other state
270
- subjectStatus.reviewState = defs_2.REVIEWESCALATED;
271
+ subjectStatus.reviewState = defs_1.REVIEWESCALATED;
271
272
  }
272
- if (currentStatus && subjectStatus.reviewState === defs_2.REVIEWNONE) {
273
+ if (currentStatus && subjectStatus.reviewState === defs_1.REVIEWNONE) {
273
274
  // reviewNone is ONLY allowed when there is no current status
274
275
  // If there is a current status, it should not be allowed to move back to reviewNone
275
276
  subjectStatus.reviewState = currentStatus.reviewState;
@@ -280,7 +281,7 @@ const adjustModerationSubjectStatus = async (db, moderationEvent, blobCids) => {
280
281
  // Defaulting reviewState to open for any event may not be the desired behavior.
281
282
  // For instance, if a subject never had any event and we just want to leave a comment to keep an eye on it
282
283
  // that shouldn't mean we want to review the subject
283
- reviewState: defs_2.REVIEWNONE,
284
+ reviewState: defs_1.REVIEWNONE,
284
285
  recordCid: subjectCid || null,
285
286
  ageAssuranceState: currentStatus?.ageAssuranceState || 'unknown',
286
287
  };
@@ -304,8 +305,8 @@ const adjustModerationSubjectStatus = async (db, moderationEvent, blobCids) => {
304
305
  newStatus.lastAppealedAt = createdAt;
305
306
  subjectStatus.lastAppealedAt = createdAt;
306
307
  // Set reviewState to escalated when appeal events are emitted
307
- subjectStatus.reviewState = defs_2.REVIEWESCALATED;
308
- newStatus.reviewState = defs_2.REVIEWESCALATED;
308
+ subjectStatus.reviewState = defs_1.REVIEWESCALATED;
309
+ newStatus.reviewState = defs_1.REVIEWESCALATED;
309
310
  }
310
311
  if (action === 'tools.ozone.moderation.defs#modEventResolveAppeal' &&
311
312
  subjectStatus.appealed) {
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/mod-service/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/mod-service/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/tag-service/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AAEzE,eAAO,MAAM,eAAe,GAAI,YAAY,UAAU,WAErD,CAAA"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/tag-service/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AAEzE,eAAO,MAAM,eAAe,GAAI,YAAY,UAAU,WAUrD,CAAA"}
@@ -2,7 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTagForReport = void 0;
4
4
  const getTagForReport = (reasonType) => {
5
- return `report:${reasonType.replace('com.atproto.moderation.defs#reason', '').toLowerCase()}`;
5
+ const reasonWithoutPrefix = reasonType
6
+ .replace('com.atproto.moderation.defs#reason', '')
7
+ .replace('tools.ozone.report.defs#reason', '');
8
+ const kebabCase = reasonWithoutPrefix
9
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
10
+ .toLowerCase();
11
+ return `report:${kebabCase}`;
6
12
  };
7
13
  exports.getTagForReport = getTagForReport;
8
14
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/tag-service/util.ts"],"names":[],"mappings":";;;AAEO,MAAM,eAAe,GAAG,CAAC,UAAsB,EAAE,EAAE;IACxD,OAAO,UAAU,UAAU,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAA;AAC/F,CAAC,CAAA;AAFY,QAAA,eAAe,mBAE3B"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/tag-service/util.ts"],"names":[],"mappings":";;;AAEO,MAAM,eAAe,GAAG,CAAC,UAAsB,EAAE,EAAE;IACxD,MAAM,mBAAmB,GAAG,UAAU;SACnC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC;SACjD,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAA;IAEhD,MAAM,SAAS,GAAG,mBAAmB;SAClC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,WAAW,EAAE,CAAA;IAEhB,OAAO,UAAU,SAAS,EAAE,CAAA;AAC9B,CAAC,CAAA;AAVY,QAAA,eAAe,mBAU3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/ozone",
3
- "version": "0.1.139",
3
+ "version": "0.1.141",
4
4
  "license": "MIT",
5
5
  "description": "Backend service for moderating the Bluesky network.",
6
6
  "keywords": [
@@ -35,14 +35,14 @@
35
35
  "uint8arrays": "3.0.0",
36
36
  "undici": "^6.14.1",
37
37
  "ws": "^8.12.0",
38
- "@atproto/api": "^0.16.6",
39
- "@atproto/common": "^0.4.11",
38
+ "@atproto/api": "^0.16.8",
39
+ "@atproto/common": "^0.4.12",
40
40
  "@atproto/crypto": "^0.4.4",
41
- "@atproto/identity": "^0.4.8",
42
- "@atproto/lexicon": "^0.5.0",
41
+ "@atproto/identity": "^0.4.9",
42
+ "@atproto/lexicon": "^0.5.1",
43
43
  "@atproto/syntax": "^0.4.1",
44
- "@atproto/xrpc": "^0.7.4",
45
- "@atproto/xrpc-server": "^0.9.4"
44
+ "@atproto/xrpc": "^0.7.5",
45
+ "@atproto/xrpc-server": "^0.9.5"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@did-plc/server": "^0.0.1",
@@ -54,8 +54,8 @@
54
54
  "jest": "^28.1.2",
55
55
  "ts-node": "^10.8.2",
56
56
  "typescript": "^5.6.3",
57
- "@atproto/lex-cli": "^0.9.4",
58
- "@atproto/pds": "^0.4.173"
57
+ "@atproto/lex-cli": "^0.9.5",
58
+ "@atproto/pds": "^0.4.177"
59
59
  },
60
60
  "scripts": {
61
61
  "codegen": "lex gen-server --yes ./src/lexicon ../../lexicons/com/atproto/*/* ../../lexicons/app/bsky/*/* ../../lexicons/chat/bsky/*/* ../../lexicons/tools/ozone/*/*",
@@ -163,6 +163,10 @@ const handleModerationEvent = async ({
163
163
  await assertTagAuth(settingService, ctx.cfg.service.did, event, auth)
164
164
  }
165
165
 
166
+ if (isModEventReport(event)) {
167
+ await ctx.moderationServiceProfile().validateReasonType(event.reportType)
168
+ }
169
+
166
170
  const moderationEvent = await db.transaction(async (dbTxn) => {
167
171
  const moderationTxn = ctx.modService(dbTxn)
168
172
 
@@ -1,15 +1,12 @@
1
1
  import { ForbiddenError } from '@atproto/xrpc-server'
2
2
  import { AppContext } from '../../context'
3
3
  import { Server } from '../../lexicon'
4
- import {
5
- REASONAPPEAL,
6
- ReasonType,
7
- } from '../../lexicon/types/com/atproto/moderation/defs'
4
+ import { ReasonType } from '../../lexicon/types/com/atproto/moderation/defs'
8
5
  import { ModerationService } from '../../mod-service'
9
6
  import { subjectFromInput } from '../../mod-service/subject'
10
7
  import { TagService } from '../../tag-service'
11
8
  import { getTagForReport } from '../../tag-service/util'
12
- import { getReasonType } from '../util'
9
+ import { isAppealReport } from '../util'
13
10
 
14
11
  export default function (server: Server, ctx: AppContext) {
15
12
  server.com.atproto.moderation.createReport({
@@ -21,21 +18,24 @@ export default function (server: Server, ctx: AppContext) {
21
18
  const subject = subjectFromInput(input.body.subject)
22
19
 
23
20
  // If the report is an appeal, the requester must be the author of the subject
24
- if (reasonType === REASONAPPEAL && requester !== subject.did) {
21
+ if (isAppealReport(reasonType) && requester !== subject.did) {
25
22
  throw new ForbiddenError('You cannot appeal this report')
26
23
  }
27
24
 
28
25
  const db = ctx.db
29
26
 
30
- await assertValidReporter(ctx.modService(db), reasonType, requester)
27
+ await Promise.all([
28
+ assertValidReporter(ctx.modService(db), reasonType, requester),
29
+ ctx.moderationServiceProfile().validateReasonType(reasonType),
30
+ ])
31
31
 
32
32
  const report = await db.transaction(async (dbTxn) => {
33
33
  const moderationTxn = ctx.modService(dbTxn)
34
34
  const { event: reportEvent, subjectStatus } =
35
35
  await moderationTxn.report({
36
- reasonType: getReasonType(reasonType),
37
36
  reason,
38
37
  subject,
38
+ reasonType,
39
39
  reportedBy: requester || ctx.cfg.service.did,
40
40
  modTool,
41
41
  })
@@ -73,7 +73,7 @@ const assertValidReporter = async (
73
73
  }
74
74
 
75
75
  // For appeals, we just need to make sure that the account does not have pending appeal
76
- if (reasonType === REASONAPPEAL) {
76
+ if (isAppealReport(reasonType)) {
77
77
  if (reporterStatus[0]?.appealed) {
78
78
  throw new ForbiddenError(
79
79
  'Awaiting decision on previous appeal',
package/src/api/util.ts CHANGED
@@ -4,17 +4,7 @@ import { Member } from '../db/schema/member'
4
4
  import { ModerationEvent } from '../db/schema/moderation_event'
5
5
  import { ids } from '../lexicon/lexicons'
6
6
  import { AccountView } from '../lexicon/types/com/atproto/admin/defs'
7
- import { InputSchema as ReportInput } from '../lexicon/types/com/atproto/moderation/createReport'
8
- import {
9
- REASONAPPEAL,
10
- REASONMISLEADING,
11
- REASONOTHER,
12
- REASONRUDE,
13
- REASONSEXUAL,
14
- REASONSPAM,
15
- REASONVIOLATION,
16
- ReasonType,
17
- } from '../lexicon/types/com/atproto/moderation/defs'
7
+ import { REASONAPPEAL } from '../lexicon/types/com/atproto/moderation/defs'
18
8
  import {
19
9
  REVIEWCLOSED,
20
10
  REVIEWESCALATED,
@@ -122,13 +112,6 @@ export const addAccountInfoToRepoView = (
122
112
  }
123
113
  }
124
114
 
125
- export const getReasonType = (reasonType: ReportInput['reasonType']) => {
126
- if (reasonTypes.has(reasonType)) {
127
- return reasonType
128
- }
129
- throw new InvalidRequestError('Invalid reason type')
130
- }
131
-
132
115
  export const getEventType = (type: string) => {
133
116
  if (eventTypes.has(type)) {
134
117
  return type as ModerationEvent['action']
@@ -146,16 +129,6 @@ export const getReviewState = (reviewState?: string) => {
146
129
 
147
130
  const reviewStates = new Set([REVIEWCLOSED, REVIEWESCALATED, REVIEWOPEN])
148
131
 
149
- const reasonTypes = new Set<ReasonType>([
150
- REASONOTHER,
151
- REASONSPAM,
152
- REASONMISLEADING,
153
- REASONRUDE,
154
- REASONSEXUAL,
155
- REASONVIOLATION,
156
- REASONAPPEAL,
157
- ])
158
-
159
132
  const eventTypes = new Set([
160
133
  'tools.ozone.moderation.defs#modEventTakedown',
161
134
  'tools.ozone.moderation.defs#modEventAcknowledge',
@@ -194,6 +167,12 @@ const memberRoles = new Set([
194
167
  ROLEVERIFIER,
195
168
  ])
196
169
 
170
+ export const OZONE_APPEAL_REASON_TYPE = 'tools.ozone.report.defs#reasonAppeal'
171
+ const APPEAL_REASON_TYPES = [REASONAPPEAL, OZONE_APPEAL_REASON_TYPE]
172
+ export const isAppealReport = (reasonType?: string): boolean => {
173
+ return !!reasonType && APPEAL_REASON_TYPES.includes(reasonType)
174
+ }
175
+
197
176
  export const getSafelinkPattern = (pattern: string): SafelinkPatternType => {
198
177
  if (safelinkPatterns.has(pattern)) {
199
178
  return pattern as SafelinkPatternType
@@ -1,5 +1,5 @@
1
1
  import assert from 'node:assert'
2
- import { DAY, HOUR } from '@atproto/common'
2
+ import { DAY, HOUR, MINUTE } from '@atproto/common'
3
3
  import { OzoneEnvironment } from './env'
4
4
 
5
5
  // off-config but still from env:
@@ -15,6 +15,7 @@ export const envToCfg = (env: OzoneEnvironment): OzoneConfig => {
15
15
  did: env.serverDid,
16
16
  version: env.version,
17
17
  devMode: env.devMode,
18
+ serviceRecordCacheTTL: env.serviceRecordCacheTTL ?? 5 * MINUTE, // default 5 mins
18
19
  }
19
20
 
20
21
  assert(env.dbPostgresUrl, 'dbPostgresUrl is required')
@@ -124,6 +125,7 @@ export type ServiceConfig = {
124
125
  did: string
125
126
  version?: string
126
127
  devMode?: boolean
128
+ serviceRecordCacheTTL: number // in ms, default 5 mins
127
129
  }
128
130
 
129
131
  export type BlobDivertConfig = {
package/src/config/env.ts CHANGED
@@ -8,6 +8,7 @@ export const readEnv = (): OzoneEnvironment => {
8
8
  port: envInt('OZONE_PORT'),
9
9
  publicUrl: envStr('OZONE_PUBLIC_URL'),
10
10
  serverDid: envStr('OZONE_SERVER_DID'),
11
+ serviceRecordCacheTTL: envInt('OZONE_SERVICE_RECORD_CACHE_TTL'),
11
12
  appviewUrl: envStr('OZONE_APPVIEW_URL'),
12
13
  appviewDid: envStr('OZONE_APPVIEW_DID'),
13
14
  appviewPushEvents: envBool('OZONE_APPVIEW_PUSH_EVENTS'),
@@ -52,6 +53,7 @@ export type OzoneEnvironment = {
52
53
  port?: number
53
54
  publicUrl?: string
54
55
  serverDid?: string
56
+ serviceRecordCacheTTL?: number
55
57
  appviewUrl?: string
56
58
  appviewDid?: string
57
59
  appviewPushEvents?: boolean
package/src/context.ts CHANGED
@@ -17,6 +17,10 @@ import { BlobDiverter } from './daemon/blob-diverter'
17
17
  import { Database } from './db'
18
18
  import { ImageInvalidator } from './image-invalidator'
19
19
  import { ModerationService, ModerationServiceCreator } from './mod-service'
20
+ import {
21
+ ModerationServiceProfile,
22
+ ModerationServiceProfileCreator,
23
+ } from './mod-service/profile'
20
24
  import {
21
25
  SafelinkRuleService,
22
26
  SafelinkRuleServiceCreator,
@@ -45,6 +49,7 @@ export type AppContextOptions = {
45
49
  db: Database
46
50
  cfg: OzoneConfig
47
51
  modService: ModerationServiceCreator
52
+ moderationServiceProfile: ModerationServiceProfileCreator
48
53
  communicationTemplateService: CommunicationTemplateServiceCreator
49
54
  safelinkRuleService: SafelinkRuleServiceCreator
50
55
  setService: SetServiceCreator
@@ -145,6 +150,10 @@ export class AppContext {
145
150
  const settingService = SettingService.creator()
146
151
  const verificationService = VerificationService.creator()
147
152
  const verificationIssuer = VerificationIssuer.creator()
153
+ const moderationServiceProfile = ModerationServiceProfile.creator(
154
+ cfg,
155
+ appviewAgent,
156
+ )
148
157
 
149
158
  const sequencer = new Sequencer(modService(db))
150
159
 
@@ -159,6 +168,7 @@ export class AppContext {
159
168
  db,
160
169
  cfg,
161
170
  modService,
171
+ moderationServiceProfile,
162
172
  communicationTemplateService,
163
173
  safelinkRuleService,
164
174
  teamService,
@@ -235,6 +245,10 @@ export class AppContext {
235
245
  return this.opts.verificationIssuer
236
246
  }
237
247
 
248
+ get moderationServiceProfile(): ModerationServiceProfileCreator {
249
+ return this.opts.moderationServiceProfile
250
+ }
251
+
238
252
  get appviewAgent(): AtpAgent {
239
253
  return this.opts.appviewAgent
240
254
  }