@atproto/ozone 0.1.107 → 0.1.108

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 (198) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/api/index.d.ts.map +1 -1
  3. package/dist/api/index.js +6 -0
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/server/getConfig.d.ts.map +1 -1
  6. package/dist/api/server/getConfig.js +1 -0
  7. package/dist/api/server/getConfig.js.map +1 -1
  8. package/dist/api/setting/removeOptions.d.ts.map +1 -1
  9. package/dist/api/setting/removeOptions.js +1 -0
  10. package/dist/api/setting/removeOptions.js.map +1 -1
  11. package/dist/api/setting/upsertOption.js +7 -0
  12. package/dist/api/setting/upsertOption.js.map +1 -1
  13. package/dist/api/util.d.ts +1 -1
  14. package/dist/api/util.d.ts.map +1 -1
  15. package/dist/api/util.js +6 -1
  16. package/dist/api/util.js.map +1 -1
  17. package/dist/api/verification/grantVerifications.d.ts +4 -0
  18. package/dist/api/verification/grantVerifications.d.ts.map +1 -0
  19. package/dist/api/verification/grantVerifications.js +52 -0
  20. package/dist/api/verification/grantVerifications.js.map +1 -0
  21. package/dist/api/verification/listVerifications.d.ts +4 -0
  22. package/dist/api/verification/listVerifications.d.ts.map +1 -0
  23. package/dist/api/verification/listVerifications.js +32 -0
  24. package/dist/api/verification/listVerifications.js.map +1 -0
  25. package/dist/api/verification/revokeVerifications.d.ts +4 -0
  26. package/dist/api/verification/revokeVerifications.d.ts.map +1 -0
  27. package/dist/api/verification/revokeVerifications.js +36 -0
  28. package/dist/api/verification/revokeVerifications.js.map +1 -0
  29. package/dist/auth-verifier.d.ts +4 -1
  30. package/dist/auth-verifier.d.ts.map +1 -1
  31. package/dist/auth-verifier.js +4 -3
  32. package/dist/auth-verifier.js.map +1 -1
  33. package/dist/background.d.ts +3 -1
  34. package/dist/background.d.ts.map +1 -1
  35. package/dist/background.js +3 -2
  36. package/dist/background.js.map +1 -1
  37. package/dist/config/config.d.ts +9 -0
  38. package/dist/config/config.d.ts.map +1 -1
  39. package/dist/config/config.js +10 -0
  40. package/dist/config/config.js.map +1 -1
  41. package/dist/config/env.d.ts +5 -0
  42. package/dist/config/env.d.ts.map +1 -1
  43. package/dist/config/env.js +5 -0
  44. package/dist/config/env.js.map +1 -1
  45. package/dist/context.d.ts +6 -0
  46. package/dist/context.d.ts.map +1 -1
  47. package/dist/context.js +12 -0
  48. package/dist/context.js.map +1 -1
  49. package/dist/daemon/context.d.ts +3 -0
  50. package/dist/daemon/context.d.ts.map +1 -1
  51. package/dist/daemon/context.js +11 -0
  52. package/dist/daemon/context.js.map +1 -1
  53. package/dist/daemon/verification-listener.d.ts +29 -0
  54. package/dist/daemon/verification-listener.d.ts.map +1 -0
  55. package/dist/daemon/verification-listener.js +171 -0
  56. package/dist/daemon/verification-listener.js.map +1 -0
  57. package/dist/db/migrations/20250415T201720309Z-verification.d.ts +4 -0
  58. package/dist/db/migrations/20250415T201720309Z-verification.d.ts.map +1 -0
  59. package/dist/db/migrations/20250415T201720309Z-verification.js +35 -0
  60. package/dist/db/migrations/20250415T201720309Z-verification.js.map +1 -0
  61. package/dist/db/migrations/20250417T201720309Z-firehose-cursor.d.ts +4 -0
  62. package/dist/db/migrations/20250417T201720309Z-firehose-cursor.d.ts.map +1 -0
  63. package/dist/db/migrations/20250417T201720309Z-firehose-cursor.js +17 -0
  64. package/dist/db/migrations/20250417T201720309Z-firehose-cursor.js.map +1 -0
  65. package/dist/db/migrations/index.d.ts +2 -0
  66. package/dist/db/migrations/index.d.ts.map +1 -1
  67. package/dist/db/migrations/index.js +3 -1
  68. package/dist/db/migrations/index.js.map +1 -1
  69. package/dist/db/pagination.d.ts +15 -0
  70. package/dist/db/pagination.d.ts.map +1 -1
  71. package/dist/db/pagination.js +23 -1
  72. package/dist/db/pagination.js.map +1 -1
  73. package/dist/db/schema/firehose_cursor.d.ts +11 -0
  74. package/dist/db/schema/firehose_cursor.d.ts.map +1 -0
  75. package/dist/db/schema/firehose_cursor.js +5 -0
  76. package/dist/db/schema/firehose_cursor.js.map +1 -0
  77. package/dist/db/schema/index.d.ts +3 -1
  78. package/dist/db/schema/index.d.ts.map +1 -1
  79. package/dist/db/schema/member.d.ts +1 -1
  80. package/dist/db/schema/member.d.ts.map +1 -1
  81. package/dist/db/schema/verification.d.ts +19 -0
  82. package/dist/db/schema/verification.d.ts.map +1 -0
  83. package/dist/db/schema/verification.js +5 -0
  84. package/dist/db/schema/verification.js.map +1 -0
  85. package/dist/jetstream/service.d.ts +64 -0
  86. package/dist/jetstream/service.d.ts.map +1 -0
  87. package/dist/jetstream/service.js +65 -0
  88. package/dist/jetstream/service.js.map +1 -0
  89. package/dist/lexicon/index.d.ts +12 -0
  90. package/dist/lexicon/index.d.ts.map +1 -1
  91. package/dist/lexicon/index.js +33 -1
  92. package/dist/lexicon/index.js.map +1 -1
  93. package/dist/lexicon/lexicons.d.ts +672 -12
  94. package/dist/lexicon/lexicons.d.ts.map +1 -1
  95. package/dist/lexicon/lexicons.js +353 -0
  96. package/dist/lexicon/lexicons.js.map +1 -1
  97. package/dist/lexicon/types/tools/ozone/server/getConfig.d.ts +3 -1
  98. package/dist/lexicon/types/tools/ozone/server/getConfig.d.ts.map +1 -1
  99. package/dist/lexicon/types/tools/ozone/server/getConfig.js.map +1 -1
  100. package/dist/lexicon/types/tools/ozone/setting/defs.d.ts +1 -1
  101. package/dist/lexicon/types/tools/ozone/setting/defs.d.ts.map +1 -1
  102. package/dist/lexicon/types/tools/ozone/setting/defs.js.map +1 -1
  103. package/dist/lexicon/types/tools/ozone/setting/upsertOption.d.ts +1 -1
  104. package/dist/lexicon/types/tools/ozone/setting/upsertOption.d.ts.map +1 -1
  105. package/dist/lexicon/types/tools/ozone/team/addMember.d.ts +1 -1
  106. package/dist/lexicon/types/tools/ozone/team/addMember.d.ts.map +1 -1
  107. package/dist/lexicon/types/tools/ozone/team/defs.d.ts +3 -1
  108. package/dist/lexicon/types/tools/ozone/team/defs.d.ts.map +1 -1
  109. package/dist/lexicon/types/tools/ozone/team/defs.js +3 -1
  110. package/dist/lexicon/types/tools/ozone/team/defs.js.map +1 -1
  111. package/dist/lexicon/types/tools/ozone/team/updateMember.d.ts +1 -1
  112. package/dist/lexicon/types/tools/ozone/team/updateMember.d.ts.map +1 -1
  113. package/dist/lexicon/types/tools/ozone/verification/defs.d.ts +43 -0
  114. package/dist/lexicon/types/tools/ozone/verification/defs.d.ts.map +1 -0
  115. package/dist/lexicon/types/tools/ozone/verification/defs.js +16 -0
  116. package/dist/lexicon/types/tools/ozone/verification/defs.js.map +1 -0
  117. package/dist/lexicon/types/tools/ozone/verification/grantVerifications.d.ts +66 -0
  118. package/dist/lexicon/types/tools/ozone/verification/grantVerifications.d.ts.map +1 -0
  119. package/dist/lexicon/types/tools/ozone/verification/grantVerifications.js +25 -0
  120. package/dist/lexicon/types/tools/ozone/verification/grantVerifications.js.map +1 -0
  121. package/dist/lexicon/types/tools/ozone/verification/listVerifications.d.ts +52 -0
  122. package/dist/lexicon/types/tools/ozone/verification/listVerifications.d.ts.map +1 -0
  123. package/dist/lexicon/types/tools/ozone/verification/listVerifications.js +7 -0
  124. package/dist/lexicon/types/tools/ozone/verification/listVerifications.js.map +1 -0
  125. package/dist/lexicon/types/tools/ozone/verification/revokeVerifications.d.ts +56 -0
  126. package/dist/lexicon/types/tools/ozone/verification/revokeVerifications.d.ts.map +1 -0
  127. package/dist/lexicon/types/tools/ozone/verification/revokeVerifications.js +16 -0
  128. package/dist/lexicon/types/tools/ozone/verification/revokeVerifications.js.map +1 -0
  129. package/dist/logger.d.ts +1 -0
  130. package/dist/logger.d.ts.map +1 -1
  131. package/dist/logger.js +2 -1
  132. package/dist/logger.js.map +1 -1
  133. package/dist/mod-service/status.d.ts +6 -0
  134. package/dist/mod-service/status.d.ts.map +1 -1
  135. package/dist/team/index.d.ts +1 -0
  136. package/dist/team/index.d.ts.map +1 -1
  137. package/dist/team/index.js +3 -0
  138. package/dist/team/index.js.map +1 -1
  139. package/dist/verification/issuer.d.ts +37 -0
  140. package/dist/verification/issuer.d.ts.map +1 -0
  141. package/dist/verification/issuer.js +119 -0
  142. package/dist/verification/issuer.js.map +1 -0
  143. package/dist/verification/service.d.ts +47 -0
  144. package/dist/verification/service.d.ts.map +1 -0
  145. package/dist/verification/service.js +141 -0
  146. package/dist/verification/service.js.map +1 -0
  147. package/dist/verification/util.d.ts +6 -0
  148. package/dist/verification/util.d.ts.map +1 -0
  149. package/dist/verification/util.js +32 -0
  150. package/dist/verification/util.js.map +1 -0
  151. package/package.json +5 -4
  152. package/src/api/index.ts +6 -0
  153. package/src/api/server/getConfig.ts +1 -0
  154. package/src/api/setting/removeOptions.ts +1 -0
  155. package/src/api/setting/upsertOption.ts +7 -0
  156. package/src/api/util.ts +7 -1
  157. package/src/api/verification/grantVerifications.ts +74 -0
  158. package/src/api/verification/listVerifications.ts +44 -0
  159. package/src/api/verification/revokeVerifications.ts +43 -0
  160. package/src/auth-verifier.ts +8 -4
  161. package/src/background.ts +7 -2
  162. package/src/config/config.ts +21 -0
  163. package/src/config/env.ts +10 -0
  164. package/src/context.ts +22 -0
  165. package/src/daemon/context.ts +19 -0
  166. package/src/daemon/verification-listener.ts +164 -0
  167. package/src/db/migrations/20250415T201720309Z-verification.ts +34 -0
  168. package/src/db/migrations/20250417T201720309Z-firehose-cursor.ts +16 -0
  169. package/src/db/migrations/index.ts +2 -0
  170. package/src/db/pagination.ts +31 -0
  171. package/src/db/schema/firehose_cursor.ts +13 -0
  172. package/src/db/schema/index.ts +5 -1
  173. package/src/db/schema/member.ts +1 -0
  174. package/src/db/schema/verification.ts +21 -0
  175. package/src/jetstream/service.ts +110 -0
  176. package/src/lexicon/index.ts +47 -0
  177. package/src/lexicon/lexicons.ts +372 -0
  178. package/src/lexicon/types/tools/ozone/server/getConfig.ts +3 -0
  179. package/src/lexicon/types/tools/ozone/setting/defs.ts +1 -0
  180. package/src/lexicon/types/tools/ozone/setting/upsertOption.ts +1 -0
  181. package/src/lexicon/types/tools/ozone/team/addMember.ts +1 -0
  182. package/src/lexicon/types/tools/ozone/team/defs.ts +3 -0
  183. package/src/lexicon/types/tools/ozone/team/updateMember.ts +1 -0
  184. package/src/lexicon/types/tools/ozone/verification/defs.ts +59 -0
  185. package/src/lexicon/types/tools/ozone/verification/grantVerifications.ts +100 -0
  186. package/src/lexicon/types/tools/ozone/verification/listVerifications.ts +70 -0
  187. package/src/lexicon/types/tools/ozone/verification/revokeVerifications.ts +81 -0
  188. package/src/logger.ts +2 -0
  189. package/src/team/index.ts +4 -0
  190. package/src/verification/issuer.ts +135 -0
  191. package/src/verification/service.ts +208 -0
  192. package/src/verification/util.ts +50 -0
  193. package/tests/__snapshots__/verification-listener.test.ts.snap +146 -0
  194. package/tests/__snapshots__/verification.test.ts.snap +288 -0
  195. package/tests/verification-listener.test.ts +102 -0
  196. package/tests/verification.test.ts +136 -0
  197. package/tsconfig.build.tsbuildinfo +1 -1
  198. package/tsconfig.tests.tsbuildinfo +1 -1
@@ -173,6 +173,37 @@ export class TimeIdKeyset extends GenericKeyset<TimeIdKeysetParam, Cursor> {
173
173
  }
174
174
  }
175
175
 
176
+ type CreatedAtUriKeysetParam = {
177
+ createdAt: string
178
+ uri: string
179
+ }
180
+
181
+ export class CreatedAtUriKeyset extends GenericKeyset<
182
+ CreatedAtUriKeysetParam,
183
+ Cursor
184
+ > {
185
+ labelResult(result: CreatedAtUriKeysetParam): Cursor
186
+ labelResult(result: CreatedAtUriKeysetParam) {
187
+ return { primary: result.createdAt, secondary: result.uri }
188
+ }
189
+ labeledResultToCursor(labeled: Cursor) {
190
+ return {
191
+ primary: new Date(labeled.primary).getTime().toString(),
192
+ secondary: labeled.secondary,
193
+ }
194
+ }
195
+ cursorToLabeledResult(cursor: Cursor) {
196
+ const primaryDate = new Date(parseInt(cursor.primary, 10))
197
+ if (isNaN(primaryDate.getTime())) {
198
+ throw new InvalidRequestError('Malformed cursor')
199
+ }
200
+ return {
201
+ primary: primaryDate.toISOString(),
202
+ secondary: cursor.secondary,
203
+ }
204
+ }
205
+ }
206
+
176
207
  export const paginate = <
177
208
  QB extends AnyQb,
178
209
  K extends GenericKeyset<unknown, any>,
@@ -0,0 +1,13 @@
1
+ import { Generated } from 'kysely'
2
+
3
+ export const firehoseCursorTableName = 'firehose_cursor'
4
+
5
+ export interface FirehoseCursor {
6
+ service: string
7
+ cursor: number | null
8
+ updatedAt: Generated<string>
9
+ }
10
+
11
+ export type PartialDB = {
12
+ [firehoseCursorTableName]: FirehoseCursor
13
+ }
@@ -4,6 +4,7 @@ import * as accountRecordEventsStats from './account_record_events_stats'
4
4
  import * as accountRecordStatusStats from './account_record_status_stats'
5
5
  import * as blobPushEvent from './blob_push_event'
6
6
  import * as communicationTemplate from './communication_template'
7
+ import * as firehoseCursor from './firehose_cursor'
7
8
  import * as label from './label'
8
9
  import * as member from './member'
9
10
  import * as modEvent from './moderation_event'
@@ -14,6 +15,7 @@ import * as recordPushEvent from './record_push_event'
14
15
  import * as repoPushEvent from './repo_push_event'
15
16
  import * as setting from './setting'
16
17
  import * as signingKey from './signing_key'
18
+ import * as verification from './verification'
17
19
 
18
20
  export type DatabaseSchemaType = modEvent.PartialDB &
19
21
  modSubjectStatus.PartialDB &
@@ -29,7 +31,9 @@ export type DatabaseSchemaType = modEvent.PartialDB &
29
31
  accountEventsStats.PartialDB &
30
32
  recordEventsStats.PartialDB &
31
33
  accountRecordEventsStats.PartialDB &
32
- accountRecordStatusStats.PartialDB
34
+ accountRecordStatusStats.PartialDB &
35
+ verification.PartialDB &
36
+ firehoseCursor.PartialDB
33
37
 
34
38
  export type DatabaseSchema = Kysely<DatabaseSchemaType>
35
39
 
@@ -7,6 +7,7 @@ export interface Member {
7
7
  role:
8
8
  | 'tools.ozone.team.defs#roleAdmin'
9
9
  | 'tools.ozone.team.defs#roleTriage'
10
+ | 'tools.ozone.team.defs#roleVerifier'
10
11
  | 'tools.ozone.team.defs#roleModerator'
11
12
  disabled: Generated<boolean>
12
13
  handle: string | null
@@ -0,0 +1,21 @@
1
+ import { Generated } from 'kysely'
2
+
3
+ export const verificationTableName = 'verification'
4
+
5
+ export interface Verification {
6
+ uri: string
7
+ cid: string
8
+ issuer: string
9
+ subject: string
10
+ handle: string
11
+ displayName: string
12
+ revokeReason: string | null
13
+ revokedBy: string | null
14
+ revokedAt: string | null
15
+ createdAt: string
16
+ updatedAt: Generated<string>
17
+ }
18
+
19
+ export type PartialDB = {
20
+ [verificationTableName]: Verification
21
+ }
@@ -0,0 +1,110 @@
1
+ import { WebSocketKeepAlive } from '@atproto/xrpc-server'
2
+
3
+ type JetstreamRecord = Record<string, unknown>
4
+ type OnCreateCallback<T extends JetstreamRecord> = (
5
+ e: CommitCreateEvent<T>,
6
+ ) => Promise<void>
7
+
8
+ export type JetstreamOptions = {
9
+ /**
10
+ * The full subscription endpoint to connect to.
11
+ * @default "wss://jetstream1.us-east.bsky.network/subscribe"
12
+ */
13
+ endpoint?: string
14
+ /**
15
+ * The record collections that you want to receive updates for.
16
+ * Leave this empty to receive updates for all record collections.
17
+ */
18
+ wantedCollections?: string[]
19
+ /**
20
+ * The DIDs that you want to receive updates for.
21
+ * Leave this empty to receive updates for all DIDs.
22
+ */
23
+ wantedDids?: string[]
24
+
25
+ /**
26
+ * The Unix timestamp in microseconds that you want to receive updates from.
27
+ */
28
+ cursor?: number
29
+ }
30
+ export type EventBase = {
31
+ did: string
32
+ time_us: number
33
+ // @TODO: Limited to just commit events for now
34
+ kind: 'commit'
35
+ }
36
+ export type CommitBase = {
37
+ collection: string
38
+ rkey: string
39
+ cid: string
40
+ }
41
+ export interface CommitCreateEvent<RecordType extends JetstreamRecord>
42
+ extends EventBase {
43
+ kind: 'commit'
44
+ commit: {
45
+ operation: 'create'
46
+ record: RecordType
47
+ } & CommitBase
48
+ }
49
+
50
+ export interface CommitDeleteEvent extends EventBase {
51
+ kind: 'commit'
52
+ commit: {
53
+ operation: 'delete'
54
+ } & CommitBase
55
+ }
56
+
57
+ export class Jetstream {
58
+ public ws?: WebSocketKeepAlive
59
+ public url: URL
60
+ /** The current cursor. */
61
+ public cursor?: number
62
+
63
+ constructor(opts: JetstreamOptions) {
64
+ this.url = new URL(
65
+ opts.endpoint ?? 'wss://jetstream1.us-east.bsky.network/subscribe',
66
+ )
67
+ opts.wantedCollections?.forEach((collection) => {
68
+ this.url.searchParams.append('wantedCollections', collection)
69
+ })
70
+ opts.wantedDids?.forEach((did) => {
71
+ this.url.searchParams.append('wantedDids', did)
72
+ })
73
+ if (opts.cursor) this.cursor = opts.cursor
74
+ }
75
+
76
+ async start(options: {
77
+ onCreate?: Record<string, OnCreateCallback<any>>
78
+ onDelete?: Record<string, (e: CommitDeleteEvent) => Promise<void>>
79
+ }) {
80
+ this.ws = new WebSocketKeepAlive({
81
+ getUrl: async () => {
82
+ if (this.cursor)
83
+ this.url.searchParams.set('cursor', this.cursor.toString())
84
+ return this.url.toString()
85
+ },
86
+ })
87
+
88
+ for await (const message of this.ws) {
89
+ const parsedMessage = JSON.parse(message.toString())
90
+ if (parsedMessage.kind === 'commit') {
91
+ const { collection, operation, record } = parsedMessage.commit || {}
92
+
93
+ if (operation === 'create') {
94
+ options.onCreate?.[collection]?.(
95
+ parsedMessage as CommitCreateEvent<typeof record>,
96
+ )
97
+ } else if (operation === 'delete') {
98
+ options.onDelete?.[collection]?.(parsedMessage as CommitDeleteEvent)
99
+ }
100
+ }
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Closes the WebSocket connection.
106
+ */
107
+ close() {
108
+ this.ws?.ws?.close()
109
+ }
110
+ }
@@ -217,6 +217,9 @@ import * as ToolsOzoneTeamAddMember from './types/tools/ozone/team/addMember.js'
217
217
  import * as ToolsOzoneTeamDeleteMember from './types/tools/ozone/team/deleteMember.js'
218
218
  import * as ToolsOzoneTeamListMembers from './types/tools/ozone/team/listMembers.js'
219
219
  import * as ToolsOzoneTeamUpdateMember from './types/tools/ozone/team/updateMember.js'
220
+ import * as ToolsOzoneVerificationGrantVerifications from './types/tools/ozone/verification/grantVerifications.js'
221
+ import * as ToolsOzoneVerificationListVerifications from './types/tools/ozone/verification/listVerifications.js'
222
+ import * as ToolsOzoneVerificationRevokeVerifications from './types/tools/ozone/verification/revokeVerifications.js'
220
223
 
221
224
  export const COM_ATPROTO_MODERATION = {
222
225
  DefsReasonSpam: 'com.atproto.moderation.defs#reasonSpam',
@@ -258,6 +261,7 @@ export const TOOLS_OZONE_TEAM = {
258
261
  DefsRoleAdmin: 'tools.ozone.team.defs#roleAdmin',
259
262
  DefsRoleModerator: 'tools.ozone.team.defs#roleModerator',
260
263
  DefsRoleTriage: 'tools.ozone.team.defs#roleTriage',
264
+ DefsRoleVerifier: 'tools.ozone.team.defs#roleVerifier',
261
265
  }
262
266
 
263
267
  export function createServer(options?: XrpcOptions): Server {
@@ -2495,6 +2499,7 @@ export class ToolsOzoneNS {
2495
2499
  setting: ToolsOzoneSettingNS
2496
2500
  signature: ToolsOzoneSignatureNS
2497
2501
  team: ToolsOzoneTeamNS
2502
+ verification: ToolsOzoneVerificationNS
2498
2503
 
2499
2504
  constructor(server: Server) {
2500
2505
  this._server = server
@@ -2506,6 +2511,7 @@ export class ToolsOzoneNS {
2506
2511
  this.setting = new ToolsOzoneSettingNS(server)
2507
2512
  this.signature = new ToolsOzoneSignatureNS(server)
2508
2513
  this.team = new ToolsOzoneTeamNS(server)
2514
+ this.verification = new ToolsOzoneVerificationNS(server)
2509
2515
  }
2510
2516
  }
2511
2517
 
@@ -2936,6 +2942,47 @@ export class ToolsOzoneTeamNS {
2936
2942
  }
2937
2943
  }
2938
2944
 
2945
+ export class ToolsOzoneVerificationNS {
2946
+ _server: Server
2947
+
2948
+ constructor(server: Server) {
2949
+ this._server = server
2950
+ }
2951
+
2952
+ grantVerifications<AV extends AuthVerifier>(
2953
+ cfg: ConfigOf<
2954
+ AV,
2955
+ ToolsOzoneVerificationGrantVerifications.Handler<ExtractAuth<AV>>,
2956
+ ToolsOzoneVerificationGrantVerifications.HandlerReqCtx<ExtractAuth<AV>>
2957
+ >,
2958
+ ) {
2959
+ const nsid = 'tools.ozone.verification.grantVerifications' // @ts-ignore
2960
+ return this._server.xrpc.method(nsid, cfg)
2961
+ }
2962
+
2963
+ listVerifications<AV extends AuthVerifier>(
2964
+ cfg: ConfigOf<
2965
+ AV,
2966
+ ToolsOzoneVerificationListVerifications.Handler<ExtractAuth<AV>>,
2967
+ ToolsOzoneVerificationListVerifications.HandlerReqCtx<ExtractAuth<AV>>
2968
+ >,
2969
+ ) {
2970
+ const nsid = 'tools.ozone.verification.listVerifications' // @ts-ignore
2971
+ return this._server.xrpc.method(nsid, cfg)
2972
+ }
2973
+
2974
+ revokeVerifications<AV extends AuthVerifier>(
2975
+ cfg: ConfigOf<
2976
+ AV,
2977
+ ToolsOzoneVerificationRevokeVerifications.Handler<ExtractAuth<AV>>,
2978
+ ToolsOzoneVerificationRevokeVerifications.HandlerReqCtx<ExtractAuth<AV>>
2979
+ >,
2980
+ ) {
2981
+ const nsid = 'tools.ozone.verification.revokeVerifications' // @ts-ignore
2982
+ return this._server.xrpc.method(nsid, cfg)
2983
+ }
2984
+ }
2985
+
2939
2986
  type SharedRateLimitOpts<T> = {
2940
2987
  name: string
2941
2988
  calcKey?: (ctx: T) => string | null