@atproto/pds 0.5.1 → 0.5.3

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 (268) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/account-manager/account-manager.d.ts +35 -4
  3. package/dist/account-manager/account-manager.d.ts.map +1 -1
  4. package/dist/account-manager/account-manager.js +67 -6
  5. package/dist/account-manager/account-manager.js.map +1 -1
  6. package/dist/account-manager/helpers/account.d.ts +1 -1
  7. package/dist/account-manager/helpers/account.d.ts.map +1 -1
  8. package/dist/account-manager/helpers/account.js +10 -4
  9. package/dist/account-manager/helpers/account.js.map +1 -1
  10. package/dist/account-manager/oauth-store.d.ts +2 -1
  11. package/dist/account-manager/oauth-store.d.ts.map +1 -1
  12. package/dist/account-manager/oauth-store.js +61 -12
  13. package/dist/account-manager/oauth-store.js.map +1 -1
  14. package/dist/actor-store/record/reader.d.ts +1 -1
  15. package/dist/actor-store/record/reader.d.ts.map +1 -1
  16. package/dist/actor-store/record/reader.js.map +1 -1
  17. package/dist/api/com/atproto/admin/updateAccountHandle.d.ts.map +1 -1
  18. package/dist/api/com/atproto/admin/updateAccountHandle.js +33 -43
  19. package/dist/api/com/atproto/admin/updateAccountHandle.js.map +1 -1
  20. package/dist/api/com/atproto/identity/updateHandle.d.ts.map +1 -1
  21. package/dist/api/com/atproto/identity/updateHandle.js +39 -61
  22. package/dist/api/com/atproto/identity/updateHandle.js.map +1 -1
  23. package/dist/api/com/atproto/repo/getRecord.js +3 -3
  24. package/dist/api/com/atproto/repo/getRecord.js.map +1 -1
  25. package/dist/api/com/atproto/repo/putRecord.js +2 -2
  26. package/dist/api/com/atproto/repo/putRecord.js.map +1 -1
  27. package/dist/api/com/atproto/sync/getRepo.d.ts.map +1 -1
  28. package/dist/api/com/atproto/sync/getRepo.js +17 -9
  29. package/dist/api/com/atproto/sync/getRepo.js.map +1 -1
  30. package/dist/context.d.ts.map +1 -1
  31. package/dist/context.js +2 -2
  32. package/dist/context.js.map +1 -1
  33. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts +8 -0
  34. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts.map +1 -1
  35. package/dist/lexicons/app/bsky/actor/defs.defs.js +3 -0
  36. package/dist/lexicons/app/bsky/actor/defs.defs.js.map +1 -1
  37. package/dist/lexicons/app/bsky/actor/profile.defs.d.ts.map +1 -1
  38. package/dist/lexicons/app/bsky/actor/status.defs.d.ts.map +1 -1
  39. package/dist/lexicons/app/bsky/draft/defs.defs.d.ts +22 -0
  40. package/dist/lexicons/app/bsky/draft/defs.defs.d.ts.map +1 -1
  41. package/dist/lexicons/app/bsky/draft/defs.defs.js +11 -0
  42. package/dist/lexicons/app/bsky/draft/defs.defs.js.map +1 -1
  43. package/dist/lexicons/app/bsky/embed/gallery.d.ts +3 -0
  44. package/dist/lexicons/app/bsky/embed/gallery.d.ts.map +1 -0
  45. package/dist/lexicons/app/bsky/embed/gallery.defs.d.ts +130 -0
  46. package/dist/lexicons/app/bsky/embed/gallery.defs.d.ts.map +1 -0
  47. package/dist/lexicons/app/bsky/embed/gallery.defs.js +47 -0
  48. package/dist/lexicons/app/bsky/embed/gallery.defs.js.map +1 -0
  49. package/dist/lexicons/app/bsky/embed/gallery.js +6 -0
  50. package/dist/lexicons/app/bsky/embed/gallery.js.map +1 -0
  51. package/dist/lexicons/app/bsky/embed/record.defs.d.ts +2 -1
  52. package/dist/lexicons/app/bsky/embed/record.defs.d.ts.map +1 -1
  53. package/dist/lexicons/app/bsky/embed/record.defs.js +2 -0
  54. package/dist/lexicons/app/bsky/embed/record.defs.js.map +1 -1
  55. package/dist/lexicons/app/bsky/embed/recordWithMedia.defs.d.ts +13 -12
  56. package/dist/lexicons/app/bsky/embed/recordWithMedia.defs.d.ts.map +1 -1
  57. package/dist/lexicons/app/bsky/embed/recordWithMedia.defs.js +3 -0
  58. package/dist/lexicons/app/bsky/embed/recordWithMedia.defs.js.map +1 -1
  59. package/dist/lexicons/app/bsky/embed.d.ts +1 -0
  60. package/dist/lexicons/app/bsky/embed.d.ts.map +1 -1
  61. package/dist/lexicons/app/bsky/embed.js +1 -0
  62. package/dist/lexicons/app/bsky/embed.js.map +1 -1
  63. package/dist/lexicons/app/bsky/feed/defs.defs.d.ts +2 -1
  64. package/dist/lexicons/app/bsky/feed/defs.defs.d.ts.map +1 -1
  65. package/dist/lexicons/app/bsky/feed/defs.defs.js +2 -0
  66. package/dist/lexicons/app/bsky/feed/defs.defs.js.map +1 -1
  67. package/dist/lexicons/app/bsky/feed/generator.defs.d.ts.map +1 -1
  68. package/dist/lexicons/app/bsky/feed/like.defs.d.ts.map +1 -1
  69. package/dist/lexicons/app/bsky/feed/post.defs.d.ts +12 -11
  70. package/dist/lexicons/app/bsky/feed/post.defs.d.ts.map +1 -1
  71. package/dist/lexicons/app/bsky/feed/post.defs.js +2 -0
  72. package/dist/lexicons/app/bsky/feed/post.defs.js.map +1 -1
  73. package/dist/lexicons/app/bsky/feed/postgate.defs.d.ts.map +1 -1
  74. package/dist/lexicons/app/bsky/feed/repost.defs.d.ts.map +1 -1
  75. package/dist/lexicons/app/bsky/feed/threadgate.defs.d.ts.map +1 -1
  76. package/dist/lexicons/app/bsky/graph/block.defs.d.ts.map +1 -1
  77. package/dist/lexicons/app/bsky/graph/follow.defs.d.ts.map +1 -1
  78. package/dist/lexicons/app/bsky/graph/list.defs.d.ts.map +1 -1
  79. package/dist/lexicons/app/bsky/graph/listblock.defs.d.ts.map +1 -1
  80. package/dist/lexicons/app/bsky/graph/listitem.defs.d.ts.map +1 -1
  81. package/dist/lexicons/app/bsky/graph/starterpack.defs.d.ts.map +1 -1
  82. package/dist/lexicons/app/bsky/graph/verification.defs.d.ts.map +1 -1
  83. package/dist/lexicons/app/bsky/labeler/service.defs.d.ts.map +1 -1
  84. package/dist/lexicons/app/bsky/notification/declaration.defs.d.ts.map +1 -1
  85. package/dist/lexicons/chat/bsky/actor/declaration.defs.d.ts.map +1 -1
  86. package/dist/lexicons/chat/bsky/authFullChatClient.defs.d.ts.map +1 -1
  87. package/dist/lexicons/chat/bsky/authFullChatClient.defs.js +1 -0
  88. package/dist/lexicons/chat/bsky/authFullChatClient.defs.js.map +1 -1
  89. package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts +57 -14
  90. package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts.map +1 -1
  91. package/dist/lexicons/chat/bsky/convo/defs.defs.js +34 -5
  92. package/dist/lexicons/chat/bsky/convo/defs.defs.js.map +1 -1
  93. package/dist/lexicons/chat/bsky/convo/getConvoForMembers.defs.d.ts +1 -1
  94. package/dist/lexicons/chat/bsky/convo/getConvoForMembers.defs.d.ts.map +1 -1
  95. package/dist/lexicons/chat/bsky/convo/getConvoForMembers.defs.js +1 -0
  96. package/dist/lexicons/chat/bsky/convo/getConvoForMembers.defs.js.map +1 -1
  97. package/dist/lexicons/chat/bsky/convo/getLog.defs.d.ts +2 -2
  98. package/dist/lexicons/chat/bsky/convo/getLog.defs.d.ts.map +1 -1
  99. package/dist/lexicons/chat/bsky/convo/getLog.defs.js +3 -0
  100. package/dist/lexicons/chat/bsky/convo/getLog.defs.js.map +1 -1
  101. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.d.ts +3 -0
  102. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.d.ts.map +1 -0
  103. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.d.ts +23 -0
  104. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.d.ts.map +1 -0
  105. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.js +19 -0
  106. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.js.map +1 -0
  107. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.js +6 -0
  108. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.js.map +1 -0
  109. package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.d.ts +1 -1
  110. package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.d.ts.map +1 -1
  111. package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.js +1 -0
  112. package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.js.map +1 -1
  113. package/dist/lexicons/chat/bsky/convo.d.ts +1 -0
  114. package/dist/lexicons/chat/bsky/convo.d.ts.map +1 -1
  115. package/dist/lexicons/chat/bsky/convo.js +1 -0
  116. package/dist/lexicons/chat/bsky/convo.js.map +1 -1
  117. package/dist/lexicons/chat/bsky/embed/joinLink.d.ts +3 -0
  118. package/dist/lexicons/chat/bsky/embed/joinLink.d.ts.map +1 -0
  119. package/dist/lexicons/chat/bsky/embed/joinLink.defs.d.ts +99 -0
  120. package/dist/lexicons/chat/bsky/embed/joinLink.defs.d.ts.map +1 -0
  121. package/dist/lexicons/chat/bsky/embed/joinLink.defs.js +32 -0
  122. package/dist/lexicons/chat/bsky/embed/joinLink.defs.js.map +1 -0
  123. package/dist/lexicons/chat/bsky/embed/joinLink.js +6 -0
  124. package/dist/lexicons/chat/bsky/embed/joinLink.js.map +1 -0
  125. package/dist/lexicons/chat/bsky/embed.d.ts +2 -0
  126. package/dist/lexicons/chat/bsky/embed.d.ts.map +1 -0
  127. package/dist/lexicons/chat/bsky/embed.js +5 -0
  128. package/dist/lexicons/chat/bsky/embed.js.map +1 -0
  129. package/dist/lexicons/chat/bsky/group/addMembers.defs.d.ts +1 -1
  130. package/dist/lexicons/chat/bsky/group/addMembers.defs.d.ts.map +1 -1
  131. package/dist/lexicons/chat/bsky/group/addMembers.defs.js +1 -0
  132. package/dist/lexicons/chat/bsky/group/addMembers.defs.js.map +1 -1
  133. package/dist/lexicons/chat/bsky/group/createGroup.defs.d.ts +6 -6
  134. package/dist/lexicons/chat/bsky/group/createGroup.defs.d.ts.map +1 -1
  135. package/dist/lexicons/chat/bsky/group/createGroup.defs.js +4 -3
  136. package/dist/lexicons/chat/bsky/group/createGroup.defs.js.map +1 -1
  137. package/dist/lexicons/chat/bsky/group/defs.defs.d.ts +26 -2
  138. package/dist/lexicons/chat/bsky/group/defs.defs.d.ts.map +1 -1
  139. package/dist/lexicons/chat/bsky/group/defs.defs.js +15 -2
  140. package/dist/lexicons/chat/bsky/group/defs.defs.js.map +1 -1
  141. package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.d.ts +3 -3
  142. package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.d.ts.map +1 -1
  143. package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.js +6 -2
  144. package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.js.map +1 -1
  145. package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.d.ts +3 -0
  146. package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.d.ts.map +1 -0
  147. package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.d.ts +20 -0
  148. package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.d.ts.map +1 -0
  149. package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.js +19 -0
  150. package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.js.map +1 -0
  151. package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.js +6 -0
  152. package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.js.map +1 -0
  153. package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.d.ts +3 -0
  154. package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.d.ts.map +1 -0
  155. package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.d.ts +20 -0
  156. package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.d.ts.map +1 -0
  157. package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.js +18 -0
  158. package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.js.map +1 -0
  159. package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.js +6 -0
  160. package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.js.map +1 -0
  161. package/dist/lexicons/chat/bsky/group.d.ts +2 -0
  162. package/dist/lexicons/chat/bsky/group.d.ts.map +1 -1
  163. package/dist/lexicons/chat/bsky/group.js +2 -0
  164. package/dist/lexicons/chat/bsky/group.js.map +1 -1
  165. package/dist/lexicons/chat/bsky/moderation/defs.d.ts +2 -0
  166. package/dist/lexicons/chat/bsky/moderation/defs.d.ts.map +1 -0
  167. package/dist/lexicons/chat/bsky/moderation/defs.defs.d.ts +58 -0
  168. package/dist/lexicons/chat/bsky/moderation/defs.defs.d.ts.map +1 -0
  169. package/dist/lexicons/chat/bsky/moderation/defs.defs.js +38 -0
  170. package/dist/lexicons/chat/bsky/moderation/defs.defs.js.map +1 -0
  171. package/dist/lexicons/chat/bsky/moderation/defs.js +5 -0
  172. package/dist/lexicons/chat/bsky/moderation/defs.js.map +1 -0
  173. package/dist/lexicons/chat/bsky/moderation/getConvo.d.ts +3 -0
  174. package/dist/lexicons/chat/bsky/moderation/getConvo.d.ts.map +1 -0
  175. package/dist/lexicons/chat/bsky/moderation/getConvo.defs.d.ts +22 -0
  176. package/dist/lexicons/chat/bsky/moderation/getConvo.defs.d.ts.map +1 -0
  177. package/dist/lexicons/chat/bsky/moderation/getConvo.defs.js +18 -0
  178. package/dist/lexicons/chat/bsky/moderation/getConvo.defs.js.map +1 -0
  179. package/dist/lexicons/chat/bsky/moderation/getConvo.js +6 -0
  180. package/dist/lexicons/chat/bsky/moderation/getConvo.js.map +1 -0
  181. package/dist/lexicons/chat/bsky/moderation/getConvoMembers.d.ts +3 -0
  182. package/dist/lexicons/chat/bsky/moderation/getConvoMembers.d.ts.map +1 -0
  183. package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.d.ts +28 -0
  184. package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.d.ts.map +1 -0
  185. package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.js +24 -0
  186. package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.js.map +1 -0
  187. package/dist/lexicons/chat/bsky/moderation/getConvoMembers.js +6 -0
  188. package/dist/lexicons/chat/bsky/moderation/getConvoMembers.js.map +1 -0
  189. package/dist/lexicons/chat/bsky/moderation/getConvos.d.ts +3 -0
  190. package/dist/lexicons/chat/bsky/moderation/getConvos.d.ts.map +1 -0
  191. package/dist/lexicons/chat/bsky/moderation/getConvos.defs.d.ts +22 -0
  192. package/dist/lexicons/chat/bsky/moderation/getConvos.defs.d.ts.map +1 -0
  193. package/dist/lexicons/chat/bsky/moderation/getConvos.defs.js +22 -0
  194. package/dist/lexicons/chat/bsky/moderation/getConvos.defs.js.map +1 -0
  195. package/dist/lexicons/chat/bsky/moderation/getConvos.js +6 -0
  196. package/dist/lexicons/chat/bsky/moderation/getConvos.js.map +1 -0
  197. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.defs.d.ts +21 -3
  198. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.defs.d.ts.map +1 -1
  199. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.defs.js +11 -0
  200. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.defs.js.map +1 -1
  201. package/dist/lexicons/chat/bsky/moderation.d.ts +4 -0
  202. package/dist/lexicons/chat/bsky/moderation.d.ts.map +1 -1
  203. package/dist/lexicons/chat/bsky/moderation.js +4 -0
  204. package/dist/lexicons/chat/bsky/moderation.js.map +1 -1
  205. package/dist/lexicons/chat/bsky.d.ts +1 -0
  206. package/dist/lexicons/chat/bsky.d.ts.map +1 -1
  207. package/dist/lexicons/chat/bsky.js +1 -0
  208. package/dist/lexicons/chat/bsky.js.map +1 -1
  209. package/dist/lexicons/com/atproto/lexicon/schema.defs.d.ts.map +1 -1
  210. package/dist/lexicons/com/germnetwork/declaration.defs.d.ts.map +1 -1
  211. package/dist/lexicons/index.d.ts +1 -0
  212. package/dist/lexicons/index.d.ts.map +1 -1
  213. package/dist/lexicons/index.js +1 -0
  214. package/dist/lexicons/index.js.map +1 -1
  215. package/dist/lexicons/internal/bsky/actor/getProfiles.d.ts +3 -0
  216. package/dist/lexicons/internal/bsky/actor/getProfiles.d.ts.map +1 -0
  217. package/dist/lexicons/internal/bsky/actor/getProfiles.defs.d.ts +38 -0
  218. package/dist/lexicons/internal/bsky/actor/getProfiles.defs.d.ts.map +1 -0
  219. package/dist/lexicons/internal/bsky/actor/getProfiles.defs.js +26 -0
  220. package/dist/lexicons/internal/bsky/actor/getProfiles.defs.js.map +1 -0
  221. package/dist/lexicons/internal/bsky/actor/getProfiles.js +6 -0
  222. package/dist/lexicons/internal/bsky/actor/getProfiles.js.map +1 -0
  223. package/dist/lexicons/internal/bsky/actor.d.ts +2 -0
  224. package/dist/lexicons/internal/bsky/actor.d.ts.map +1 -0
  225. package/dist/lexicons/internal/bsky/actor.js +5 -0
  226. package/dist/lexicons/internal/bsky/actor.js.map +1 -0
  227. package/dist/lexicons/internal/bsky.d.ts +2 -0
  228. package/dist/lexicons/internal/bsky.d.ts.map +1 -0
  229. package/dist/lexicons/internal/bsky.js +5 -0
  230. package/dist/lexicons/internal/bsky.js.map +1 -0
  231. package/dist/lexicons/internal.d.ts +2 -0
  232. package/dist/lexicons/internal.d.ts.map +1 -0
  233. package/dist/lexicons/internal.js +5 -0
  234. package/dist/lexicons/internal.js.map +1 -0
  235. package/dist/lexicons/site/standard/document.defs.d.ts.map +1 -1
  236. package/dist/lexicons/site/standard/graph/recommend.defs.d.ts.map +1 -1
  237. package/dist/lexicons/site/standard/graph/subscription.defs.d.ts.map +1 -1
  238. package/dist/lexicons/site/standard/publication.defs.d.ts.map +1 -1
  239. package/dist/lexicons/site/standard/theme/basic.defs.d.ts.map +1 -1
  240. package/dist/lexicons/tools/ozone/moderation/defs.defs.d.ts +11 -3
  241. package/dist/lexicons/tools/ozone/moderation/defs.defs.d.ts.map +1 -1
  242. package/dist/lexicons/tools/ozone/moderation/defs.defs.js +9 -0
  243. package/dist/lexicons/tools/ozone/moderation/defs.defs.js.map +1 -1
  244. package/dist/lexicons/tools/ozone/moderation/queryEvents.defs.d.ts +2 -2
  245. package/dist/lexicons/tools/ozone/moderation/queryEvents.defs.d.ts.map +1 -1
  246. package/dist/lexicons/tools/ozone/moderation/queryEvents.defs.js.map +1 -1
  247. package/dist/lexicons/tools/ozone/moderation/queryStatuses.defs.d.ts +2 -2
  248. package/dist/lexicons/tools/ozone/moderation/queryStatuses.defs.d.ts.map +1 -1
  249. package/dist/lexicons/tools/ozone/moderation/queryStatuses.defs.js.map +1 -1
  250. package/dist/read-after-write/viewer.d.ts +2 -2
  251. package/package.json +12 -12
  252. package/src/account-manager/account-manager.ts +105 -7
  253. package/src/account-manager/helpers/account.ts +15 -7
  254. package/src/account-manager/oauth-store.ts +76 -18
  255. package/src/actor-store/record/reader.ts +1 -1
  256. package/src/api/com/atproto/admin/updateAccountHandle.ts +37 -46
  257. package/src/api/com/atproto/identity/updateHandle.ts +45 -76
  258. package/src/api/com/atproto/repo/getRecord.ts +3 -3
  259. package/src/api/com/atproto/repo/putRecord.ts +2 -2
  260. package/src/api/com/atproto/sync/getRepo.ts +18 -9
  261. package/src/context.ts +12 -9
  262. package/tests/_puppeteer.ts +8 -2
  263. package/tests/account-manager.test.ts +200 -49
  264. package/tests/oauth.test.ts +5 -5
  265. package/tsconfig.build.json +2 -2
  266. package/tsconfig.build.tsbuildinfo +1 -1
  267. package/tsconfig.json +2 -2
  268. package/tsconfig.tests.json +2 -2
@@ -18,7 +18,7 @@ describe('account manager', () => {
18
18
  // For debugging:
19
19
  // headless: false,
20
20
  // devtools: true,
21
- // slowMo: 150,
21
+ // slowMo: 25,
22
22
  })
23
23
 
24
24
  network = await TestNetworkNoAppView.create({
@@ -34,6 +34,10 @@ describe('account manager', () => {
34
34
  })
35
35
  })
36
36
 
37
+ afterEach(async () => {
38
+ await network.processAll()
39
+ })
40
+
37
41
  afterAll(async () => {
38
42
  await network?.close()
39
43
  await browser?.close()
@@ -44,7 +48,7 @@ describe('account manager', () => {
44
48
 
45
49
  await page.goto(new URL('/account', network.pds.url))
46
50
 
47
- await page.assertTitle(`S'identifier`)
51
+ await page.assertTitle(`Se connecter`)
48
52
 
49
53
  await page.clickOnText('Créer un nouveau compte')
50
54
 
@@ -55,12 +59,14 @@ describe('account manager', () => {
55
59
  await page.typeInInput('email', 'bob@test.com')
56
60
  await page.typeInInput('password', 'bob-pass')
57
61
 
58
- await page.clickOnText("S'inscrire")
62
+ await page.clickOnText('Inscription')
59
63
 
60
- await page.assertTitle(`Compte utilisateur`)
64
+ await page.waitForNetworkIdle()
61
65
 
62
66
  await page.ensureTextVisibility('bob.test', 'span')
63
67
  await page.ensureTextVisibility('Votre compte Atmosphère est hébergé chez')
68
+
69
+ await page.assertTitle('Mon compte Atmosphère')
64
70
  })
65
71
 
66
72
  it('allows switching accounts', async () => {
@@ -68,7 +74,7 @@ describe('account manager', () => {
68
74
 
69
75
  await page.goto(new URL('/account', network.pds.url))
70
76
 
71
- await page.assertTitle(`Compte utilisateur`)
77
+ await page.assertTitle('Mon compte Atmosphère')
72
78
 
73
79
  await page.clickOnAriaLabel(`Sélecteur de compte`)
74
80
  await page.clickOnText('Sélectionner un autre compte')
@@ -93,18 +99,13 @@ describe('account manager', () => {
93
99
 
94
100
  await page.goto(new URL('/account', network.pds.url))
95
101
 
96
- await page.assertTitle(`Compte utilisateur`)
102
+ await page.assertTitle('Mon compte Atmosphère')
97
103
 
98
104
  await page.ensureTextVisibility('bob.test', 'span')
99
105
 
100
- await page.ensureTextVisibility('alice.test', 'span').then(
101
- () => {
102
- throw new Error('Should not be visible')
103
- },
104
- (err) => {
105
- expect(err).toBeInstanceOf(Error)
106
- },
107
- )
106
+ await expect(async () => {
107
+ await page.ensureTextVisibility('alice.test', 'span', 500)
108
+ }).rejects.toThrow('Waiting for selector')
108
109
  })
109
110
 
110
111
  it('allows changing the password', async () => {
@@ -112,9 +113,11 @@ describe('account manager', () => {
112
113
 
113
114
  await page.goto(new URL('/account', network.pds.url))
114
115
 
115
- await page.assertTitle(`Compte utilisateur`)
116
+ await page.assertTitle('Mon compte Atmosphère')
117
+
118
+ await page.clickOnText('Compte utilisateur', 'a')
116
119
 
117
- await page.clickOnText('Mot de passe', 'a')
120
+ await page.clickOnText('Mot de passe')
118
121
 
119
122
  using sendResetPasswordMock = jest
120
123
  .spyOn(network.pds.ctx.mailer, 'sendResetPassword')
@@ -122,7 +125,7 @@ describe('account manager', () => {
122
125
  // noop
123
126
  })
124
127
 
125
- await page.clickOnText('Envoyer le code')
128
+ await page.clickOnText('Envoyer le code de vérification')
126
129
 
127
130
  await page.waitForNetworkIdle()
128
131
 
@@ -137,20 +140,23 @@ describe('account manager', () => {
137
140
  await page.typeInInput('code', params.token)
138
141
  await page.typeInInput('password', 'bob-new-pass')
139
142
 
140
- await page.clickOnText('Soumettre')
143
+ await page.clickOnText('Valider')
141
144
 
142
- await page.ensureTextVisibility(
143
- 'Réinitialisation du mot de passe réussie',
144
- 'div',
145
- )
145
+ await page.ensureNotification('Réinitialisation du mot de passe réussie')
146
146
  })
147
147
 
148
- it('allows validating the email address', async () => {
148
+ it('allows verifying the email address', async () => {
149
149
  await using page = await PageHelper.from(browser, { languages })
150
150
 
151
151
  await page.goto(new URL('/account', network.pds.url))
152
152
 
153
- await page.clickOnText('Vérifier maintenant', 'button')
153
+ await page.assertTitle('Mon compte Atmosphère')
154
+
155
+ await page.clickOnText('Compte utilisateur', 'a')
156
+
157
+ await page.ensureTextVisibility('Votre adresse email doit être vérifiée.')
158
+
159
+ await page.clickOnText('Vérifier')
154
160
 
155
161
  using sendConfirmEmailMock = jest
156
162
  .spyOn(network.pds.ctx.mailer, 'sendConfirmEmail')
@@ -158,7 +164,7 @@ describe('account manager', () => {
158
164
  // noop
159
165
  })
160
166
 
161
- await page.clickOnText('Envoyer le code', 'button')
167
+ await page.clickOnText('Envoyer le code de vérification', 'button')
162
168
 
163
169
  await page.waitForNetworkIdle()
164
170
 
@@ -171,9 +177,31 @@ describe('account manager', () => {
171
177
  })
172
178
 
173
179
  await page.typeInInput('code', params.token)
174
- await page.clickOnText('Soumettre')
180
+ await page.clickOnText('Valider')
181
+
182
+ await page.ensureNotification('Adresse email vérifiée')
183
+ })
184
+
185
+ it('allows changing the username', async () => {
186
+ await using page = await PageHelper.from(browser, { languages })
187
+
188
+ await page.goto(new URL('/account', network.pds.url))
189
+
190
+ await page.assertTitle('Mon compte Atmosphère')
191
+
192
+ await page.clickOnText('Compte utilisateur', 'a')
193
+
194
+ await page.clickOnText("Nom d'utilisateur")
195
+
196
+ await page.clickOnText("Utiliser un nom d'utilisateur par défaut")
175
197
 
176
- await page.ensureTextVisibility('Adresse email vérifiée', 'div')
198
+ await page.typeInInput('handle', 'bob-renamed')
199
+
200
+ await page.clickOnText('Valider')
201
+
202
+ await page.waitForNetworkIdle()
203
+
204
+ await page.ensureTextVisibility('bob-renamed.test', 'span')
177
205
  })
178
206
 
179
207
  it('allows changing the email address', async () => {
@@ -181,7 +209,11 @@ describe('account manager', () => {
181
209
 
182
210
  await page.goto(new URL('/account', network.pds.url))
183
211
 
184
- await page.clickOnText('Email', 'a')
212
+ await page.assertTitle('Mon compte Atmosphère')
213
+
214
+ await page.clickOnText('Compte utilisateur', 'a')
215
+
216
+ await page.clickOnText('Adresse email')
185
217
 
186
218
  using sendUpdateEmailMock = jest
187
219
  .spyOn(network.pds.ctx.mailer, 'sendUpdateEmail')
@@ -189,13 +221,11 @@ describe('account manager', () => {
189
221
  // noop
190
222
  })
191
223
 
192
- using sendConfirmEmailMock = jest
193
- .spyOn(network.pds.ctx.mailer, 'sendConfirmEmail')
194
- .mockImplementation(async () => {
195
- // noop
196
- })
197
-
198
- await page.clickOnText('Envoyer le code', 'button')
224
+ const emailInput = await page.typeInInput(
225
+ 'email',
226
+ 'bob-new-email@example.com',
227
+ )
228
+ emailInput.press('Enter')
199
229
 
200
230
  await page.waitForNetworkIdle()
201
231
 
@@ -207,26 +237,147 @@ describe('account manager', () => {
207
237
  token: expect.any(String),
208
238
  })
209
239
 
210
- await page.typeInInput('code', updateParams.token)
211
- await page.typeInInput('email', 'bob-new-email@example.com')
212
- await page.clickOnText('Soumettre')
240
+ const codeInput = await page.typeInInput('code', updateParams.token)
241
+ codeInput.press('Enter')
242
+
243
+ await page.ensureNotification("Modification de l'adresse email réussie")
244
+
245
+ // The email needs to be verified again
246
+ await page.ensureTextVisibility('Votre adresse email doit être vérifiée.')
247
+ })
248
+
249
+ it('allows signing out & signing back in', async () => {
250
+ await using page = await PageHelper.from(browser, { languages })
251
+
252
+ await page.goto(new URL('/account', network.pds.url))
253
+
254
+ await page.assertTitle('Mon compte Atmosphère')
255
+
256
+ await page.clickOnAriaLabel(`Sélecteur de compte`)
257
+ await page.clickOnText('Se déconnecter')
258
+
259
+ await page.assertTitle(`Se connecter`)
260
+ await page.clickOnText('Se connecter')
261
+
262
+ await page.clickOnText('Se souvenir de ce compte sur cet appareil', 'label')
263
+ await page.typeInInput('username', 'bob-new-email@example.com')
264
+ const input = await page.typeInInput('password', 'bob-new-pass')
265
+
266
+ input.press('Enter')
267
+
268
+ await page.ensureTextVisibility('bob-renamed.test', 'span')
269
+ })
270
+
271
+ it('does not ask for a token when changing a non-verified email', async () => {
272
+ await using page = await PageHelper.from(browser, { languages })
273
+
274
+ await page.goto(new URL('/account', network.pds.url))
275
+
276
+ await page.assertTitle('Mon compte Atmosphère')
277
+
278
+ await page.clickOnText('Compte utilisateur', 'a')
213
279
 
280
+ await page.clickOnText('Adresse email')
281
+
282
+ using sendUpdateEmailMock = jest
283
+ .spyOn(network.pds.ctx.mailer, 'sendUpdateEmail')
284
+ .mockImplementation(async () => {
285
+ // noop
286
+ })
287
+
288
+ const emailInput = await page.typeInInput(
289
+ 'email',
290
+ 'bob-new-email@example.com',
291
+ )
292
+ emailInput.press('Enter')
293
+
294
+ await page.waitForNetworkIdle()
295
+
296
+ expect(sendUpdateEmailMock).not.toHaveBeenCalled()
297
+
298
+ await page.clickOnText('Plus tard')
299
+
300
+ await page.ensureNotification("Modification de l'adresse email réussie")
301
+
302
+ // The email needs to be verified again
303
+ await page.ensureTextVisibility('Votre adresse email doit être vérifiée.')
304
+ })
305
+
306
+ it('rejects racial slurs when changing username', async () => {
307
+ await using page = await PageHelper.from(browser, { languages })
308
+
309
+ await page.goto(new URL('/account', network.pds.url))
310
+
311
+ await page.assertTitle('Mon compte Atmosphère')
312
+
313
+ await page.clickOnText('Compte utilisateur', 'a')
314
+
315
+ await page.clickOnText("Nom d'utilisateur")
316
+
317
+ await page.clickOnText("Utiliser un nom d'utilisateur par défaut")
318
+
319
+ // Try to change username to a racial slur
320
+ await page.typeInInput('handle', 'nigger')
321
+
322
+ await page.clickOnText('Valider')
323
+
324
+ await page.waitForNetworkIdle()
325
+
326
+ // Should display appropriate error message
214
327
  await page.ensureTextVisibility(
215
- "Modification de l'adresse email réussie",
216
- 'div',
328
+ "Le nom d'utilisateur contient un langage inapproprié",
217
329
  )
218
330
 
219
- expect(sendConfirmEmailMock).toHaveBeenCalledTimes(1)
331
+ // Username should not have changed
332
+ await page.clickOnText('Retour')
333
+ await page.ensureTextVisibility('bob-renamed.test', 'span')
334
+ })
220
335
 
221
- const [confirmParams] = sendConfirmEmailMock.mock.lastCall!
222
- expect(confirmParams).toEqual({
223
- locale: 'fr',
224
- token: expect.any(String),
225
- })
336
+ it('rejects custom domain when not configured', async () => {
337
+ await using page = await PageHelper.from(browser, { languages })
338
+
339
+ await page.goto(new URL('/account', network.pds.url))
340
+
341
+ await page.assertTitle('Mon compte Atmosphère')
342
+
343
+ await page.clickOnText('Compte utilisateur', 'a')
344
+
345
+ await page.clickOnText("Nom d'utilisateur")
226
346
 
227
- await page.typeInInput('code', confirmParams.token)
228
- await page.clickOnText('Soumettre')
347
+ await page.clickOnText('Utiliser un nom de domaine que je possède')
348
+
349
+ // DNS is the default verification method
350
+ await page.ensureTextVisibility(
351
+ 'Ajoutez le champ suivant à la configuration DNS de votre domaine.',
352
+ )
353
+ await page.ensureTextVisibility('_atproto.<votre-domaine>', 'code')
354
+ await page.ensureTextVisibility('TXT', 'code')
355
+
356
+ // Switch to HTTP verification method
357
+ await page.clickOnText('HTTP', 'span')
358
+
359
+ await page.ensureTextVisibility(
360
+ "Rendez un fichier texte avec le contenu ci-dessous disponible à l'URL suivante.",
361
+ )
362
+ await page.ensureTextVisibility(
363
+ 'https://<votre-domaine>/.well-known/atproto-did',
364
+ 'code',
365
+ )
366
+
367
+ // Try to use an unconfigured domain
368
+ await page.typeInInput('domain', 'notconfigured.com')
369
+
370
+ await page.clickOnText('Vérifier et enregistrer')
371
+
372
+ await page.waitForNetworkIdle()
373
+
374
+ // Should display appropriate error message
375
+ await page.ensureTextVisibility(
376
+ "Le nom d'utilisateur n'a pas pu être résolu",
377
+ )
229
378
 
230
- await page.ensureTextVisibility('Adresse email vérifiée', 'div')
379
+ // Username should not have changed
380
+ await page.clickOnText('Retour')
381
+ await page.ensureTextVisibility('bob-renamed.test', 'span')
231
382
  })
232
383
  })
@@ -25,7 +25,7 @@ describe('oauth', () => {
25
25
  // For debugging:
26
26
  // headless: false,
27
27
  // devtools: true,
28
- // slowMo: 250,
28
+ // slowMo: 25,
29
29
  })
30
30
 
31
31
  network = await TestNetworkNoAppView.create({
@@ -71,7 +71,7 @@ describe('oauth', () => {
71
71
 
72
72
  await page.navigationClick(`Sign up with ${new URL(network.pds.url).host}`)
73
73
 
74
- await page.assertTitle("S'inscrire")
74
+ await page.assertTitle('Inscription')
75
75
 
76
76
  await page.typeInInput('handle', 'bob')
77
77
 
@@ -80,10 +80,10 @@ describe('oauth', () => {
80
80
  await page.typeInInput('email', 'bob@test.com')
81
81
  await page.typeInInput('password', 'bob-pass')
82
82
 
83
- await page.clickOnText("S'inscrire")
83
+ await page.clickOnText('Inscription')
84
84
 
85
85
  await page.ensureTextVisibility(
86
- `L'application demande un contrôle total sur votre identité, ce qui signifie qu'elle pourrait casser de façon permanente, ou même usurper, votre compte. N'authorisez l'accès qu'aux applications auxquelles vous faites vraiment confiance.`,
86
+ `L'application demande un contrôle total sur votre identité, ce qui signifie qu'elle pourrait casser de façon permanente, ou même usurper, votre compte. N'autorisez l'accès qu'aux applications auxquelles vous faites vraiment confiance.`,
87
87
  )
88
88
 
89
89
  // Make sure the new account is propagated to the PLC directory, allowing
@@ -112,7 +112,7 @@ describe('oauth', () => {
112
112
 
113
113
  await page.navigationClick(`Login with ${new URL(network.pds.url).host}`)
114
114
 
115
- await page.assertTitle("S'identifier")
115
+ await page.assertTitle('Se connecter')
116
116
 
117
117
  // Cancel the OAuth flow:
118
118
  await page.navigationClick('Annuler')
@@ -3,7 +3,7 @@
3
3
  "compilerOptions": {
4
4
  "rootDir": "./src",
5
5
  "outDir": "./dist",
6
- "noUnusedLocals": false
6
+ "noUnusedLocals": false,
7
7
  },
8
- "include": ["./src"]
8
+ "include": ["./src"],
9
9
  }