@atproto/ozone 0.1.60 → 0.1.62
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.
- package/CHANGELOG.md +16 -0
- package/dist/api/health.d.ts.map +1 -1
- package/dist/api/health.js +28 -0
- package/dist/api/health.js.map +1 -1
- package/dist/api/moderation/emitEvent.d.ts.map +1 -1
- package/dist/api/moderation/emitEvent.js +5 -1
- package/dist/api/moderation/emitEvent.js.map +1 -1
- package/dist/api/moderation/queryStatuses.d.ts.map +1 -1
- package/dist/api/moderation/queryStatuses.js +4 -1
- package/dist/api/moderation/queryStatuses.js.map +1 -1
- package/dist/api/report/createReport.d.ts.map +1 -1
- package/dist/api/report/createReport.js +23 -1
- package/dist/api/report/createReport.js.map +1 -1
- package/dist/lexicon/index.d.ts +2 -2
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/lexicons.d.ts +36 -0
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +18 -0
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/com/atproto/server/createSession.d.ts +2 -0
- package/dist/lexicon/types/com/atproto/server/createSession.d.ts.map +1 -1
- package/dist/lexicon/types/tools/ozone/moderation/queryStatuses.d.ts +6 -0
- package/dist/lexicon/types/tools/ozone/moderation/queryStatuses.d.ts.map +1 -1
- package/dist/mod-service/index.d.ts +6 -1
- package/dist/mod-service/index.d.ts.map +1 -1
- package/dist/mod-service/index.js +46 -2
- package/dist/mod-service/index.js.map +1 -1
- package/dist/tag-service/index.d.ts +1 -1
- package/dist/tag-service/index.d.ts.map +1 -1
- package/dist/tag-service/index.js +15 -6
- package/dist/tag-service/index.js.map +1 -1
- package/dist/tag-service/util.d.ts +3 -0
- package/dist/tag-service/util.d.ts.map +1 -0
- package/dist/tag-service/util.js +8 -0
- package/dist/tag-service/util.js.map +1 -0
- package/package.json +4 -4
- package/src/api/health.ts +32 -0
- package/src/api/moderation/emitEvent.ts +6 -1
- package/src/api/moderation/queryStatuses.ts +6 -0
- package/src/api/report/createReport.ts +44 -2
- package/src/lexicon/index.ts +2 -2
- package/src/lexicon/lexicons.ts +22 -0
- package/src/lexicon/types/com/atproto/server/createSession.ts +2 -0
- package/src/lexicon/types/tools/ozone/moderation/queryStatuses.ts +6 -0
- package/src/mod-service/index.ts +65 -6
- package/src/tag-service/index.ts +16 -5
- package/src/tag-service/util.ts +5 -0
- package/tests/__snapshots__/get-record.test.ts.snap +4 -0
- package/tests/__snapshots__/get-records.test.ts.snap +2 -0
- package/tests/__snapshots__/get-repo.test.ts.snap +2 -0
- package/tests/__snapshots__/get-repos.test.ts.snap +2 -0
- package/tests/__snapshots__/moderation-events.test.ts.snap +7 -3
- package/tests/__snapshots__/moderation-statuses.test.ts.snap +6 -0
- package/tests/__snapshots__/moderation.test.ts.snap +4 -4
- package/tests/content-tagger.test.ts +29 -0
- package/tests/moderation-status-tags.test.ts +37 -0
- package/tests/report-muting.test.ts +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
package/src/lexicon/lexicons.ts
CHANGED
|
@@ -2412,6 +2412,11 @@ export const schemaDict = {
|
|
|
2412
2412
|
authFactorToken: {
|
|
2413
2413
|
type: 'string',
|
|
2414
2414
|
},
|
|
2415
|
+
allowTakendown: {
|
|
2416
|
+
type: 'boolean',
|
|
2417
|
+
description:
|
|
2418
|
+
'When true, instead of throwing error for takendown accounts, a valid response with a narrow scoped token will be returned',
|
|
2419
|
+
},
|
|
2415
2420
|
},
|
|
2416
2421
|
},
|
|
2417
2422
|
},
|
|
@@ -12377,6 +12382,20 @@ export const schemaDict = {
|
|
|
12377
12382
|
parameters: {
|
|
12378
12383
|
type: 'params',
|
|
12379
12384
|
properties: {
|
|
12385
|
+
queueCount: {
|
|
12386
|
+
type: 'integer',
|
|
12387
|
+
description:
|
|
12388
|
+
'Number of queues being used by moderators. Subjects will be split among all queues.',
|
|
12389
|
+
},
|
|
12390
|
+
queueIndex: {
|
|
12391
|
+
type: 'integer',
|
|
12392
|
+
description:
|
|
12393
|
+
'Index of the queue to fetch subjects from. Works only when queueCount value is specified.',
|
|
12394
|
+
},
|
|
12395
|
+
queueSeed: {
|
|
12396
|
+
type: 'string',
|
|
12397
|
+
description: 'A seeder to shuffle/balance the queue items.',
|
|
12398
|
+
},
|
|
12380
12399
|
includeAllUserRecords: {
|
|
12381
12400
|
type: 'boolean',
|
|
12382
12401
|
description:
|
|
@@ -12498,6 +12517,9 @@ export const schemaDict = {
|
|
|
12498
12517
|
type: 'array',
|
|
12499
12518
|
items: {
|
|
12500
12519
|
type: 'string',
|
|
12520
|
+
maxLength: 25,
|
|
12521
|
+
description:
|
|
12522
|
+
'Items in this array are applied with OR filters. To apply AND filter, put all tags in the same string and separate using && characters',
|
|
12501
12523
|
},
|
|
12502
12524
|
},
|
|
12503
12525
|
excludeTags: {
|
|
@@ -15,6 +15,8 @@ export interface InputSchema {
|
|
|
15
15
|
identifier: string
|
|
16
16
|
password: string
|
|
17
17
|
authFactorToken?: string
|
|
18
|
+
/** When true, instead of throwing error for takendown accounts, a valid response with a narrow scoped token will be returned */
|
|
19
|
+
allowTakendown?: boolean
|
|
18
20
|
[k: string]: unknown
|
|
19
21
|
}
|
|
20
22
|
|
|
@@ -10,6 +10,12 @@ import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server'
|
|
|
10
10
|
import * as ToolsOzoneModerationDefs from './defs'
|
|
11
11
|
|
|
12
12
|
export interface QueryParams {
|
|
13
|
+
/** Number of queues being used by moderators. Subjects will be split among all queues. */
|
|
14
|
+
queueCount?: number
|
|
15
|
+
/** Index of the queue to fetch subjects from. Works only when queueCount value is specified. */
|
|
16
|
+
queueIndex?: number
|
|
17
|
+
/** A seeder to shuffle/balance the queue items. */
|
|
18
|
+
queueSeed?: string
|
|
13
19
|
/** All subjects, or subjects from given 'collections' param, belonging to the account specified in the 'subject' param will be returned. */
|
|
14
20
|
includeAllUserRecords?: boolean
|
|
15
21
|
/** The subject to get the status for. */
|
package/src/mod-service/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import net from 'node:net'
|
|
2
|
-
import { Insertable, sql } from 'kysely'
|
|
2
|
+
import { Insertable, SelectQueryBuilder, sql } from 'kysely'
|
|
3
3
|
import { CID } from 'multiformats/cid'
|
|
4
4
|
import { AtUri, INVALID_HANDLE } from '@atproto/syntax'
|
|
5
5
|
import { InvalidRequestError } from '@atproto/xrpc-server'
|
|
@@ -791,7 +791,49 @@ export class ModerationService {
|
|
|
791
791
|
return result
|
|
792
792
|
}
|
|
793
793
|
|
|
794
|
+
applyTagFilter = (
|
|
795
|
+
builder: SelectQueryBuilder<any, any, any>,
|
|
796
|
+
tags: string[],
|
|
797
|
+
) => {
|
|
798
|
+
const { ref } = this.db.db.dynamic
|
|
799
|
+
// Build an array of conditions
|
|
800
|
+
const conditions = tags
|
|
801
|
+
.map((tag) => {
|
|
802
|
+
if (tag.includes('&&')) {
|
|
803
|
+
// Split by '&&' for AND logic
|
|
804
|
+
const subTags = tag
|
|
805
|
+
.split('&&')
|
|
806
|
+
// Make sure spaces on either sides of '&&' are trimmed
|
|
807
|
+
.map((subTag) => subTag.trim())
|
|
808
|
+
// Remove empty strings after trimming is applied
|
|
809
|
+
.filter(Boolean)
|
|
810
|
+
|
|
811
|
+
if (!subTags.length) return null
|
|
812
|
+
|
|
813
|
+
return sql`(${sql.join(
|
|
814
|
+
subTags.map(
|
|
815
|
+
(subTag) =>
|
|
816
|
+
sql`${ref('moderation_subject_status.tags')} ? ${subTag}`,
|
|
817
|
+
),
|
|
818
|
+
sql` AND `,
|
|
819
|
+
)})`
|
|
820
|
+
} else {
|
|
821
|
+
// Single tag condition
|
|
822
|
+
return sql`${ref('moderation_subject_status.tags')} ? ${tag}`
|
|
823
|
+
}
|
|
824
|
+
})
|
|
825
|
+
.filter(Boolean)
|
|
826
|
+
|
|
827
|
+
if (!conditions.length) return builder
|
|
828
|
+
|
|
829
|
+
// Combine all conditions with OR
|
|
830
|
+
return builder.where(sql`(${sql.join(conditions, sql` OR `)})`)
|
|
831
|
+
}
|
|
832
|
+
|
|
794
833
|
async getSubjectStatuses({
|
|
834
|
+
queueCount,
|
|
835
|
+
queueIndex,
|
|
836
|
+
queueSeed = '',
|
|
795
837
|
includeAllUserRecords,
|
|
796
838
|
cursor,
|
|
797
839
|
limit = 50,
|
|
@@ -819,6 +861,9 @@ export class ModerationService {
|
|
|
819
861
|
collections,
|
|
820
862
|
subjectType,
|
|
821
863
|
}: {
|
|
864
|
+
queueCount?: number
|
|
865
|
+
queueIndex?: number
|
|
866
|
+
queueSeed?: string
|
|
822
867
|
includeAllUserRecords?: boolean
|
|
823
868
|
cursor?: string
|
|
824
869
|
limit?: number
|
|
@@ -870,6 +915,24 @@ export class ModerationService {
|
|
|
870
915
|
builder = builder.where('recordPath', '!=', '')
|
|
871
916
|
}
|
|
872
917
|
|
|
918
|
+
// Only fetch items that belongs to the specified queue when specified
|
|
919
|
+
if (
|
|
920
|
+
!subject &&
|
|
921
|
+
queueCount &&
|
|
922
|
+
queueCount > 0 &&
|
|
923
|
+
queueIndex !== undefined &&
|
|
924
|
+
queueIndex >= 0 &&
|
|
925
|
+
queueIndex < queueCount
|
|
926
|
+
) {
|
|
927
|
+
builder = builder.where(
|
|
928
|
+
queueSeed
|
|
929
|
+
? sql`ABS(HASHTEXT(${queueSeed} || did)) % ${queueCount}`
|
|
930
|
+
: sql`ABS(HASHTEXT(did)) % ${queueCount}`,
|
|
931
|
+
'=',
|
|
932
|
+
queueIndex,
|
|
933
|
+
)
|
|
934
|
+
}
|
|
935
|
+
|
|
873
936
|
// If subjectType is set to 'account' let that take priority and ignore collections filter
|
|
874
937
|
if (collections.length && subjectType !== 'account') {
|
|
875
938
|
builder = builder.where('recordPath', '!=', '').where((qb) => {
|
|
@@ -958,11 +1021,7 @@ export class ModerationService {
|
|
|
958
1021
|
}
|
|
959
1022
|
|
|
960
1023
|
if (tags.length) {
|
|
961
|
-
builder =
|
|
962
|
-
sql`${ref('moderation_subject_status.tags')} ?| array[${sql.join(
|
|
963
|
-
tags,
|
|
964
|
-
)}]::TEXT[]`,
|
|
965
|
-
)
|
|
1024
|
+
builder = this.applyTagFilter(builder, tags)
|
|
966
1025
|
}
|
|
967
1026
|
|
|
968
1027
|
if (excludeTags.length) {
|
package/src/tag-service/index.ts
CHANGED
|
@@ -22,15 +22,18 @@ export class TagService {
|
|
|
22
22
|
]
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
// Allow the caller to seed the initial tags
|
|
26
|
+
async evaluateForSubject(initialTags?: Iterable<string>) {
|
|
26
27
|
try {
|
|
27
|
-
const tags
|
|
28
|
+
const tags = new Set(initialTags)
|
|
28
29
|
|
|
29
30
|
await Promise.all(
|
|
30
31
|
this.taggers.map(async (tagger) => {
|
|
31
32
|
try {
|
|
32
33
|
const newTags = await tagger.getTags()
|
|
33
|
-
|
|
34
|
+
for (const newTag of newTags) {
|
|
35
|
+
tags.add(newTag)
|
|
36
|
+
}
|
|
34
37
|
} catch (e) {
|
|
35
38
|
// Don't let one tagger error stop the rest from running
|
|
36
39
|
log.error(
|
|
@@ -41,11 +44,19 @@ export class TagService {
|
|
|
41
44
|
}),
|
|
42
45
|
)
|
|
43
46
|
|
|
44
|
-
|
|
47
|
+
// Ensure that before inserting new tags, we discard any tag that may
|
|
48
|
+
// have been evaluated to be added but is already present in the subject
|
|
49
|
+
if (this.subjectStatus?.tags?.length) {
|
|
50
|
+
for (const tag of this.subjectStatus.tags) {
|
|
51
|
+
tags.delete(tag)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (tags.size) {
|
|
45
56
|
await this.moderationService.logEvent({
|
|
46
57
|
event: {
|
|
47
58
|
$type: 'tools.ozone.moderation.defs#modEventTag',
|
|
48
|
-
add: tags,
|
|
59
|
+
add: [...tags],
|
|
49
60
|
remove: [],
|
|
50
61
|
},
|
|
51
62
|
subject: this.subject,
|
|
@@ -46,7 +46,9 @@ Object {
|
|
|
46
46
|
"subjectBlobCids": Array [],
|
|
47
47
|
"subjectRepoHandle": "alice.test",
|
|
48
48
|
"tags": Array [
|
|
49
|
+
"report:spam",
|
|
49
50
|
"lang:en",
|
|
51
|
+
"report:other",
|
|
50
52
|
],
|
|
51
53
|
"takendown": true,
|
|
52
54
|
"updatedAt": "1970-01-01T00:00:00.000Z",
|
|
@@ -150,7 +152,9 @@ Object {
|
|
|
150
152
|
"subjectBlobCids": Array [],
|
|
151
153
|
"subjectRepoHandle": "alice.test",
|
|
152
154
|
"tags": Array [
|
|
155
|
+
"report:spam",
|
|
153
156
|
"lang:en",
|
|
157
|
+
"report:other",
|
|
154
158
|
],
|
|
155
159
|
"takendown": true,
|
|
156
160
|
"updatedAt": "1970-01-01T00:00:00.000Z",
|
|
@@ -35,7 +35,9 @@ Object {
|
|
|
35
35
|
"subjectBlobCids": Array [],
|
|
36
36
|
"subjectRepoHandle": "alice.test",
|
|
37
37
|
"tags": Array [
|
|
38
|
+
"report:misleading",
|
|
38
39
|
"lang:und",
|
|
40
|
+
"report:spam",
|
|
39
41
|
],
|
|
40
42
|
"takendown": false,
|
|
41
43
|
"updatedAt": "1970-01-01T00:00:00.000Z",
|
|
@@ -101,6 +103,7 @@ Array [
|
|
|
101
103
|
"event": Object {
|
|
102
104
|
"$type": "tools.ozone.moderation.defs#modEventTag",
|
|
103
105
|
"add": Array [
|
|
106
|
+
"report:spam",
|
|
104
107
|
"lang:en",
|
|
105
108
|
"lang:i",
|
|
106
109
|
],
|
|
@@ -163,6 +166,7 @@ Array [
|
|
|
163
166
|
"event": Object {
|
|
164
167
|
"$type": "tools.ozone.moderation.defs#modEventTag",
|
|
165
168
|
"add": Array [
|
|
169
|
+
"report:spam",
|
|
166
170
|
"lang:en",
|
|
167
171
|
],
|
|
168
172
|
"remove": Array [],
|
|
@@ -210,7 +214,7 @@ Array [
|
|
|
210
214
|
"isReporterMuted": false,
|
|
211
215
|
"reportType": "com.atproto.moderation.defs#reasonSpam",
|
|
212
216
|
},
|
|
213
|
-
"id":
|
|
217
|
+
"id": 17,
|
|
214
218
|
"subject": Object {
|
|
215
219
|
"$type": "com.atproto.admin.defs#repoRef",
|
|
216
220
|
"did": "user(0)",
|
|
@@ -251,7 +255,7 @@ Array [
|
|
|
251
255
|
"isReporterMuted": false,
|
|
252
256
|
"reportType": "com.atproto.moderation.defs#reasonSpam",
|
|
253
257
|
},
|
|
254
|
-
"id":
|
|
258
|
+
"id": 17,
|
|
255
259
|
"subject": Object {
|
|
256
260
|
"$type": "com.atproto.admin.defs#repoRef",
|
|
257
261
|
"did": "user(0)",
|
|
@@ -292,7 +296,7 @@ Array [
|
|
|
292
296
|
"isReporterMuted": false,
|
|
293
297
|
"reportType": "com.atproto.moderation.defs#reasonSpam",
|
|
294
298
|
},
|
|
295
|
-
"id":
|
|
299
|
+
"id": 17,
|
|
296
300
|
"subject": Object {
|
|
297
301
|
"$type": "com.atproto.admin.defs#repoRef",
|
|
298
302
|
"did": "user(0)",
|
|
@@ -19,6 +19,7 @@ Array [
|
|
|
19
19
|
"subjectBlobCids": Array [],
|
|
20
20
|
"subjectRepoHandle": "bob.test",
|
|
21
21
|
"tags": Array [
|
|
22
|
+
"report:spam",
|
|
22
23
|
"lang:en",
|
|
23
24
|
"lang:i",
|
|
24
25
|
],
|
|
@@ -41,6 +42,7 @@ Array [
|
|
|
41
42
|
"subjectBlobCids": Array [],
|
|
42
43
|
"subjectRepoHandle": "bob.test",
|
|
43
44
|
"tags": Array [
|
|
45
|
+
"report:spam",
|
|
44
46
|
"lang:en",
|
|
45
47
|
"lang:i",
|
|
46
48
|
],
|
|
@@ -69,6 +71,7 @@ Array [
|
|
|
69
71
|
"subjectBlobCids": Array [],
|
|
70
72
|
"subjectRepoHandle": "bob.test",
|
|
71
73
|
"tags": Array [
|
|
74
|
+
"report:spam",
|
|
72
75
|
"lang:en",
|
|
73
76
|
"lang:i",
|
|
74
77
|
],
|
|
@@ -91,6 +94,7 @@ Array [
|
|
|
91
94
|
"subjectBlobCids": Array [],
|
|
92
95
|
"subjectRepoHandle": "bob.test",
|
|
93
96
|
"tags": Array [
|
|
97
|
+
"report:spam",
|
|
94
98
|
"lang:en",
|
|
95
99
|
"lang:i",
|
|
96
100
|
],
|
|
@@ -114,6 +118,7 @@ Array [
|
|
|
114
118
|
"subjectBlobCids": Array [],
|
|
115
119
|
"subjectRepoHandle": "alice.test",
|
|
116
120
|
"tags": Array [
|
|
121
|
+
"report:spam",
|
|
117
122
|
"lang:ha",
|
|
118
123
|
],
|
|
119
124
|
"takendown": false,
|
|
@@ -135,6 +140,7 @@ Array [
|
|
|
135
140
|
"subjectBlobCids": Array [],
|
|
136
141
|
"subjectRepoHandle": "alice.test",
|
|
137
142
|
"tags": Array [
|
|
143
|
+
"report:misleading",
|
|
138
144
|
"lang:und",
|
|
139
145
|
],
|
|
140
146
|
"takendown": false,
|
|
@@ -4,7 +4,7 @@ exports[`moderation reporting creates reports of a DM chat. 1`] = `
|
|
|
4
4
|
Array [
|
|
5
5
|
Object {
|
|
6
6
|
"createdAt": "1970-01-01T00:00:00.000Z",
|
|
7
|
-
"id":
|
|
7
|
+
"id": 14,
|
|
8
8
|
"reasonType": "com.atproto.moderation.defs#reasonSpam",
|
|
9
9
|
"reportedBy": "user(0)",
|
|
10
10
|
"subject": Object {
|
|
@@ -16,7 +16,7 @@ Array [
|
|
|
16
16
|
},
|
|
17
17
|
Object {
|
|
18
18
|
"createdAt": "1970-01-01T00:00:00.000Z",
|
|
19
|
-
"id":
|
|
19
|
+
"id": 16,
|
|
20
20
|
"reason": "defamation",
|
|
21
21
|
"reasonType": "com.atproto.moderation.defs#reasonOther",
|
|
22
22
|
"reportedBy": "user(1)",
|
|
@@ -34,7 +34,7 @@ exports[`moderation reporting creates reports of a record. 1`] = `
|
|
|
34
34
|
Array [
|
|
35
35
|
Object {
|
|
36
36
|
"createdAt": "1970-01-01T00:00:00.000Z",
|
|
37
|
-
"id":
|
|
37
|
+
"id": 7,
|
|
38
38
|
"reasonType": "com.atproto.moderation.defs#reasonSpam",
|
|
39
39
|
"reportedBy": "user(0)",
|
|
40
40
|
"subject": Object {
|
|
@@ -45,7 +45,7 @@ Array [
|
|
|
45
45
|
},
|
|
46
46
|
Object {
|
|
47
47
|
"createdAt": "1970-01-01T00:00:00.000Z",
|
|
48
|
-
"id":
|
|
48
|
+
"id": 9,
|
|
49
49
|
"reason": "defamation",
|
|
50
50
|
"reasonType": "com.atproto.moderation.defs#reasonOther",
|
|
51
51
|
"reportedBy": "user(1)",
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
basicSeed,
|
|
6
6
|
} from '@atproto/dev-env'
|
|
7
7
|
import { REASONSPAM } from '../src/lexicon/types/com/atproto/moderation/defs'
|
|
8
|
+
import { REASONMISLEADING } from '../dist/lexicon/types/com/atproto/moderation/defs'
|
|
8
9
|
|
|
9
10
|
describe('moderation subject content tagging', () => {
|
|
10
11
|
let network: TestNetwork
|
|
@@ -138,4 +139,32 @@ describe('moderation subject content tagging', () => {
|
|
|
138
139
|
expect(imagePostStatus.tags).toContain('embed:image')
|
|
139
140
|
})
|
|
140
141
|
})
|
|
142
|
+
|
|
143
|
+
describe('report tagger', () => {
|
|
144
|
+
it('Adds report reason tag', async () => {
|
|
145
|
+
await Promise.all([
|
|
146
|
+
sc.createReport({
|
|
147
|
+
reasonType: REASONSPAM,
|
|
148
|
+
subject: {
|
|
149
|
+
$type: 'com.atproto.admin.defs#repoRef',
|
|
150
|
+
did: sc.dids.carol,
|
|
151
|
+
},
|
|
152
|
+
reportedBy: sc.dids.alice,
|
|
153
|
+
}),
|
|
154
|
+
sc.createReport({
|
|
155
|
+
reasonType: REASONMISLEADING,
|
|
156
|
+
subject: {
|
|
157
|
+
$type: 'com.atproto.admin.defs#repoRef',
|
|
158
|
+
did: sc.dids.carol,
|
|
159
|
+
},
|
|
160
|
+
reportedBy: sc.dids.alice,
|
|
161
|
+
}),
|
|
162
|
+
])
|
|
163
|
+
|
|
164
|
+
const accountStatus = await getStatus(sc.dids.carol)
|
|
165
|
+
|
|
166
|
+
expect(accountStatus.tags).toContain('report:spam')
|
|
167
|
+
expect(accountStatus.tags).toContain('report:misleading')
|
|
168
|
+
})
|
|
169
|
+
})
|
|
141
170
|
})
|
|
@@ -71,5 +71,42 @@ describe('moderation-status-tags', () => {
|
|
|
71
71
|
'follow-churn',
|
|
72
72
|
)
|
|
73
73
|
})
|
|
74
|
+
|
|
75
|
+
it('allows filtering by tags', async () => {
|
|
76
|
+
await modClient.emitEvent({
|
|
77
|
+
subject: {
|
|
78
|
+
$type: 'com.atproto.admin.defs#repoRef',
|
|
79
|
+
did: sc.dids.alice,
|
|
80
|
+
},
|
|
81
|
+
event: {
|
|
82
|
+
$type: 'tools.ozone.moderation.defs#modEventTag',
|
|
83
|
+
add: ['report:spam', 'lang:ja', 'lang:en'],
|
|
84
|
+
remove: [],
|
|
85
|
+
},
|
|
86
|
+
})
|
|
87
|
+
const [englishAndJapaneseQueue, englishOrJapaneseQueue] =
|
|
88
|
+
await Promise.all([
|
|
89
|
+
modClient.queryStatuses({
|
|
90
|
+
tags: ['lang:ja&&lang:en'],
|
|
91
|
+
}),
|
|
92
|
+
modClient.queryStatuses({
|
|
93
|
+
tags: ['report:ja', 'lang:en'],
|
|
94
|
+
}),
|
|
95
|
+
])
|
|
96
|
+
|
|
97
|
+
// Verify that the queue only contains 1 item with both en and ja tags which is alice's account
|
|
98
|
+
expect(englishAndJapaneseQueue.subjectStatuses.length).toEqual(1)
|
|
99
|
+
expect(englishAndJapaneseQueue.subjectStatuses[0].subject.did).toEqual(
|
|
100
|
+
sc.dids.alice,
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
// Verify that when querying for either en or ja tags, both alice and bob are returned
|
|
104
|
+
expect(englishOrJapaneseQueue.subjectStatuses.length).toEqual(2)
|
|
105
|
+
const englishOrJapaneseDids = englishOrJapaneseQueue.subjectStatuses.map(
|
|
106
|
+
({ subject }) => subject.did,
|
|
107
|
+
)
|
|
108
|
+
expect(englishOrJapaneseDids).toContain(sc.dids.alice)
|
|
109
|
+
expect(englishOrJapaneseDids).toContain(sc.dids.bob)
|
|
110
|
+
})
|
|
74
111
|
})
|
|
75
112
|
})
|
|
@@ -69,7 +69,7 @@ describe('report-muting', () => {
|
|
|
69
69
|
})
|
|
70
70
|
|
|
71
71
|
// Verify that a subject status was not created for bob's post since the reporter was muted
|
|
72
|
-
await assertSubjectStatus(bobsPostSubject.uri,
|
|
72
|
+
await assertSubjectStatus(bobsPostSubject.uri, REVIEWNONE)
|
|
73
73
|
// Verify, however, that the event was logged
|
|
74
74
|
await modClient.queryEvents({
|
|
75
75
|
subject: bobsPostSubject.uri,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/auth-verifier.ts","./src/background.ts","./src/context.ts","./src/error.ts","./src/image-invalidator.ts","./src/index.ts","./src/logger.ts","./src/util.ts","./src/api/health.ts","./src/api/index.ts","./src/api/proxied.ts","./src/api/util.ts","./src/api/well-known.ts","./src/api/chat/getActorMetadata.ts","./src/api/chat/getMessageContext.ts","./src/api/chat/index.ts","./src/api/communication/createTemplate.ts","./src/api/communication/deleteTemplate.ts","./src/api/communication/listTemplates.ts","./src/api/communication/updateTemplate.ts","./src/api/label/fetchLabels.ts","./src/api/label/queryLabels.ts","./src/api/label/subscribeLabels.ts","./src/api/moderation/emitEvent.ts","./src/api/moderation/getEvent.ts","./src/api/moderation/getRecord.ts","./src/api/moderation/getRecords.ts","./src/api/moderation/getRepo.ts","./src/api/moderation/getRepos.ts","./src/api/moderation/queryEvents.ts","./src/api/moderation/queryStatuses.ts","./src/api/moderation/searchRepos.ts","./src/api/report/createReport.ts","./src/api/server/getConfig.ts","./src/api/set/addValues.ts","./src/api/set/deleteSet.ts","./src/api/set/deleteValues.ts","./src/api/set/getValues.ts","./src/api/set/querySets.ts","./src/api/set/upsertSet.ts","./src/api/setting/listOptions.ts","./src/api/setting/removeOptions.ts","./src/api/setting/upsertOption.ts","./src/api/team/addMember.ts","./src/api/team/deleteMember.ts","./src/api/team/listMembers.ts","./src/api/team/updateMember.ts","./src/communication-service/template.ts","./src/communication-service/util.ts","./src/config/config.ts","./src/config/env.ts","./src/config/index.ts","./src/config/secrets.ts","./src/daemon/blob-diverter.ts","./src/daemon/context.ts","./src/daemon/event-pusher.ts","./src/daemon/event-reverser.ts","./src/daemon/index.ts","./src/db/index.ts","./src/db/pagination.ts","./src/db/types.ts","./src/db/migrations/20231219T205730722Z-init.ts","./src/db/migrations/20240116T085607200Z-communication-template.ts","./src/db/migrations/20240201T051104136Z-mod-event-blobs.ts","./src/db/migrations/20240208T213404429Z-add-tags-column-to-moderation-subject.ts","./src/db/migrations/20240228T003647759Z-add-label-sigs.ts","./src/db/migrations/20240408T192432676Z-mute-reporting.ts","./src/db/migrations/20240506T225055595Z-message-subject.ts","./src/db/migrations/20240521T211332580Z-member.ts","./src/db/migrations/20240814T003647759Z-event-created-at-index.ts","./src/db/migrations/20240903T205730722Z-add-template-lang.ts","./src/db/migrations/20240904T205730722Z-add-subject-did-index.ts","./src/db/migrations/20241001T205730722Z-subject-status-review-state-index.ts","./src/db/migrations/20241008T205730722Z-sets.ts","./src/db/migrations/20241018T205730722Z-setting.ts","./src/db/migrations/20241026T205730722Z-add-hosting-status-to-subject-status.ts","./src/db/migrations/index.ts","./src/db/migrations/provider.ts","./src/db/schema/blob_push_event.ts","./src/db/schema/communication_template.ts","./src/db/schema/index.ts","./src/db/schema/label.ts","./src/db/schema/member.ts","./src/db/schema/moderation_event.ts","./src/db/schema/moderation_subject_status.ts","./src/db/schema/ozone_set.ts","./src/db/schema/record_push_event.ts","./src/db/schema/repo_push_event.ts","./src/db/schema/setting.ts","./src/db/schema/signing_key.ts","./src/lexicon/index.ts","./src/lexicon/lexicons.ts","./src/lexicon/util.ts","./src/lexicon/types/app/bsky/actor/defs.ts","./src/lexicon/types/app/bsky/actor/getPreferences.ts","./src/lexicon/types/app/bsky/actor/getProfile.ts","./src/lexicon/types/app/bsky/actor/getProfiles.ts","./src/lexicon/types/app/bsky/actor/getSuggestions.ts","./src/lexicon/types/app/bsky/actor/profile.ts","./src/lexicon/types/app/bsky/actor/putPreferences.ts","./src/lexicon/types/app/bsky/actor/searchActors.ts","./src/lexicon/types/app/bsky/actor/searchActorsTypeahead.ts","./src/lexicon/types/app/bsky/embed/defs.ts","./src/lexicon/types/app/bsky/embed/external.ts","./src/lexicon/types/app/bsky/embed/images.ts","./src/lexicon/types/app/bsky/embed/record.ts","./src/lexicon/types/app/bsky/embed/recordWithMedia.ts","./src/lexicon/types/app/bsky/embed/video.ts","./src/lexicon/types/app/bsky/feed/defs.ts","./src/lexicon/types/app/bsky/feed/describeFeedGenerator.ts","./src/lexicon/types/app/bsky/feed/generator.ts","./src/lexicon/types/app/bsky/feed/getActorFeeds.ts","./src/lexicon/types/app/bsky/feed/getActorLikes.ts","./src/lexicon/types/app/bsky/feed/getAuthorFeed.ts","./src/lexicon/types/app/bsky/feed/getFeed.ts","./src/lexicon/types/app/bsky/feed/getFeedGenerator.ts","./src/lexicon/types/app/bsky/feed/getFeedGenerators.ts","./src/lexicon/types/app/bsky/feed/getFeedSkeleton.ts","./src/lexicon/types/app/bsky/feed/getLikes.ts","./src/lexicon/types/app/bsky/feed/getListFeed.ts","./src/lexicon/types/app/bsky/feed/getPostThread.ts","./src/lexicon/types/app/bsky/feed/getPosts.ts","./src/lexicon/types/app/bsky/feed/getQuotes.ts","./src/lexicon/types/app/bsky/feed/getRepostedBy.ts","./src/lexicon/types/app/bsky/feed/getSuggestedFeeds.ts","./src/lexicon/types/app/bsky/feed/getTimeline.ts","./src/lexicon/types/app/bsky/feed/like.ts","./src/lexicon/types/app/bsky/feed/post.ts","./src/lexicon/types/app/bsky/feed/postgate.ts","./src/lexicon/types/app/bsky/feed/repost.ts","./src/lexicon/types/app/bsky/feed/searchPosts.ts","./src/lexicon/types/app/bsky/feed/sendInteractions.ts","./src/lexicon/types/app/bsky/feed/threadgate.ts","./src/lexicon/types/app/bsky/graph/block.ts","./src/lexicon/types/app/bsky/graph/defs.ts","./src/lexicon/types/app/bsky/graph/follow.ts","./src/lexicon/types/app/bsky/graph/getActorStarterPacks.ts","./src/lexicon/types/app/bsky/graph/getBlocks.ts","./src/lexicon/types/app/bsky/graph/getFollowers.ts","./src/lexicon/types/app/bsky/graph/getFollows.ts","./src/lexicon/types/app/bsky/graph/getKnownFollowers.ts","./src/lexicon/types/app/bsky/graph/getList.ts","./src/lexicon/types/app/bsky/graph/getListBlocks.ts","./src/lexicon/types/app/bsky/graph/getListMutes.ts","./src/lexicon/types/app/bsky/graph/getLists.ts","./src/lexicon/types/app/bsky/graph/getMutes.ts","./src/lexicon/types/app/bsky/graph/getRelationships.ts","./src/lexicon/types/app/bsky/graph/getStarterPack.ts","./src/lexicon/types/app/bsky/graph/getStarterPacks.ts","./src/lexicon/types/app/bsky/graph/getSuggestedFollowsByActor.ts","./src/lexicon/types/app/bsky/graph/list.ts","./src/lexicon/types/app/bsky/graph/listblock.ts","./src/lexicon/types/app/bsky/graph/listitem.ts","./src/lexicon/types/app/bsky/graph/muteActor.ts","./src/lexicon/types/app/bsky/graph/muteActorList.ts","./src/lexicon/types/app/bsky/graph/muteThread.ts","./src/lexicon/types/app/bsky/graph/searchStarterPacks.ts","./src/lexicon/types/app/bsky/graph/starterpack.ts","./src/lexicon/types/app/bsky/graph/unmuteActor.ts","./src/lexicon/types/app/bsky/graph/unmuteActorList.ts","./src/lexicon/types/app/bsky/graph/unmuteThread.ts","./src/lexicon/types/app/bsky/labeler/defs.ts","./src/lexicon/types/app/bsky/labeler/getServices.ts","./src/lexicon/types/app/bsky/labeler/service.ts","./src/lexicon/types/app/bsky/notification/getUnreadCount.ts","./src/lexicon/types/app/bsky/notification/listNotifications.ts","./src/lexicon/types/app/bsky/notification/putPreferences.ts","./src/lexicon/types/app/bsky/notification/registerPush.ts","./src/lexicon/types/app/bsky/notification/updateSeen.ts","./src/lexicon/types/app/bsky/richtext/facet.ts","./src/lexicon/types/app/bsky/unspecced/defs.ts","./src/lexicon/types/app/bsky/unspecced/getConfig.ts","./src/lexicon/types/app/bsky/unspecced/getPopularFeedGenerators.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestionsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getTaggedSuggestions.ts","./src/lexicon/types/app/bsky/unspecced/getTrendingTopics.ts","./src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/searchStarterPacksSkeleton.ts","./src/lexicon/types/app/bsky/video/defs.ts","./src/lexicon/types/app/bsky/video/getJobStatus.ts","./src/lexicon/types/app/bsky/video/getUploadLimits.ts","./src/lexicon/types/app/bsky/video/uploadVideo.ts","./src/lexicon/types/chat/bsky/actor/declaration.ts","./src/lexicon/types/chat/bsky/actor/defs.ts","./src/lexicon/types/chat/bsky/actor/deleteAccount.ts","./src/lexicon/types/chat/bsky/actor/exportAccountData.ts","./src/lexicon/types/chat/bsky/convo/defs.ts","./src/lexicon/types/chat/bsky/convo/deleteMessageForSelf.ts","./src/lexicon/types/chat/bsky/convo/getConvo.ts","./src/lexicon/types/chat/bsky/convo/getConvoForMembers.ts","./src/lexicon/types/chat/bsky/convo/getLog.ts","./src/lexicon/types/chat/bsky/convo/getMessages.ts","./src/lexicon/types/chat/bsky/convo/leaveConvo.ts","./src/lexicon/types/chat/bsky/convo/listConvos.ts","./src/lexicon/types/chat/bsky/convo/muteConvo.ts","./src/lexicon/types/chat/bsky/convo/sendMessage.ts","./src/lexicon/types/chat/bsky/convo/sendMessageBatch.ts","./src/lexicon/types/chat/bsky/convo/unmuteConvo.ts","./src/lexicon/types/chat/bsky/convo/updateRead.ts","./src/lexicon/types/chat/bsky/moderation/getActorMetadata.ts","./src/lexicon/types/chat/bsky/moderation/getMessageContext.ts","./src/lexicon/types/chat/bsky/moderation/updateActorAccess.ts","./src/lexicon/types/com/atproto/admin/defs.ts","./src/lexicon/types/com/atproto/admin/deleteAccount.ts","./src/lexicon/types/com/atproto/admin/disableAccountInvites.ts","./src/lexicon/types/com/atproto/admin/disableInviteCodes.ts","./src/lexicon/types/com/atproto/admin/enableAccountInvites.ts","./src/lexicon/types/com/atproto/admin/getAccountInfo.ts","./src/lexicon/types/com/atproto/admin/getAccountInfos.ts","./src/lexicon/types/com/atproto/admin/getInviteCodes.ts","./src/lexicon/types/com/atproto/admin/getSubjectStatus.ts","./src/lexicon/types/com/atproto/admin/searchAccounts.ts","./src/lexicon/types/com/atproto/admin/sendEmail.ts","./src/lexicon/types/com/atproto/admin/updateAccountEmail.ts","./src/lexicon/types/com/atproto/admin/updateAccountHandle.ts","./src/lexicon/types/com/atproto/admin/updateAccountPassword.ts","./src/lexicon/types/com/atproto/admin/updateSubjectStatus.ts","./src/lexicon/types/com/atproto/identity/getRecommendedDidCredentials.ts","./src/lexicon/types/com/atproto/identity/requestPlcOperationSignature.ts","./src/lexicon/types/com/atproto/identity/resolveHandle.ts","./src/lexicon/types/com/atproto/identity/signPlcOperation.ts","./src/lexicon/types/com/atproto/identity/submitPlcOperation.ts","./src/lexicon/types/com/atproto/identity/updateHandle.ts","./src/lexicon/types/com/atproto/label/defs.ts","./src/lexicon/types/com/atproto/label/queryLabels.ts","./src/lexicon/types/com/atproto/label/subscribeLabels.ts","./src/lexicon/types/com/atproto/moderation/createReport.ts","./src/lexicon/types/com/atproto/moderation/defs.ts","./src/lexicon/types/com/atproto/repo/applyWrites.ts","./src/lexicon/types/com/atproto/repo/createRecord.ts","./src/lexicon/types/com/atproto/repo/defs.ts","./src/lexicon/types/com/atproto/repo/deleteRecord.ts","./src/lexicon/types/com/atproto/repo/describeRepo.ts","./src/lexicon/types/com/atproto/repo/getRecord.ts","./src/lexicon/types/com/atproto/repo/importRepo.ts","./src/lexicon/types/com/atproto/repo/listMissingBlobs.ts","./src/lexicon/types/com/atproto/repo/listRecords.ts","./src/lexicon/types/com/atproto/repo/putRecord.ts","./src/lexicon/types/com/atproto/repo/strongRef.ts","./src/lexicon/types/com/atproto/repo/uploadBlob.ts","./src/lexicon/types/com/atproto/server/activateAccount.ts","./src/lexicon/types/com/atproto/server/checkAccountStatus.ts","./src/lexicon/types/com/atproto/server/confirmEmail.ts","./src/lexicon/types/com/atproto/server/createAccount.ts","./src/lexicon/types/com/atproto/server/createAppPassword.ts","./src/lexicon/types/com/atproto/server/createInviteCode.ts","./src/lexicon/types/com/atproto/server/createInviteCodes.ts","./src/lexicon/types/com/atproto/server/createSession.ts","./src/lexicon/types/com/atproto/server/deactivateAccount.ts","./src/lexicon/types/com/atproto/server/defs.ts","./src/lexicon/types/com/atproto/server/deleteAccount.ts","./src/lexicon/types/com/atproto/server/deleteSession.ts","./src/lexicon/types/com/atproto/server/describeServer.ts","./src/lexicon/types/com/atproto/server/getAccountInviteCodes.ts","./src/lexicon/types/com/atproto/server/getServiceAuth.ts","./src/lexicon/types/com/atproto/server/getSession.ts","./src/lexicon/types/com/atproto/server/listAppPasswords.ts","./src/lexicon/types/com/atproto/server/refreshSession.ts","./src/lexicon/types/com/atproto/server/requestAccountDelete.ts","./src/lexicon/types/com/atproto/server/requestEmailConfirmation.ts","./src/lexicon/types/com/atproto/server/requestEmailUpdate.ts","./src/lexicon/types/com/atproto/server/requestPasswordReset.ts","./src/lexicon/types/com/atproto/server/reserveSigningKey.ts","./src/lexicon/types/com/atproto/server/resetPassword.ts","./src/lexicon/types/com/atproto/server/revokeAppPassword.ts","./src/lexicon/types/com/atproto/server/updateEmail.ts","./src/lexicon/types/com/atproto/sync/getBlob.ts","./src/lexicon/types/com/atproto/sync/getBlocks.ts","./src/lexicon/types/com/atproto/sync/getCheckout.ts","./src/lexicon/types/com/atproto/sync/getHead.ts","./src/lexicon/types/com/atproto/sync/getLatestCommit.ts","./src/lexicon/types/com/atproto/sync/getRecord.ts","./src/lexicon/types/com/atproto/sync/getRepo.ts","./src/lexicon/types/com/atproto/sync/getRepoStatus.ts","./src/lexicon/types/com/atproto/sync/listBlobs.ts","./src/lexicon/types/com/atproto/sync/listRepos.ts","./src/lexicon/types/com/atproto/sync/notifyOfUpdate.ts","./src/lexicon/types/com/atproto/sync/requestCrawl.ts","./src/lexicon/types/com/atproto/sync/subscribeRepos.ts","./src/lexicon/types/com/atproto/temp/addReservedHandle.ts","./src/lexicon/types/com/atproto/temp/checkSignupQueue.ts","./src/lexicon/types/com/atproto/temp/fetchLabels.ts","./src/lexicon/types/com/atproto/temp/requestPhoneVerification.ts","./src/lexicon/types/tools/ozone/communication/createTemplate.ts","./src/lexicon/types/tools/ozone/communication/defs.ts","./src/lexicon/types/tools/ozone/communication/deleteTemplate.ts","./src/lexicon/types/tools/ozone/communication/listTemplates.ts","./src/lexicon/types/tools/ozone/communication/updateTemplate.ts","./src/lexicon/types/tools/ozone/moderation/defs.ts","./src/lexicon/types/tools/ozone/moderation/emitEvent.ts","./src/lexicon/types/tools/ozone/moderation/getEvent.ts","./src/lexicon/types/tools/ozone/moderation/getRecord.ts","./src/lexicon/types/tools/ozone/moderation/getRecords.ts","./src/lexicon/types/tools/ozone/moderation/getRepo.ts","./src/lexicon/types/tools/ozone/moderation/getRepos.ts","./src/lexicon/types/tools/ozone/moderation/queryEvents.ts","./src/lexicon/types/tools/ozone/moderation/queryStatuses.ts","./src/lexicon/types/tools/ozone/moderation/searchRepos.ts","./src/lexicon/types/tools/ozone/server/getConfig.ts","./src/lexicon/types/tools/ozone/set/addValues.ts","./src/lexicon/types/tools/ozone/set/defs.ts","./src/lexicon/types/tools/ozone/set/deleteSet.ts","./src/lexicon/types/tools/ozone/set/deleteValues.ts","./src/lexicon/types/tools/ozone/set/getValues.ts","./src/lexicon/types/tools/ozone/set/querySets.ts","./src/lexicon/types/tools/ozone/set/upsertSet.ts","./src/lexicon/types/tools/ozone/setting/defs.ts","./src/lexicon/types/tools/ozone/setting/listOptions.ts","./src/lexicon/types/tools/ozone/setting/removeOptions.ts","./src/lexicon/types/tools/ozone/setting/upsertOption.ts","./src/lexicon/types/tools/ozone/signature/defs.ts","./src/lexicon/types/tools/ozone/signature/findCorrelation.ts","./src/lexicon/types/tools/ozone/signature/findRelatedAccounts.ts","./src/lexicon/types/tools/ozone/signature/searchAccounts.ts","./src/lexicon/types/tools/ozone/team/addMember.ts","./src/lexicon/types/tools/ozone/team/defs.ts","./src/lexicon/types/tools/ozone/team/deleteMember.ts","./src/lexicon/types/tools/ozone/team/listMembers.ts","./src/lexicon/types/tools/ozone/team/updateMember.ts","./src/mod-service/index.ts","./src/mod-service/status.ts","./src/mod-service/subject.ts","./src/mod-service/types.ts","./src/mod-service/util.ts","./src/mod-service/views.ts","./src/sequencer/index.ts","./src/sequencer/outbox.ts","./src/sequencer/sequencer.ts","./src/set/service.ts","./src/setting/constants.ts","./src/setting/service.ts","./src/setting/types.ts","./src/setting/validators.ts","./src/tag-service/content-tagger.ts","./src/tag-service/embed-tagger.ts","./src/tag-service/index.ts","./src/tag-service/language-data.ts","./src/tag-service/language-tagger.ts","./src/team/index.ts"],"version":"5.6.3"}
|
|
1
|
+
{"root":["./src/auth-verifier.ts","./src/background.ts","./src/context.ts","./src/error.ts","./src/image-invalidator.ts","./src/index.ts","./src/logger.ts","./src/util.ts","./src/api/health.ts","./src/api/index.ts","./src/api/proxied.ts","./src/api/util.ts","./src/api/well-known.ts","./src/api/chat/getActorMetadata.ts","./src/api/chat/getMessageContext.ts","./src/api/chat/index.ts","./src/api/communication/createTemplate.ts","./src/api/communication/deleteTemplate.ts","./src/api/communication/listTemplates.ts","./src/api/communication/updateTemplate.ts","./src/api/label/fetchLabels.ts","./src/api/label/queryLabels.ts","./src/api/label/subscribeLabels.ts","./src/api/moderation/emitEvent.ts","./src/api/moderation/getEvent.ts","./src/api/moderation/getRecord.ts","./src/api/moderation/getRecords.ts","./src/api/moderation/getRepo.ts","./src/api/moderation/getRepos.ts","./src/api/moderation/queryEvents.ts","./src/api/moderation/queryStatuses.ts","./src/api/moderation/searchRepos.ts","./src/api/report/createReport.ts","./src/api/server/getConfig.ts","./src/api/set/addValues.ts","./src/api/set/deleteSet.ts","./src/api/set/deleteValues.ts","./src/api/set/getValues.ts","./src/api/set/querySets.ts","./src/api/set/upsertSet.ts","./src/api/setting/listOptions.ts","./src/api/setting/removeOptions.ts","./src/api/setting/upsertOption.ts","./src/api/team/addMember.ts","./src/api/team/deleteMember.ts","./src/api/team/listMembers.ts","./src/api/team/updateMember.ts","./src/communication-service/template.ts","./src/communication-service/util.ts","./src/config/config.ts","./src/config/env.ts","./src/config/index.ts","./src/config/secrets.ts","./src/daemon/blob-diverter.ts","./src/daemon/context.ts","./src/daemon/event-pusher.ts","./src/daemon/event-reverser.ts","./src/daemon/index.ts","./src/db/index.ts","./src/db/pagination.ts","./src/db/types.ts","./src/db/migrations/20231219T205730722Z-init.ts","./src/db/migrations/20240116T085607200Z-communication-template.ts","./src/db/migrations/20240201T051104136Z-mod-event-blobs.ts","./src/db/migrations/20240208T213404429Z-add-tags-column-to-moderation-subject.ts","./src/db/migrations/20240228T003647759Z-add-label-sigs.ts","./src/db/migrations/20240408T192432676Z-mute-reporting.ts","./src/db/migrations/20240506T225055595Z-message-subject.ts","./src/db/migrations/20240521T211332580Z-member.ts","./src/db/migrations/20240814T003647759Z-event-created-at-index.ts","./src/db/migrations/20240903T205730722Z-add-template-lang.ts","./src/db/migrations/20240904T205730722Z-add-subject-did-index.ts","./src/db/migrations/20241001T205730722Z-subject-status-review-state-index.ts","./src/db/migrations/20241008T205730722Z-sets.ts","./src/db/migrations/20241018T205730722Z-setting.ts","./src/db/migrations/20241026T205730722Z-add-hosting-status-to-subject-status.ts","./src/db/migrations/index.ts","./src/db/migrations/provider.ts","./src/db/schema/blob_push_event.ts","./src/db/schema/communication_template.ts","./src/db/schema/index.ts","./src/db/schema/label.ts","./src/db/schema/member.ts","./src/db/schema/moderation_event.ts","./src/db/schema/moderation_subject_status.ts","./src/db/schema/ozone_set.ts","./src/db/schema/record_push_event.ts","./src/db/schema/repo_push_event.ts","./src/db/schema/setting.ts","./src/db/schema/signing_key.ts","./src/lexicon/index.ts","./src/lexicon/lexicons.ts","./src/lexicon/util.ts","./src/lexicon/types/app/bsky/actor/defs.ts","./src/lexicon/types/app/bsky/actor/getPreferences.ts","./src/lexicon/types/app/bsky/actor/getProfile.ts","./src/lexicon/types/app/bsky/actor/getProfiles.ts","./src/lexicon/types/app/bsky/actor/getSuggestions.ts","./src/lexicon/types/app/bsky/actor/profile.ts","./src/lexicon/types/app/bsky/actor/putPreferences.ts","./src/lexicon/types/app/bsky/actor/searchActors.ts","./src/lexicon/types/app/bsky/actor/searchActorsTypeahead.ts","./src/lexicon/types/app/bsky/embed/defs.ts","./src/lexicon/types/app/bsky/embed/external.ts","./src/lexicon/types/app/bsky/embed/images.ts","./src/lexicon/types/app/bsky/embed/record.ts","./src/lexicon/types/app/bsky/embed/recordWithMedia.ts","./src/lexicon/types/app/bsky/embed/video.ts","./src/lexicon/types/app/bsky/feed/defs.ts","./src/lexicon/types/app/bsky/feed/describeFeedGenerator.ts","./src/lexicon/types/app/bsky/feed/generator.ts","./src/lexicon/types/app/bsky/feed/getActorFeeds.ts","./src/lexicon/types/app/bsky/feed/getActorLikes.ts","./src/lexicon/types/app/bsky/feed/getAuthorFeed.ts","./src/lexicon/types/app/bsky/feed/getFeed.ts","./src/lexicon/types/app/bsky/feed/getFeedGenerator.ts","./src/lexicon/types/app/bsky/feed/getFeedGenerators.ts","./src/lexicon/types/app/bsky/feed/getFeedSkeleton.ts","./src/lexicon/types/app/bsky/feed/getLikes.ts","./src/lexicon/types/app/bsky/feed/getListFeed.ts","./src/lexicon/types/app/bsky/feed/getPostThread.ts","./src/lexicon/types/app/bsky/feed/getPosts.ts","./src/lexicon/types/app/bsky/feed/getQuotes.ts","./src/lexicon/types/app/bsky/feed/getRepostedBy.ts","./src/lexicon/types/app/bsky/feed/getSuggestedFeeds.ts","./src/lexicon/types/app/bsky/feed/getTimeline.ts","./src/lexicon/types/app/bsky/feed/like.ts","./src/lexicon/types/app/bsky/feed/post.ts","./src/lexicon/types/app/bsky/feed/postgate.ts","./src/lexicon/types/app/bsky/feed/repost.ts","./src/lexicon/types/app/bsky/feed/searchPosts.ts","./src/lexicon/types/app/bsky/feed/sendInteractions.ts","./src/lexicon/types/app/bsky/feed/threadgate.ts","./src/lexicon/types/app/bsky/graph/block.ts","./src/lexicon/types/app/bsky/graph/defs.ts","./src/lexicon/types/app/bsky/graph/follow.ts","./src/lexicon/types/app/bsky/graph/getActorStarterPacks.ts","./src/lexicon/types/app/bsky/graph/getBlocks.ts","./src/lexicon/types/app/bsky/graph/getFollowers.ts","./src/lexicon/types/app/bsky/graph/getFollows.ts","./src/lexicon/types/app/bsky/graph/getKnownFollowers.ts","./src/lexicon/types/app/bsky/graph/getList.ts","./src/lexicon/types/app/bsky/graph/getListBlocks.ts","./src/lexicon/types/app/bsky/graph/getListMutes.ts","./src/lexicon/types/app/bsky/graph/getLists.ts","./src/lexicon/types/app/bsky/graph/getMutes.ts","./src/lexicon/types/app/bsky/graph/getRelationships.ts","./src/lexicon/types/app/bsky/graph/getStarterPack.ts","./src/lexicon/types/app/bsky/graph/getStarterPacks.ts","./src/lexicon/types/app/bsky/graph/getSuggestedFollowsByActor.ts","./src/lexicon/types/app/bsky/graph/list.ts","./src/lexicon/types/app/bsky/graph/listblock.ts","./src/lexicon/types/app/bsky/graph/listitem.ts","./src/lexicon/types/app/bsky/graph/muteActor.ts","./src/lexicon/types/app/bsky/graph/muteActorList.ts","./src/lexicon/types/app/bsky/graph/muteThread.ts","./src/lexicon/types/app/bsky/graph/searchStarterPacks.ts","./src/lexicon/types/app/bsky/graph/starterpack.ts","./src/lexicon/types/app/bsky/graph/unmuteActor.ts","./src/lexicon/types/app/bsky/graph/unmuteActorList.ts","./src/lexicon/types/app/bsky/graph/unmuteThread.ts","./src/lexicon/types/app/bsky/labeler/defs.ts","./src/lexicon/types/app/bsky/labeler/getServices.ts","./src/lexicon/types/app/bsky/labeler/service.ts","./src/lexicon/types/app/bsky/notification/getUnreadCount.ts","./src/lexicon/types/app/bsky/notification/listNotifications.ts","./src/lexicon/types/app/bsky/notification/putPreferences.ts","./src/lexicon/types/app/bsky/notification/registerPush.ts","./src/lexicon/types/app/bsky/notification/updateSeen.ts","./src/lexicon/types/app/bsky/richtext/facet.ts","./src/lexicon/types/app/bsky/unspecced/defs.ts","./src/lexicon/types/app/bsky/unspecced/getConfig.ts","./src/lexicon/types/app/bsky/unspecced/getPopularFeedGenerators.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestionsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getTaggedSuggestions.ts","./src/lexicon/types/app/bsky/unspecced/getTrendingTopics.ts","./src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/searchStarterPacksSkeleton.ts","./src/lexicon/types/app/bsky/video/defs.ts","./src/lexicon/types/app/bsky/video/getJobStatus.ts","./src/lexicon/types/app/bsky/video/getUploadLimits.ts","./src/lexicon/types/app/bsky/video/uploadVideo.ts","./src/lexicon/types/chat/bsky/actor/declaration.ts","./src/lexicon/types/chat/bsky/actor/defs.ts","./src/lexicon/types/chat/bsky/actor/deleteAccount.ts","./src/lexicon/types/chat/bsky/actor/exportAccountData.ts","./src/lexicon/types/chat/bsky/convo/defs.ts","./src/lexicon/types/chat/bsky/convo/deleteMessageForSelf.ts","./src/lexicon/types/chat/bsky/convo/getConvo.ts","./src/lexicon/types/chat/bsky/convo/getConvoForMembers.ts","./src/lexicon/types/chat/bsky/convo/getLog.ts","./src/lexicon/types/chat/bsky/convo/getMessages.ts","./src/lexicon/types/chat/bsky/convo/leaveConvo.ts","./src/lexicon/types/chat/bsky/convo/listConvos.ts","./src/lexicon/types/chat/bsky/convo/muteConvo.ts","./src/lexicon/types/chat/bsky/convo/sendMessage.ts","./src/lexicon/types/chat/bsky/convo/sendMessageBatch.ts","./src/lexicon/types/chat/bsky/convo/unmuteConvo.ts","./src/lexicon/types/chat/bsky/convo/updateRead.ts","./src/lexicon/types/chat/bsky/moderation/getActorMetadata.ts","./src/lexicon/types/chat/bsky/moderation/getMessageContext.ts","./src/lexicon/types/chat/bsky/moderation/updateActorAccess.ts","./src/lexicon/types/com/atproto/admin/defs.ts","./src/lexicon/types/com/atproto/admin/deleteAccount.ts","./src/lexicon/types/com/atproto/admin/disableAccountInvites.ts","./src/lexicon/types/com/atproto/admin/disableInviteCodes.ts","./src/lexicon/types/com/atproto/admin/enableAccountInvites.ts","./src/lexicon/types/com/atproto/admin/getAccountInfo.ts","./src/lexicon/types/com/atproto/admin/getAccountInfos.ts","./src/lexicon/types/com/atproto/admin/getInviteCodes.ts","./src/lexicon/types/com/atproto/admin/getSubjectStatus.ts","./src/lexicon/types/com/atproto/admin/searchAccounts.ts","./src/lexicon/types/com/atproto/admin/sendEmail.ts","./src/lexicon/types/com/atproto/admin/updateAccountEmail.ts","./src/lexicon/types/com/atproto/admin/updateAccountHandle.ts","./src/lexicon/types/com/atproto/admin/updateAccountPassword.ts","./src/lexicon/types/com/atproto/admin/updateSubjectStatus.ts","./src/lexicon/types/com/atproto/identity/getRecommendedDidCredentials.ts","./src/lexicon/types/com/atproto/identity/requestPlcOperationSignature.ts","./src/lexicon/types/com/atproto/identity/resolveHandle.ts","./src/lexicon/types/com/atproto/identity/signPlcOperation.ts","./src/lexicon/types/com/atproto/identity/submitPlcOperation.ts","./src/lexicon/types/com/atproto/identity/updateHandle.ts","./src/lexicon/types/com/atproto/label/defs.ts","./src/lexicon/types/com/atproto/label/queryLabels.ts","./src/lexicon/types/com/atproto/label/subscribeLabels.ts","./src/lexicon/types/com/atproto/moderation/createReport.ts","./src/lexicon/types/com/atproto/moderation/defs.ts","./src/lexicon/types/com/atproto/repo/applyWrites.ts","./src/lexicon/types/com/atproto/repo/createRecord.ts","./src/lexicon/types/com/atproto/repo/defs.ts","./src/lexicon/types/com/atproto/repo/deleteRecord.ts","./src/lexicon/types/com/atproto/repo/describeRepo.ts","./src/lexicon/types/com/atproto/repo/getRecord.ts","./src/lexicon/types/com/atproto/repo/importRepo.ts","./src/lexicon/types/com/atproto/repo/listMissingBlobs.ts","./src/lexicon/types/com/atproto/repo/listRecords.ts","./src/lexicon/types/com/atproto/repo/putRecord.ts","./src/lexicon/types/com/atproto/repo/strongRef.ts","./src/lexicon/types/com/atproto/repo/uploadBlob.ts","./src/lexicon/types/com/atproto/server/activateAccount.ts","./src/lexicon/types/com/atproto/server/checkAccountStatus.ts","./src/lexicon/types/com/atproto/server/confirmEmail.ts","./src/lexicon/types/com/atproto/server/createAccount.ts","./src/lexicon/types/com/atproto/server/createAppPassword.ts","./src/lexicon/types/com/atproto/server/createInviteCode.ts","./src/lexicon/types/com/atproto/server/createInviteCodes.ts","./src/lexicon/types/com/atproto/server/createSession.ts","./src/lexicon/types/com/atproto/server/deactivateAccount.ts","./src/lexicon/types/com/atproto/server/defs.ts","./src/lexicon/types/com/atproto/server/deleteAccount.ts","./src/lexicon/types/com/atproto/server/deleteSession.ts","./src/lexicon/types/com/atproto/server/describeServer.ts","./src/lexicon/types/com/atproto/server/getAccountInviteCodes.ts","./src/lexicon/types/com/atproto/server/getServiceAuth.ts","./src/lexicon/types/com/atproto/server/getSession.ts","./src/lexicon/types/com/atproto/server/listAppPasswords.ts","./src/lexicon/types/com/atproto/server/refreshSession.ts","./src/lexicon/types/com/atproto/server/requestAccountDelete.ts","./src/lexicon/types/com/atproto/server/requestEmailConfirmation.ts","./src/lexicon/types/com/atproto/server/requestEmailUpdate.ts","./src/lexicon/types/com/atproto/server/requestPasswordReset.ts","./src/lexicon/types/com/atproto/server/reserveSigningKey.ts","./src/lexicon/types/com/atproto/server/resetPassword.ts","./src/lexicon/types/com/atproto/server/revokeAppPassword.ts","./src/lexicon/types/com/atproto/server/updateEmail.ts","./src/lexicon/types/com/atproto/sync/getBlob.ts","./src/lexicon/types/com/atproto/sync/getBlocks.ts","./src/lexicon/types/com/atproto/sync/getCheckout.ts","./src/lexicon/types/com/atproto/sync/getHead.ts","./src/lexicon/types/com/atproto/sync/getLatestCommit.ts","./src/lexicon/types/com/atproto/sync/getRecord.ts","./src/lexicon/types/com/atproto/sync/getRepo.ts","./src/lexicon/types/com/atproto/sync/getRepoStatus.ts","./src/lexicon/types/com/atproto/sync/listBlobs.ts","./src/lexicon/types/com/atproto/sync/listRepos.ts","./src/lexicon/types/com/atproto/sync/notifyOfUpdate.ts","./src/lexicon/types/com/atproto/sync/requestCrawl.ts","./src/lexicon/types/com/atproto/sync/subscribeRepos.ts","./src/lexicon/types/com/atproto/temp/addReservedHandle.ts","./src/lexicon/types/com/atproto/temp/checkSignupQueue.ts","./src/lexicon/types/com/atproto/temp/fetchLabels.ts","./src/lexicon/types/com/atproto/temp/requestPhoneVerification.ts","./src/lexicon/types/tools/ozone/communication/createTemplate.ts","./src/lexicon/types/tools/ozone/communication/defs.ts","./src/lexicon/types/tools/ozone/communication/deleteTemplate.ts","./src/lexicon/types/tools/ozone/communication/listTemplates.ts","./src/lexicon/types/tools/ozone/communication/updateTemplate.ts","./src/lexicon/types/tools/ozone/moderation/defs.ts","./src/lexicon/types/tools/ozone/moderation/emitEvent.ts","./src/lexicon/types/tools/ozone/moderation/getEvent.ts","./src/lexicon/types/tools/ozone/moderation/getRecord.ts","./src/lexicon/types/tools/ozone/moderation/getRecords.ts","./src/lexicon/types/tools/ozone/moderation/getRepo.ts","./src/lexicon/types/tools/ozone/moderation/getRepos.ts","./src/lexicon/types/tools/ozone/moderation/queryEvents.ts","./src/lexicon/types/tools/ozone/moderation/queryStatuses.ts","./src/lexicon/types/tools/ozone/moderation/searchRepos.ts","./src/lexicon/types/tools/ozone/server/getConfig.ts","./src/lexicon/types/tools/ozone/set/addValues.ts","./src/lexicon/types/tools/ozone/set/defs.ts","./src/lexicon/types/tools/ozone/set/deleteSet.ts","./src/lexicon/types/tools/ozone/set/deleteValues.ts","./src/lexicon/types/tools/ozone/set/getValues.ts","./src/lexicon/types/tools/ozone/set/querySets.ts","./src/lexicon/types/tools/ozone/set/upsertSet.ts","./src/lexicon/types/tools/ozone/setting/defs.ts","./src/lexicon/types/tools/ozone/setting/listOptions.ts","./src/lexicon/types/tools/ozone/setting/removeOptions.ts","./src/lexicon/types/tools/ozone/setting/upsertOption.ts","./src/lexicon/types/tools/ozone/signature/defs.ts","./src/lexicon/types/tools/ozone/signature/findCorrelation.ts","./src/lexicon/types/tools/ozone/signature/findRelatedAccounts.ts","./src/lexicon/types/tools/ozone/signature/searchAccounts.ts","./src/lexicon/types/tools/ozone/team/addMember.ts","./src/lexicon/types/tools/ozone/team/defs.ts","./src/lexicon/types/tools/ozone/team/deleteMember.ts","./src/lexicon/types/tools/ozone/team/listMembers.ts","./src/lexicon/types/tools/ozone/team/updateMember.ts","./src/mod-service/index.ts","./src/mod-service/status.ts","./src/mod-service/subject.ts","./src/mod-service/types.ts","./src/mod-service/util.ts","./src/mod-service/views.ts","./src/sequencer/index.ts","./src/sequencer/outbox.ts","./src/sequencer/sequencer.ts","./src/set/service.ts","./src/setting/constants.ts","./src/setting/service.ts","./src/setting/types.ts","./src/setting/validators.ts","./src/tag-service/content-tagger.ts","./src/tag-service/embed-tagger.ts","./src/tag-service/index.ts","./src/tag-service/language-data.ts","./src/tag-service/language-tagger.ts","./src/tag-service/util.ts","./src/team/index.ts"],"version":"5.6.3"}
|