@atproto/ozone 0.1.25 → 0.1.27

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 (158) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/api/index.d.ts.map +1 -1
  3. package/dist/api/index.js +8 -0
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/proxied.d.ts.map +1 -1
  6. package/dist/api/proxied.js +30 -0
  7. package/dist/api/proxied.js.map +1 -1
  8. package/dist/api/server/getConfig.d.ts.map +1 -1
  9. package/dist/api/server/getConfig.js +4 -3
  10. package/dist/api/server/getConfig.js.map +1 -1
  11. package/dist/api/team/addMember.d.ts +4 -0
  12. package/dist/api/team/addMember.d.ts.map +1 -0
  13. package/dist/api/team/addMember.js +38 -0
  14. package/dist/api/team/addMember.js.map +1 -0
  15. package/dist/api/team/deleteMember.d.ts +4 -0
  16. package/dist/api/team/deleteMember.d.ts.map +1 -0
  17. package/dist/api/team/deleteMember.js +26 -0
  18. package/dist/api/team/deleteMember.js.map +1 -0
  19. package/dist/api/team/listMembers.d.ts +4 -0
  20. package/dist/api/team/listMembers.d.ts.map +1 -0
  21. package/dist/api/team/listMembers.js +20 -0
  22. package/dist/api/team/listMembers.js.map +1 -0
  23. package/dist/api/team/updateMember.d.ts +4 -0
  24. package/dist/api/team/updateMember.d.ts.map +1 -0
  25. package/dist/api/team/updateMember.js +40 -0
  26. package/dist/api/team/updateMember.js.map +1 -0
  27. package/dist/api/util.d.ts +1 -0
  28. package/dist/api/util.d.ts.map +1 -1
  29. package/dist/api/util.js +10 -1
  30. package/dist/api/util.js.map +1 -1
  31. package/dist/auth-verifier.d.ts +3 -6
  32. package/dist/auth-verifier.d.ts.map +1 -1
  33. package/dist/auth-verifier.js +7 -19
  34. package/dist/auth-verifier.js.map +1 -1
  35. package/dist/context.d.ts +3 -0
  36. package/dist/context.d.ts.map +1 -1
  37. package/dist/context.js +7 -3
  38. package/dist/context.js.map +1 -1
  39. package/dist/db/migrations/20240521T211332580Z-member.d.ts +4 -0
  40. package/dist/db/migrations/20240521T211332580Z-member.d.ts.map +1 -0
  41. package/dist/db/migrations/20240521T211332580Z-member.js +20 -0
  42. package/dist/db/migrations/20240521T211332580Z-member.js.map +1 -0
  43. package/dist/db/migrations/index.d.ts +1 -0
  44. package/dist/db/migrations/index.d.ts.map +1 -1
  45. package/dist/db/migrations/index.js +2 -1
  46. package/dist/db/migrations/index.js.map +1 -1
  47. package/dist/db/schema/index.d.ts +2 -1
  48. package/dist/db/schema/index.d.ts.map +1 -1
  49. package/dist/db/schema/member.d.ts +14 -0
  50. package/dist/db/schema/member.d.ts.map +1 -0
  51. package/dist/db/schema/member.js +5 -0
  52. package/dist/db/schema/member.js.map +1 -0
  53. package/dist/index.d.ts +1 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +25 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/lexicon/index.d.ts +25 -0
  58. package/dist/lexicon/index.d.ts.map +1 -1
  59. package/dist/lexicon/index.js +54 -1
  60. package/dist/lexicon/index.js.map +1 -1
  61. package/dist/lexicon/lexicons.d.ts +536 -0
  62. package/dist/lexicon/lexicons.d.ts.map +1 -1
  63. package/dist/lexicon/lexicons.js +561 -1
  64. package/dist/lexicon/lexicons.js.map +1 -1
  65. package/dist/lexicon/types/app/bsky/actor/defs.d.ts +5 -0
  66. package/dist/lexicon/types/app/bsky/actor/defs.d.ts.map +1 -1
  67. package/dist/lexicon/types/app/bsky/actor/defs.js.map +1 -1
  68. package/dist/lexicon/types/app/bsky/actor/profile.d.ts +3 -0
  69. package/dist/lexicon/types/app/bsky/actor/profile.d.ts.map +1 -1
  70. package/dist/lexicon/types/app/bsky/actor/profile.js.map +1 -1
  71. package/dist/lexicon/types/app/bsky/graph/defs.d.ts +36 -1
  72. package/dist/lexicon/types/app/bsky/graph/defs.d.ts.map +1 -1
  73. package/dist/lexicon/types/app/bsky/graph/defs.js +23 -1
  74. package/dist/lexicon/types/app/bsky/graph/defs.js.map +1 -1
  75. package/dist/lexicon/types/app/bsky/graph/getActorStarterPacks.d.ts +39 -0
  76. package/dist/lexicon/types/app/bsky/graph/getActorStarterPacks.d.ts.map +1 -0
  77. package/dist/lexicon/types/app/bsky/graph/getActorStarterPacks.js +3 -0
  78. package/dist/lexicon/types/app/bsky/graph/getActorStarterPacks.js.map +1 -0
  79. package/dist/lexicon/types/app/bsky/graph/getStarterPack.d.ts +37 -0
  80. package/dist/lexicon/types/app/bsky/graph/getStarterPack.d.ts.map +1 -0
  81. package/dist/lexicon/types/app/bsky/graph/getStarterPack.js +3 -0
  82. package/dist/lexicon/types/app/bsky/graph/getStarterPack.js.map +1 -0
  83. package/dist/lexicon/types/app/bsky/graph/getStarterPacks.d.ts +36 -0
  84. package/dist/lexicon/types/app/bsky/graph/getStarterPacks.d.ts.map +1 -0
  85. package/dist/lexicon/types/app/bsky/graph/getStarterPacks.js +3 -0
  86. package/dist/lexicon/types/app/bsky/graph/getStarterPacks.js.map +1 -0
  87. package/dist/lexicon/types/app/bsky/graph/starterpack.d.ts +25 -0
  88. package/dist/lexicon/types/app/bsky/graph/starterpack.d.ts.map +1 -0
  89. package/dist/lexicon/types/app/bsky/graph/starterpack.js +27 -0
  90. package/dist/lexicon/types/app/bsky/graph/starterpack.js.map +1 -0
  91. package/dist/lexicon/types/app/bsky/notification/listNotifications.d.ts +2 -2
  92. package/dist/lexicon/types/app/bsky/notification/listNotifications.d.ts.map +1 -1
  93. package/dist/lexicon/types/app/bsky/notification/listNotifications.js.map +1 -1
  94. package/dist/lexicon/types/tools/ozone/team/addMember.d.ts +40 -0
  95. package/dist/lexicon/types/tools/ozone/team/addMember.d.ts.map +1 -0
  96. package/dist/lexicon/types/tools/ozone/team/addMember.js +3 -0
  97. package/dist/lexicon/types/tools/ozone/team/addMember.js.map +1 -0
  98. package/dist/lexicon/types/tools/ozone/team/defs.d.ts +24 -0
  99. package/dist/lexicon/types/tools/ozone/team/defs.d.ts.map +1 -0
  100. package/dist/lexicon/types/tools/ozone/team/defs.js +22 -0
  101. package/dist/lexicon/types/tools/ozone/team/defs.js.map +1 -0
  102. package/dist/lexicon/types/tools/ozone/team/deleteMember.d.ts +30 -0
  103. package/dist/lexicon/types/tools/ozone/team/deleteMember.d.ts.map +1 -0
  104. package/dist/lexicon/types/tools/ozone/team/deleteMember.js +3 -0
  105. package/dist/lexicon/types/tools/ozone/team/deleteMember.js.map +1 -0
  106. package/dist/lexicon/types/tools/ozone/team/listMembers.d.ts +38 -0
  107. package/dist/lexicon/types/tools/ozone/team/listMembers.d.ts.map +1 -0
  108. package/dist/lexicon/types/tools/ozone/team/listMembers.js +3 -0
  109. package/dist/lexicon/types/tools/ozone/team/listMembers.js.map +1 -0
  110. package/dist/lexicon/types/tools/ozone/team/updateMember.d.ts +41 -0
  111. package/dist/lexicon/types/tools/ozone/team/updateMember.d.ts.map +1 -0
  112. package/dist/lexicon/types/tools/ozone/team/updateMember.js +3 -0
  113. package/dist/lexicon/types/tools/ozone/team/updateMember.js.map +1 -0
  114. package/dist/team/index.d.ts +37 -0
  115. package/dist/team/index.d.ts.map +1 -0
  116. package/dist/team/index.js +144 -0
  117. package/dist/team/index.js.map +1 -0
  118. package/package.json +4 -4
  119. package/src/api/index.ts +8 -0
  120. package/src/api/proxied.ts +43 -0
  121. package/src/api/server/getConfig.ts +4 -4
  122. package/src/api/team/addMember.ts +46 -0
  123. package/src/api/team/deleteMember.ts +29 -0
  124. package/src/api/team/listMembers.ts +20 -0
  125. package/src/api/team/updateMember.ts +47 -0
  126. package/src/api/util.ts +15 -0
  127. package/src/auth-verifier.ts +14 -12
  128. package/src/context.ts +9 -3
  129. package/src/db/migrations/20240521T211332580Z-member.ts +17 -0
  130. package/src/db/migrations/index.ts +1 -0
  131. package/src/db/schema/index.ts +3 -1
  132. package/src/db/schema/member.ts +19 -0
  133. package/src/index.ts +36 -0
  134. package/src/lexicon/index.ts +100 -0
  135. package/src/lexicon/lexicons.ts +566 -1
  136. package/src/lexicon/types/app/bsky/actor/defs.ts +5 -0
  137. package/src/lexicon/types/app/bsky/actor/profile.ts +3 -0
  138. package/src/lexicon/types/app/bsky/graph/defs.ts +58 -0
  139. package/src/lexicon/types/app/bsky/graph/getActorStarterPacks.ts +49 -0
  140. package/src/lexicon/types/app/bsky/graph/getStarterPack.ts +47 -0
  141. package/src/lexicon/types/app/bsky/graph/getStarterPacks.ts +46 -0
  142. package/src/lexicon/types/app/bsky/graph/starterpack.ts +50 -0
  143. package/src/lexicon/types/app/bsky/notification/listNotifications.ts +2 -1
  144. package/src/lexicon/types/tools/ozone/team/addMember.ts +53 -0
  145. package/src/lexicon/types/tools/ozone/team/defs.ts +42 -0
  146. package/src/lexicon/types/tools/ozone/team/deleteMember.ts +39 -0
  147. package/src/lexicon/types/tools/ozone/team/listMembers.ts +48 -0
  148. package/src/lexicon/types/tools/ozone/team/updateMember.ts +54 -0
  149. package/src/team/index.ts +213 -0
  150. package/tests/__snapshots__/get-record.test.ts.snap +2 -0
  151. package/tests/__snapshots__/get-repo.test.ts.snap +1 -0
  152. package/tests/__snapshots__/get-starter-pack.test.ts.snap +466 -0
  153. package/tests/__snapshots__/moderation-events.test.ts.snap +1 -0
  154. package/tests/__snapshots__/team.test.ts.snap +688 -0
  155. package/tests/get-config.test.ts +3 -4
  156. package/tests/get-starter-pack.test.ts +104 -0
  157. package/tests/server.test.ts +1 -1
  158. package/tests/team.test.ts +163 -0
package/src/api/util.ts CHANGED
@@ -20,6 +20,12 @@ import {
20
20
  import { ModerationEvent } from '../db/schema/moderation_event'
21
21
  import { ModerationSubjectStatusRow } from '../mod-service/types'
22
22
  import AppContext from '../context'
23
+ import { Member } from '../db/schema/member'
24
+ import {
25
+ ROLEADMIN,
26
+ ROLEMODERATOR,
27
+ ROLETRIAGE,
28
+ } from '../lexicon/types/tools/ozone/team/defs'
23
29
 
24
30
  export const getPdsAccountInfo = async (
25
31
  ctx: AppContext,
@@ -122,3 +128,12 @@ const eventTypes = new Set([
122
128
  'tools.ozone.moderation.defs#modEventTag',
123
129
  'tools.ozone.moderation.defs#modEventDivert',
124
130
  ])
131
+
132
+ export const getMemberRole = (role: string) => {
133
+ if (memberRoles.has(role)) {
134
+ return role as Member['role']
135
+ }
136
+ throw new InvalidRequestError('Invalid member role')
137
+ }
138
+
139
+ const memberRoles = new Set([ROLEADMIN, ROLEMODERATOR, ROLETRIAGE])
@@ -2,6 +2,7 @@ import express from 'express'
2
2
  import * as ui8 from 'uint8arrays'
3
3
  import { IdResolver } from '@atproto/identity'
4
4
  import { AuthRequiredError, verifyJwt } from '@atproto/xrpc-server'
5
+ import { TeamService } from './team'
5
6
 
6
7
  type ReqCtx = {
7
8
  req: express.Request
@@ -47,17 +48,13 @@ type NullOutput = {
47
48
 
48
49
  export type AuthVerifierOpts = {
49
50
  serviceDid: string
50
- admins: string[]
51
- moderators: string[]
52
- triage: string[]
53
51
  adminPassword: string
52
+ teamService: TeamService
54
53
  }
55
54
 
56
55
  export class AuthVerifier {
57
56
  serviceDid: string
58
- admins: string[]
59
- moderators: string[]
60
- triage: string[]
57
+ teamService: TeamService
61
58
  private adminPassword: string
62
59
 
63
60
  constructor(
@@ -65,10 +62,8 @@ export class AuthVerifier {
65
62
  opts: AuthVerifierOpts,
66
63
  ) {
67
64
  this.serviceDid = opts.serviceDid
68
- this.admins = opts.admins
69
- this.moderators = opts.moderators
70
- this.triage = opts.triage
71
65
  this.adminPassword = opts.adminPassword
66
+ this.teamService = opts.teamService
72
67
  }
73
68
 
74
69
  modOrAdminToken = async (
@@ -113,9 +108,16 @@ export class AuthVerifier {
113
108
  }
114
109
  const payload = await verifyJwt(jwtStr, this.serviceDid, getSigningKey)
115
110
  const iss = payload.iss
116
- const isAdmin = this.admins.includes(iss)
117
- const isModerator = isAdmin || this.moderators.includes(iss)
118
- const isTriage = isModerator || this.triage.includes(iss)
111
+
112
+ const member = await this.teamService.getMember(iss)
113
+
114
+ if (member?.disabled) {
115
+ throw new AuthRequiredError('member is disabled', 'MemberDisabled')
116
+ }
117
+
118
+ const { isAdmin, isModerator, isTriage } =
119
+ this.teamService.getMemberRole(member)
120
+
119
121
  return {
120
122
  credentials: {
121
123
  type: 'standard',
package/src/context.ts CHANGED
@@ -18,6 +18,7 @@ import {
18
18
  import { BlobDiverter } from './daemon/blob-diverter'
19
19
  import { AuthVerifier } from './auth-verifier'
20
20
  import { ImageInvalidator } from './image-invalidator'
21
+ import { TeamService, TeamServiceCreator } from './team'
21
22
  import {
22
23
  defaultLabelerHeader,
23
24
  getSigningKeyId,
@@ -31,6 +32,7 @@ export type AppContextOptions = {
31
32
  cfg: OzoneConfig
32
33
  modService: ModerationServiceCreator
33
34
  communicationTemplateService: CommunicationTemplateServiceCreator
35
+ teamService: TeamServiceCreator
34
36
  appviewAgent: AtpAgent
35
37
  pdsAgent: AtpAgent | undefined
36
38
  chatAgent: AtpAgent | undefined
@@ -107,15 +109,14 @@ export class AppContext {
107
109
  )
108
110
 
109
111
  const communicationTemplateService = CommunicationTemplateService.creator()
112
+ const teamService = TeamService.creator()
110
113
 
111
114
  const sequencer = new Sequencer(modService(db))
112
115
 
113
116
  const authVerifier = new AuthVerifier(idResolver, {
114
117
  serviceDid: cfg.service.did,
115
- admins: cfg.access.admins,
116
- moderators: cfg.access.moderators,
117
- triage: cfg.access.triage,
118
118
  adminPassword: secrets.adminPassword,
119
+ teamService: teamService(db),
119
120
  })
120
121
 
121
122
  return new AppContext(
@@ -124,6 +125,7 @@ export class AppContext {
124
125
  cfg,
125
126
  modService,
126
127
  communicationTemplateService,
128
+ teamService,
127
129
  appviewAgent,
128
130
  pdsAgent,
129
131
  chatAgent,
@@ -168,6 +170,10 @@ export class AppContext {
168
170
  return this.opts.communicationTemplateService
169
171
  }
170
172
 
173
+ get teamService(): TeamServiceCreator {
174
+ return this.opts.teamService
175
+ }
176
+
171
177
  get appviewAgent(): AtpAgent {
172
178
  return this.opts.appviewAgent
173
179
  }
@@ -0,0 +1,17 @@
1
+ import { Kysely } from 'kysely'
2
+
3
+ export async function up(db: Kysely<unknown>): Promise<void> {
4
+ await db.schema
5
+ .createTable('member')
6
+ .addColumn('did', 'varchar', (col) => col.primaryKey())
7
+ .addColumn('role', 'varchar', (col) => col.notNull())
8
+ .addColumn('disabled', 'boolean', (col) => col.defaultTo(false).notNull())
9
+ .addColumn('createdAt', 'timestamptz', (col) => col.notNull())
10
+ .addColumn('updatedAt', 'timestamptz', (col) => col.notNull())
11
+ .addColumn('lastUpdatedBy', 'varchar', (col) => col.notNull())
12
+ .execute()
13
+ }
14
+
15
+ export async function down(db: Kysely<unknown>): Promise<void> {
16
+ await db.schema.dropTable('member')
17
+ }
@@ -9,3 +9,4 @@ export * as _20240208T213404429Z from './20240208T213404429Z-add-tags-column-to-
9
9
  export * as _20240228T003647759Z from './20240228T003647759Z-add-label-sigs'
10
10
  export * as _20240408T192432676Z from './20240408T192432676Z-mute-reporting'
11
11
  export * as _20240506T225055595Z from './20240506T225055595Z-message-subject'
12
+ export * as _20240430T211332580Z from './20240521T211332580Z-member'
@@ -7,6 +7,7 @@ import * as blobPushEvent from './blob_push_event'
7
7
  import * as label from './label'
8
8
  import * as signingKey from './signing_key'
9
9
  import * as communicationTemplate from './communication_template'
10
+ import * as member from './member'
10
11
 
11
12
  export type DatabaseSchemaType = modEvent.PartialDB &
12
13
  modSubjectStatus.PartialDB &
@@ -15,7 +16,8 @@ export type DatabaseSchemaType = modEvent.PartialDB &
15
16
  repoPushEvent.PartialDB &
16
17
  recordPushEvent.PartialDB &
17
18
  blobPushEvent.PartialDB &
18
- communicationTemplate.PartialDB
19
+ communicationTemplate.PartialDB &
20
+ member.PartialDB
19
21
 
20
22
  export type DatabaseSchema = Kysely<DatabaseSchemaType>
21
23
 
@@ -0,0 +1,19 @@
1
+ import { Generated } from 'kysely'
2
+
3
+ export const memberTableName = 'member'
4
+
5
+ export interface Member {
6
+ did: string
7
+ role:
8
+ | 'tools.ozone.team.defs#roleAdmin'
9
+ | 'tools.ozone.team.defs#roleTriage'
10
+ | 'tools.ozone.team.defs#roleModerator'
11
+ disabled: Generated<boolean>
12
+ createdAt: Date
13
+ updatedAt: Date
14
+ lastUpdatedBy: string
15
+ }
16
+
17
+ export type PartialDB = {
18
+ [memberTableName]: Member
19
+ }
package/src/index.ts CHANGED
@@ -12,6 +12,7 @@ import { dbLogger, loggerMiddleware } from './logger'
12
12
  import { OzoneConfig, OzoneSecrets } from './config'
13
13
  import { createServer } from './lexicon'
14
14
  import AppContext, { AppContextOptions } from './context'
15
+ import { Member } from './db/schema/member'
15
16
 
16
17
  export * from './config'
17
18
  export { type ImageInvalidator } from './image-invalidator'
@@ -64,10 +65,45 @@ export class OzoneService {
64
65
  return new OzoneService({ ctx, app })
65
66
  }
66
67
 
68
+ async seedInitialMembers() {
69
+ const members: Array<{ role: Member['role']; did: string }> = []
70
+ this.ctx.cfg.access.admins.forEach((did) =>
71
+ members.push({
72
+ role: 'tools.ozone.team.defs#roleAdmin',
73
+ did,
74
+ }),
75
+ )
76
+ this.ctx.cfg.access.triage.forEach((did) =>
77
+ members.push({
78
+ role: 'tools.ozone.team.defs#roleTriage',
79
+ did,
80
+ }),
81
+ )
82
+ this.ctx.cfg.access.moderators.forEach((did) =>
83
+ members.push({
84
+ role: 'tools.ozone.team.defs#roleModerator',
85
+ did,
86
+ }),
87
+ )
88
+
89
+ for (const member of members) {
90
+ const service = this.ctx.teamService(this.ctx.db)
91
+ await service.upsert({
92
+ ...member,
93
+ lastUpdatedBy: this.ctx.cfg.service.did,
94
+ })
95
+ }
96
+ }
97
+
67
98
  async start(): Promise<http.Server> {
68
99
  if (this.dbStatsInterval) {
69
100
  throw new Error(`${this.constructor.name} already started`)
70
101
  }
102
+
103
+ // Any moderator that are configured via env var may not exist in the database
104
+ // so we need to sync them from env var to the database
105
+ await this.seedInitialMembers()
106
+
71
107
  const { db, backgroundQueue } = this.ctx
72
108
  this.dbStatsInterval = setInterval(() => {
73
109
  dbLogger.info(
@@ -107,6 +107,7 @@ import * as AppBskyFeedGetSuggestedFeeds from './types/app/bsky/feed/getSuggeste
107
107
  import * as AppBskyFeedGetTimeline from './types/app/bsky/feed/getTimeline'
108
108
  import * as AppBskyFeedSearchPosts from './types/app/bsky/feed/searchPosts'
109
109
  import * as AppBskyFeedSendInteractions from './types/app/bsky/feed/sendInteractions'
110
+ import * as AppBskyGraphGetActorStarterPacks from './types/app/bsky/graph/getActorStarterPacks'
110
111
  import * as AppBskyGraphGetBlocks from './types/app/bsky/graph/getBlocks'
111
112
  import * as AppBskyGraphGetFollowers from './types/app/bsky/graph/getFollowers'
112
113
  import * as AppBskyGraphGetFollows from './types/app/bsky/graph/getFollows'
@@ -117,6 +118,8 @@ import * as AppBskyGraphGetListMutes from './types/app/bsky/graph/getListMutes'
117
118
  import * as AppBskyGraphGetLists from './types/app/bsky/graph/getLists'
118
119
  import * as AppBskyGraphGetMutes from './types/app/bsky/graph/getMutes'
119
120
  import * as AppBskyGraphGetRelationships from './types/app/bsky/graph/getRelationships'
121
+ import * as AppBskyGraphGetStarterPack from './types/app/bsky/graph/getStarterPack'
122
+ import * as AppBskyGraphGetStarterPacks from './types/app/bsky/graph/getStarterPacks'
120
123
  import * as AppBskyGraphGetSuggestedFollowsByActor from './types/app/bsky/graph/getSuggestedFollowsByActor'
121
124
  import * as AppBskyGraphMuteActor from './types/app/bsky/graph/muteActor'
122
125
  import * as AppBskyGraphMuteActorList from './types/app/bsky/graph/muteActorList'
@@ -163,6 +166,10 @@ import * as ToolsOzoneModerationQueryEvents from './types/tools/ozone/moderation
163
166
  import * as ToolsOzoneModerationQueryStatuses from './types/tools/ozone/moderation/queryStatuses'
164
167
  import * as ToolsOzoneModerationSearchRepos from './types/tools/ozone/moderation/searchRepos'
165
168
  import * as ToolsOzoneServerGetConfig from './types/tools/ozone/server/getConfig'
169
+ import * as ToolsOzoneTeamAddMember from './types/tools/ozone/team/addMember'
170
+ import * as ToolsOzoneTeamDeleteMember from './types/tools/ozone/team/deleteMember'
171
+ import * as ToolsOzoneTeamListMembers from './types/tools/ozone/team/listMembers'
172
+ import * as ToolsOzoneTeamUpdateMember from './types/tools/ozone/team/updateMember'
166
173
 
167
174
  export const COM_ATPROTO_MODERATION = {
168
175
  DefsReasonSpam: 'com.atproto.moderation.defs#reasonSpam',
@@ -190,6 +197,7 @@ export const APP_BSKY_FEED = {
190
197
  export const APP_BSKY_GRAPH = {
191
198
  DefsModlist: 'app.bsky.graph.defs#modlist',
192
199
  DefsCuratelist: 'app.bsky.graph.defs#curatelist',
200
+ DefsReferencelist: 'app.bsky.graph.defs#referencelist',
193
201
  }
194
202
  export const TOOLS_OZONE_MODERATION = {
195
203
  DefsReviewOpen: 'tools.ozone.moderation.defs#reviewOpen',
@@ -197,6 +205,11 @@ export const TOOLS_OZONE_MODERATION = {
197
205
  DefsReviewClosed: 'tools.ozone.moderation.defs#reviewClosed',
198
206
  DefsReviewNone: 'tools.ozone.moderation.defs#reviewNone',
199
207
  }
208
+ export const TOOLS_OZONE_TEAM = {
209
+ DefsRoleAdmin: 'tools.ozone.team.defs#roleAdmin',
210
+ DefsRoleModerator: 'tools.ozone.team.defs#roleModerator',
211
+ DefsRoleTriage: 'tools.ozone.team.defs#roleTriage',
212
+ }
200
213
 
201
214
  export function createServer(options?: XrpcOptions): Server {
202
215
  return new Server(options)
@@ -1463,6 +1476,17 @@ export class AppBskyGraphNS {
1463
1476
  this._server = server
1464
1477
  }
1465
1478
 
1479
+ getActorStarterPacks<AV extends AuthVerifier>(
1480
+ cfg: ConfigOf<
1481
+ AV,
1482
+ AppBskyGraphGetActorStarterPacks.Handler<ExtractAuth<AV>>,
1483
+ AppBskyGraphGetActorStarterPacks.HandlerReqCtx<ExtractAuth<AV>>
1484
+ >,
1485
+ ) {
1486
+ const nsid = 'app.bsky.graph.getActorStarterPacks' // @ts-ignore
1487
+ return this._server.xrpc.method(nsid, cfg)
1488
+ }
1489
+
1466
1490
  getBlocks<AV extends AuthVerifier>(
1467
1491
  cfg: ConfigOf<
1468
1492
  AV,
@@ -1573,6 +1597,28 @@ export class AppBskyGraphNS {
1573
1597
  return this._server.xrpc.method(nsid, cfg)
1574
1598
  }
1575
1599
 
1600
+ getStarterPack<AV extends AuthVerifier>(
1601
+ cfg: ConfigOf<
1602
+ AV,
1603
+ AppBskyGraphGetStarterPack.Handler<ExtractAuth<AV>>,
1604
+ AppBskyGraphGetStarterPack.HandlerReqCtx<ExtractAuth<AV>>
1605
+ >,
1606
+ ) {
1607
+ const nsid = 'app.bsky.graph.getStarterPack' // @ts-ignore
1608
+ return this._server.xrpc.method(nsid, cfg)
1609
+ }
1610
+
1611
+ getStarterPacks<AV extends AuthVerifier>(
1612
+ cfg: ConfigOf<
1613
+ AV,
1614
+ AppBskyGraphGetStarterPacks.Handler<ExtractAuth<AV>>,
1615
+ AppBskyGraphGetStarterPacks.HandlerReqCtx<ExtractAuth<AV>>
1616
+ >,
1617
+ ) {
1618
+ const nsid = 'app.bsky.graph.getStarterPacks' // @ts-ignore
1619
+ return this._server.xrpc.method(nsid, cfg)
1620
+ }
1621
+
1576
1622
  getSuggestedFollowsByActor<AV extends AuthVerifier>(
1577
1623
  cfg: ConfigOf<
1578
1624
  AV,
@@ -2043,12 +2089,14 @@ export class ToolsOzoneNS {
2043
2089
  communication: ToolsOzoneCommunicationNS
2044
2090
  moderation: ToolsOzoneModerationNS
2045
2091
  server: ToolsOzoneServerNS
2092
+ team: ToolsOzoneTeamNS
2046
2093
 
2047
2094
  constructor(server: Server) {
2048
2095
  this._server = server
2049
2096
  this.communication = new ToolsOzoneCommunicationNS(server)
2050
2097
  this.moderation = new ToolsOzoneModerationNS(server)
2051
2098
  this.server = new ToolsOzoneServerNS(server)
2099
+ this.team = new ToolsOzoneTeamNS(server)
2052
2100
  }
2053
2101
  }
2054
2102
 
@@ -2208,6 +2256,58 @@ export class ToolsOzoneServerNS {
2208
2256
  }
2209
2257
  }
2210
2258
 
2259
+ export class ToolsOzoneTeamNS {
2260
+ _server: Server
2261
+
2262
+ constructor(server: Server) {
2263
+ this._server = server
2264
+ }
2265
+
2266
+ addMember<AV extends AuthVerifier>(
2267
+ cfg: ConfigOf<
2268
+ AV,
2269
+ ToolsOzoneTeamAddMember.Handler<ExtractAuth<AV>>,
2270
+ ToolsOzoneTeamAddMember.HandlerReqCtx<ExtractAuth<AV>>
2271
+ >,
2272
+ ) {
2273
+ const nsid = 'tools.ozone.team.addMember' // @ts-ignore
2274
+ return this._server.xrpc.method(nsid, cfg)
2275
+ }
2276
+
2277
+ deleteMember<AV extends AuthVerifier>(
2278
+ cfg: ConfigOf<
2279
+ AV,
2280
+ ToolsOzoneTeamDeleteMember.Handler<ExtractAuth<AV>>,
2281
+ ToolsOzoneTeamDeleteMember.HandlerReqCtx<ExtractAuth<AV>>
2282
+ >,
2283
+ ) {
2284
+ const nsid = 'tools.ozone.team.deleteMember' // @ts-ignore
2285
+ return this._server.xrpc.method(nsid, cfg)
2286
+ }
2287
+
2288
+ listMembers<AV extends AuthVerifier>(
2289
+ cfg: ConfigOf<
2290
+ AV,
2291
+ ToolsOzoneTeamListMembers.Handler<ExtractAuth<AV>>,
2292
+ ToolsOzoneTeamListMembers.HandlerReqCtx<ExtractAuth<AV>>
2293
+ >,
2294
+ ) {
2295
+ const nsid = 'tools.ozone.team.listMembers' // @ts-ignore
2296
+ return this._server.xrpc.method(nsid, cfg)
2297
+ }
2298
+
2299
+ updateMember<AV extends AuthVerifier>(
2300
+ cfg: ConfigOf<
2301
+ AV,
2302
+ ToolsOzoneTeamUpdateMember.Handler<ExtractAuth<AV>>,
2303
+ ToolsOzoneTeamUpdateMember.HandlerReqCtx<ExtractAuth<AV>>
2304
+ >,
2305
+ ) {
2306
+ const nsid = 'tools.ozone.team.updateMember' // @ts-ignore
2307
+ return this._server.xrpc.method(nsid, cfg)
2308
+ }
2309
+ }
2310
+
2211
2311
  type SharedRateLimitOpts<T> = {
2212
2312
  name: string
2213
2313
  calcKey?: (ctx: T) => string