@atproto/pds 0.5.15 → 0.5.17

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 (619) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/account-manager/account-manager.d.ts +13 -13
  3. package/dist/account-manager/account-manager.d.ts.map +1 -1
  4. package/dist/account-manager/account-manager.js +1 -1
  5. package/dist/account-manager/account-manager.js.map +1 -1
  6. package/dist/account-manager/db/index.d.ts +1 -1
  7. package/dist/account-manager/db/index.d.ts.map +1 -1
  8. package/dist/account-manager/db/index.js.map +1 -1
  9. package/dist/account-manager/db/migrations/001-init.d.ts +1 -1
  10. package/dist/account-manager/db/migrations/001-init.d.ts.map +1 -1
  11. package/dist/account-manager/db/migrations/001-init.js.map +1 -1
  12. package/dist/account-manager/db/migrations/002-account-deactivation.d.ts +1 -1
  13. package/dist/account-manager/db/migrations/002-account-deactivation.d.ts.map +1 -1
  14. package/dist/account-manager/db/migrations/002-account-deactivation.js.map +1 -1
  15. package/dist/account-manager/db/migrations/003-privileged-app-passwords.d.ts +1 -1
  16. package/dist/account-manager/db/migrations/003-privileged-app-passwords.d.ts.map +1 -1
  17. package/dist/account-manager/db/migrations/003-privileged-app-passwords.js.map +1 -1
  18. package/dist/account-manager/db/migrations/004-oauth.d.ts +1 -1
  19. package/dist/account-manager/db/migrations/004-oauth.d.ts.map +1 -1
  20. package/dist/account-manager/db/migrations/004-oauth.js.map +1 -1
  21. package/dist/account-manager/db/migrations/005-oauth-account-management.d.ts +3 -3
  22. package/dist/account-manager/db/migrations/005-oauth-account-management.d.ts.map +1 -1
  23. package/dist/account-manager/db/migrations/005-oauth-account-management.js.map +1 -1
  24. package/dist/account-manager/db/migrations/006-oauth-permission-sets.d.ts +1 -1
  25. package/dist/account-manager/db/migrations/006-oauth-permission-sets.d.ts.map +1 -1
  26. package/dist/account-manager/db/migrations/006-oauth-permission-sets.js.map +1 -1
  27. package/dist/account-manager/db/migrations/007-lexicon-failures-index.d.ts +1 -1
  28. package/dist/account-manager/db/migrations/007-lexicon-failures-index.d.ts.map +1 -1
  29. package/dist/account-manager/db/migrations/007-lexicon-failures-index.js.map +1 -1
  30. package/dist/account-manager/db/schema/account-device.d.ts +2 -2
  31. package/dist/account-manager/db/schema/account-device.d.ts.map +1 -1
  32. package/dist/account-manager/db/schema/account-device.js.map +1 -1
  33. package/dist/account-manager/db/schema/account.d.ts +2 -2
  34. package/dist/account-manager/db/schema/account.d.ts.map +1 -1
  35. package/dist/account-manager/db/schema/account.js.map +1 -1
  36. package/dist/account-manager/db/schema/actor.d.ts +2 -2
  37. package/dist/account-manager/db/schema/actor.d.ts.map +1 -1
  38. package/dist/account-manager/db/schema/actor.js.map +1 -1
  39. package/dist/account-manager/db/schema/app-password.d.ts +1 -1
  40. package/dist/account-manager/db/schema/app-password.d.ts.map +1 -1
  41. package/dist/account-manager/db/schema/app-password.js.map +1 -1
  42. package/dist/account-manager/db/schema/authorization-request.d.ts +4 -4
  43. package/dist/account-manager/db/schema/authorization-request.d.ts.map +1 -1
  44. package/dist/account-manager/db/schema/authorization-request.js.map +1 -1
  45. package/dist/account-manager/db/schema/authorized-client.d.ts +4 -4
  46. package/dist/account-manager/db/schema/authorized-client.d.ts.map +1 -1
  47. package/dist/account-manager/db/schema/authorized-client.js.map +1 -1
  48. package/dist/account-manager/db/schema/device.d.ts +3 -3
  49. package/dist/account-manager/db/schema/device.d.ts.map +1 -1
  50. package/dist/account-manager/db/schema/device.js.map +1 -1
  51. package/dist/account-manager/db/schema/email-token.d.ts +1 -1
  52. package/dist/account-manager/db/schema/email-token.d.ts.map +1 -1
  53. package/dist/account-manager/db/schema/email-token.js.map +1 -1
  54. package/dist/account-manager/db/schema/index.d.ts +14 -14
  55. package/dist/account-manager/db/schema/index.d.ts.map +1 -1
  56. package/dist/account-manager/db/schema/index.js.map +1 -1
  57. package/dist/account-manager/db/schema/invite-code.d.ts +1 -1
  58. package/dist/account-manager/db/schema/invite-code.d.ts.map +1 -1
  59. package/dist/account-manager/db/schema/invite-code.js.map +1 -1
  60. package/dist/account-manager/db/schema/lexicon.d.ts +2 -2
  61. package/dist/account-manager/db/schema/lexicon.d.ts.map +1 -1
  62. package/dist/account-manager/db/schema/lexicon.js.map +1 -1
  63. package/dist/account-manager/db/schema/repo-root.d.ts +1 -1
  64. package/dist/account-manager/db/schema/repo-root.d.ts.map +1 -1
  65. package/dist/account-manager/db/schema/repo-root.js.map +1 -1
  66. package/dist/account-manager/db/schema/token.d.ts +4 -4
  67. package/dist/account-manager/db/schema/token.d.ts.map +1 -1
  68. package/dist/account-manager/db/schema/token.js.map +1 -1
  69. package/dist/account-manager/db/schema/used-refresh-token.d.ts +2 -2
  70. package/dist/account-manager/db/schema/used-refresh-token.d.ts.map +1 -1
  71. package/dist/account-manager/db/schema/used-refresh-token.js.map +1 -1
  72. package/dist/account-manager/helpers/account-device.d.ts +2 -2
  73. package/dist/account-manager/helpers/account-device.d.ts.map +1 -1
  74. package/dist/account-manager/helpers/account-device.js.map +1 -1
  75. package/dist/account-manager/helpers/account.d.ts +3 -3
  76. package/dist/account-manager/helpers/account.d.ts.map +1 -1
  77. package/dist/account-manager/helpers/account.js.map +1 -1
  78. package/dist/account-manager/helpers/auth.d.ts +3 -3
  79. package/dist/account-manager/helpers/auth.d.ts.map +1 -1
  80. package/dist/account-manager/helpers/auth.js.map +1 -1
  81. package/dist/account-manager/helpers/authorization-request.d.ts +5 -5
  82. package/dist/account-manager/helpers/authorization-request.d.ts.map +1 -1
  83. package/dist/account-manager/helpers/authorization-request.js.map +1 -1
  84. package/dist/account-manager/helpers/authorized-client.d.ts +2 -2
  85. package/dist/account-manager/helpers/authorized-client.d.ts.map +1 -1
  86. package/dist/account-manager/helpers/authorized-client.js.map +1 -1
  87. package/dist/account-manager/helpers/device.d.ts +3 -3
  88. package/dist/account-manager/helpers/device.d.ts.map +1 -1
  89. package/dist/account-manager/helpers/device.js.map +1 -1
  90. package/dist/account-manager/helpers/email-token.d.ts +2 -2
  91. package/dist/account-manager/helpers/email-token.d.ts.map +1 -1
  92. package/dist/account-manager/helpers/email-token.js.map +1 -1
  93. package/dist/account-manager/helpers/invite.d.ts +3 -3
  94. package/dist/account-manager/helpers/invite.d.ts.map +1 -1
  95. package/dist/account-manager/helpers/invite.js +1 -1
  96. package/dist/account-manager/helpers/invite.js.map +1 -1
  97. package/dist/account-manager/helpers/lexicon.d.ts +2 -2
  98. package/dist/account-manager/helpers/lexicon.d.ts.map +1 -1
  99. package/dist/account-manager/helpers/lexicon.js +1 -1
  100. package/dist/account-manager/helpers/lexicon.js.map +1 -1
  101. package/dist/account-manager/helpers/password.d.ts +3 -3
  102. package/dist/account-manager/helpers/password.d.ts.map +1 -1
  103. package/dist/account-manager/helpers/password.js.map +1 -1
  104. package/dist/account-manager/helpers/repo.d.ts +2 -2
  105. package/dist/account-manager/helpers/repo.d.ts.map +1 -1
  106. package/dist/account-manager/helpers/repo.js.map +1 -1
  107. package/dist/account-manager/helpers/token.d.ts +4 -4
  108. package/dist/account-manager/helpers/token.d.ts.map +1 -1
  109. package/dist/account-manager/helpers/token.js.map +1 -1
  110. package/dist/account-manager/helpers/used-refresh-token.d.ts +2 -2
  111. package/dist/account-manager/helpers/used-refresh-token.d.ts.map +1 -1
  112. package/dist/account-manager/helpers/used-refresh-token.js.map +1 -1
  113. package/dist/account-manager/oauth-store.d.ts +10 -10
  114. package/dist/account-manager/oauth-store.d.ts.map +1 -1
  115. package/dist/account-manager/oauth-store.js +3 -3
  116. package/dist/account-manager/oauth-store.js.map +1 -1
  117. package/dist/account-manager/scope-reference-getter.d.ts +4 -4
  118. package/dist/account-manager/scope-reference-getter.d.ts.map +1 -1
  119. package/dist/account-manager/scope-reference-getter.js +1 -1
  120. package/dist/account-manager/scope-reference-getter.js.map +1 -1
  121. package/dist/actor-store/actor-store-reader.d.ts +3 -3
  122. package/dist/actor-store/actor-store-reader.d.ts.map +1 -1
  123. package/dist/actor-store/actor-store-reader.js.map +1 -1
  124. package/dist/actor-store/actor-store-resources.d.ts +2 -2
  125. package/dist/actor-store/actor-store-resources.d.ts.map +1 -1
  126. package/dist/actor-store/actor-store-resources.js.map +1 -1
  127. package/dist/actor-store/actor-store-transactor.d.ts +3 -3
  128. package/dist/actor-store/actor-store-transactor.d.ts.map +1 -1
  129. package/dist/actor-store/actor-store-transactor.js.map +1 -1
  130. package/dist/actor-store/actor-store.d.ts +4 -4
  131. package/dist/actor-store/actor-store.d.ts.map +1 -1
  132. package/dist/actor-store/actor-store.js.map +1 -1
  133. package/dist/actor-store/blob/reader.d.ts +6 -6
  134. package/dist/actor-store/blob/reader.d.ts.map +1 -1
  135. package/dist/actor-store/blob/reader.js.map +1 -1
  136. package/dist/actor-store/blob/transactor.d.ts +8 -8
  137. package/dist/actor-store/blob/transactor.d.ts.map +1 -1
  138. package/dist/actor-store/blob/transactor.js.map +1 -1
  139. package/dist/actor-store/db/index.d.ts +1 -1
  140. package/dist/actor-store/db/index.d.ts.map +1 -1
  141. package/dist/actor-store/db/index.js.map +1 -1
  142. package/dist/actor-store/db/migrations/001-init.d.ts +1 -1
  143. package/dist/actor-store/db/migrations/001-init.d.ts.map +1 -1
  144. package/dist/actor-store/db/migrations/001-init.js.map +1 -1
  145. package/dist/actor-store/db/schema/account-pref.d.ts +1 -1
  146. package/dist/actor-store/db/schema/account-pref.d.ts.map +1 -1
  147. package/dist/actor-store/db/schema/account-pref.js.map +1 -1
  148. package/dist/actor-store/db/schema/index.d.ts +7 -7
  149. package/dist/actor-store/db/schema/index.d.ts.map +1 -1
  150. package/dist/actor-store/db/schema/index.js.map +1 -1
  151. package/dist/actor-store/migrate.d.ts +1 -1
  152. package/dist/actor-store/migrate.d.ts.map +1 -1
  153. package/dist/actor-store/migrate.js.map +1 -1
  154. package/dist/actor-store/preference/reader.d.ts +2 -2
  155. package/dist/actor-store/preference/reader.d.ts.map +1 -1
  156. package/dist/actor-store/preference/reader.js.map +1 -1
  157. package/dist/actor-store/preference/transactor.d.ts +2 -2
  158. package/dist/actor-store/preference/transactor.d.ts.map +1 -1
  159. package/dist/actor-store/preference/transactor.js.map +1 -1
  160. package/dist/actor-store/record/reader.d.ts +5 -5
  161. package/dist/actor-store/record/reader.d.ts.map +1 -1
  162. package/dist/actor-store/record/reader.js.map +1 -1
  163. package/dist/actor-store/record/transactor.d.ts +5 -5
  164. package/dist/actor-store/record/transactor.d.ts.map +1 -1
  165. package/dist/actor-store/record/transactor.js.map +1 -1
  166. package/dist/actor-store/repo/reader.d.ts +3 -3
  167. package/dist/actor-store/repo/reader.d.ts.map +1 -1
  168. package/dist/actor-store/repo/reader.js.map +1 -1
  169. package/dist/actor-store/repo/sql-repo-reader.d.ts +3 -3
  170. package/dist/actor-store/repo/sql-repo-reader.d.ts.map +1 -1
  171. package/dist/actor-store/repo/sql-repo-reader.js.map +1 -1
  172. package/dist/actor-store/repo/sql-repo-transactor.d.ts +3 -3
  173. package/dist/actor-store/repo/sql-repo-transactor.d.ts.map +1 -1
  174. package/dist/actor-store/repo/sql-repo-transactor.js.map +1 -1
  175. package/dist/actor-store/repo/transactor.d.ts +7 -7
  176. package/dist/actor-store/repo/transactor.d.ts.map +1 -1
  177. package/dist/actor-store/repo/transactor.js +1 -1
  178. package/dist/actor-store/repo/transactor.js.map +1 -1
  179. package/dist/api/app/bsky/actor/getPreferences.d.ts +2 -2
  180. package/dist/api/app/bsky/actor/getPreferences.d.ts.map +1 -1
  181. package/dist/api/app/bsky/actor/getPreferences.js.map +1 -1
  182. package/dist/api/app/bsky/actor/getProfile.d.ts +2 -2
  183. package/dist/api/app/bsky/actor/getProfile.d.ts.map +1 -1
  184. package/dist/api/app/bsky/actor/getProfile.js.map +1 -1
  185. package/dist/api/app/bsky/actor/getProfiles.d.ts +2 -2
  186. package/dist/api/app/bsky/actor/getProfiles.d.ts.map +1 -1
  187. package/dist/api/app/bsky/actor/getProfiles.js.map +1 -1
  188. package/dist/api/app/bsky/actor/index.d.ts +2 -2
  189. package/dist/api/app/bsky/actor/index.d.ts.map +1 -1
  190. package/dist/api/app/bsky/actor/index.js.map +1 -1
  191. package/dist/api/app/bsky/actor/putPreferences.d.ts +2 -2
  192. package/dist/api/app/bsky/actor/putPreferences.d.ts.map +1 -1
  193. package/dist/api/app/bsky/actor/putPreferences.js.map +1 -1
  194. package/dist/api/app/bsky/feed/getActorLikes.d.ts +2 -2
  195. package/dist/api/app/bsky/feed/getActorLikes.d.ts.map +1 -1
  196. package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
  197. package/dist/api/app/bsky/feed/getAuthorFeed.d.ts +2 -2
  198. package/dist/api/app/bsky/feed/getAuthorFeed.d.ts.map +1 -1
  199. package/dist/api/app/bsky/feed/getAuthorFeed.js.map +1 -1
  200. package/dist/api/app/bsky/feed/getFeed.d.ts +2 -2
  201. package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
  202. package/dist/api/app/bsky/feed/getFeed.js +1 -1
  203. package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
  204. package/dist/api/app/bsky/feed/getPostThread.d.ts +2 -2
  205. package/dist/api/app/bsky/feed/getPostThread.d.ts.map +1 -1
  206. package/dist/api/app/bsky/feed/getPostThread.js.map +1 -1
  207. package/dist/api/app/bsky/feed/getTimeline.d.ts +2 -2
  208. package/dist/api/app/bsky/feed/getTimeline.d.ts.map +1 -1
  209. package/dist/api/app/bsky/feed/getTimeline.js.map +1 -1
  210. package/dist/api/app/bsky/feed/index.d.ts +2 -2
  211. package/dist/api/app/bsky/feed/index.d.ts.map +1 -1
  212. package/dist/api/app/bsky/feed/index.js.map +1 -1
  213. package/dist/api/app/bsky/index.d.ts +2 -2
  214. package/dist/api/app/bsky/index.d.ts.map +1 -1
  215. package/dist/api/app/bsky/index.js.map +1 -1
  216. package/dist/api/app/bsky/notification/index.d.ts +2 -2
  217. package/dist/api/app/bsky/notification/index.d.ts.map +1 -1
  218. package/dist/api/app/bsky/notification/index.js.map +1 -1
  219. package/dist/api/app/bsky/notification/registerPush.d.ts +2 -2
  220. package/dist/api/app/bsky/notification/registerPush.d.ts.map +1 -1
  221. package/dist/api/app/bsky/notification/registerPush.js.map +1 -1
  222. package/dist/api/app/bsky/notification/unregisterPush.d.ts +2 -2
  223. package/dist/api/app/bsky/notification/unregisterPush.d.ts.map +1 -1
  224. package/dist/api/app/bsky/notification/unregisterPush.js.map +1 -1
  225. package/dist/api/app/bsky/util/resolver.d.ts +1 -1
  226. package/dist/api/app/bsky/util/resolver.d.ts.map +1 -1
  227. package/dist/api/app/bsky/util/resolver.js +1 -1
  228. package/dist/api/app/bsky/util/resolver.js.map +1 -1
  229. package/dist/api/com/atproto/admin/deleteAccount.d.ts +2 -2
  230. package/dist/api/com/atproto/admin/deleteAccount.d.ts.map +1 -1
  231. package/dist/api/com/atproto/admin/deleteAccount.js.map +1 -1
  232. package/dist/api/com/atproto/admin/disableAccountInvites.d.ts +2 -2
  233. package/dist/api/com/atproto/admin/disableAccountInvites.d.ts.map +1 -1
  234. package/dist/api/com/atproto/admin/disableAccountInvites.js.map +1 -1
  235. package/dist/api/com/atproto/admin/disableInviteCodes.d.ts +2 -2
  236. package/dist/api/com/atproto/admin/disableInviteCodes.d.ts.map +1 -1
  237. package/dist/api/com/atproto/admin/disableInviteCodes.js.map +1 -1
  238. package/dist/api/com/atproto/admin/enableAccountInvites.d.ts +2 -2
  239. package/dist/api/com/atproto/admin/enableAccountInvites.d.ts.map +1 -1
  240. package/dist/api/com/atproto/admin/enableAccountInvites.js.map +1 -1
  241. package/dist/api/com/atproto/admin/getAccountInfo.d.ts +2 -2
  242. package/dist/api/com/atproto/admin/getAccountInfo.d.ts.map +1 -1
  243. package/dist/api/com/atproto/admin/getAccountInfo.js.map +1 -1
  244. package/dist/api/com/atproto/admin/getAccountInfos.d.ts +2 -2
  245. package/dist/api/com/atproto/admin/getAccountInfos.d.ts.map +1 -1
  246. package/dist/api/com/atproto/admin/getAccountInfos.js.map +1 -1
  247. package/dist/api/com/atproto/admin/getInviteCodes.d.ts +3 -3
  248. package/dist/api/com/atproto/admin/getInviteCodes.d.ts.map +1 -1
  249. package/dist/api/com/atproto/admin/getInviteCodes.js.map +1 -1
  250. package/dist/api/com/atproto/admin/getSubjectStatus.d.ts +2 -2
  251. package/dist/api/com/atproto/admin/getSubjectStatus.d.ts.map +1 -1
  252. package/dist/api/com/atproto/admin/getSubjectStatus.js.map +1 -1
  253. package/dist/api/com/atproto/admin/index.d.ts +2 -2
  254. package/dist/api/com/atproto/admin/index.d.ts.map +1 -1
  255. package/dist/api/com/atproto/admin/index.js.map +1 -1
  256. package/dist/api/com/atproto/admin/sendEmail.d.ts +2 -2
  257. package/dist/api/com/atproto/admin/sendEmail.d.ts.map +1 -1
  258. package/dist/api/com/atproto/admin/sendEmail.js.map +1 -1
  259. package/dist/api/com/atproto/admin/updateAccountEmail.d.ts +2 -2
  260. package/dist/api/com/atproto/admin/updateAccountEmail.d.ts.map +1 -1
  261. package/dist/api/com/atproto/admin/updateAccountEmail.js.map +1 -1
  262. package/dist/api/com/atproto/admin/updateAccountHandle.d.ts +2 -2
  263. package/dist/api/com/atproto/admin/updateAccountHandle.d.ts.map +1 -1
  264. package/dist/api/com/atproto/admin/updateAccountHandle.js.map +1 -1
  265. package/dist/api/com/atproto/admin/updateAccountPassword.d.ts +2 -2
  266. package/dist/api/com/atproto/admin/updateAccountPassword.d.ts.map +1 -1
  267. package/dist/api/com/atproto/admin/updateAccountPassword.js.map +1 -1
  268. package/dist/api/com/atproto/admin/updateSubjectStatus.d.ts +2 -2
  269. package/dist/api/com/atproto/admin/updateSubjectStatus.d.ts.map +1 -1
  270. package/dist/api/com/atproto/admin/updateSubjectStatus.js.map +1 -1
  271. package/dist/api/com/atproto/admin/util.d.ts +4 -4
  272. package/dist/api/com/atproto/admin/util.d.ts.map +1 -1
  273. package/dist/api/com/atproto/admin/util.js.map +1 -1
  274. package/dist/api/com/atproto/identity/getRecommendedDidCredentials.d.ts +2 -2
  275. package/dist/api/com/atproto/identity/getRecommendedDidCredentials.d.ts.map +1 -1
  276. package/dist/api/com/atproto/identity/getRecommendedDidCredentials.js.map +1 -1
  277. package/dist/api/com/atproto/identity/index.d.ts +2 -2
  278. package/dist/api/com/atproto/identity/index.d.ts.map +1 -1
  279. package/dist/api/com/atproto/identity/index.js.map +1 -1
  280. package/dist/api/com/atproto/identity/requestPlcOperationSignature.d.ts +2 -2
  281. package/dist/api/com/atproto/identity/requestPlcOperationSignature.d.ts.map +1 -1
  282. package/dist/api/com/atproto/identity/requestPlcOperationSignature.js.map +1 -1
  283. package/dist/api/com/atproto/identity/resolveHandle.d.ts +2 -2
  284. package/dist/api/com/atproto/identity/resolveHandle.d.ts.map +1 -1
  285. package/dist/api/com/atproto/identity/resolveHandle.js.map +1 -1
  286. package/dist/api/com/atproto/identity/signPlcOperation.d.ts +2 -2
  287. package/dist/api/com/atproto/identity/signPlcOperation.d.ts.map +1 -1
  288. package/dist/api/com/atproto/identity/signPlcOperation.js.map +1 -1
  289. package/dist/api/com/atproto/identity/submitPlcOperation.d.ts +2 -2
  290. package/dist/api/com/atproto/identity/submitPlcOperation.d.ts.map +1 -1
  291. package/dist/api/com/atproto/identity/submitPlcOperation.js.map +1 -1
  292. package/dist/api/com/atproto/identity/updateHandle.d.ts +2 -2
  293. package/dist/api/com/atproto/identity/updateHandle.d.ts.map +1 -1
  294. package/dist/api/com/atproto/identity/updateHandle.js.map +1 -1
  295. package/dist/api/com/atproto/index.d.ts +2 -2
  296. package/dist/api/com/atproto/index.d.ts.map +1 -1
  297. package/dist/api/com/atproto/index.js.map +1 -1
  298. package/dist/api/com/atproto/moderation/createReport.d.ts +2 -2
  299. package/dist/api/com/atproto/moderation/createReport.d.ts.map +1 -1
  300. package/dist/api/com/atproto/moderation/createReport.js.map +1 -1
  301. package/dist/api/com/atproto/moderation/index.d.ts +2 -2
  302. package/dist/api/com/atproto/moderation/index.d.ts.map +1 -1
  303. package/dist/api/com/atproto/moderation/index.js.map +1 -1
  304. package/dist/api/com/atproto/repo/applyWrites.d.ts +2 -2
  305. package/dist/api/com/atproto/repo/applyWrites.d.ts.map +1 -1
  306. package/dist/api/com/atproto/repo/applyWrites.js.map +1 -1
  307. package/dist/api/com/atproto/repo/createRecord.d.ts +2 -2
  308. package/dist/api/com/atproto/repo/createRecord.d.ts.map +1 -1
  309. package/dist/api/com/atproto/repo/createRecord.js.map +1 -1
  310. package/dist/api/com/atproto/repo/deleteRecord.d.ts +2 -2
  311. package/dist/api/com/atproto/repo/deleteRecord.d.ts.map +1 -1
  312. package/dist/api/com/atproto/repo/deleteRecord.js.map +1 -1
  313. package/dist/api/com/atproto/repo/describeRepo.d.ts +2 -2
  314. package/dist/api/com/atproto/repo/describeRepo.d.ts.map +1 -1
  315. package/dist/api/com/atproto/repo/describeRepo.js.map +1 -1
  316. package/dist/api/com/atproto/repo/getRecord.d.ts +2 -2
  317. package/dist/api/com/atproto/repo/getRecord.d.ts.map +1 -1
  318. package/dist/api/com/atproto/repo/getRecord.js.map +1 -1
  319. package/dist/api/com/atproto/repo/importRepo.d.ts +2 -2
  320. package/dist/api/com/atproto/repo/importRepo.d.ts.map +1 -1
  321. package/dist/api/com/atproto/repo/importRepo.js.map +1 -1
  322. package/dist/api/com/atproto/repo/index.d.ts +2 -2
  323. package/dist/api/com/atproto/repo/index.d.ts.map +1 -1
  324. package/dist/api/com/atproto/repo/index.js.map +1 -1
  325. package/dist/api/com/atproto/repo/listMissingBlobs.d.ts +2 -2
  326. package/dist/api/com/atproto/repo/listMissingBlobs.d.ts.map +1 -1
  327. package/dist/api/com/atproto/repo/listMissingBlobs.js.map +1 -1
  328. package/dist/api/com/atproto/repo/listRecords.d.ts +2 -2
  329. package/dist/api/com/atproto/repo/listRecords.d.ts.map +1 -1
  330. package/dist/api/com/atproto/repo/listRecords.js.map +1 -1
  331. package/dist/api/com/atproto/repo/putRecord.d.ts +2 -2
  332. package/dist/api/com/atproto/repo/putRecord.d.ts.map +1 -1
  333. package/dist/api/com/atproto/repo/putRecord.js.map +1 -1
  334. package/dist/api/com/atproto/repo/uploadBlob.d.ts +2 -2
  335. package/dist/api/com/atproto/repo/uploadBlob.d.ts.map +1 -1
  336. package/dist/api/com/atproto/repo/uploadBlob.js +9 -2
  337. package/dist/api/com/atproto/repo/uploadBlob.js.map +1 -1
  338. package/dist/api/com/atproto/server/activateAccount.d.ts +2 -2
  339. package/dist/api/com/atproto/server/activateAccount.d.ts.map +1 -1
  340. package/dist/api/com/atproto/server/activateAccount.js.map +1 -1
  341. package/dist/api/com/atproto/server/checkAccountStatus.d.ts +2 -2
  342. package/dist/api/com/atproto/server/checkAccountStatus.d.ts.map +1 -1
  343. package/dist/api/com/atproto/server/checkAccountStatus.js.map +1 -1
  344. package/dist/api/com/atproto/server/confirmEmail.d.ts +2 -2
  345. package/dist/api/com/atproto/server/confirmEmail.d.ts.map +1 -1
  346. package/dist/api/com/atproto/server/confirmEmail.js.map +1 -1
  347. package/dist/api/com/atproto/server/createAccount.d.ts +2 -2
  348. package/dist/api/com/atproto/server/createAccount.d.ts.map +1 -1
  349. package/dist/api/com/atproto/server/createAccount.js +1 -1
  350. package/dist/api/com/atproto/server/createAccount.js.map +1 -1
  351. package/dist/api/com/atproto/server/createAppPassword.d.ts +2 -2
  352. package/dist/api/com/atproto/server/createAppPassword.d.ts.map +1 -1
  353. package/dist/api/com/atproto/server/createAppPassword.js.map +1 -1
  354. package/dist/api/com/atproto/server/createInviteCode.d.ts +2 -2
  355. package/dist/api/com/atproto/server/createInviteCode.d.ts.map +1 -1
  356. package/dist/api/com/atproto/server/createInviteCode.js.map +1 -1
  357. package/dist/api/com/atproto/server/createInviteCodes.d.ts +2 -2
  358. package/dist/api/com/atproto/server/createInviteCodes.d.ts.map +1 -1
  359. package/dist/api/com/atproto/server/createInviteCodes.js.map +1 -1
  360. package/dist/api/com/atproto/server/createSession.d.ts +2 -2
  361. package/dist/api/com/atproto/server/createSession.d.ts.map +1 -1
  362. package/dist/api/com/atproto/server/createSession.js +1 -1
  363. package/dist/api/com/atproto/server/createSession.js.map +1 -1
  364. package/dist/api/com/atproto/server/deactivateAccount.d.ts +2 -2
  365. package/dist/api/com/atproto/server/deactivateAccount.d.ts.map +1 -1
  366. package/dist/api/com/atproto/server/deactivateAccount.js.map +1 -1
  367. package/dist/api/com/atproto/server/deleteAccount.d.ts +2 -2
  368. package/dist/api/com/atproto/server/deleteAccount.d.ts.map +1 -1
  369. package/dist/api/com/atproto/server/deleteAccount.js.map +1 -1
  370. package/dist/api/com/atproto/server/deleteSession.d.ts +2 -2
  371. package/dist/api/com/atproto/server/deleteSession.d.ts.map +1 -1
  372. package/dist/api/com/atproto/server/deleteSession.js.map +1 -1
  373. package/dist/api/com/atproto/server/describeServer.d.ts +2 -2
  374. package/dist/api/com/atproto/server/describeServer.d.ts.map +1 -1
  375. package/dist/api/com/atproto/server/describeServer.js.map +1 -1
  376. package/dist/api/com/atproto/server/getAccountInviteCodes.d.ts +2 -2
  377. package/dist/api/com/atproto/server/getAccountInviteCodes.d.ts.map +1 -1
  378. package/dist/api/com/atproto/server/getAccountInviteCodes.js.map +1 -1
  379. package/dist/api/com/atproto/server/getServiceAuth.d.ts +2 -2
  380. package/dist/api/com/atproto/server/getServiceAuth.d.ts.map +1 -1
  381. package/dist/api/com/atproto/server/getServiceAuth.js.map +1 -1
  382. package/dist/api/com/atproto/server/getSession.d.ts +2 -2
  383. package/dist/api/com/atproto/server/getSession.d.ts.map +1 -1
  384. package/dist/api/com/atproto/server/getSession.js +1 -1
  385. package/dist/api/com/atproto/server/getSession.js.map +1 -1
  386. package/dist/api/com/atproto/server/index.d.ts +2 -2
  387. package/dist/api/com/atproto/server/index.d.ts.map +1 -1
  388. package/dist/api/com/atproto/server/index.js.map +1 -1
  389. package/dist/api/com/atproto/server/listAppPasswords.d.ts +2 -2
  390. package/dist/api/com/atproto/server/listAppPasswords.d.ts.map +1 -1
  391. package/dist/api/com/atproto/server/listAppPasswords.js.map +1 -1
  392. package/dist/api/com/atproto/server/refreshSession.d.ts +2 -2
  393. package/dist/api/com/atproto/server/refreshSession.d.ts.map +1 -1
  394. package/dist/api/com/atproto/server/refreshSession.js +1 -1
  395. package/dist/api/com/atproto/server/refreshSession.js.map +1 -1
  396. package/dist/api/com/atproto/server/requestAccountDelete.d.ts +2 -2
  397. package/dist/api/com/atproto/server/requestAccountDelete.d.ts.map +1 -1
  398. package/dist/api/com/atproto/server/requestAccountDelete.js.map +1 -1
  399. package/dist/api/com/atproto/server/requestEmailConfirmation.d.ts +3 -3
  400. package/dist/api/com/atproto/server/requestEmailConfirmation.d.ts.map +1 -1
  401. package/dist/api/com/atproto/server/requestEmailConfirmation.js.map +1 -1
  402. package/dist/api/com/atproto/server/requestEmailUpdate.d.ts +3 -3
  403. package/dist/api/com/atproto/server/requestEmailUpdate.d.ts.map +1 -1
  404. package/dist/api/com/atproto/server/requestEmailUpdate.js.map +1 -1
  405. package/dist/api/com/atproto/server/requestPasswordReset.d.ts +2 -2
  406. package/dist/api/com/atproto/server/requestPasswordReset.d.ts.map +1 -1
  407. package/dist/api/com/atproto/server/requestPasswordReset.js.map +1 -1
  408. package/dist/api/com/atproto/server/reserveSigningKey.d.ts +2 -2
  409. package/dist/api/com/atproto/server/reserveSigningKey.d.ts.map +1 -1
  410. package/dist/api/com/atproto/server/reserveSigningKey.js.map +1 -1
  411. package/dist/api/com/atproto/server/resetPassword.d.ts +2 -2
  412. package/dist/api/com/atproto/server/resetPassword.d.ts.map +1 -1
  413. package/dist/api/com/atproto/server/resetPassword.js.map +1 -1
  414. package/dist/api/com/atproto/server/revokeAppPassword.d.ts +2 -2
  415. package/dist/api/com/atproto/server/revokeAppPassword.d.ts.map +1 -1
  416. package/dist/api/com/atproto/server/revokeAppPassword.js.map +1 -1
  417. package/dist/api/com/atproto/server/updateEmail.d.ts +2 -2
  418. package/dist/api/com/atproto/server/updateEmail.d.ts.map +1 -1
  419. package/dist/api/com/atproto/server/updateEmail.js.map +1 -1
  420. package/dist/api/com/atproto/server/util.d.ts +4 -4
  421. package/dist/api/com/atproto/server/util.d.ts.map +1 -1
  422. package/dist/api/com/atproto/server/util.js.map +1 -1
  423. package/dist/api/com/atproto/sync/deprecated/getCheckout.d.ts +2 -2
  424. package/dist/api/com/atproto/sync/deprecated/getCheckout.d.ts.map +1 -1
  425. package/dist/api/com/atproto/sync/deprecated/getCheckout.js.map +1 -1
  426. package/dist/api/com/atproto/sync/deprecated/getHead.d.ts +2 -2
  427. package/dist/api/com/atproto/sync/deprecated/getHead.d.ts.map +1 -1
  428. package/dist/api/com/atproto/sync/deprecated/getHead.js.map +1 -1
  429. package/dist/api/com/atproto/sync/getBlob.d.ts +2 -2
  430. package/dist/api/com/atproto/sync/getBlob.d.ts.map +1 -1
  431. package/dist/api/com/atproto/sync/getBlob.js.map +1 -1
  432. package/dist/api/com/atproto/sync/getBlocks.d.ts +2 -2
  433. package/dist/api/com/atproto/sync/getBlocks.d.ts.map +1 -1
  434. package/dist/api/com/atproto/sync/getBlocks.js.map +1 -1
  435. package/dist/api/com/atproto/sync/getLatestCommit.d.ts +2 -2
  436. package/dist/api/com/atproto/sync/getLatestCommit.d.ts.map +1 -1
  437. package/dist/api/com/atproto/sync/getLatestCommit.js.map +1 -1
  438. package/dist/api/com/atproto/sync/getRecord.d.ts +2 -2
  439. package/dist/api/com/atproto/sync/getRecord.d.ts.map +1 -1
  440. package/dist/api/com/atproto/sync/getRecord.js.map +1 -1
  441. package/dist/api/com/atproto/sync/getRepo.d.ts +3 -3
  442. package/dist/api/com/atproto/sync/getRepo.d.ts.map +1 -1
  443. package/dist/api/com/atproto/sync/getRepo.js.map +1 -1
  444. package/dist/api/com/atproto/sync/getRepoStatus.d.ts +2 -2
  445. package/dist/api/com/atproto/sync/getRepoStatus.d.ts.map +1 -1
  446. package/dist/api/com/atproto/sync/getRepoStatus.js.map +1 -1
  447. package/dist/api/com/atproto/sync/index.d.ts +2 -2
  448. package/dist/api/com/atproto/sync/index.d.ts.map +1 -1
  449. package/dist/api/com/atproto/sync/index.js.map +1 -1
  450. package/dist/api/com/atproto/sync/listBlobs.d.ts +2 -2
  451. package/dist/api/com/atproto/sync/listBlobs.d.ts.map +1 -1
  452. package/dist/api/com/atproto/sync/listBlobs.js.map +1 -1
  453. package/dist/api/com/atproto/sync/listRepos.d.ts +3 -3
  454. package/dist/api/com/atproto/sync/listRepos.d.ts.map +1 -1
  455. package/dist/api/com/atproto/sync/listRepos.js +1 -1
  456. package/dist/api/com/atproto/sync/listRepos.js.map +1 -1
  457. package/dist/api/com/atproto/sync/subscribeRepos.d.ts +2 -2
  458. package/dist/api/com/atproto/sync/subscribeRepos.d.ts.map +1 -1
  459. package/dist/api/com/atproto/sync/subscribeRepos.js.map +1 -1
  460. package/dist/api/com/atproto/sync/util.d.ts +3 -3
  461. package/dist/api/com/atproto/sync/util.d.ts.map +1 -1
  462. package/dist/api/com/atproto/sync/util.js.map +1 -1
  463. package/dist/api/com/atproto/temp/checkSignupQueue.d.ts +2 -2
  464. package/dist/api/com/atproto/temp/checkSignupQueue.d.ts.map +1 -1
  465. package/dist/api/com/atproto/temp/checkSignupQueue.js.map +1 -1
  466. package/dist/api/com/atproto/temp/index.d.ts +2 -2
  467. package/dist/api/com/atproto/temp/index.d.ts.map +1 -1
  468. package/dist/api/com/atproto/temp/index.js.map +1 -1
  469. package/dist/api/index.d.ts +2 -2
  470. package/dist/api/index.d.ts.map +1 -1
  471. package/dist/api/index.js.map +1 -1
  472. package/dist/api/proxy.d.ts +2 -2
  473. package/dist/api/proxy.d.ts.map +1 -1
  474. package/dist/api/proxy.js.map +1 -1
  475. package/dist/auth-output.d.ts +3 -3
  476. package/dist/auth-output.d.ts.map +1 -1
  477. package/dist/auth-output.js.map +1 -1
  478. package/dist/auth-routes.d.ts +1 -1
  479. package/dist/auth-routes.d.ts.map +1 -1
  480. package/dist/auth-routes.js +4 -2
  481. package/dist/auth-routes.js.map +1 -1
  482. package/dist/auth-verifier.d.ts +11 -11
  483. package/dist/auth-verifier.d.ts.map +1 -1
  484. package/dist/auth-verifier.js +2 -2
  485. package/dist/auth-verifier.js.map +1 -1
  486. package/dist/basic-routes.d.ts +1 -1
  487. package/dist/basic-routes.d.ts.map +1 -1
  488. package/dist/basic-routes.js.map +1 -1
  489. package/dist/config/config.d.ts +4 -3
  490. package/dist/config/config.d.ts.map +1 -1
  491. package/dist/config/config.js +1 -0
  492. package/dist/config/config.js.map +1 -1
  493. package/dist/config/env.d.ts +1 -0
  494. package/dist/config/env.d.ts.map +1 -1
  495. package/dist/config/env.js +1 -0
  496. package/dist/config/env.js.map +1 -1
  497. package/dist/config/secrets.d.ts +1 -1
  498. package/dist/config/secrets.d.ts.map +1 -1
  499. package/dist/config/secrets.js.map +1 -1
  500. package/dist/context.d.ts +8 -8
  501. package/dist/context.d.ts.map +1 -1
  502. package/dist/context.js +4 -2
  503. package/dist/context.js.map +1 -1
  504. package/dist/crawlers.d.ts +1 -1
  505. package/dist/crawlers.d.ts.map +1 -1
  506. package/dist/crawlers.js.map +1 -1
  507. package/dist/db/db.js.map +1 -1
  508. package/dist/db/migrator.d.ts +2 -2
  509. package/dist/db/migrator.d.ts.map +1 -1
  510. package/dist/db/migrator.js.map +1 -1
  511. package/dist/db/pagination.d.ts +2 -2
  512. package/dist/db/pagination.d.ts.map +1 -1
  513. package/dist/db/pagination.js.map +1 -1
  514. package/dist/db/tables/moderation.d.ts +2 -2
  515. package/dist/db/tables/moderation.d.ts.map +1 -1
  516. package/dist/db/tables/moderation.js.map +1 -1
  517. package/dist/db/util.d.ts +1 -1
  518. package/dist/db/util.d.ts.map +1 -1
  519. package/dist/db/util.js.map +1 -1
  520. package/dist/did-cache/db/index.d.ts +1 -1
  521. package/dist/did-cache/db/index.d.ts.map +1 -1
  522. package/dist/did-cache/db/index.js.map +1 -1
  523. package/dist/did-cache/db/migrations.d.ts +1 -1
  524. package/dist/did-cache/db/migrations.d.ts.map +1 -1
  525. package/dist/did-cache/db/migrations.js.map +1 -1
  526. package/dist/did-cache/index.d.ts +2 -2
  527. package/dist/did-cache/index.d.ts.map +1 -1
  528. package/dist/did-cache/index.js.map +1 -1
  529. package/dist/disk-blobstore.d.ts +3 -3
  530. package/dist/disk-blobstore.d.ts.map +1 -1
  531. package/dist/disk-blobstore.js.map +1 -1
  532. package/dist/error.d.ts +1 -1
  533. package/dist/error.d.ts.map +1 -1
  534. package/dist/error.js +1 -1
  535. package/dist/error.js.map +1 -1
  536. package/dist/image/image-url-builder.d.ts +1 -1
  537. package/dist/image/image-url-builder.d.ts.map +1 -1
  538. package/dist/image/image-url-builder.js.map +1 -1
  539. package/dist/index.d.ts +5 -5
  540. package/dist/index.d.ts.map +1 -1
  541. package/dist/index.js +1 -0
  542. package/dist/index.js.map +1 -1
  543. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts +1 -1
  544. package/dist/lexicons/app/bsky/actor/defs.defs.js.map +1 -1
  545. package/dist/logger.d.ts +1 -1
  546. package/dist/logger.d.ts.map +1 -1
  547. package/dist/logger.js.map +1 -1
  548. package/dist/mailer/index.d.ts +2 -2
  549. package/dist/mailer/index.d.ts.map +1 -1
  550. package/dist/mailer/index.js.map +1 -1
  551. package/dist/mailer/moderation.d.ts +2 -2
  552. package/dist/mailer/moderation.d.ts.map +1 -1
  553. package/dist/mailer/moderation.js.map +1 -1
  554. package/dist/pipethrough.d.ts +7 -7
  555. package/dist/pipethrough.d.ts.map +1 -1
  556. package/dist/pipethrough.js.map +1 -1
  557. package/dist/read-after-write/types.d.ts +4 -4
  558. package/dist/read-after-write/types.d.ts.map +1 -1
  559. package/dist/read-after-write/types.js.map +1 -1
  560. package/dist/read-after-write/util.d.ts +5 -5
  561. package/dist/read-after-write/util.d.ts.map +1 -1
  562. package/dist/read-after-write/util.js.map +1 -1
  563. package/dist/read-after-write/viewer.d.ts +7 -7
  564. package/dist/read-after-write/viewer.d.ts.map +1 -1
  565. package/dist/read-after-write/viewer.js +1 -1
  566. package/dist/read-after-write/viewer.js.map +1 -1
  567. package/dist/repo/prepare.d.ts +4 -4
  568. package/dist/repo/prepare.d.ts.map +1 -1
  569. package/dist/repo/prepare.js.map +1 -1
  570. package/dist/repo/types.d.ts +3 -3
  571. package/dist/repo/types.d.ts.map +1 -1
  572. package/dist/repo/types.js.map +1 -1
  573. package/dist/scripts/publish-identity.d.ts +2 -2
  574. package/dist/scripts/publish-identity.d.ts.map +1 -1
  575. package/dist/scripts/publish-identity.js.map +1 -1
  576. package/dist/scripts/rebuild-repo.d.ts +4 -4
  577. package/dist/scripts/rebuild-repo.d.ts.map +1 -1
  578. package/dist/scripts/rebuild-repo.js.map +1 -1
  579. package/dist/scripts/rotate-keys.d.ts +6 -6
  580. package/dist/scripts/rotate-keys.d.ts.map +1 -1
  581. package/dist/scripts/rotate-keys.js.map +1 -1
  582. package/dist/scripts/sequencer-recovery/index.d.ts +1 -1
  583. package/dist/scripts/sequencer-recovery/index.d.ts.map +1 -1
  584. package/dist/scripts/sequencer-recovery/index.js.map +1 -1
  585. package/dist/scripts/sequencer-recovery/recoverer.d.ts +4 -4
  586. package/dist/scripts/sequencer-recovery/recoverer.d.ts.map +1 -1
  587. package/dist/scripts/sequencer-recovery/recoverer.js.map +1 -1
  588. package/dist/scripts/sequencer-recovery/recovery-db.d.ts +1 -1
  589. package/dist/scripts/sequencer-recovery/recovery-db.d.ts.map +1 -1
  590. package/dist/scripts/sequencer-recovery/recovery-db.js.map +1 -1
  591. package/dist/scripts/sequencer-recovery/repair-repos.d.ts +1 -1
  592. package/dist/scripts/sequencer-recovery/repair-repos.d.ts.map +1 -1
  593. package/dist/scripts/sequencer-recovery/repair-repos.js.map +1 -1
  594. package/dist/sequencer/db/index.d.ts +1 -1
  595. package/dist/sequencer/db/index.d.ts.map +1 -1
  596. package/dist/sequencer/db/index.js.map +1 -1
  597. package/dist/sequencer/db/migrations/001-init.d.ts +1 -1
  598. package/dist/sequencer/db/migrations/001-init.d.ts.map +1 -1
  599. package/dist/sequencer/db/migrations/001-init.js.map +1 -1
  600. package/dist/sequencer/db/schema.d.ts +1 -1
  601. package/dist/sequencer/db/schema.d.ts.map +1 -1
  602. package/dist/sequencer/db/schema.js.map +1 -1
  603. package/dist/sequencer/events.d.ts +3 -3
  604. package/dist/sequencer/events.d.ts.map +1 -1
  605. package/dist/sequencer/events.js.map +1 -1
  606. package/dist/sequencer/outbox.d.ts +1 -1
  607. package/dist/sequencer/outbox.d.ts.map +1 -1
  608. package/dist/sequencer/outbox.js.map +1 -1
  609. package/dist/sequencer/sequencer.d.ts +5 -5
  610. package/dist/sequencer/sequencer.d.ts.map +1 -1
  611. package/dist/sequencer/sequencer.js.map +1 -1
  612. package/dist/util/compression.js.map +1 -1
  613. package/dist/util/http.d.ts +1 -1
  614. package/dist/util/http.d.ts.map +1 -1
  615. package/dist/util/http.js.map +1 -1
  616. package/dist/well-known.d.ts +1 -1
  617. package/dist/well-known.d.ts.map +1 -1
  618. package/dist/well-known.js.map +1 -1
  619. package/package.json +25 -25
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/db/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import { SqlBool, sql } from 'kysely'\nimport { InvalidRequestError } from '@atproto/xrpc-server'\nimport { AnyQb, DbRef } from './util.js'\n\nexport type Cursor = { primary: string; secondary: string }\nexport type LabeledResult = {\n primary: string | number\n secondary: string | number\n}\n\n/**\n * The GenericKeyset is an abstract class that sets-up the interface and partial implementation\n * of a keyset-paginated cursor with two parts. There are three types involved:\n * - Result: a raw result (i.e. a row from the db) containing data that will make-up a cursor.\n * - E.g. { createdAt: '2022-01-01T12:00:00Z', cid: 'bafyx' }\n * - LabeledResult: a Result processed such that the \"primary\" and \"secondary\" parts of the cursor are labeled.\n * - E.g. { primary: '2022-01-01T12:00:00Z', secondary: 'bafyx' }\n * - Cursor: the two string parts that make-up the packed/string cursor.\n * - E.g. packed cursor '1641038400000::bafyx' in parts { primary: '1641038400000', secondary: 'bafyx' }\n *\n * These types relate as such. Implementers define the relations marked with a *:\n * Result -*-> LabeledResult <-*-> Cursor <--> packed/string cursor\n * ↳ SQL Condition\n */\nexport abstract class GenericKeyset<R, LR extends LabeledResult> {\n constructor(\n public primary: DbRef,\n public secondary: DbRef,\n ) {}\n abstract labelResult(result: R): LR\n abstract labeledResultToCursor(labeled: LR): Cursor\n abstract cursorToLabeledResult(cursor: Cursor): LR\n packFromResult(results: R | R[]): string | undefined {\n const result = Array.isArray(results) ? results.at(-1) : results\n if (!result) return\n return this.pack(this.labelResult(result))\n }\n pack(labeled?: LR): string | undefined {\n if (!labeled) return\n const cursor = this.labeledResultToCursor(labeled)\n return this.packCursor(cursor)\n }\n unpack(cursorStr?: string): LR | undefined {\n const cursor = this.unpackCursor(cursorStr)\n if (!cursor) return\n return this.cursorToLabeledResult(cursor)\n }\n packCursor(cursor?: Cursor): string | undefined {\n if (!cursor) return\n return `${cursor.primary}::${cursor.secondary}`\n }\n unpackCursor(cursorStr?: string): Cursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('::')\n const [primary, secondary, ...others] = result\n if (!primary || !secondary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n secondary,\n }\n }\n getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean) {\n if (labeled === undefined) return\n if (tryIndex) {\n // The tryIndex param will likely disappear and become the default implementation: here for now for gradual rollout query-by-query.\n if (direction === 'asc') {\n return sql<SqlBool>`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))`\n }\n } else {\n // @NOTE this implementation can struggle to use an index on (primary, secondary) for pagination due to the \"or\" usage.\n if (direction === 'asc') {\n return sql<SqlBool>`((${this.primary} > ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${this.primary} < ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))`\n }\n }\n }\n}\n\ntype CreatedAtCidResult = { createdAt: string; cid: string }\ntype TimeCidLabeledResult = Cursor\n\nexport class TimeCidKeyset<\n TimeCidResult = CreatedAtCidResult,\n> extends GenericKeyset<TimeCidResult, TimeCidLabeledResult> {\n labelResult(result: TimeCidResult): TimeCidLabeledResult\n labelResult<TimeCidResult extends CreatedAtCidResult>(result: TimeCidResult) {\n return { primary: result.createdAt, secondary: result.cid }\n }\n labeledResultToCursor(labeled: TimeCidLabeledResult) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\nexport const paginate = <\n QB extends AnyQb,\n K extends GenericKeyset<unknown, any>,\n>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n keyset: K\n tryIndex?: boolean\n },\n): QB => {\n const { limit, cursor, keyset, direction = 'desc', tryIndex } = opts\n const keysetSql = keyset.getSql(keyset.unpack(cursor), direction, tryIndex)\n return qb\n .$if(!!limit, (q) => q.limit(limit as number))\n .orderBy(keyset.primary, direction)\n .orderBy(keyset.secondary, direction)\n .$if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb)) as QB\n}\n"]}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/db/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import { type SqlBool, sql } from 'kysely'\nimport { InvalidRequestError } from '@atproto/xrpc-server'\nimport type { AnyQb, DbRef } from './util.js'\n\nexport type Cursor = { primary: string; secondary: string }\nexport type LabeledResult = {\n primary: string | number\n secondary: string | number\n}\n\n/**\n * The GenericKeyset is an abstract class that sets-up the interface and partial implementation\n * of a keyset-paginated cursor with two parts. There are three types involved:\n * - Result: a raw result (i.e. a row from the db) containing data that will make-up a cursor.\n * - E.g. { createdAt: '2022-01-01T12:00:00Z', cid: 'bafyx' }\n * - LabeledResult: a Result processed such that the \"primary\" and \"secondary\" parts of the cursor are labeled.\n * - E.g. { primary: '2022-01-01T12:00:00Z', secondary: 'bafyx' }\n * - Cursor: the two string parts that make-up the packed/string cursor.\n * - E.g. packed cursor '1641038400000::bafyx' in parts { primary: '1641038400000', secondary: 'bafyx' }\n *\n * These types relate as such. Implementers define the relations marked with a *:\n * Result -*-> LabeledResult <-*-> Cursor <--> packed/string cursor\n * ↳ SQL Condition\n */\nexport abstract class GenericKeyset<R, LR extends LabeledResult> {\n constructor(\n public primary: DbRef,\n public secondary: DbRef,\n ) {}\n abstract labelResult(result: R): LR\n abstract labeledResultToCursor(labeled: LR): Cursor\n abstract cursorToLabeledResult(cursor: Cursor): LR\n packFromResult(results: R | R[]): string | undefined {\n const result = Array.isArray(results) ? results.at(-1) : results\n if (!result) return\n return this.pack(this.labelResult(result))\n }\n pack(labeled?: LR): string | undefined {\n if (!labeled) return\n const cursor = this.labeledResultToCursor(labeled)\n return this.packCursor(cursor)\n }\n unpack(cursorStr?: string): LR | undefined {\n const cursor = this.unpackCursor(cursorStr)\n if (!cursor) return\n return this.cursorToLabeledResult(cursor)\n }\n packCursor(cursor?: Cursor): string | undefined {\n if (!cursor) return\n return `${cursor.primary}::${cursor.secondary}`\n }\n unpackCursor(cursorStr?: string): Cursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('::')\n const [primary, secondary, ...others] = result\n if (!primary || !secondary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n secondary,\n }\n }\n getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean) {\n if (labeled === undefined) return\n if (tryIndex) {\n // The tryIndex param will likely disappear and become the default implementation: here for now for gradual rollout query-by-query.\n if (direction === 'asc') {\n return sql<SqlBool>`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))`\n }\n } else {\n // @NOTE this implementation can struggle to use an index on (primary, secondary) for pagination due to the \"or\" usage.\n if (direction === 'asc') {\n return sql<SqlBool>`((${this.primary} > ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${this.primary} < ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))`\n }\n }\n }\n}\n\ntype CreatedAtCidResult = { createdAt: string; cid: string }\ntype TimeCidLabeledResult = Cursor\n\nexport class TimeCidKeyset<\n TimeCidResult = CreatedAtCidResult,\n> extends GenericKeyset<TimeCidResult, TimeCidLabeledResult> {\n labelResult(result: TimeCidResult): TimeCidLabeledResult\n labelResult<TimeCidResult extends CreatedAtCidResult>(result: TimeCidResult) {\n return { primary: result.createdAt, secondary: result.cid }\n }\n labeledResultToCursor(labeled: TimeCidLabeledResult) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\nexport const paginate = <\n QB extends AnyQb,\n K extends GenericKeyset<unknown, any>,\n>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n keyset: K\n tryIndex?: boolean\n },\n): QB => {\n const { limit, cursor, keyset, direction = 'desc', tryIndex } = opts\n const keysetSql = keyset.getSql(keyset.unpack(cursor), direction, tryIndex)\n return qb\n .$if(!!limit, (q) => q.limit(limit as number))\n .orderBy(keyset.primary, direction)\n .orderBy(keyset.secondary, direction)\n .$if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb)) as QB\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { Generated } from 'kysely';
2
- import { com } from '../../lexicons/index.js';
1
+ import type { Generated } from 'kysely';
2
+ import type { com } from '../../lexicons/index.js';
3
3
  export declare const actionTableName = "moderation_action";
4
4
  export declare const actionSubjectBlobTableName = "moderation_action_subject_blob";
5
5
  export declare const reportTableName = "moderation_report";
@@ -1 +1 @@
1
- {"version":3,"file":"moderation.d.ts","sourceRoot":"","sources":["../../../src/db/tables/moderation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"moderation.d.ts","sourceRoot":"","sources":["../../../src/db/tables/moderation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"moderation.js","sourceRoot":"","sources":["../../../src/db/tables/moderation.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAClD,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAA;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAClD,MAAM,CAAC,MAAM,yBAAyB,GAAG,8BAA8B,CAAA","sourcesContent":["import { Generated } from 'kysely'\nimport { com } from '../../lexicons/index.js'\n\nexport const actionTableName = 'moderation_action'\nexport const actionSubjectBlobTableName = 'moderation_action_subject_blob'\nexport const reportTableName = 'moderation_report'\nexport const reportResolutionTableName = 'moderation_report_resolution'\n\nexport interface ModerationAction {\n id: Generated<number>\n action:\n | 'tools.ozone.moderation.defs#modEventTakedown'\n | 'tools.ozone.moderation.defs#modEventAcknowledge'\n | 'tools.ozone.moderation.defs#modEventEscalate'\n | 'tools.ozone.moderation.defs#modEventComment'\n | 'tools.ozone.moderation.defs#modEventLabel'\n | 'tools.ozone.moderation.defs#modEventReport'\n | 'tools.ozone.moderation.defs#modEventMute'\n | 'tools.ozone.moderation.defs#modEventUnmute'\n | 'tools.ozone.moderation.defs#modEventMuteReporter'\n | 'tools.ozone.moderation.defs#modEventUnmuteReporter'\n | 'tools.ozone.moderation.defs#modEventReverseTakedown'\n | 'tools.ozone.moderation.defs#modEventEmail'\n | 'tools.ozone.moderation.defs#modEventResolveAppeal'\n | 'tools.ozone.moderation.defs#modEventDivert'\n | 'tools.ozone.moderation.defs#accountEvent'\n | 'tools.ozone.moderation.defs#identityEvent'\n | 'tools.ozone.moderation.defs#recordEvent'\n | 'tools.ozone.moderation.defs#modEventPriorityScore'\n subjectType: 'com.atproto.admin.defs#repoRef' | 'com.atproto.repo.strongRef'\n subjectDid: string\n subjectUri: string | null\n subjectCid: string | null\n createLabelVals: string | null\n negateLabelVals: string | null\n comment: string | null\n createdAt: string\n createdBy: string\n durationInHours: number | null\n expiresAt: string | null\n meta: Record<string, string | boolean> | null\n}\n\nexport interface ModerationActionSubjectBlob {\n actionId: number\n cid: string\n recordUri: string\n}\n\nexport interface ModerationReport {\n id: Generated<number>\n subjectType: 'com.atproto.admin.defs#repoRef' | 'com.atproto.repo.strongRef'\n subjectDid: string\n subjectUri: string | null\n subjectCid: string | null\n reasonType:\n | com.atproto.moderation.defs.ReasonSpam\n | com.atproto.moderation.defs.ReasonOther\n | com.atproto.moderation.defs.ReasonMisleading\n | com.atproto.moderation.defs.ReasonRude\n | com.atproto.moderation.defs.ReasonSexual\n | com.atproto.moderation.defs.ReasonViolation\n reason: string | null\n reportedByDid: string\n createdAt: string\n}\n\nexport interface ModerationReportResolution {\n reportId: number\n actionId: number\n createdAt: string\n createdBy: string\n}\n\nexport type PartialDB = {\n [actionTableName]: ModerationAction\n [actionSubjectBlobTableName]: ModerationActionSubjectBlob\n [reportTableName]: ModerationReport\n [reportResolutionTableName]: ModerationReportResolution\n}\n"]}
1
+ {"version":3,"file":"moderation.js","sourceRoot":"","sources":["../../../src/db/tables/moderation.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAClD,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAA;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAClD,MAAM,CAAC,MAAM,yBAAyB,GAAG,8BAA8B,CAAA","sourcesContent":["import type { Generated } from 'kysely'\nimport type { com } from '../../lexicons/index.js'\n\nexport const actionTableName = 'moderation_action'\nexport const actionSubjectBlobTableName = 'moderation_action_subject_blob'\nexport const reportTableName = 'moderation_report'\nexport const reportResolutionTableName = 'moderation_report_resolution'\n\nexport interface ModerationAction {\n id: Generated<number>\n action:\n | 'tools.ozone.moderation.defs#modEventTakedown'\n | 'tools.ozone.moderation.defs#modEventAcknowledge'\n | 'tools.ozone.moderation.defs#modEventEscalate'\n | 'tools.ozone.moderation.defs#modEventComment'\n | 'tools.ozone.moderation.defs#modEventLabel'\n | 'tools.ozone.moderation.defs#modEventReport'\n | 'tools.ozone.moderation.defs#modEventMute'\n | 'tools.ozone.moderation.defs#modEventUnmute'\n | 'tools.ozone.moderation.defs#modEventMuteReporter'\n | 'tools.ozone.moderation.defs#modEventUnmuteReporter'\n | 'tools.ozone.moderation.defs#modEventReverseTakedown'\n | 'tools.ozone.moderation.defs#modEventEmail'\n | 'tools.ozone.moderation.defs#modEventResolveAppeal'\n | 'tools.ozone.moderation.defs#modEventDivert'\n | 'tools.ozone.moderation.defs#accountEvent'\n | 'tools.ozone.moderation.defs#identityEvent'\n | 'tools.ozone.moderation.defs#recordEvent'\n | 'tools.ozone.moderation.defs#modEventPriorityScore'\n subjectType: 'com.atproto.admin.defs#repoRef' | 'com.atproto.repo.strongRef'\n subjectDid: string\n subjectUri: string | null\n subjectCid: string | null\n createLabelVals: string | null\n negateLabelVals: string | null\n comment: string | null\n createdAt: string\n createdBy: string\n durationInHours: number | null\n expiresAt: string | null\n meta: Record<string, string | boolean> | null\n}\n\nexport interface ModerationActionSubjectBlob {\n actionId: number\n cid: string\n recordUri: string\n}\n\nexport interface ModerationReport {\n id: Generated<number>\n subjectType: 'com.atproto.admin.defs#repoRef' | 'com.atproto.repo.strongRef'\n subjectDid: string\n subjectUri: string | null\n subjectCid: string | null\n reasonType:\n | com.atproto.moderation.defs.ReasonSpam\n | com.atproto.moderation.defs.ReasonOther\n | com.atproto.moderation.defs.ReasonMisleading\n | com.atproto.moderation.defs.ReasonRude\n | com.atproto.moderation.defs.ReasonSexual\n | com.atproto.moderation.defs.ReasonViolation\n reason: string | null\n reportedByDid: string\n createdAt: string\n}\n\nexport interface ModerationReportResolution {\n reportId: number\n actionId: number\n createdAt: string\n createdBy: string\n}\n\nexport type PartialDB = {\n [actionTableName]: ModerationAction\n [actionSubjectBlobTableName]: ModerationActionSubjectBlob\n [reportTableName]: ModerationReport\n [reportResolutionTableName]: ModerationReportResolution\n}\n"]}
package/dist/db/util.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { DummyDriver, DynamicModule, Kysely, RawBuilder, ReferenceExpression, SelectQueryBuilder, SqlBool, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler } from 'kysely';
1
+ import { DummyDriver, type DynamicModule, type Kysely, type RawBuilder, type ReferenceExpression, type SelectQueryBuilder, type SqlBool, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler } from 'kysely';
2
2
  export declare const notSoftDeletedClause: (alias: DbRef) => RawBuilder<SqlBool>;
3
3
  export declare const softDeleted: (repoOrRecord: {
4
4
  takedownRef: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/db/util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,QAAQ,CAAA;AAIf,eAAO,MAAM,oBAAoB,UAAW,KAAK,wBAEhD,CAAA;AAED,eAAO,MAAM,WAAW,iBAAkB;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,YAEvE,CAAA;AAED,eAAO,MAAM,QAAQ,oBAAwB,CAAA;AAC7C,eAAO,MAAM,aAAa,QAAS,KAAK,uBAAwC,CAAA;AAGhF,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,4BAE3C,CAAA;AAGD,eAAO,MAAM,UAAU,SAAU,OAAO,EAAE,wBAEzC,CAAA;AAED,eAAO,MAAM,YAAY;;;;;CAaxB,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,CAAC,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAM9D,CAAA;AAmCD,MAAM,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAE/C,MAAM,MAAM,KAAK,GACb,UAAU,CAAC,OAAO,CAAC,GACnB,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAE7C,MAAM,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAErD,eAAO,MAAM,oBAAoB,QAAS,OAAO,YAMhD,CAAA"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/db/util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,QAAQ,CAAA;AAIf,eAAO,MAAM,oBAAoB,UAAW,KAAK,wBAEhD,CAAA;AAED,eAAO,MAAM,WAAW,iBAAkB;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,YAEvE,CAAA;AAED,eAAO,MAAM,QAAQ,oBAAwB,CAAA;AAC7C,eAAO,MAAM,aAAa,QAAS,KAAK,uBAAwC,CAAA;AAGhF,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,4BAE3C,CAAA;AAGD,eAAO,MAAM,UAAU,SAAU,OAAO,EAAE,wBAEzC,CAAA;AAED,eAAO,MAAM,YAAY;;;;;CAaxB,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,CAAC,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAM9D,CAAA;AAmCD,MAAM,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAE/C,MAAM,MAAM,KAAK,GACb,UAAU,CAAC,OAAO,CAAC,GACnB,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAE7C,MAAM,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAErD,eAAO,MAAM,oBAAoB,QAAS,OAAO,YAMhD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/db/util.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DummyDriver,\n DynamicModule,\n Kysely,\n RawBuilder,\n ReferenceExpression,\n SelectQueryBuilder,\n SqlBool,\n SqliteAdapter,\n SqliteIntrospector,\n SqliteQueryCompiler,\n sql,\n} from 'kysely'\nimport { retry } from '@atproto/common'\n\n// Applies to repo_root or record table\nexport const notSoftDeletedClause = (alias: DbRef) => {\n return sql<SqlBool>`${alias}.\"takedownRef\" is null`\n}\n\nexport const softDeleted = (repoOrRecord: { takedownRef: string | null }) => {\n return repoOrRecord.takedownRef !== null\n}\n\nexport const countAll = sql<number>`count(*)`\nexport const countDistinct = (ref: DbRef) => sql<number>`count(distinct ${ref})`\n\n// For use with doUpdateSet()\nexport const excluded = <T, S>(db: Kysely<S>, col) => {\n return sql<T>`${db.dynamic.ref(`excluded.${col}`)}`\n}\n\n// Can be useful for large where-in clauses, to get the db to use a hash lookup on the list\nexport const valuesList = (vals: unknown[]) => {\n return sql`(values (${sql.join(vals, sql`), (`)}))`\n}\n\nexport const dummyDialect = {\n createAdapter() {\n return new SqliteAdapter()\n },\n createDriver() {\n return new DummyDriver()\n },\n createIntrospector(db) {\n return new SqliteIntrospector(db)\n },\n createQueryCompiler() {\n return new SqliteQueryCompiler()\n },\n}\n\nexport const retrySqlite = <T>(fn: () => Promise<T>): Promise<T> => {\n return retry(fn, {\n retryable: retryableSqlite,\n getWaitMs: getWaitMsSqlite,\n maxRetries: 60, // a safety measure: getWaitMsSqlite() times out before this after 5000ms of waiting.\n })\n}\n\nconst retryableSqlite = (err: unknown) => {\n return typeof err?.['code'] === 'string' && RETRY_ERRORS.has(err['code'])\n}\n\n// based on sqlite's backoff strategy https://github.com/sqlite/sqlite/blob/91c8e65dd4bf17d21fbf8f7073565fe1a71c8948/src/main.c#L1704-L1713\nconst getWaitMsSqlite = (n: number, timeout = 5000) => {\n if (n < 0) return null\n let delay: number\n let prior: number\n if (n < DELAYS.length) {\n delay = DELAYS[n]\n prior = TOTALS[n]\n } else {\n delay = last(DELAYS)\n prior = last(TOTALS) + delay * (n - (DELAYS.length - 1))\n }\n if (prior + delay > timeout) {\n delay = timeout - prior\n if (delay <= 0) return null\n }\n return delay\n}\n\nconst last = <T>(arr: T[]) => arr[arr.length - 1]\nconst DELAYS = [1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 100]\nconst TOTALS = [0, 1, 3, 8, 18, 33, 53, 78, 103, 128, 178, 228]\nconst RETRY_ERRORS = new Set([\n 'SQLITE_BUSY',\n 'SQLITE_BUSY_SNAPSHOT',\n 'SQLITE_BUSY_RECOVERY',\n 'SQLITE_BUSY_TIMEOUT',\n])\n\nexport type Ref = ReferenceExpression<any, any>\n\nexport type DbRef =\n | RawBuilder<unknown>\n | ReturnType<DynamicModule<unknown>['ref']>\n\nexport type AnyQb = SelectQueryBuilder<any, any, any>\n\nexport const isErrUniqueViolation = (err: unknown) => {\n const code = err?.['code']\n return (\n code === '23505' || // postgres, see https://www.postgresql.org/docs/current/errcodes-appendix.html\n code === 'SQLITE_CONSTRAINT_UNIQUE' // sqlite, see https://www.sqlite.org/rescode.html#constraint_unique\n )\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/db/util.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DummyDriver,\n type DynamicModule,\n type Kysely,\n type RawBuilder,\n type ReferenceExpression,\n type SelectQueryBuilder,\n type SqlBool,\n SqliteAdapter,\n SqliteIntrospector,\n SqliteQueryCompiler,\n sql,\n} from 'kysely'\nimport { retry } from '@atproto/common'\n\n// Applies to repo_root or record table\nexport const notSoftDeletedClause = (alias: DbRef) => {\n return sql<SqlBool>`${alias}.\"takedownRef\" is null`\n}\n\nexport const softDeleted = (repoOrRecord: { takedownRef: string | null }) => {\n return repoOrRecord.takedownRef !== null\n}\n\nexport const countAll = sql<number>`count(*)`\nexport const countDistinct = (ref: DbRef) => sql<number>`count(distinct ${ref})`\n\n// For use with doUpdateSet()\nexport const excluded = <T, S>(db: Kysely<S>, col) => {\n return sql<T>`${db.dynamic.ref(`excluded.${col}`)}`\n}\n\n// Can be useful for large where-in clauses, to get the db to use a hash lookup on the list\nexport const valuesList = (vals: unknown[]) => {\n return sql`(values (${sql.join(vals, sql`), (`)}))`\n}\n\nexport const dummyDialect = {\n createAdapter() {\n return new SqliteAdapter()\n },\n createDriver() {\n return new DummyDriver()\n },\n createIntrospector(db) {\n return new SqliteIntrospector(db)\n },\n createQueryCompiler() {\n return new SqliteQueryCompiler()\n },\n}\n\nexport const retrySqlite = <T>(fn: () => Promise<T>): Promise<T> => {\n return retry(fn, {\n retryable: retryableSqlite,\n getWaitMs: getWaitMsSqlite,\n maxRetries: 60, // a safety measure: getWaitMsSqlite() times out before this after 5000ms of waiting.\n })\n}\n\nconst retryableSqlite = (err: unknown) => {\n return typeof err?.['code'] === 'string' && RETRY_ERRORS.has(err['code'])\n}\n\n// based on sqlite's backoff strategy https://github.com/sqlite/sqlite/blob/91c8e65dd4bf17d21fbf8f7073565fe1a71c8948/src/main.c#L1704-L1713\nconst getWaitMsSqlite = (n: number, timeout = 5000) => {\n if (n < 0) return null\n let delay: number\n let prior: number\n if (n < DELAYS.length) {\n delay = DELAYS[n]\n prior = TOTALS[n]\n } else {\n delay = last(DELAYS)\n prior = last(TOTALS) + delay * (n - (DELAYS.length - 1))\n }\n if (prior + delay > timeout) {\n delay = timeout - prior\n if (delay <= 0) return null\n }\n return delay\n}\n\nconst last = <T>(arr: T[]) => arr[arr.length - 1]\nconst DELAYS = [1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 100]\nconst TOTALS = [0, 1, 3, 8, 18, 33, 53, 78, 103, 128, 178, 228]\nconst RETRY_ERRORS = new Set([\n 'SQLITE_BUSY',\n 'SQLITE_BUSY_SNAPSHOT',\n 'SQLITE_BUSY_RECOVERY',\n 'SQLITE_BUSY_TIMEOUT',\n])\n\nexport type Ref = ReferenceExpression<any, any>\n\nexport type DbRef =\n | RawBuilder<unknown>\n | ReturnType<DynamicModule<unknown>['ref']>\n\nexport type AnyQb = SelectQueryBuilder<any, any, any>\n\nexport const isErrUniqueViolation = (err: unknown) => {\n const code = err?.['code']\n return (\n code === '23505' || // postgres, see https://www.postgresql.org/docs/current/errcodes-appendix.html\n code === 'SQLITE_CONSTRAINT_UNIQUE' // sqlite, see https://www.sqlite.org/rescode.html#constraint_unique\n )\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { Database, Migrator } from '../../db/index.js';
2
- import { DidCacheSchema } from './schema.js';
2
+ import type { DidCacheSchema } from './schema.js';
3
3
  export * from './schema.js';
4
4
  export type DidCacheDb = Database<DidCacheSchema>;
5
5
  export declare const getDb: (location: string, disableWalAutoCheckpoint?: boolean) => DidCacheDb;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/did-cache/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,cAAc,aAAa,CAAA;AAE3B,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;AAEjD,eAAO,MAAM,KAAK,aACN,MAAM,yCAEf,UAKF,CAAA;AAED,eAAO,MAAM,WAAW,OAAQ,UAAU,6BAEzC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/did-cache/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,cAAc,aAAa,CAAA;AAE3B,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;AAEjD,eAAO,MAAM,KAAK,aACN,MAAM,yCAEf,UAKF,CAAA;AAED,eAAO,MAAM,WAAW,OAAQ,UAAU,6BAEzC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/did-cache/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAGxC,cAAc,aAAa,CAAA;AAI3B,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,QAAgB,EAChB,wBAAwB,GAAG,KAAK,EACpB,EAAE;IACd,MAAM,OAAO,GAA2B,wBAAwB;QAC9D,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE;QACpD,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;IAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAc,EAAE,EAAE;IAC5C,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;AACxC,CAAC,CAAA","sourcesContent":["import { Database, Migrator } from '../../db/index.js'\nimport migrations from './migrations.js'\nimport { DidCacheSchema } from './schema.js'\n\nexport * from './schema.js'\n\nexport type DidCacheDb = Database<DidCacheSchema>\n\nexport const getDb = (\n location: string,\n disableWalAutoCheckpoint = false,\n): DidCacheDb => {\n const pragmas: Record<string, string> = disableWalAutoCheckpoint\n ? { wal_autocheckpoint: '0', synchronous: 'NORMAL' }\n : { synchronous: 'NORMAL' }\n return Database.sqlite(location, { pragmas })\n}\n\nexport const getMigrator = (db: DidCacheDb) => {\n return new Migrator(db.db, migrations)\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/did-cache/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAGxC,cAAc,aAAa,CAAA;AAI3B,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,QAAgB,EAChB,wBAAwB,GAAG,KAAK,EACpB,EAAE;IACd,MAAM,OAAO,GAA2B,wBAAwB;QAC9D,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE;QACpD,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;IAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAc,EAAE,EAAE;IAC5C,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;AACxC,CAAC,CAAA","sourcesContent":["import { Database, Migrator } from '../../db/index.js'\nimport migrations from './migrations.js'\nimport type { DidCacheSchema } from './schema.js'\n\nexport * from './schema.js'\n\nexport type DidCacheDb = Database<DidCacheSchema>\n\nexport const getDb = (\n location: string,\n disableWalAutoCheckpoint = false,\n): DidCacheDb => {\n const pragmas: Record<string, string> = disableWalAutoCheckpoint\n ? { wal_autocheckpoint: '0', synchronous: 'NORMAL' }\n : { synchronous: 'NORMAL' }\n return Database.sqlite(location, { pragmas })\n}\n\nexport const getMigrator = (db: DidCacheDb) => {\n return new Migrator(db.db, migrations)\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Kysely } from 'kysely';
1
+ import type { Kysely } from 'kysely';
2
2
  declare const _default: {
3
3
  '001': {
4
4
  up: (db: Kysely<unknown>) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/did-cache/db/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;;IAG7B,KAAK;QACH,EAAE,OAAa,MAAM,CAAC,OAAO,CAAC;QAQ9B,IAAI,OAAa,MAAM,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/did-cache/db/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;;IAGlC,KAAK;QACH,EAAE,OAAa,MAAM,CAAC,OAAO,CAAC;QAQ9B,IAAI,OAAa,MAAM,CAAC,OAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/did-cache/db/migrations.ts"],"names":[],"mappings":"AAEA,eAAe;IACb,KAAK,EAAE;QACL,EAAE,EAAE,KAAK,EAAE,EAAmB,EAAE,EAAE;YAChC,MAAM,EAAE,CAAC,MAAM;iBACZ,WAAW,CAAC,SAAS,CAAC;iBACtB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;iBACtD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;iBAChD,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;iBACxD,OAAO,EAAE,CAAA;QACd,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,EAAmB,EAAE,EAAE;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;QAChD,CAAC;KACF;CACF,CAAA","sourcesContent":["import { Kysely } from 'kysely'\n\nexport default {\n '001': {\n up: async (db: Kysely<unknown>) => {\n await db.schema\n .createTable('did_doc')\n .addColumn('did', 'varchar', (col) => col.primaryKey())\n .addColumn('doc', 'text', (col) => col.notNull())\n .addColumn('updatedAt', 'bigint', (col) => col.notNull())\n .execute()\n },\n down: async (db: Kysely<unknown>) => {\n await db.schema.dropTable('did_doc').execute()\n },\n },\n}\n"]}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/did-cache/db/migrations.ts"],"names":[],"mappings":"AAEA,eAAe;IACb,KAAK,EAAE;QACL,EAAE,EAAE,KAAK,EAAE,EAAmB,EAAE,EAAE;YAChC,MAAM,EAAE,CAAC,MAAM;iBACZ,WAAW,CAAC,SAAS,CAAC;iBACtB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;iBACtD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;iBAChD,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;iBACxD,OAAO,EAAE,CAAA;QACd,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,EAAmB,EAAE,EAAE;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;QAChD,CAAC;KACF;CACF,CAAA","sourcesContent":["import type { Kysely } from 'kysely'\n\nexport default {\n '001': {\n up: async (db: Kysely<unknown>) => {\n await db.schema\n .createTable('did_doc')\n .addColumn('did', 'varchar', (col) => col.primaryKey())\n .addColumn('doc', 'text', (col) => col.notNull())\n .addColumn('updatedAt', 'bigint', (col) => col.notNull())\n .execute()\n },\n down: async (db: Kysely<unknown>) => {\n await db.schema.dropTable('did_doc').execute()\n },\n },\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import PQueue from 'p-queue';
2
- import { CacheResult, DidCache, DidDocument } from '@atproto/identity';
3
- import { DidCacheDb } from './db/index.js';
2
+ import type { CacheResult, DidCache, DidDocument } from '@atproto/identity';
3
+ import { type DidCacheDb } from './db/index.js';
4
4
  export declare class DidSqliteCache implements DidCache {
5
5
  staleTTL: number;
6
6
  maxTTL: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/did-cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGtE,OAAO,EAAE,UAAU,EAAsB,MAAM,eAAe,CAAA;AAE9D,qBAAa,cAAe,YAAW,QAAQ;IAMpC,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;IANvB,EAAE,EAAE,UAAU,CAAA;IACP,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAE5B,YACE,UAAU,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACrB,wBAAwB,UAAQ,EAIjC;IAEK,QAAQ,CACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,WAAW,EAChB,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Bf;IAEK,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,EACzC,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC,CAaf;IAEK,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAOzD;IAEK,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAkBjE;IAEK,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAEK,UAAU,kBAEf;IAEK,cAAc,kBAGnB;IAEK,OAAO,kBAMZ;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/did-cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG3E,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,eAAe,CAAA;AAEnE,qBAAa,cAAe,YAAW,QAAQ;IAMpC,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;IANvB,EAAE,EAAE,UAAU,CAAA;IACP,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAE5B,YACE,UAAU,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACrB,wBAAwB,UAAQ,EAIjC;IAEK,QAAQ,CACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,WAAW,EAChB,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Bf;IAEK,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,EACzC,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC,CAaf;IAEK,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAOzD;IAEK,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAkBjE;IAEK,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAEK,UAAU,kBAEf;IAEK,cAAc,kBAGnB;IAEK,OAAO,kBAMZ;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/did-cache/index.ts"],"names":[],"mappings":"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","sourcesContent":["import PQueue from 'p-queue'\nimport { CacheResult, DidCache, DidDocument } from '@atproto/identity'\nimport { excluded } from '../db/util.js'\nimport { didCacheLogger } from '../logger.js'\nimport { DidCacheDb, getDb, getMigrator } from './db/index.js'\n\nexport class DidSqliteCache implements DidCache {\n db: DidCacheDb\n public pQueue: PQueue | null //null during teardown\n\n constructor(\n dbLocation: string,\n public staleTTL: number,\n public maxTTL: number,\n disableWalAutoCheckpoint = false,\n ) {\n this.db = getDb(dbLocation, disableWalAutoCheckpoint)\n this.pQueue = new PQueue()\n }\n\n async cacheDid(\n did: string,\n doc: DidDocument,\n prevResult?: CacheResult,\n ): Promise<void> {\n try {\n if (prevResult) {\n await this.db.executeWithRetry(\n this.db.db\n .updateTable('did_doc')\n .set({ doc: JSON.stringify(doc), updatedAt: Date.now() })\n .where('did', '=', did)\n .where('updatedAt', '=', prevResult.updatedAt),\n )\n } else {\n await this.db.executeWithRetry(\n this.db.db\n .insertInto('did_doc')\n .values({ did, doc: JSON.stringify(doc), updatedAt: Date.now() })\n .onConflict((oc) =>\n oc.column('did').doUpdateSet({\n doc: excluded(this.db.db, 'doc'),\n updatedAt: excluded(this.db.db, 'updatedAt'),\n }),\n ),\n )\n }\n } catch (err) {\n didCacheLogger.error({ did, doc, err }, 'failed to cache did')\n }\n }\n\n async refreshCache(\n did: string,\n getDoc: () => Promise<DidDocument | null>,\n prevResult?: CacheResult,\n ): Promise<void> {\n this.pQueue?.add(async () => {\n try {\n const doc = await getDoc()\n if (doc) {\n await this.cacheDid(did, doc, prevResult)\n } else {\n await this.clearEntry(did)\n }\n } catch (err) {\n didCacheLogger.error({ did, err }, 'refreshing did cache failed')\n }\n })\n }\n\n async checkCache(did: string): Promise<CacheResult | null> {\n try {\n return await this.checkCacheInternal(did)\n } catch (err) {\n didCacheLogger.error({ did, err }, 'failed to check did cache')\n return null\n }\n }\n\n async checkCacheInternal(did: string): Promise<CacheResult | null> {\n const res = await this.db.db\n .selectFrom('did_doc')\n .where('did', '=', did)\n .selectAll()\n .executeTakeFirst()\n if (!res) return null\n const now = Date.now()\n const updatedAt = new Date(res.updatedAt).getTime()\n const expired = now > updatedAt + this.maxTTL\n const stale = now > updatedAt + this.staleTTL\n return {\n doc: JSON.parse(res.doc) as DidDocument,\n updatedAt,\n did,\n stale,\n expired,\n }\n }\n\n async clearEntry(did: string): Promise<void> {\n try {\n await this.db.executeWithRetry(\n this.db.db.deleteFrom('did_doc').where('did', '=', did),\n )\n } catch (err) {\n didCacheLogger.error({ did, err }, 'clearing did cache entry failed')\n }\n }\n\n async clear(): Promise<void> {\n await this.db.db.deleteFrom('did_doc').execute()\n }\n\n async processAll() {\n await this.pQueue?.onIdle()\n }\n\n async migrateOrThrow() {\n await this.db.ensureWal()\n await getMigrator(this.db).migrateToLatestOrThrow()\n }\n\n async destroy() {\n const pQueue = this.pQueue\n this.pQueue = null\n pQueue?.pause()\n pQueue?.clear()\n await pQueue?.onIdle()\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/did-cache/index.ts"],"names":[],"mappings":"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","sourcesContent":["import PQueue from 'p-queue'\nimport type { CacheResult, DidCache, DidDocument } from '@atproto/identity'\nimport { excluded } from '../db/util.js'\nimport { didCacheLogger } from '../logger.js'\nimport { type DidCacheDb, getDb, getMigrator } from './db/index.js'\n\nexport class DidSqliteCache implements DidCache {\n db: DidCacheDb\n public pQueue: PQueue | null //null during teardown\n\n constructor(\n dbLocation: string,\n public staleTTL: number,\n public maxTTL: number,\n disableWalAutoCheckpoint = false,\n ) {\n this.db = getDb(dbLocation, disableWalAutoCheckpoint)\n this.pQueue = new PQueue()\n }\n\n async cacheDid(\n did: string,\n doc: DidDocument,\n prevResult?: CacheResult,\n ): Promise<void> {\n try {\n if (prevResult) {\n await this.db.executeWithRetry(\n this.db.db\n .updateTable('did_doc')\n .set({ doc: JSON.stringify(doc), updatedAt: Date.now() })\n .where('did', '=', did)\n .where('updatedAt', '=', prevResult.updatedAt),\n )\n } else {\n await this.db.executeWithRetry(\n this.db.db\n .insertInto('did_doc')\n .values({ did, doc: JSON.stringify(doc), updatedAt: Date.now() })\n .onConflict((oc) =>\n oc.column('did').doUpdateSet({\n doc: excluded(this.db.db, 'doc'),\n updatedAt: excluded(this.db.db, 'updatedAt'),\n }),\n ),\n )\n }\n } catch (err) {\n didCacheLogger.error({ did, doc, err }, 'failed to cache did')\n }\n }\n\n async refreshCache(\n did: string,\n getDoc: () => Promise<DidDocument | null>,\n prevResult?: CacheResult,\n ): Promise<void> {\n this.pQueue?.add(async () => {\n try {\n const doc = await getDoc()\n if (doc) {\n await this.cacheDid(did, doc, prevResult)\n } else {\n await this.clearEntry(did)\n }\n } catch (err) {\n didCacheLogger.error({ did, err }, 'refreshing did cache failed')\n }\n })\n }\n\n async checkCache(did: string): Promise<CacheResult | null> {\n try {\n return await this.checkCacheInternal(did)\n } catch (err) {\n didCacheLogger.error({ did, err }, 'failed to check did cache')\n return null\n }\n }\n\n async checkCacheInternal(did: string): Promise<CacheResult | null> {\n const res = await this.db.db\n .selectFrom('did_doc')\n .where('did', '=', did)\n .selectAll()\n .executeTakeFirst()\n if (!res) return null\n const now = Date.now()\n const updatedAt = new Date(res.updatedAt).getTime()\n const expired = now > updatedAt + this.maxTTL\n const stale = now > updatedAt + this.staleTTL\n return {\n doc: JSON.parse(res.doc) as DidDocument,\n updatedAt,\n did,\n stale,\n expired,\n }\n }\n\n async clearEntry(did: string): Promise<void> {\n try {\n await this.db.executeWithRetry(\n this.db.db.deleteFrom('did_doc').where('did', '=', did),\n )\n } catch (err) {\n didCacheLogger.error({ did, err }, 'clearing did cache entry failed')\n }\n }\n\n async clear(): Promise<void> {\n await this.db.db.deleteFrom('did_doc').execute()\n }\n\n async processAll() {\n await this.pQueue?.onIdle()\n }\n\n async migrateOrThrow() {\n await this.db.ensureWal()\n await getMigrator(this.db).migrateToLatestOrThrow()\n }\n\n async destroy() {\n const pQueue = this.pQueue\n this.pQueue = null\n pQueue?.pause()\n pQueue?.clear()\n await pQueue?.onIdle()\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import stream from 'node:stream';
2
- import { Cid } from '@atproto/lex-data';
3
- import { BlobStore } from '@atproto/repo';
1
+ import type stream from 'node:stream';
2
+ import type { Cid } from '@atproto/lex-data';
3
+ import { type BlobStore } from '@atproto/repo';
4
4
  export declare class DiskBlobStore implements BlobStore {
5
5
  did: string;
6
6
  location: string;
@@ -1 +1 @@
1
- {"version":3,"file":"disk-blobstore.d.ts","sourceRoot":"","sources":["../src/disk-blobstore.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,aAAa,CAAA;AAShC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAqB,SAAS,EAAE,MAAM,eAAe,CAAA;AAG5D,qBAAa,aAAc,YAAW,SAAS;IAEpC,GAAG,EAAE,MAAM;IACX,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,MAAM;IACnB,kBAAkB,EAAE,MAAM;IAJnC,YACS,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAC/B;IAEJ,MAAM,CAAC,OAAO,CACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,SAEd,MAAM,mBAKpB;YAEa,SAAS;YAIT,UAAU;YAIV,gBAAgB;IAM9B,OAAO,CAAC,MAAM;IAId,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9B;IAED,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE9B;IAED,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAElC;IAEK,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE3C;IAEK,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1C;IAEK,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlE;IAEK,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxD;IAEK,YAAY,CAChB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,GAAG,MAAM,CAAC,QAAQ,GAClC,OAAO,CAAC,IAAI,CAAC,CAGf;IAEK,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxC;IAEK,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1C;IAEK,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAM5C;IAEK,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAOlD;IAEK,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpC;IAEK,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3C;IAEK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAI/B;CACF"}
1
+ {"version":3,"file":"disk-blobstore.d.ts","sourceRoot":"","sources":["../src/disk-blobstore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AASrC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAGjE,qBAAa,aAAc,YAAW,SAAS;IAEpC,GAAG,EAAE,MAAM;IACX,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,MAAM;IACnB,kBAAkB,EAAE,MAAM;IAJnC,YACS,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAC/B;IAEJ,MAAM,CAAC,OAAO,CACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,SAEd,MAAM,mBAKpB;YAEa,SAAS;YAIT,UAAU;YAIV,gBAAgB;IAM9B,OAAO,CAAC,MAAM;IAId,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9B;IAED,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE9B;IAED,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAElC;IAEK,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE3C;IAEK,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1C;IAEK,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlE;IAEK,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxD;IAEK,YAAY,CAChB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,GAAG,MAAM,CAAC,QAAQ,GAClC,OAAO,CAAC,IAAI,CAAC,CAGf;IAEK,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxC;IAEK,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1C;IAEK,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAM5C;IAEK,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAOlD;IAEK,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpC;IAEK,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3C;IAEK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAI/B;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"disk-blobstore.js","sourceRoot":"","sources":["../src/disk-blobstore.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,UAAU,GACX,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,iBAAiB,EAAa,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,eAAe,IAAI,GAAG,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,OAAO,aAAa;IACxB,YACS,GAAW,EACX,QAAgB,EAChB,WAAmB,EACnB,kBAA0B;mBAH1B,GAAG;wBACH,QAAQ;2BACR,WAAW;kCACX,kBAAkB;IACxB,CAAC;IAEJ,MAAM,CAAC,OAAO,CACZ,QAAgB,EAChB,WAAoB,EACpB,kBAA2B;QAE3B,OAAO,CAAC,GAAW,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACvD,MAAM,UAAU,GAAG,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YAC1E,OAAO,IAAI,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;QAC1D,CAAC,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzE,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5E,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;YAC3D,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;IACJ,CAAC;IAEO,MAAM;QACZ,OAAO,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IAChC,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACnD,CAAC;IAED,aAAa,CAAC,GAAQ;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,iBAAiB,CAAC,GAAQ;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,OAAO,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAQ;QACtB,OAAO,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAmC;QAC/C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QACzB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;QAC/C,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,GAAQ;QACvC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACvC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QACtC,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,yCAAyC,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,GAAQ,EACR,KAAmC;QAEnC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACtB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;IACpD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAQ;QACvB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAQ;QACzB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ;QACrB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAQ;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,iBAAiB,EAAE,CAAA;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAQ;QACnB,MAAM,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAW;QAC1B,MAAM,MAAM,GAAc,EAAE,CAAA;QAC5B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC7B,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,qBAAqB,CAAC,CAAA;gBAC9D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAClB,CAAC,CAAC,CACH,CACF,CAAA;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM;YAAE,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;QAC1D,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;QAC7D,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;IACtE,CAAC;CACF;AAED,MAAM,YAAY,GAAG,CAAC,GAAY,EAA+B,EAAE;IACjE,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO,IAAI,iBAAiB,EAAE,CAAA;IAChC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA","sourcesContent":["import fsSync from 'node:fs'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport stream from 'node:stream'\nimport {\n aggregateErrors,\n chunkArray,\n fileExists,\n isErrnoException,\n rmIfExists,\n} from '@atproto/common'\nimport { randomStr } from '@atproto/crypto'\nimport { Cid } from '@atproto/lex-data'\nimport { BlobNotFoundError, BlobStore } from '@atproto/repo'\nimport { blobStoreLogger as log } from './logger.js'\n\nexport class DiskBlobStore implements BlobStore {\n constructor(\n public did: string,\n public location: string,\n public tmpLocation: string,\n public quarantineLocation: string,\n ) {}\n\n static creator(\n location: string,\n tmpLocation?: string,\n quarantineLocation?: string,\n ) {\n return (did: string) => {\n const tmp = tmpLocation || path.join(location, 'tempt')\n const quarantine = quarantineLocation || path.join(location, 'quarantine')\n return new DiskBlobStore(did, location, tmp, quarantine)\n }\n }\n\n private async ensureDir() {\n await fs.mkdir(path.join(this.location, this.did), { recursive: true })\n }\n\n private async ensureTemp() {\n await fs.mkdir(path.join(this.tmpLocation, this.did), { recursive: true })\n }\n\n private async ensureQuarantine() {\n await fs.mkdir(path.join(this.quarantineLocation, this.did), {\n recursive: true,\n })\n }\n\n private genKey() {\n return randomStr(32, 'base32')\n }\n\n getTmpPath(key: string): string {\n return path.join(this.tmpLocation, this.did, key)\n }\n\n getStoredPath(cid: Cid): string {\n return path.join(this.location, this.did, cid.toString())\n }\n\n getQuarantinePath(cid: Cid): string {\n return path.join(this.quarantineLocation, this.did, cid.toString())\n }\n\n async hasTemp(key: string): Promise<boolean> {\n return fileExists(this.getTmpPath(key))\n }\n\n async hasStored(cid: Cid): Promise<boolean> {\n return fileExists(this.getStoredPath(cid))\n }\n\n async putTemp(bytes: Uint8Array | stream.Readable): Promise<string> {\n await this.ensureTemp()\n const key = this.genKey()\n await fs.writeFile(this.getTmpPath(key), bytes)\n return key\n }\n\n async makePermanent(key: string, cid: Cid): Promise<void> {\n await this.ensureDir()\n const tmpPath = this.getTmpPath(key)\n const storedPath = this.getStoredPath(cid)\n const alreadyHas = await this.hasStored(cid)\n if (!alreadyHas) {\n const data = await fs.readFile(tmpPath)\n await fs.writeFile(storedPath, data)\n }\n try {\n await fs.rm(tmpPath)\n } catch (err) {\n log.error({ err, tmpPath }, 'could not delete file from temp storage')\n }\n }\n\n async putPermanent(\n cid: Cid,\n bytes: Uint8Array | stream.Readable,\n ): Promise<void> {\n await this.ensureDir()\n await fs.writeFile(this.getStoredPath(cid), bytes)\n }\n\n async quarantine(cid: Cid): Promise<void> {\n await this.ensureQuarantine()\n try {\n await fs.rename(this.getStoredPath(cid), this.getQuarantinePath(cid))\n } catch (err) {\n throw translateErr(err)\n }\n }\n\n async unquarantine(cid: Cid): Promise<void> {\n await this.ensureDir()\n try {\n await fs.rename(this.getQuarantinePath(cid), this.getStoredPath(cid))\n } catch (err) {\n throw translateErr(err)\n }\n }\n\n async getBytes(cid: Cid): Promise<Uint8Array> {\n try {\n return await fs.readFile(this.getStoredPath(cid))\n } catch (err) {\n throw translateErr(err)\n }\n }\n\n async getStream(cid: Cid): Promise<stream.Readable> {\n const path = this.getStoredPath(cid)\n const exists = await fileExists(path)\n if (!exists) {\n throw new BlobNotFoundError()\n }\n return fsSync.createReadStream(path)\n }\n\n async delete(cid: Cid): Promise<void> {\n await rmIfExists(this.getStoredPath(cid))\n }\n\n async deleteMany(cids: Cid[]): Promise<void> {\n const errors: unknown[] = []\n for (const chunk of chunkArray(cids, 500)) {\n await Promise.all(\n chunk.map((cid) =>\n this.delete(cid).catch((err) => {\n log.error({ err, cid: cid.toString() }, 'error deleting blob')\n errors.push(err)\n }),\n ),\n )\n }\n if (errors.length) throw aggregateErrors(errors)\n }\n\n async deleteAll(): Promise<void> {\n await rmIfExists(path.join(this.location, this.did), true)\n await rmIfExists(path.join(this.tmpLocation, this.did), true)\n await rmIfExists(path.join(this.quarantineLocation, this.did), true)\n }\n}\n\nconst translateErr = (err: unknown): BlobNotFoundError | unknown => {\n if (isErrnoException(err) && err.code === 'ENOENT') {\n return new BlobNotFoundError()\n }\n return err\n}\n"]}
1
+ {"version":3,"file":"disk-blobstore.js","sourceRoot":"","sources":["../src/disk-blobstore.ts"],"names":[],"mappings":"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","sourcesContent":["import fsSync from 'node:fs'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport type stream from 'node:stream'\nimport {\n aggregateErrors,\n chunkArray,\n fileExists,\n isErrnoException,\n rmIfExists,\n} from '@atproto/common'\nimport { randomStr } from '@atproto/crypto'\nimport type { Cid } from '@atproto/lex-data'\nimport { BlobNotFoundError, type BlobStore } from '@atproto/repo'\nimport { blobStoreLogger as log } from './logger.js'\n\nexport class DiskBlobStore implements BlobStore {\n constructor(\n public did: string,\n public location: string,\n public tmpLocation: string,\n public quarantineLocation: string,\n ) {}\n\n static creator(\n location: string,\n tmpLocation?: string,\n quarantineLocation?: string,\n ) {\n return (did: string) => {\n const tmp = tmpLocation || path.join(location, 'tempt')\n const quarantine = quarantineLocation || path.join(location, 'quarantine')\n return new DiskBlobStore(did, location, tmp, quarantine)\n }\n }\n\n private async ensureDir() {\n await fs.mkdir(path.join(this.location, this.did), { recursive: true })\n }\n\n private async ensureTemp() {\n await fs.mkdir(path.join(this.tmpLocation, this.did), { recursive: true })\n }\n\n private async ensureQuarantine() {\n await fs.mkdir(path.join(this.quarantineLocation, this.did), {\n recursive: true,\n })\n }\n\n private genKey() {\n return randomStr(32, 'base32')\n }\n\n getTmpPath(key: string): string {\n return path.join(this.tmpLocation, this.did, key)\n }\n\n getStoredPath(cid: Cid): string {\n return path.join(this.location, this.did, cid.toString())\n }\n\n getQuarantinePath(cid: Cid): string {\n return path.join(this.quarantineLocation, this.did, cid.toString())\n }\n\n async hasTemp(key: string): Promise<boolean> {\n return fileExists(this.getTmpPath(key))\n }\n\n async hasStored(cid: Cid): Promise<boolean> {\n return fileExists(this.getStoredPath(cid))\n }\n\n async putTemp(bytes: Uint8Array | stream.Readable): Promise<string> {\n await this.ensureTemp()\n const key = this.genKey()\n await fs.writeFile(this.getTmpPath(key), bytes)\n return key\n }\n\n async makePermanent(key: string, cid: Cid): Promise<void> {\n await this.ensureDir()\n const tmpPath = this.getTmpPath(key)\n const storedPath = this.getStoredPath(cid)\n const alreadyHas = await this.hasStored(cid)\n if (!alreadyHas) {\n const data = await fs.readFile(tmpPath)\n await fs.writeFile(storedPath, data)\n }\n try {\n await fs.rm(tmpPath)\n } catch (err) {\n log.error({ err, tmpPath }, 'could not delete file from temp storage')\n }\n }\n\n async putPermanent(\n cid: Cid,\n bytes: Uint8Array | stream.Readable,\n ): Promise<void> {\n await this.ensureDir()\n await fs.writeFile(this.getStoredPath(cid), bytes)\n }\n\n async quarantine(cid: Cid): Promise<void> {\n await this.ensureQuarantine()\n try {\n await fs.rename(this.getStoredPath(cid), this.getQuarantinePath(cid))\n } catch (err) {\n throw translateErr(err)\n }\n }\n\n async unquarantine(cid: Cid): Promise<void> {\n await this.ensureDir()\n try {\n await fs.rename(this.getQuarantinePath(cid), this.getStoredPath(cid))\n } catch (err) {\n throw translateErr(err)\n }\n }\n\n async getBytes(cid: Cid): Promise<Uint8Array> {\n try {\n return await fs.readFile(this.getStoredPath(cid))\n } catch (err) {\n throw translateErr(err)\n }\n }\n\n async getStream(cid: Cid): Promise<stream.Readable> {\n const path = this.getStoredPath(cid)\n const exists = await fileExists(path)\n if (!exists) {\n throw new BlobNotFoundError()\n }\n return fsSync.createReadStream(path)\n }\n\n async delete(cid: Cid): Promise<void> {\n await rmIfExists(this.getStoredPath(cid))\n }\n\n async deleteMany(cids: Cid[]): Promise<void> {\n const errors: unknown[] = []\n for (const chunk of chunkArray(cids, 500)) {\n await Promise.all(\n chunk.map((cid) =>\n this.delete(cid).catch((err) => {\n log.error({ err, cid: cid.toString() }, 'error deleting blob')\n errors.push(err)\n }),\n ),\n )\n }\n if (errors.length) throw aggregateErrors(errors)\n }\n\n async deleteAll(): Promise<void> {\n await rmIfExists(path.join(this.location, this.did), true)\n await rmIfExists(path.join(this.tmpLocation, this.did), true)\n await rmIfExists(path.join(this.quarantineLocation, this.did), true)\n }\n}\n\nconst translateErr = (err: unknown): BlobNotFoundError | unknown => {\n if (isErrnoException(err) && err.code === 'ENOENT') {\n return new BlobNotFoundError()\n }\n return err\n}\n"]}
package/dist/error.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { ErrorRequestHandler } from 'express';
1
+ import type { ErrorRequestHandler } from 'express';
2
2
  export declare const handler: ErrorRequestHandler;
3
3
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAK7C,eAAO,MAAM,OAAO,EAAE,mBAarB,CAAA"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAKlD,eAAO,MAAM,OAAO,EAAE,mBAarB,CAAA"}
package/dist/error.js CHANGED
@@ -1,4 +1,4 @@
1
- import { OAuthError } from '@atproto/oauth-provider';
1
+ import { OAuthError } from '@atproto/oauth-provider/errors';
2
2
  import { XRPCError } from '@atproto/xrpc-server';
3
3
  import { httpLogger as log } from './logger.js';
4
4
  export const handler = (err, _req, res, next) => {
package/dist/error.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,UAAU,IAAI,GAAG,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,CAAC,MAAM,OAAO,GAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACnE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,kCAAkC,CAAC,CAAA;IACtD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IAED,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QACzC,OAAM;IACR,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC5C,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AACxD,CAAC,CAAA","sourcesContent":["import { ErrorRequestHandler } from 'express'\nimport { OAuthError } from '@atproto/oauth-provider'\nimport { XRPCError } from '@atproto/xrpc-server'\nimport { httpLogger as log } from './logger.js'\n\nexport const handler: ErrorRequestHandler = (err, _req, res, next) => {\n log.error({ err }, 'unexpected internal server error')\n if (res.headersSent) {\n return next(err)\n }\n\n if (err instanceof OAuthError) {\n res.status(err.status).json(err.toJSON())\n return\n }\n\n const serverError = XRPCError.fromError(err)\n res.status(serverError.type).json(serverError.payload)\n}\n"]}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,UAAU,IAAI,GAAG,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,CAAC,MAAM,OAAO,GAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACnE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,kCAAkC,CAAC,CAAA;IACtD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IAED,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QACzC,OAAM;IACR,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC5C,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AACxD,CAAC,CAAA","sourcesContent":["import type { ErrorRequestHandler } from 'express'\nimport { OAuthError } from '@atproto/oauth-provider/errors'\nimport { XRPCError } from '@atproto/xrpc-server'\nimport { httpLogger as log } from './logger.js'\n\nexport const handler: ErrorRequestHandler = (err, _req, res, next) => {\n log.error({ err }, 'unexpected internal server error')\n if (res.headersSent) {\n return next(err)\n }\n\n if (err instanceof OAuthError) {\n res.status(err.status).json(err.toJSON())\n return\n }\n\n const serverError = XRPCError.fromError(err)\n res.status(serverError.type).json(serverError.payload)\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { BskyAppView } from '../bsky-app-view.js';
1
+ import type { BskyAppView } from '../bsky-app-view.js';
2
2
  export declare class ImageUrlBuilder {
3
3
  readonly pdsHostname: string;
4
4
  readonly bskyAppView?: BskyAppView | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"image-url-builder.d.ts","sourceRoot":"","sources":["../../src/image/image-url-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGjD,qBAAa,eAAe;IAExB,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW;IAFpC,YACW,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,WAAW,YAAA,EAChC;IAEJ,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKvD;CACF"}
1
+ {"version":3,"file":"image-url-builder.d.ts","sourceRoot":"","sources":["../../src/image/image-url-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGtD,qBAAa,eAAe;IAExB,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW;IAFpC,YACW,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,WAAW,YAAA,EAChC;IAEJ,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKvD;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"image-url-builder.js","sourceRoot":"","sources":["../../src/image/image-url-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAE1C,MAAM,OAAO,eAAe;IAC1B,YACW,WAAmB,EACnB,WAAyB;2BADzB,WAAW;2BACX,WAAW;IACnB,CAAC;IAEJ,KAAK,CAAC,OAAe,EAAE,GAAW,EAAE,GAAW;QAC7C,OAAO,CACL,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;YAChD,WAAW,IAAI,CAAC,WAAW,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAC1F,CAAA;IACH,CAAC;CACF","sourcesContent":["import { BskyAppView } from '../bsky-app-view.js'\nimport { com } from '../lexicons/index.js'\n\nexport class ImageUrlBuilder {\n constructor(\n readonly pdsHostname: string,\n readonly bskyAppView?: BskyAppView,\n ) {}\n\n build(pattern: string, did: string, cid: string): string {\n return (\n this.bskyAppView?.getImageUrl(pattern, did, cid) ??\n `https://${this.pdsHostname}/xrpc/${com.atproto.sync.getBlob.$lxm}?did=${did}&cid=${cid}`\n )\n }\n}\n"]}
1
+ {"version":3,"file":"image-url-builder.js","sourceRoot":"","sources":["../../src/image/image-url-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAE1C,MAAM,OAAO,eAAe;IAC1B,YACW,WAAmB,EACnB,WAAyB;2BADzB,WAAW;2BACX,WAAW;IACnB,CAAC;IAEJ,KAAK,CAAC,OAAe,EAAE,GAAW,EAAE,GAAW;QAC7C,OAAO,CACL,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;YAChD,WAAW,IAAI,CAAC,WAAW,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAC1F,CAAA;IACH,CAAC;CACF","sourcesContent":["import type { BskyAppView } from '../bsky-app-view.js'\nimport { com } from '../lexicons/index.js'\n\nexport class ImageUrlBuilder {\n constructor(\n readonly pdsHostname: string,\n readonly bskyAppView?: BskyAppView,\n ) {}\n\n build(pattern: string, did: string, cid: string): string {\n return (\n this.bskyAppView?.getImageUrl(pattern, did, cid) ??\n `https://${this.pdsHostname}/xrpc/${com.atproto.sync.getBlob.$lxm}?did=${did}&cid=${cid}`\n )\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import 'express-async-errors';
2
- import http from 'node:http';
2
+ import type http from 'node:http';
3
3
  import express from 'express';
4
- import { MethodHandler } from '@atproto/xrpc-server';
5
- import { ServerConfig, ServerSecrets } from './config/index.js';
6
- import { AppContext, AppContextOptions } from './context.js';
7
- import { app } from './lexicons.js';
4
+ import { type MethodHandler } from '@atproto/xrpc-server';
5
+ import type { ServerConfig, ServerSecrets } from './config/index.js';
6
+ import { AppContext, type AppContextOptions } from './context.js';
7
+ import type { app } from './lexicons.js';
8
8
  export * from './lexicons.js';
9
9
  export { bearerTokenFromReq, createPublicKeyObject, createSecretKeyObject, } from './auth-verifier.js';
10
10
  export * from './config/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,sBAAsB,CAAA;AAG7B,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,OAAO,MAAM,SAAS,CAAA;AAI7B,OAAO,EACL,aAAa,EAId,MAAM,sBAAsB,CAAA;AAI7B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE5D,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAOnC,cAAc,eAAe,CAAA;AAC7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,oBAAoB,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAEjD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,CACzC,IAAI,EACJ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EACrC,IAAI,EACJ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CACtC,CAAA;AAED,qBAAa,GAAG;IACP,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAA+B;IAClD,OAAO,CAAC,eAAe,CAAC,CAAgB;IACxC,OAAO,CAAC,sBAAsB,CAAC,CAAgB;IAE/C,YAAY,IAAI,EAAE;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;KAAE,EAG9D;IAED,OAAa,MAAM,CACjB,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,aAAa,EACtB,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACrC,OAAO,CAAC,GAAG,CAAC,CA8Dd;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAQlC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B7B;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF;eAEc,GAAG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,sBAAsB,CAAA;AAG7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAGjC,OAAO,OAAO,MAAM,SAAS,CAAA;AAI7B,OAAO,EACL,KAAK,aAAa,EAInB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAOxC,cAAc,eAAe,CAAA;AAC7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,oBAAoB,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAEjD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,CACzC,IAAI,EACJ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EACrC,IAAI,EACJ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CACtC,CAAA;AAED,qBAAa,GAAG;IACP,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAA+B;IAClD,OAAO,CAAC,eAAe,CAAC,CAAgB;IACxC,OAAO,CAAC,sBAAsB,CAAC,CAAgB;IAE/C,YAAY,IAAI,EAAE;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;KAAE,EAG9D;IAED,OAAa,MAAM,CACjB,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,aAAa,EACtB,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACrC,OAAO,CAAC,GAAG,CAAC,CA8Dd;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAQlC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B7B;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF;eAEc,GAAG"}
package/dist/index.js CHANGED
@@ -28,6 +28,7 @@ export { AppContext } from './context.js';
28
28
  export { Database } from './db/index.js';
29
29
  export { DiskBlobStore } from './disk-blobstore.js';
30
30
  export { httpLogger } from './logger.js';
31
+ export {} from './repo/index.js';
31
32
  export * as repoPrepare from './repo/prepare.js';
32
33
  export { scripts } from './scripts/index.js';
33
34
  export * as sequencer from './sequencer/index.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// catch errors that get thrown in async route handlers\n// this is a relatively non-invasive change to express\n// they get handled in the error.handler middleware\n// leave at top of file before importing Routes\nimport 'express-async-errors'\n\nimport events from 'node:events'\nimport http from 'node:http'\nimport { PlcClientError } from '@did-plc/lib'\nimport cors from 'cors'\nimport express from 'express'\n// eslint-disable-next-line import/default\nimport httpTerminator from 'http-terminator'\nimport { DAY, SECOND } from '@atproto/common'\nimport {\n MethodHandler,\n ResponseType,\n XRPCError,\n createServer,\n} from '@atproto/xrpc-server'\nimport apiRoutes from './api/index.js'\nimport * as authRoutes from './auth-routes.js'\nimport * as basicRoutes from './basic-routes.js'\nimport { ServerConfig, ServerSecrets } from './config/index.js'\nimport { AppContext, AppContextOptions } from './context.js'\nimport * as error from './error.js'\nimport { app } from './lexicons.js'\nimport { loggerMiddleware } from './logger.js'\nimport { proxyHandler } from './pipethrough.js'\nimport { buildRateLimitsConfig } from './rate-limits.js'\nimport compression from './util/compression.js'\nimport * as wellKnown from './well-known.js'\n\nexport * from './lexicons.js'\nexport {\n bearerTokenFromReq,\n createPublicKeyObject,\n createSecretKeyObject,\n} from './auth-verifier.js'\nexport * from './config/index.js'\nexport { AppContext } from './context.js'\nexport { Database } from './db/index.js'\nexport { DiskBlobStore } from './disk-blobstore.js'\nexport { httpLogger } from './logger.js'\nexport { type CommitDataWithOps, type PreparedWrite } from './repo/index.js'\nexport * as repoPrepare from './repo/prepare.js'\nexport { scripts } from './scripts/index.js'\nexport * as sequencer from './sequencer/index.js'\n\n/**\n * @deprecated Legacy export for backwards compatibility\n */\nexport type SkeletonHandler = MethodHandler<\n void,\n app.bsky.feed.getFeedSkeleton.$Params,\n void,\n app.bsky.feed.getFeedSkeleton.$Output\n>\n\nexport class PDS {\n public ctx: AppContext\n public app: express.Application\n public server?: http.Server\n private terminator?: httpTerminator.HttpTerminator\n private dbStatsInterval?: NodeJS.Timeout\n private sequencerStatsInterval?: NodeJS.Timeout\n\n constructor(opts: { ctx: AppContext; app: express.Application }) {\n this.ctx = opts.ctx\n this.app = opts.app\n }\n\n static async create(\n cfg: ServerConfig,\n secrets: ServerSecrets,\n overrides?: Partial<AppContextOptions>,\n ): Promise<PDS> {\n const ctx = await AppContext.fromConfig(cfg, secrets, overrides)\n\n const { rateLimits } = ctx.cfg\n\n const server = createServer([], {\n validateResponse: cfg.service.devMode,\n payload: {\n jsonLimit: 150 * 1024, // 150kb\n textLimit: 100 * 1024, // 100kb\n blobLimit: cfg.service.blobUploadLimit,\n },\n catchall: proxyHandler(ctx),\n errorParser: (err) => {\n if (err instanceof PlcClientError) {\n const payloadMessage =\n typeof err.data === 'object' &&\n err.data != null &&\n 'message' in err.data &&\n typeof err.data.message === 'string' &&\n err.data.message\n\n const type =\n err.status >= 500\n ? ResponseType.UpstreamFailure\n : ResponseType.InvalidRequest\n\n return new XRPCError(\n type,\n payloadMessage || 'Unable to perform PLC operation',\n )\n }\n\n return XRPCError.fromError(err)\n },\n rateLimits: buildRateLimitsConfig(rateLimits, ctx.redisScratch),\n })\n\n apiRoutes(server, ctx)\n\n const app = express()\n app.set('trust proxy', [\n // e.g. load balancer\n 'loopback',\n 'linklocal',\n 'uniquelocal',\n // e.g. trust x-forwarded-for via entryway ip\n ...getTrustedIps(cfg),\n ])\n app.use(loggerMiddleware)\n app.use(compression())\n app.use(authRoutes.createRouter(ctx)) // Before CORS\n app.use(cors({ maxAge: DAY / SECOND }))\n app.use(basicRoutes.createRouter(ctx))\n app.use(wellKnown.createRouter(ctx))\n app.use(server.router)\n app.use(error.handler)\n\n return new PDS({\n ctx,\n app,\n })\n }\n\n async start(): Promise<http.Server> {\n await this.ctx.sequencer.start()\n const server = this.app.listen(this.ctx.cfg.service.port)\n this.server = server\n this.server.keepAliveTimeout = 90_000\n this.terminator = httpTerminator.createHttpTerminator({ server })\n await events.once(server, 'listening')\n return server\n }\n\n async destroy(): Promise<void> {\n clearInterval(this.dbStatsInterval)\n clearInterval(this.sequencerStatsInterval)\n\n // @TODO Use disposable stack when it becomes available (Node24+)\n try {\n await this.terminator?.terminate()\n } finally {\n try {\n await this.ctx.backgroundQueue.destroy()\n } finally {\n try {\n await this.ctx.sequencer.destroy()\n } finally {\n try {\n await this.ctx.accountManager.close()\n } finally {\n try {\n await this.ctx.redisScratch?.quit()\n } finally {\n await this.ctx.proxyAgent.destroy()\n }\n }\n }\n }\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n}\n\nexport default PDS\n\nconst getTrustedIps = (cfg: ServerConfig) => {\n if (!cfg.rateLimits.enabled) return []\n return cfg.rateLimits.bypassIps ?? []\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// catch errors that get thrown in async route handlers\n// this is a relatively non-invasive change to express\n// they get handled in the error.handler middleware\n// leave at top of file before importing Routes\nimport 'express-async-errors'\n\nimport events from 'node:events'\nimport type http from 'node:http'\nimport { PlcClientError } from '@did-plc/lib'\nimport cors from 'cors'\nimport express from 'express'\n// eslint-disable-next-line import/default\nimport httpTerminator from 'http-terminator'\nimport { DAY, SECOND } from '@atproto/common'\nimport {\n type MethodHandler,\n ResponseType,\n XRPCError,\n createServer,\n} from '@atproto/xrpc-server'\nimport apiRoutes from './api/index.js'\nimport * as authRoutes from './auth-routes.js'\nimport * as basicRoutes from './basic-routes.js'\nimport type { ServerConfig, ServerSecrets } from './config/index.js'\nimport { AppContext, type AppContextOptions } from './context.js'\nimport * as error from './error.js'\nimport type { app } from './lexicons.js'\nimport { loggerMiddleware } from './logger.js'\nimport { proxyHandler } from './pipethrough.js'\nimport { buildRateLimitsConfig } from './rate-limits.js'\nimport compression from './util/compression.js'\nimport * as wellKnown from './well-known.js'\n\nexport * from './lexicons.js'\nexport {\n bearerTokenFromReq,\n createPublicKeyObject,\n createSecretKeyObject,\n} from './auth-verifier.js'\nexport * from './config/index.js'\nexport { AppContext } from './context.js'\nexport { Database } from './db/index.js'\nexport { DiskBlobStore } from './disk-blobstore.js'\nexport { httpLogger } from './logger.js'\nexport { type CommitDataWithOps, type PreparedWrite } from './repo/index.js'\nexport * as repoPrepare from './repo/prepare.js'\nexport { scripts } from './scripts/index.js'\nexport * as sequencer from './sequencer/index.js'\n\n/**\n * @deprecated Legacy export for backwards compatibility\n */\nexport type SkeletonHandler = MethodHandler<\n void,\n app.bsky.feed.getFeedSkeleton.$Params,\n void,\n app.bsky.feed.getFeedSkeleton.$Output\n>\n\nexport class PDS {\n public ctx: AppContext\n public app: express.Application\n public server?: http.Server\n private terminator?: httpTerminator.HttpTerminator\n private dbStatsInterval?: NodeJS.Timeout\n private sequencerStatsInterval?: NodeJS.Timeout\n\n constructor(opts: { ctx: AppContext; app: express.Application }) {\n this.ctx = opts.ctx\n this.app = opts.app\n }\n\n static async create(\n cfg: ServerConfig,\n secrets: ServerSecrets,\n overrides?: Partial<AppContextOptions>,\n ): Promise<PDS> {\n const ctx = await AppContext.fromConfig(cfg, secrets, overrides)\n\n const { rateLimits } = ctx.cfg\n\n const server = createServer([], {\n validateResponse: cfg.service.devMode,\n payload: {\n jsonLimit: 150 * 1024, // 150kb\n textLimit: 100 * 1024, // 100kb\n blobLimit: cfg.service.blobUploadLimit,\n },\n catchall: proxyHandler(ctx),\n errorParser: (err) => {\n if (err instanceof PlcClientError) {\n const payloadMessage =\n typeof err.data === 'object' &&\n err.data != null &&\n 'message' in err.data &&\n typeof err.data.message === 'string' &&\n err.data.message\n\n const type =\n err.status >= 500\n ? ResponseType.UpstreamFailure\n : ResponseType.InvalidRequest\n\n return new XRPCError(\n type,\n payloadMessage || 'Unable to perform PLC operation',\n )\n }\n\n return XRPCError.fromError(err)\n },\n rateLimits: buildRateLimitsConfig(rateLimits, ctx.redisScratch),\n })\n\n apiRoutes(server, ctx)\n\n const app = express()\n app.set('trust proxy', [\n // e.g. load balancer\n 'loopback',\n 'linklocal',\n 'uniquelocal',\n // e.g. trust x-forwarded-for via entryway ip\n ...getTrustedIps(cfg),\n ])\n app.use(loggerMiddleware)\n app.use(compression())\n app.use(authRoutes.createRouter(ctx)) // Before CORS\n app.use(cors({ maxAge: DAY / SECOND }))\n app.use(basicRoutes.createRouter(ctx))\n app.use(wellKnown.createRouter(ctx))\n app.use(server.router)\n app.use(error.handler)\n\n return new PDS({\n ctx,\n app,\n })\n }\n\n async start(): Promise<http.Server> {\n await this.ctx.sequencer.start()\n const server = this.app.listen(this.ctx.cfg.service.port)\n this.server = server\n this.server.keepAliveTimeout = 90_000\n this.terminator = httpTerminator.createHttpTerminator({ server })\n await events.once(server, 'listening')\n return server\n }\n\n async destroy(): Promise<void> {\n clearInterval(this.dbStatsInterval)\n clearInterval(this.sequencerStatsInterval)\n\n // @TODO Use disposable stack when it becomes available (Node24+)\n try {\n await this.terminator?.terminate()\n } finally {\n try {\n await this.ctx.backgroundQueue.destroy()\n } finally {\n try {\n await this.ctx.sequencer.destroy()\n } finally {\n try {\n await this.ctx.accountManager.close()\n } finally {\n try {\n await this.ctx.redisScratch?.quit()\n } finally {\n await this.ctx.proxyAgent.destroy()\n }\n }\n }\n }\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n}\n\nexport default PDS\n\nconst getTrustedIps = (cfg: ServerConfig) => {\n if (!cfg.rateLimits.enabled) return []\n return cfg.rateLimits.bypassIps ?? []\n}\n"]}
@@ -532,7 +532,7 @@ type BskyAppStatePref = {
532
532
  $type?: 'app.bsky.actor.defs#bskyAppStatePref';
533
533
  activeProgressGuide?: BskyAppProgressGuide;
534
534
  /**
535
- * Indicates if the user is participating in the Bluesky Beta program.
535
+ * Indicates if the user is participating in the beta features program.
536
536
  */
537
537
  isBetaUser?: boolean;
538
538
  /**