@atproto/pds 0.4.176 → 0.4.177
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 +33 -0
- package/dist/account-manager/db/migrations/007-lexicon-failures-index.d.ts +4 -0
- package/dist/account-manager/db/migrations/007-lexicon-failures-index.d.ts.map +1 -0
- package/dist/account-manager/db/migrations/007-lexicon-failures-index.js +17 -0
- package/dist/account-manager/db/migrations/007-lexicon-failures-index.js.map +1 -0
- package/dist/account-manager/db/migrations/index.d.ts +2 -0
- package/dist/account-manager/db/migrations/index.d.ts.map +1 -1
- package/dist/account-manager/db/migrations/index.js +2 -0
- package/dist/account-manager/db/migrations/index.js.map +1 -1
- package/dist/account-manager/helpers/lexicon.d.ts.map +1 -1
- package/dist/account-manager/helpers/lexicon.js +7 -0
- package/dist/account-manager/helpers/lexicon.js.map +1 -1
- package/dist/account-manager/helpers/token.d.ts +32 -32
- package/dist/account-manager/scope-reference-getter.d.ts +14 -0
- package/dist/account-manager/scope-reference-getter.d.ts.map +1 -0
- package/dist/account-manager/scope-reference-getter.js +69 -0
- package/dist/account-manager/scope-reference-getter.js.map +1 -0
- package/dist/actor-store/actor-store.d.ts.map +1 -1
- package/dist/actor-store/actor-store.js +4 -1
- package/dist/actor-store/actor-store.js.map +1 -1
- package/dist/actor-store/blob/transactor.d.ts +2 -2
- package/dist/actor-store/blob/transactor.d.ts.map +1 -1
- package/dist/actor-store/blob/transactor.js +73 -24
- package/dist/actor-store/blob/transactor.js.map +1 -1
- package/dist/actor-store/record/reader.d.ts.map +1 -1
- package/dist/actor-store/record/reader.js +12 -9
- package/dist/actor-store/record/reader.js.map +1 -1
- package/dist/actor-store/repo/sql-repo-reader.d.ts.map +1 -1
- package/dist/actor-store/repo/sql-repo-reader.js +2 -2
- package/dist/actor-store/repo/sql-repo-reader.js.map +1 -1
- package/dist/actor-store/repo/sql-repo-transactor.d.ts.map +1 -1
- package/dist/actor-store/repo/sql-repo-transactor.js +16 -19
- package/dist/actor-store/repo/sql-repo-transactor.js.map +1 -1
- package/dist/actor-store/repo/transactor.d.ts.map +1 -1
- package/dist/actor-store/repo/transactor.js +11 -15
- package/dist/actor-store/repo/transactor.js.map +1 -1
- package/dist/api/com/atproto/admin/updateSubjectStatus.js +6 -2
- package/dist/api/com/atproto/admin/updateSubjectStatus.js.map +1 -1
- package/dist/api/com/atproto/repo/importRepo.d.ts.map +1 -1
- package/dist/api/com/atproto/repo/importRepo.js +43 -51
- package/dist/api/com/atproto/repo/importRepo.js.map +1 -1
- package/dist/auth-verifier.d.ts.map +1 -1
- package/dist/auth-verifier.js +2 -12
- package/dist/auth-verifier.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +20 -4
- package/dist/context.js.map +1 -1
- package/dist/disk-blobstore.d.ts.map +1 -1
- package/dist/disk-blobstore.js +10 -2
- package/dist/disk-blobstore.js.map +1 -1
- package/dist/lexicon/index.d.ts +49 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +52 -1
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +470 -16
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +329 -7
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/com/atproto/moderation/defs.d.ts +8 -8
- package/dist/lexicon/types/com/atproto/moderation/defs.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/moderation/defs.js +7 -7
- package/dist/lexicon/types/com/atproto/moderation/defs.js.map +1 -1
- package/dist/lexicon/types/com/atproto/temp/dereferenceScope.d.ts +24 -0
- package/dist/lexicon/types/com/atproto/temp/dereferenceScope.d.ts.map +1 -0
- package/dist/lexicon/types/com/atproto/temp/dereferenceScope.js +7 -0
- package/dist/lexicon/types/com/atproto/temp/dereferenceScope.js.map +1 -0
- package/dist/lexicon/types/tools/ozone/report/defs.d.ts +92 -0
- package/dist/lexicon/types/tools/ozone/report/defs.d.ts.map +1 -0
- package/dist/lexicon/types/tools/ozone/report/defs.js +98 -0
- package/dist/lexicon/types/tools/ozone/report/defs.js.map +1 -0
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +2 -1
- package/dist/logger.js.map +1 -1
- package/dist/scripts/rebuild-repo.d.ts.map +1 -1
- package/dist/scripts/rebuild-repo.js +3 -5
- package/dist/scripts/rebuild-repo.js.map +1 -1
- package/dist/scripts/sequencer-recovery/recoverer.js +8 -10
- package/dist/scripts/sequencer-recovery/recoverer.js.map +1 -1
- package/dist/sequencer/sequencer.js +2 -2
- package/dist/sequencer/sequencer.js.map +1 -1
- package/package.json +19 -16
- package/src/account-manager/db/migrations/007-lexicon-failures-index.ts +14 -0
- package/src/account-manager/db/migrations/index.ts +2 -0
- package/src/account-manager/helpers/lexicon.ts +14 -1
- package/src/account-manager/scope-reference-getter.ts +92 -0
- package/src/actor-store/actor-store.ts +5 -9
- package/src/actor-store/blob/transactor.ts +115 -42
- package/src/actor-store/record/reader.ts +14 -12
- package/src/actor-store/repo/sql-repo-reader.ts +12 -14
- package/src/actor-store/repo/sql-repo-transactor.ts +17 -23
- package/src/actor-store/repo/transactor.ts +29 -32
- package/src/api/com/atproto/admin/updateSubjectStatus.ts +7 -7
- package/src/api/com/atproto/repo/importRepo.ts +41 -55
- package/src/auth-verifier.ts +4 -20
- package/src/context.ts +26 -5
- package/src/disk-blobstore.ts +20 -3
- package/src/lexicon/index.ts +82 -0
- package/src/lexicon/lexicons.ts +341 -7
- package/src/lexicon/types/com/atproto/moderation/defs.ts +52 -7
- package/src/lexicon/types/com/atproto/temp/dereferenceScope.ts +42 -0
- package/src/lexicon/types/tools/ozone/report/defs.ts +154 -0
- package/src/logger.ts +1 -0
- package/src/scripts/rebuild-repo.ts +4 -5
- package/src/scripts/sequencer-recovery/recoverer.ts +8 -12
- package/src/sequencer/sequencer.ts +3 -3
- package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,5 +1,4 @@
|
|
1
1
|
import { CID } from 'multiformats/cid'
|
2
|
-
import PQueue from 'p-queue'
|
3
2
|
import { TID } from '@atproto/common'
|
4
3
|
import { BlobRef, LexValue, RepoRecord } from '@atproto/lexicon'
|
5
4
|
import {
|
@@ -11,7 +10,6 @@ import {
|
|
11
10
|
} from '@atproto/repo'
|
12
11
|
import { AtUri } from '@atproto/syntax'
|
13
12
|
import { InvalidRequestError } from '@atproto/xrpc-server'
|
14
|
-
import { ActorStoreTransactor } from '../../../../actor-store/actor-store-transactor'
|
15
13
|
import { ACCESS_FULL } from '../../../../auth-scope'
|
16
14
|
import { AppContext } from '../../../../context'
|
17
15
|
import { Server } from '../../../../lexicon'
|
@@ -32,53 +30,47 @@ export default function (server: Server, ctx: AppContext) {
|
|
32
30
|
|
33
31
|
const { did } = auth.credentials
|
34
32
|
|
35
|
-
|
36
|
-
|
37
|
-
)
|
38
|
-
|
39
|
-
|
40
|
-
|
33
|
+
// @NOTE process as much as we can before the transaction, in particular
|
34
|
+
// the reading of the body stream.
|
35
|
+
const { roots, blocks } = await readCarStream(input.body)
|
36
|
+
if (roots.length !== 1) {
|
37
|
+
await blocks.dump()
|
38
|
+
throw new InvalidRequestError('expected one root')
|
39
|
+
}
|
41
40
|
|
42
|
-
const
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
const now = new Date().toISOString()
|
47
|
-
const rev = TID.nextStr()
|
48
|
-
const did = actorStore.repo.did
|
41
|
+
const blockMap = new BlockMap()
|
42
|
+
for await (const block of blocks) {
|
43
|
+
blockMap.set(block.cid, block.bytes)
|
44
|
+
}
|
49
45
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
const recordQueue = new PQueue({ concurrency: 50 })
|
71
|
-
const controller = new AbortController()
|
72
|
-
for (const write of diff.writes) {
|
73
|
-
recordQueue
|
74
|
-
.add(
|
75
|
-
async () => {
|
46
|
+
await ctx.actorStore.transact(did, async (store) => {
|
47
|
+
const now = new Date().toISOString()
|
48
|
+
const rev = TID.nextStr()
|
49
|
+
const did = store.repo.did
|
50
|
+
|
51
|
+
const currRepo = await store.repo.maybeLoadRepo()
|
52
|
+
const diff = await verifyDiff(
|
53
|
+
currRepo,
|
54
|
+
blockMap,
|
55
|
+
roots[0],
|
56
|
+
undefined,
|
57
|
+
undefined,
|
58
|
+
{ ensureLeaves: false },
|
59
|
+
)
|
60
|
+
diff.commit.rev = rev
|
61
|
+
await store.repo.storage.applyCommit(diff.commit, currRepo === null)
|
62
|
+
|
63
|
+
// @NOTE There is no point in performing the following concurrently
|
64
|
+
// since better-sqlite3 is synchronous.
|
65
|
+
for (const write of diff.writes) {
|
76
66
|
const uri = AtUri.make(did, write.collection, write.rkey)
|
77
67
|
if (write.action === WriteOpAction.Delete) {
|
78
|
-
await
|
68
|
+
await store.record.deleteRecord(uri)
|
79
69
|
} else {
|
80
70
|
let parsedRecord: RepoRecord
|
81
71
|
try {
|
72
|
+
// @NOTE getAndParseRecord returns a promise for historical
|
73
|
+
// reasons but it's internal processing is actually synchronous.
|
82
74
|
const parsed = await getAndParseRecord(blockMap, write.cid)
|
83
75
|
parsedRecord = parsed.record
|
84
76
|
} catch {
|
@@ -86,7 +78,8 @@ const importRepo = async (
|
|
86
78
|
`Could not parse record at '${write.collection}/${write.rkey}'`,
|
87
79
|
)
|
88
80
|
}
|
89
|
-
|
81
|
+
|
82
|
+
await store.record.indexRecord(
|
90
83
|
uri,
|
91
84
|
write.cid,
|
92
85
|
parsedRecord,
|
@@ -95,19 +88,12 @@ const importRepo = async (
|
|
95
88
|
now,
|
96
89
|
)
|
97
90
|
const recordBlobs = findBlobRefs(parsedRecord)
|
98
|
-
|
99
|
-
uri.toString(),
|
100
|
-
recordBlobs,
|
101
|
-
)
|
102
|
-
await Promise.all([indexRecord, indexRecordBlobs])
|
91
|
+
await store.repo.blob.insertBlobs(uri.toString(), recordBlobs)
|
103
92
|
}
|
104
|
-
}
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
}
|
109
|
-
await recordQueue.onIdle()
|
110
|
-
controller.signal.throwIfAborted()
|
93
|
+
}
|
94
|
+
})
|
95
|
+
},
|
96
|
+
})
|
111
97
|
}
|
112
98
|
|
113
99
|
export const findBlobRefs = (val: LexValue, layer = 0): BlobRef[] => {
|
package/src/auth-verifier.ts
CHANGED
@@ -7,7 +7,7 @@ import { IdResolver, getDidKeyFromMultibase } from '@atproto/identity'
|
|
7
7
|
import {
|
8
8
|
OAuthError,
|
9
9
|
OAuthVerifier,
|
10
|
-
|
10
|
+
VerifyTokenPayloadOptions,
|
11
11
|
WWWAuthenticateError,
|
12
12
|
} from '@atproto/oauth-provider'
|
13
13
|
import {
|
@@ -39,7 +39,6 @@ import {
|
|
39
39
|
} from './auth-output'
|
40
40
|
import { ACCESS_STANDARD, AuthScope, isAuthScope } from './auth-scope'
|
41
41
|
import { softDeleted } from './db'
|
42
|
-
import { oauthLogger } from './logger'
|
43
42
|
import { appendVary } from './util/http'
|
44
43
|
import { WithRequired } from './util/types'
|
45
44
|
|
@@ -338,7 +337,7 @@ export class AuthVerifier {
|
|
338
337
|
OAuthOutput,
|
339
338
|
P
|
340
339
|
> {
|
341
|
-
const verifyTokenOptions:
|
340
|
+
const verifyTokenOptions: VerifyTokenPayloadOptions = {
|
342
341
|
audience: [this.dids.pds],
|
343
342
|
scope: ['atproto'],
|
344
343
|
}
|
@@ -358,7 +357,7 @@ export class AuthVerifier {
|
|
358
357
|
const originalUrl = req.originalUrl || req.url || '/'
|
359
358
|
const url = new URL(originalUrl, this._publicUrl)
|
360
359
|
|
361
|
-
const {
|
360
|
+
const { scope, sub: did } = await this.oauthVerifier
|
362
361
|
.authenticateRequest(
|
363
362
|
req.method || 'GET',
|
364
363
|
url,
|
@@ -383,28 +382,13 @@ export class AuthVerifier {
|
|
383
382
|
throw err
|
384
383
|
})
|
385
384
|
|
386
|
-
// @TODO drop this once oauth provider no longer accepts DPoP proof with
|
387
|
-
// query or fragment in "htu" claim.
|
388
|
-
if (dpopProof?.htu.match(/[?#]/)) {
|
389
|
-
oauthLogger.info(
|
390
|
-
{
|
391
|
-
client_id: tokenClaims.client_id,
|
392
|
-
htu: dpopProof.htu,
|
393
|
-
},
|
394
|
-
'DPoP proof "htu" contains query or fragment',
|
395
|
-
)
|
396
|
-
}
|
397
|
-
|
398
|
-
const { sub: did } = tokenClaims
|
399
385
|
if (typeof did !== 'string' || !did.startsWith('did:')) {
|
400
386
|
throw new InvalidRequestError('Malformed token', 'InvalidToken')
|
401
387
|
}
|
402
388
|
|
403
389
|
await this.verifyStatus(did, verifyStatusOptions)
|
404
390
|
|
405
|
-
const permissions = new ScopePermissionsTransition(
|
406
|
-
tokenClaims.scope?.split(' '),
|
407
|
-
)
|
391
|
+
const permissions = new ScopePermissionsTransition(scope?.split(' '))
|
408
392
|
|
409
393
|
// Should never happen
|
410
394
|
if (!permissions.scopes.has('atproto')) {
|
package/src/context.ts
CHANGED
@@ -32,6 +32,7 @@ import {
|
|
32
32
|
} from '@atproto-labs/fetch-node'
|
33
33
|
import { AccountManager } from './account-manager/account-manager'
|
34
34
|
import { OAuthStore } from './account-manager/oauth-store'
|
35
|
+
import { ScopeReferenceGetter } from './account-manager/scope-reference-getter'
|
35
36
|
import { ActorStore } from './actor-store/actor-store'
|
36
37
|
import { authPassthru, forwardedFor } from './api/proxy'
|
37
38
|
import {
|
@@ -46,7 +47,7 @@ import { Crawlers } from './crawlers'
|
|
46
47
|
import { DidSqliteCache } from './did-cache'
|
47
48
|
import { DiskBlobStore } from './disk-blobstore'
|
48
49
|
import { ImageUrlBuilder } from './image/image-url-builder'
|
49
|
-
import { fetchLogger, lexiconResolverLogger } from './logger'
|
50
|
+
import { fetchLogger, lexiconResolverLogger, oauthLogger } from './logger'
|
50
51
|
import { ServerMailer } from './mailer'
|
51
52
|
import { ModerationMailer } from './mailer/moderation'
|
52
53
|
import { LocalViewer, LocalViewerCreator } from './read-after-write/viewer'
|
@@ -397,10 +398,11 @@ export class AppContext {
|
|
397
398
|
protected_resources: [new URL(cfg.oauth.issuer).origin],
|
398
399
|
},
|
399
400
|
// If the PDS is both an authorization server & resource server (no
|
400
|
-
// entryway),
|
401
|
-
//
|
402
|
-
//
|
403
|
-
|
401
|
+
// entryway), we can afford to check the token validity on every
|
402
|
+
// request. This allows revoked tokens to be rejected immediately.
|
403
|
+
// This also allows JWT to be shorter since some claims (notably the
|
404
|
+
// "scope" claim) do not need to be included in the token.
|
405
|
+
accessTokenMode: AccessTokenMode.stateful,
|
404
406
|
|
405
407
|
getClientInfo(clientId) {
|
406
408
|
return {
|
@@ -410,6 +412,10 @@ export class AppContext {
|
|
410
412
|
})
|
411
413
|
: undefined
|
412
414
|
|
415
|
+
const scopeRefGetter = entrywayAgent
|
416
|
+
? new ScopeReferenceGetter(entrywayAgent, redisScratch)
|
417
|
+
: undefined
|
418
|
+
|
413
419
|
const oauthVerifier: OAuthVerifier =
|
414
420
|
oauthProvider ?? // OAuthProvider extends OAuthVerifier
|
415
421
|
new OAuthVerifier({
|
@@ -417,6 +423,21 @@ export class AppContext {
|
|
417
423
|
keyset: [await JoseKey.fromKeyLike(jwtPublicKey!, undefined, 'ES256K')],
|
418
424
|
dpopSecret: secrets.dpopSecret,
|
419
425
|
redis: redisScratch,
|
426
|
+
onDecodeToken: scopeRefGetter
|
427
|
+
? async ({ payload, dpopProof }) => {
|
428
|
+
// @TODO drop this once oauth provider no longer accepts DPoP proof with
|
429
|
+
// query or fragment in "htu" claim.
|
430
|
+
if (dpopProof?.htu.match(/[?#]/)) {
|
431
|
+
oauthLogger.info(
|
432
|
+
{ htu: dpopProof.htu, client_id: payload.client_id },
|
433
|
+
'DPoP proof "htu" contains query or fragment',
|
434
|
+
)
|
435
|
+
}
|
436
|
+
|
437
|
+
const scope = await scopeRefGetter.dereference(payload.scope)
|
438
|
+
return { ...payload, scope }
|
439
|
+
}
|
440
|
+
: undefined,
|
420
441
|
})
|
421
442
|
|
422
443
|
const authVerifier = new AuthVerifier(
|
package/src/disk-blobstore.ts
CHANGED
@@ -3,10 +3,16 @@ import fs from 'node:fs/promises'
|
|
3
3
|
import path from 'node:path'
|
4
4
|
import stream from 'node:stream'
|
5
5
|
import { CID } from 'multiformats/cid'
|
6
|
-
import {
|
6
|
+
import {
|
7
|
+
aggregateErrors,
|
8
|
+
chunkArray,
|
9
|
+
fileExists,
|
10
|
+
isErrnoException,
|
11
|
+
rmIfExists,
|
12
|
+
} from '@atproto/common'
|
7
13
|
import { randomStr } from '@atproto/crypto'
|
8
14
|
import { BlobNotFoundError, BlobStore } from '@atproto/repo'
|
9
|
-
import {
|
15
|
+
import { blobStoreLogger as log } from './logger'
|
10
16
|
|
11
17
|
export class DiskBlobStore implements BlobStore {
|
12
18
|
constructor(
|
@@ -137,7 +143,18 @@ export class DiskBlobStore implements BlobStore {
|
|
137
143
|
}
|
138
144
|
|
139
145
|
async deleteMany(cids: CID[]): Promise<void> {
|
140
|
-
|
146
|
+
const errors: unknown[] = []
|
147
|
+
for (const chunk of chunkArray(cids, 500)) {
|
148
|
+
await Promise.all(
|
149
|
+
chunk.map((cid) =>
|
150
|
+
this.delete(cid).catch((err) => {
|
151
|
+
log.error({ err, cid: cid.toString() }, 'error deleting blob')
|
152
|
+
errors.push(err)
|
153
|
+
}),
|
154
|
+
),
|
155
|
+
)
|
156
|
+
}
|
157
|
+
if (errors.length) throw aggregateErrors(errors)
|
141
158
|
}
|
142
159
|
|
143
160
|
async deleteAll(): Promise<void> {
|
package/src/lexicon/index.ts
CHANGED
@@ -198,6 +198,7 @@ import * as ComAtprotoSyncSubscribeRepos from './types/com/atproto/sync/subscrib
|
|
198
198
|
import * as ComAtprotoTempAddReservedHandle from './types/com/atproto/temp/addReservedHandle.js'
|
199
199
|
import * as ComAtprotoTempCheckHandleAvailability from './types/com/atproto/temp/checkHandleAvailability.js'
|
200
200
|
import * as ComAtprotoTempCheckSignupQueue from './types/com/atproto/temp/checkSignupQueue.js'
|
201
|
+
import * as ComAtprotoTempDereferenceScope from './types/com/atproto/temp/dereferenceScope.js'
|
201
202
|
import * as ComAtprotoTempFetchLabels from './types/com/atproto/temp/fetchLabels.js'
|
202
203
|
import * as ComAtprotoTempRequestPhoneVerification from './types/com/atproto/temp/requestPhoneVerification.js'
|
203
204
|
import * as ComAtprotoTempRevokeAccountCredentials from './types/com/atproto/temp/revokeAccountCredentials.js'
|
@@ -289,6 +290,75 @@ export const TOOLS_OZONE_MODERATION = {
|
|
289
290
|
DefsTimelineEventPlcTombstone:
|
290
291
|
'tools.ozone.moderation.defs#timelineEventPlcTombstone',
|
291
292
|
}
|
293
|
+
export const TOOLS_OZONE_REPORT = {
|
294
|
+
DefsReasonAppeal: 'tools.ozone.report.defs#reasonAppeal',
|
295
|
+
DefsReasonViolenceAnimalWelfare:
|
296
|
+
'tools.ozone.report.defs#reasonViolenceAnimalWelfare',
|
297
|
+
DefsReasonViolenceThreats: 'tools.ozone.report.defs#reasonViolenceThreats',
|
298
|
+
DefsReasonViolenceGraphicContent:
|
299
|
+
'tools.ozone.report.defs#reasonViolenceGraphicContent',
|
300
|
+
DefsReasonViolenceSelfHarm: 'tools.ozone.report.defs#reasonViolenceSelfHarm',
|
301
|
+
DefsReasonViolenceGlorification:
|
302
|
+
'tools.ozone.report.defs#reasonViolenceGlorification',
|
303
|
+
DefsReasonViolenceExtremistContent:
|
304
|
+
'tools.ozone.report.defs#reasonViolenceExtremistContent',
|
305
|
+
DefsReasonViolenceTrafficking:
|
306
|
+
'tools.ozone.report.defs#reasonViolenceTrafficking',
|
307
|
+
DefsReasonViolenceOther: 'tools.ozone.report.defs#reasonViolenceOther',
|
308
|
+
DefsReasonSexualAbuseContent:
|
309
|
+
'tools.ozone.report.defs#reasonSexualAbuseContent',
|
310
|
+
DefsReasonSexualNCII: 'tools.ozone.report.defs#reasonSexualNCII',
|
311
|
+
DefsReasonSexualSextortion: 'tools.ozone.report.defs#reasonSexualSextortion',
|
312
|
+
DefsReasonSexualDeepfake: 'tools.ozone.report.defs#reasonSexualDeepfake',
|
313
|
+
DefsReasonSexualAnimal: 'tools.ozone.report.defs#reasonSexualAnimal',
|
314
|
+
DefsReasonSexualUnlabeled: 'tools.ozone.report.defs#reasonSexualUnlabeled',
|
315
|
+
DefsReasonSexualOther: 'tools.ozone.report.defs#reasonSexualOther',
|
316
|
+
DefsReasonChildSafetyCSAM: 'tools.ozone.report.defs#reasonChildSafetyCSAM',
|
317
|
+
DefsReasonChildSafetyGroom: 'tools.ozone.report.defs#reasonChildSafetyGroom',
|
318
|
+
DefsReasonChildSafetyMinorPrivacy:
|
319
|
+
'tools.ozone.report.defs#reasonChildSafetyMinorPrivacy',
|
320
|
+
DefsReasonChildSafetyEndangerment:
|
321
|
+
'tools.ozone.report.defs#reasonChildSafetyEndangerment',
|
322
|
+
DefsReasonChildSafetyHarassment:
|
323
|
+
'tools.ozone.report.defs#reasonChildSafetyHarassment',
|
324
|
+
DefsReasonChildSafetyPromotion:
|
325
|
+
'tools.ozone.report.defs#reasonChildSafetyPromotion',
|
326
|
+
DefsReasonChildSafetyOther: 'tools.ozone.report.defs#reasonChildSafetyOther',
|
327
|
+
DefsReasonHarassmentTroll: 'tools.ozone.report.defs#reasonHarassmentTroll',
|
328
|
+
DefsReasonHarassmentTargeted:
|
329
|
+
'tools.ozone.report.defs#reasonHarassmentTargeted',
|
330
|
+
DefsReasonHarassmentHateSpeech:
|
331
|
+
'tools.ozone.report.defs#reasonHarassmentHateSpeech',
|
332
|
+
DefsReasonHarassmentDoxxing:
|
333
|
+
'tools.ozone.report.defs#reasonHarassmentDoxxing',
|
334
|
+
DefsReasonHarassmentOther: 'tools.ozone.report.defs#reasonHarassmentOther',
|
335
|
+
DefsReasonMisleadingBot: 'tools.ozone.report.defs#reasonMisleadingBot',
|
336
|
+
DefsReasonMisleadingImpersonation:
|
337
|
+
'tools.ozone.report.defs#reasonMisleadingImpersonation',
|
338
|
+
DefsReasonMisleadingSpam: 'tools.ozone.report.defs#reasonMisleadingSpam',
|
339
|
+
DefsReasonMisleadingScam: 'tools.ozone.report.defs#reasonMisleadingScam',
|
340
|
+
DefsReasonMisleadingSyntheticContent:
|
341
|
+
'tools.ozone.report.defs#reasonMisleadingSyntheticContent',
|
342
|
+
DefsReasonMisleadingMisinformation:
|
343
|
+
'tools.ozone.report.defs#reasonMisleadingMisinformation',
|
344
|
+
DefsReasonMisleadingOther: 'tools.ozone.report.defs#reasonMisleadingOther',
|
345
|
+
DefsReasonRuleSiteSecurity: 'tools.ozone.report.defs#reasonRuleSiteSecurity',
|
346
|
+
DefsReasonRuleStolenContent:
|
347
|
+
'tools.ozone.report.defs#reasonRuleStolenContent',
|
348
|
+
DefsReasonRuleProhibitedSales:
|
349
|
+
'tools.ozone.report.defs#reasonRuleProhibitedSales',
|
350
|
+
DefsReasonRuleBanEvasion: 'tools.ozone.report.defs#reasonRuleBanEvasion',
|
351
|
+
DefsReasonRuleOther: 'tools.ozone.report.defs#reasonRuleOther',
|
352
|
+
DefsReasonCivicElectoralProcess:
|
353
|
+
'tools.ozone.report.defs#reasonCivicElectoralProcess',
|
354
|
+
DefsReasonCivicDisclosure: 'tools.ozone.report.defs#reasonCivicDisclosure',
|
355
|
+
DefsReasonCivicInterference:
|
356
|
+
'tools.ozone.report.defs#reasonCivicInterference',
|
357
|
+
DefsReasonCivicMisinformation:
|
358
|
+
'tools.ozone.report.defs#reasonCivicMisinformation',
|
359
|
+
DefsReasonCivicImpersonation:
|
360
|
+
'tools.ozone.report.defs#reasonCivicImpersonation',
|
361
|
+
}
|
292
362
|
export const TOOLS_OZONE_TEAM = {
|
293
363
|
DefsRoleAdmin: 'tools.ozone.team.defs#roleAdmin',
|
294
364
|
DefsRoleModerator: 'tools.ozone.team.defs#roleModerator',
|
@@ -2843,6 +2913,18 @@ export class ComAtprotoTempNS {
|
|
2843
2913
|
return this._server.xrpc.method(nsid, cfg)
|
2844
2914
|
}
|
2845
2915
|
|
2916
|
+
dereferenceScope<A extends Auth = void>(
|
2917
|
+
cfg: MethodConfigOrHandler<
|
2918
|
+
A,
|
2919
|
+
ComAtprotoTempDereferenceScope.QueryParams,
|
2920
|
+
ComAtprotoTempDereferenceScope.HandlerInput,
|
2921
|
+
ComAtprotoTempDereferenceScope.HandlerOutput
|
2922
|
+
>,
|
2923
|
+
) {
|
2924
|
+
const nsid = 'com.atproto.temp.dereferenceScope' // @ts-ignore
|
2925
|
+
return this._server.xrpc.method(nsid, cfg)
|
2926
|
+
}
|
2927
|
+
|
2846
2928
|
fetchLabels<A extends Auth = void>(
|
2847
2929
|
cfg: MethodConfigOrHandler<
|
2848
2930
|
A,
|