@atproto/pds 0.4.10 → 0.4.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/account-manager/helpers/invite.d.ts.map +1 -1
  3. package/dist/account-manager/helpers/invite.js.map +1 -1
  4. package/dist/actor-store/blob/reader.d.ts.map +1 -1
  5. package/dist/actor-store/blob/reader.js.map +1 -1
  6. package/dist/actor-store/index.d.ts +1 -0
  7. package/dist/actor-store/index.d.ts.map +1 -1
  8. package/dist/actor-store/index.js +1 -0
  9. package/dist/actor-store/index.js.map +1 -1
  10. package/dist/actor-store/record/transactor.d.ts.map +1 -1
  11. package/dist/actor-store/record/transactor.js.map +1 -1
  12. package/dist/actor-store/repo/reader.d.ts.map +1 -1
  13. package/dist/actor-store/repo/reader.js.map +1 -1
  14. package/dist/actor-store/repo/sql-repo-transactor.d.ts.map +1 -1
  15. package/dist/actor-store/repo/sql-repo-transactor.js.map +1 -1
  16. package/dist/api/app/bsky/feed/getPostThread.d.ts.map +1 -1
  17. package/dist/api/app/bsky/feed/getPostThread.js +1 -2
  18. package/dist/api/app/bsky/feed/getPostThread.js.map +1 -1
  19. package/dist/api/com/atproto/repo/uploadBlob.d.ts.map +1 -1
  20. package/dist/api/com/atproto/repo/uploadBlob.js.map +1 -1
  21. package/dist/context.d.ts +4 -4
  22. package/dist/context.d.ts.map +1 -1
  23. package/dist/context.js.map +1 -1
  24. package/dist/db/migrator.d.ts.map +1 -1
  25. package/dist/db/migrator.js.map +1 -1
  26. package/dist/db/pagination.d.ts.map +1 -1
  27. package/dist/db/pagination.js.map +1 -1
  28. package/dist/disk-blobstore.d.ts.map +1 -1
  29. package/dist/disk-blobstore.js +3 -1
  30. package/dist/disk-blobstore.js.map +1 -1
  31. package/dist/lexicon/lexicons.d.ts +14 -0
  32. package/dist/lexicon/lexicons.d.ts.map +1 -1
  33. package/dist/lexicon/lexicons.js +15 -1
  34. package/dist/lexicon/lexicons.js.map +1 -1
  35. package/dist/lexicon/types/com/atproto/sync/getRecord.d.ts +1 -1
  36. package/dist/lexicon/types/com/atproto/sync/getRecord.d.ts.map +1 -1
  37. package/dist/mailer/index.js.map +1 -1
  38. package/dist/pipethrough.d.ts.map +1 -1
  39. package/dist/pipethrough.js.map +1 -1
  40. package/dist/read-after-write/util.d.ts.map +1 -1
  41. package/dist/read-after-write/util.js +1 -2
  42. package/dist/read-after-write/util.js.map +1 -1
  43. package/dist/read-after-write/viewer.d.ts +2 -4
  44. package/dist/read-after-write/viewer.d.ts.map +1 -1
  45. package/dist/read-after-write/viewer.js +4 -10
  46. package/dist/read-after-write/viewer.js.map +1 -1
  47. package/dist/sequencer/outbox.d.ts.map +1 -1
  48. package/dist/sequencer/outbox.js.map +1 -1
  49. package/package.json +6 -6
  50. package/src/account-manager/helpers/invite.ts +10 -7
  51. package/src/actor-store/blob/reader.ts +4 -1
  52. package/src/actor-store/index.ts +2 -0
  53. package/src/actor-store/record/transactor.ts +4 -1
  54. package/src/actor-store/repo/reader.ts +4 -1
  55. package/src/actor-store/repo/sql-repo-transactor.ts +5 -1
  56. package/src/api/app/bsky/feed/getPostThread.ts +1 -2
  57. package/src/api/com/atproto/repo/uploadBlob.ts +2 -3
  58. package/src/context.ts +4 -10
  59. package/src/db/migrator.ts +4 -1
  60. package/src/db/pagination.ts +4 -1
  61. package/src/disk-blobstore.ts +3 -1
  62. package/src/lexicon/lexicons.ts +16 -1
  63. package/src/lexicon/types/com/atproto/sync/getRecord.ts +1 -1
  64. package/src/mailer/index.ts +1 -1
  65. package/src/pipethrough.ts +7 -4
  66. package/src/read-after-write/util.ts +1 -2
  67. package/src/read-after-write/viewer.ts +8 -8
  68. package/src/sequencer/outbox.ts +4 -1
  69. package/tests/account-deletion.test.ts +7 -0
  70. package/tests/entryway.test.ts +2 -3
@@ -163,10 +163,13 @@ const RES_HEADERS_TO_FORWARD = [
163
163
  ]
164
164
 
165
165
  const makeResHeaders = (res: Response): Record<string, string> => {
166
- const headers = RES_HEADERS_TO_FORWARD.reduce((acc, cur) => {
167
- acc[cur] = res.headers.get(cur) ?? undefined
168
- return acc
169
- }, {} as Record<string, string | undefined>)
166
+ const headers = RES_HEADERS_TO_FORWARD.reduce(
167
+ (acc, cur) => {
168
+ acc[cur] = res.headers.get(cur) ?? undefined
169
+ return acc
170
+ },
171
+ {} as Record<string, string | undefined>,
172
+ )
170
173
  return noUndefinedVals(headers)
171
174
  }
172
175
 
@@ -52,8 +52,7 @@ export const readAfterWriteInternal = async <T>(
52
52
  if (local.count === 0) {
53
53
  return res
54
54
  }
55
- const keypair = await ctx.actorStore.keypair(requester)
56
- const localViewer = ctx.localViewer(store, keypair)
55
+ const localViewer = ctx.localViewer(store)
57
56
  const parsedRes = parseRes<T>(nsid, res)
58
57
  const data = await munge(localViewer, parsedRes, local, requester)
59
58
  return formatMungedResponse(data, getLocalLag(local))
@@ -3,7 +3,6 @@ import { CID } from 'multiformats/cid'
3
3
  import { AtUri, INVALID_HANDLE } from '@atproto/syntax'
4
4
  import { cborToLexRecord } from '@atproto/repo'
5
5
  import { AtpAgent } from '@atproto/api'
6
- import { Keypair } from '@atproto/crypto'
7
6
  import { createServiceAuthHeaders } from '@atproto/xrpc-server'
8
7
  import { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post'
9
8
  import { Record as ProfileRecord } from '../lexicon/types/app/bsky/actor/profile'
@@ -43,10 +42,11 @@ import { AccountManager } from '../account-manager'
43
42
 
44
43
  type CommonSignedUris = 'avatar' | 'banner' | 'feed_thumbnail' | 'feed_fullsize'
45
44
 
45
+ export type LocalViewerCreator = (actorStore: ActorStoreReader) => LocalViewer
46
+
46
47
  export class LocalViewer {
47
48
  did: string
48
49
  actorStore: ActorStoreReader
49
- actorKey: Keypair
50
50
  accountManager: AccountManager
51
51
  pdsHostname: string
52
52
  appViewAgent?: AtpAgent
@@ -55,7 +55,6 @@ export class LocalViewer {
55
55
 
56
56
  constructor(params: {
57
57
  actorStore: ActorStoreReader
58
- actorKey: Keypair
59
58
  accountManager: AccountManager
60
59
  pdsHostname: string
61
60
  appViewAgent?: AtpAgent
@@ -64,7 +63,6 @@ export class LocalViewer {
64
63
  }) {
65
64
  this.did = params.actorStore.did
66
65
  this.actorStore = params.actorStore
67
- this.actorKey = params.actorKey
68
66
  this.accountManager = params.accountManager
69
67
  this.pdsHostname = params.pdsHostname
70
68
  this.appViewAgent = params.appViewAgent
@@ -78,9 +76,9 @@ export class LocalViewer {
78
76
  appViewAgent?: AtpAgent
79
77
  appviewDid?: string
80
78
  appviewCdnUrlPattern?: string
81
- }) {
82
- return (actorStore: ActorStoreReader, actorKey: Keypair) => {
83
- return new LocalViewer({ ...params, actorStore, actorKey })
79
+ }): LocalViewerCreator {
80
+ return (actorStore) => {
81
+ return new LocalViewer({ ...params, actorStore })
84
82
  }
85
83
  }
86
84
 
@@ -95,10 +93,12 @@ export class LocalViewer {
95
93
  if (!this.appviewDid) {
96
94
  throw new Error('Could not find bsky appview did')
97
95
  }
96
+ const keypair = await this.actorStore.keypair()
97
+
98
98
  return createServiceAuthHeaders({
99
99
  iss: did,
100
100
  aud: this.appviewDid,
101
- keypair: this.actorKey,
101
+ keypair,
102
102
  })
103
103
  }
104
104
 
@@ -13,7 +13,10 @@ export class Outbox {
13
13
  cutoverBuffer: SeqEvt[]
14
14
  outBuffer: AsyncBuffer<SeqEvt>
15
15
 
16
- constructor(public sequencer: Sequencer, opts: Partial<OutboxOpts> = {}) {
16
+ constructor(
17
+ public sequencer: Sequencer,
18
+ opts: Partial<OutboxOpts> = {},
19
+ ) {
17
20
  const { maxBufferSize = 500 } = opts
18
21
  this.cutoverBuffer = []
19
22
  this.outBuffer = new AsyncBuffer<SeqEvt>(maxBufferSize)
@@ -185,6 +185,13 @@ describe('account deletion', () => {
185
185
  await expect(attempt2).rejects.toThrow(BlobNotFoundError)
186
186
  })
187
187
 
188
+ it('maintains blobs from other actors', async () => {
189
+ const bobBlobstore = network.pds.ctx.blobstore(sc.dids.bob)
190
+ const [img] = sc.replies[sc.dids.bob][0].images
191
+ const attempt = bobBlobstore.getBytes(img.image.ref)
192
+ await expect(attempt).resolves.toBeDefined()
193
+ })
194
+
188
195
  it('can delete an empty user', async () => {
189
196
  const eve = await sc.createAccount('eve', {
190
197
  handle: 'eve.test',
@@ -120,9 +120,8 @@ describe('entryway', () => {
120
120
  },
121
121
  )
122
122
  const doc = await entryway.ctx.idResolver.did.resolve(alice)
123
- const handleToDid = await entryway.ctx.idResolver.handle.resolve(
124
- 'alice3.test',
125
- )
123
+ const handleToDid =
124
+ await entryway.ctx.idResolver.handle.resolve('alice3.test')
126
125
  const accountFromPds = await pds.ctx.accountManager.getAccount(alice)
127
126
  const accountFromEntryway = await entryway.ctx.services
128
127
  .account(entryway.ctx.db)