-
Notifications
You must be signed in to change notification settings - Fork 630
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Similification of the `pds` package by: - Removing `DetailedAccountStore` class (moving its logic inside `AccountManager`) - Factorizes image URL building into its own class (for easy re-use from `AccountManager`) - Adds an `AppView` class that exposes an `agent: AtpAgent` and url builder function (used by the `ImageUrlBuilder`). - Reworks the `ActorStore` to avoid circular dependency between `AccountManager` and `LocalViewerCreator` (needed because of first item) * tidy * move classes in their own file
- Loading branch information
1 parent
8a30e0e
commit 53a577f
Showing
37 changed files
with
522 additions
and
530 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
"@atproto/pds": patch | ||
--- | ||
|
||
Code refactor |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
import { Keypair } from '@atproto/crypto' | ||
import { ActorStoreResources } from './actor-store-resources' | ||
import { ActorDb } from './db' | ||
import { PreferenceReader } from './preference/reader' | ||
import { RecordReader } from './record/reader' | ||
import { RepoReader } from './repo/reader' | ||
import { ActorStoreTransactor } from './actor-store-transactor' | ||
|
||
export class ActorStoreReader { | ||
public readonly repo: RepoReader | ||
public readonly record: RecordReader | ||
public readonly pref: PreferenceReader | ||
|
||
constructor( | ||
public readonly did: string, | ||
protected readonly db: ActorDb, | ||
protected readonly resources: ActorStoreResources, | ||
public readonly keypair: () => Promise<Keypair>, | ||
) { | ||
const blobstore = resources.blobstore(did) | ||
|
||
this.repo = new RepoReader(db, blobstore) | ||
this.record = new RecordReader(db) | ||
this.pref = new PreferenceReader(db) | ||
|
||
// Invoke "keypair" once. Also avoids leaking "this" as keypair context. | ||
let keypairPromise: Promise<Keypair> | ||
this.keypair = () => (keypairPromise ??= Promise.resolve().then(keypair)) | ||
} | ||
|
||
async transact<T>( | ||
fn: (fn: ActorStoreTransactor) => T | PromiseLike<T>, | ||
): Promise<T> { | ||
const keypair = await this.keypair() | ||
return this.db.transaction((dbTxn) => { | ||
const store = new ActorStoreTransactor( | ||
this.did, | ||
dbTxn, | ||
keypair, | ||
this.resources, | ||
) | ||
return fn(store) | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import { BlobStore } from '@atproto/repo' | ||
import { BackgroundQueue } from '../background' | ||
|
||
export type ActorStoreResources = { | ||
blobstore: (did: string) => BlobStore | ||
backgroundQueue: BackgroundQueue | ||
reservedKeyDir?: string | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import { Keypair } from '@atproto/crypto' | ||
import { ActorStoreResources } from './actor-store-resources' | ||
import { ActorDb } from './db' | ||
import { PreferenceTransactor } from './preference/transactor' | ||
import { RecordTransactor } from './record/transactor' | ||
import { RepoTransactor } from './repo/transactor' | ||
|
||
export class ActorStoreTransactor { | ||
public readonly record: RecordTransactor | ||
public readonly repo: RepoTransactor | ||
public readonly pref: PreferenceTransactor | ||
|
||
constructor( | ||
public readonly did: string, | ||
protected readonly db: ActorDb, | ||
protected readonly keypair: Keypair, | ||
protected readonly resources: ActorStoreResources, | ||
) { | ||
const blobstore = resources.blobstore(did) | ||
|
||
this.record = new RecordTransactor(db, blobstore) | ||
this.pref = new PreferenceTransactor(db) | ||
this.repo = new RepoTransactor( | ||
db, | ||
blobstore, | ||
did, | ||
keypair, | ||
resources.backgroundQueue, | ||
) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import { ActorStoreTransactor } from './actor-store-transactor' | ||
|
||
export class ActorStoreWriter extends ActorStoreTransactor { | ||
async transact<T>( | ||
fn: (fn: ActorStoreTransactor) => T | PromiseLike<T>, | ||
): Promise<T> { | ||
return this.db.transaction((dbTxn) => { | ||
const transactor = new ActorStoreTransactor( | ||
this.did, | ||
dbTxn, | ||
this.keypair, | ||
this.resources, | ||
) | ||
return fn(transactor) | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.