@atproto/ozone 0.1.24 → 0.1.26

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 (121) hide show
  1. package/CHANGELOG.md +16 -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 +13 -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/config/config.d.ts.map +1 -1
  36. package/dist/config/config.js +10 -7
  37. package/dist/config/config.js.map +1 -1
  38. package/dist/context.d.ts +3 -0
  39. package/dist/context.d.ts.map +1 -1
  40. package/dist/context.js +7 -3
  41. package/dist/context.js.map +1 -1
  42. package/dist/db/migrations/20240521T211332580Z-member.d.ts +4 -0
  43. package/dist/db/migrations/20240521T211332580Z-member.d.ts.map +1 -0
  44. package/dist/db/migrations/20240521T211332580Z-member.js +20 -0
  45. package/dist/db/migrations/20240521T211332580Z-member.js.map +1 -0
  46. package/dist/db/migrations/index.d.ts +1 -0
  47. package/dist/db/migrations/index.d.ts.map +1 -1
  48. package/dist/db/migrations/index.js +2 -1
  49. package/dist/db/migrations/index.js.map +1 -1
  50. package/dist/db/schema/index.d.ts +2 -1
  51. package/dist/db/schema/index.d.ts.map +1 -1
  52. package/dist/db/schema/member.d.ts +14 -0
  53. package/dist/db/schema/member.d.ts.map +1 -0
  54. package/dist/db/schema/member.js +5 -0
  55. package/dist/db/schema/member.js.map +1 -0
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +25 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/lexicon/index.d.ts +18 -0
  61. package/dist/lexicon/index.d.ts.map +1 -1
  62. package/dist/lexicon/index.js +41 -1
  63. package/dist/lexicon/index.js.map +1 -1
  64. package/dist/lexicon/lexicons.d.ts +204 -0
  65. package/dist/lexicon/lexicons.d.ts.map +1 -1
  66. package/dist/lexicon/lexicons.js +222 -0
  67. package/dist/lexicon/lexicons.js.map +1 -1
  68. package/dist/lexicon/types/tools/ozone/team/addMember.d.ts +40 -0
  69. package/dist/lexicon/types/tools/ozone/team/addMember.d.ts.map +1 -0
  70. package/dist/lexicon/types/tools/ozone/team/addMember.js +3 -0
  71. package/dist/lexicon/types/tools/ozone/team/addMember.js.map +1 -0
  72. package/dist/lexicon/types/tools/ozone/team/defs.d.ts +24 -0
  73. package/dist/lexicon/types/tools/ozone/team/defs.d.ts.map +1 -0
  74. package/dist/lexicon/types/tools/ozone/team/defs.js +22 -0
  75. package/dist/lexicon/types/tools/ozone/team/defs.js.map +1 -0
  76. package/dist/lexicon/types/tools/ozone/team/deleteMember.d.ts +30 -0
  77. package/dist/lexicon/types/tools/ozone/team/deleteMember.d.ts.map +1 -0
  78. package/dist/lexicon/types/tools/ozone/team/deleteMember.js +3 -0
  79. package/dist/lexicon/types/tools/ozone/team/deleteMember.js.map +1 -0
  80. package/dist/lexicon/types/tools/ozone/team/listMembers.d.ts +38 -0
  81. package/dist/lexicon/types/tools/ozone/team/listMembers.d.ts.map +1 -0
  82. package/dist/lexicon/types/tools/ozone/team/listMembers.js +3 -0
  83. package/dist/lexicon/types/tools/ozone/team/listMembers.js.map +1 -0
  84. package/dist/lexicon/types/tools/ozone/team/updateMember.d.ts +41 -0
  85. package/dist/lexicon/types/tools/ozone/team/updateMember.d.ts.map +1 -0
  86. package/dist/lexicon/types/tools/ozone/team/updateMember.js +3 -0
  87. package/dist/lexicon/types/tools/ozone/team/updateMember.js.map +1 -0
  88. package/dist/logger.d.ts +2 -1
  89. package/dist/logger.d.ts.map +1 -1
  90. package/dist/team/index.d.ts +37 -0
  91. package/dist/team/index.d.ts.map +1 -0
  92. package/dist/team/index.js +144 -0
  93. package/dist/team/index.js.map +1 -0
  94. package/package.json +3 -3
  95. package/src/api/index.ts +8 -0
  96. package/src/api/proxied.ts +17 -0
  97. package/src/api/server/getConfig.ts +4 -4
  98. package/src/api/team/addMember.ts +46 -0
  99. package/src/api/team/deleteMember.ts +29 -0
  100. package/src/api/team/listMembers.ts +20 -0
  101. package/src/api/team/updateMember.ts +47 -0
  102. package/src/api/util.ts +15 -0
  103. package/src/auth-verifier.ts +14 -12
  104. package/src/config/config.ts +10 -7
  105. package/src/context.ts +9 -3
  106. package/src/db/migrations/20240521T211332580Z-member.ts +17 -0
  107. package/src/db/migrations/index.ts +1 -0
  108. package/src/db/schema/index.ts +3 -1
  109. package/src/db/schema/member.ts +19 -0
  110. package/src/index.ts +36 -0
  111. package/src/lexicon/index.ts +63 -0
  112. package/src/lexicon/lexicons.ts +225 -0
  113. package/src/lexicon/types/tools/ozone/team/addMember.ts +53 -0
  114. package/src/lexicon/types/tools/ozone/team/defs.ts +42 -0
  115. package/src/lexicon/types/tools/ozone/team/deleteMember.ts +39 -0
  116. package/src/lexicon/types/tools/ozone/team/listMembers.ts +48 -0
  117. package/src/lexicon/types/tools/ozone/team/updateMember.ts +54 -0
  118. package/src/team/index.ts +213 -0
  119. package/tests/__snapshots__/team.test.ts.snap +664 -0
  120. package/tests/get-config.test.ts +3 -4
  121. package/tests/team.test.ts +163 -0
@@ -0,0 +1,163 @@
1
+ import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env'
2
+ import AtpAgent from '@atproto/api'
3
+ import { forSnapshot } from './_util'
4
+
5
+ describe('team management', () => {
6
+ let network: TestNetwork
7
+ let adminAgent: AtpAgent
8
+ let triageAgent: AtpAgent
9
+ let sc: SeedClient
10
+
11
+ beforeAll(async () => {
12
+ network = await TestNetwork.create({
13
+ dbPostgresSchema: 'ozone_team_test',
14
+ })
15
+ adminAgent = network.pds.getClient()
16
+ sc = network.getSeedClient()
17
+ await basicSeed(sc)
18
+ await network.processAll()
19
+
20
+ await network.ozone.addAdminDid(sc.dids.alice)
21
+ await network.ozone.addModeratorDid(sc.dids.bob)
22
+ await network.ozone.addTriageDid(sc.dids.carol)
23
+ await adminAgent.login({
24
+ identifier: sc.accounts[sc.dids.alice].handle,
25
+ password: sc.accounts[sc.dids.alice].password,
26
+ })
27
+ triageAgent = network.pds.getClient()
28
+ await triageAgent.login({
29
+ identifier: sc.accounts[sc.dids.carol].handle,
30
+ password: sc.accounts[sc.dids.carol].password,
31
+ })
32
+ })
33
+
34
+ afterAll(async () => {
35
+ await network.close()
36
+ })
37
+
38
+ describe('listMembers', () => {
39
+ it('allows all members to list all members', async () => {
40
+ const [{ data: forAdmin }, { data: forTriage }] = await Promise.all([
41
+ adminAgent.api.tools.ozone.team.listMembers({}),
42
+ triageAgent.api.tools.ozone.team.listMembers({}),
43
+ ])
44
+ expect(forSnapshot(forAdmin.members)).toMatchSnapshot()
45
+ expect(forSnapshot(forTriage.members)).toMatchSnapshot()
46
+ // Validate that the list looks the same to both admin and triage members
47
+
48
+ expect(forAdmin.members.length).toEqual(forTriage.members.length)
49
+ })
50
+ })
51
+ describe('listMembers', () => {
52
+ it('allows all members to list all members', async () => {
53
+ const [{ data: forAdmin }, { data: forTriage }] = await Promise.all([
54
+ adminAgent.api.tools.ozone.team.listMembers({}),
55
+ triageAgent.api.tools.ozone.team.listMembers({}),
56
+ ])
57
+ expect(forSnapshot(forAdmin.members)).toMatchSnapshot()
58
+ expect(forSnapshot(forTriage.members)).toMatchSnapshot()
59
+ // Validate that the list looks the same to both admin and triage members
60
+
61
+ expect(forAdmin.members.length).toEqual(forTriage.members.length)
62
+ })
63
+ })
64
+ describe('addMember', () => {
65
+ const newMemberData = {
66
+ did: 'did:plc:newMember',
67
+ role: 'tools.ozone.team.defs#roleAdmin',
68
+ disabled: false,
69
+ }
70
+ it('only allows admins to add member', async () => {
71
+ await expect(
72
+ triageAgent.api.tools.ozone.team.addMember(newMemberData),
73
+ ).rejects.toThrow('Must be an admin to add a member')
74
+ const { data: newMember } =
75
+ await adminAgent.api.tools.ozone.team.addMember(newMemberData)
76
+ expect(forSnapshot(newMember)).toMatchSnapshot()
77
+ })
78
+ it('throws error when trying to add existing member', async () => {
79
+ await expect(
80
+ adminAgent.api.tools.ozone.team.addMember(newMemberData),
81
+ ).rejects.toThrow('member already exists')
82
+ })
83
+ })
84
+ describe('deleteMember', () => {
85
+ it('only allows admins to delete members', async () => {
86
+ const {
87
+ data: { members: initialMembers },
88
+ } = await adminAgent.api.tools.ozone.team.listMembers({})
89
+ await expect(
90
+ triageAgent.api.tools.ozone.team.deleteMember({
91
+ did: sc.dids.bob,
92
+ }),
93
+ ).rejects.toThrow('Must be an admin to delete a member')
94
+
95
+ await adminAgent.api.tools.ozone.team.deleteMember({
96
+ did: sc.dids.bob,
97
+ })
98
+ const {
99
+ data: { members: membersAfterDelete },
100
+ } = await adminAgent.api.tools.ozone.team.listMembers({})
101
+
102
+ expect(membersAfterDelete.length).toEqual(initialMembers.length - 1)
103
+ expect(membersAfterDelete.map(({ did }) => did)).not.toContain(
104
+ sc.dids.bob,
105
+ )
106
+ })
107
+
108
+ it('throws error when trying to remove non-existent member', async () => {
109
+ await expect(
110
+ adminAgent.api.tools.ozone.team.deleteMember({
111
+ did: 'did:plc:test',
112
+ }),
113
+ ).rejects.toThrow('member not found')
114
+ })
115
+ })
116
+ describe('updateMember', () => {
117
+ it('allows admins to update member', async () => {
118
+ const getCarol = async () => {
119
+ const {
120
+ data: { members },
121
+ } = await adminAgent.api.tools.ozone.team.listMembers({})
122
+
123
+ return members.find(({ did }) => did === sc.dids.carol)
124
+ }
125
+ await expect(
126
+ triageAgent.api.tools.ozone.team.updateMember({
127
+ disabled: false,
128
+ did: sc.dids.carol,
129
+ role: 'tools.ozone.team.defs#roleAdmin',
130
+ }),
131
+ ).rejects.toThrow('Must be an admin to update a member')
132
+
133
+ await adminAgent.api.tools.ozone.team.updateMember({
134
+ did: sc.dids.carol,
135
+ role: 'tools.ozone.team.defs#roleAdmin',
136
+ })
137
+ const carolAfterRoleChange = await getCarol()
138
+ expect(carolAfterRoleChange?.role).toEqual(
139
+ 'tools.ozone.team.defs#roleAdmin',
140
+ )
141
+ // Verify that params that we didn't send did not get updated
142
+ expect(carolAfterRoleChange?.disabled).toEqual(false)
143
+
144
+ await adminAgent.api.tools.ozone.team.updateMember({
145
+ did: sc.dids.carol,
146
+ disabled: true,
147
+ })
148
+ const carolAfterDisable = await getCarol()
149
+ expect(carolAfterDisable?.disabled).toEqual(true)
150
+ // Verify that params that we didn't send did not get updated
151
+ expect(carolAfterDisable?.role).toEqual('tools.ozone.team.defs#roleAdmin')
152
+ })
153
+ it('throws error when trying to update non-existent member', async () => {
154
+ await expect(
155
+ adminAgent.api.tools.ozone.team.updateMember({
156
+ disabled: false,
157
+ did: 'did:plc:test',
158
+ role: 'tools.ozone.team.defs#roleAdmin',
159
+ }),
160
+ ).rejects.toThrow('member not found')
161
+ })
162
+ })
163
+ })