@atproto/pds 0.4.28 → 0.4.29
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +7 -0
- package/dist/account-manager/helpers/account.d.ts +7 -0
- package/dist/account-manager/helpers/account.d.ts.map +1 -1
- package/dist/account-manager/helpers/account.js +9 -1
- package/dist/account-manager/helpers/account.js.map +1 -1
- package/dist/account-manager/index.d.ts +3 -1
- package/dist/account-manager/index.d.ts.map +1 -1
- package/dist/account-manager/index.js +22 -6
- package/dist/account-manager/index.js.map +1 -1
- package/dist/api/com/atproto/admin/deleteAccount.d.ts.map +1 -1
- package/dist/api/com/atproto/admin/deleteAccount.js +4 -2
- package/dist/api/com/atproto/admin/deleteAccount.js.map +1 -1
- package/dist/api/com/atproto/admin/updateAccountHandle.js +1 -1
- package/dist/api/com/atproto/admin/updateAccountHandle.js.map +1 -1
- package/dist/api/com/atproto/admin/updateSubjectStatus.d.ts.map +1 -1
- package/dist/api/com/atproto/admin/updateSubjectStatus.js +2 -0
- package/dist/api/com/atproto/admin/updateSubjectStatus.js.map +1 -1
- package/dist/api/com/atproto/identity/submitPlcOperation.d.ts.map +1 -1
- package/dist/api/com/atproto/identity/submitPlcOperation.js.map +1 -1
- package/dist/api/com/atproto/identity/updateHandle.js +1 -1
- package/dist/api/com/atproto/identity/updateHandle.js.map +1 -1
- package/dist/api/com/atproto/repo/describeRepo.d.ts.map +1 -1
- package/dist/api/com/atproto/repo/describeRepo.js +2 -4
- package/dist/api/com/atproto/repo/describeRepo.js.map +1 -1
- package/dist/api/com/atproto/server/activateAccount.d.ts.map +1 -1
- package/dist/api/com/atproto/server/activateAccount.js +2 -1
- package/dist/api/com/atproto/server/activateAccount.js.map +1 -1
- package/dist/api/com/atproto/server/createAccount.d.ts.map +1 -1
- package/dist/api/com/atproto/server/createAccount.js +4 -2
- package/dist/api/com/atproto/server/createAccount.js.map +1 -1
- package/dist/api/com/atproto/server/deactivateAccount.d.ts.map +1 -1
- package/dist/api/com/atproto/server/deactivateAccount.js +2 -0
- package/dist/api/com/atproto/server/deactivateAccount.js.map +1 -1
- package/dist/api/com/atproto/server/deleteAccount.d.ts.map +1 -1
- package/dist/api/com/atproto/server/deleteAccount.js +4 -3
- package/dist/api/com/atproto/server/deleteAccount.js.map +1 -1
- package/dist/api/com/atproto/server/util.d.ts +1 -0
- package/dist/api/com/atproto/server/util.d.ts.map +1 -1
- package/dist/api/com/atproto/server/util.js +9 -6
- package/dist/api/com/atproto/server/util.js.map +1 -1
- package/dist/api/com/atproto/sync/deprecated/getCheckout.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/deprecated/getCheckout.js +2 -8
- package/dist/api/com/atproto/sync/deprecated/getCheckout.js.map +1 -1
- package/dist/api/com/atproto/sync/deprecated/getHead.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/deprecated/getHead.js +2 -7
- package/dist/api/com/atproto/sync/deprecated/getHead.js.map +1 -1
- package/dist/api/com/atproto/sync/getBlob.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/getBlob.js +3 -6
- package/dist/api/com/atproto/sync/getBlob.js.map +1 -1
- package/dist/api/com/atproto/sync/getBlocks.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/getBlocks.js +2 -7
- package/dist/api/com/atproto/sync/getBlocks.js.map +1 -1
- package/dist/api/com/atproto/sync/getLatestCommit.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/getLatestCommit.js +2 -7
- package/dist/api/com/atproto/sync/getLatestCommit.js.map +1 -1
- package/dist/api/com/atproto/sync/getRecord.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/getRecord.js +2 -7
- package/dist/api/com/atproto/sync/getRecord.js.map +1 -1
- package/dist/api/com/atproto/sync/getRepo.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/getRepo.js +2 -7
- package/dist/api/com/atproto/sync/getRepo.js.map +1 -1
- package/dist/api/com/atproto/sync/getRepoStatus.d.ts +4 -0
- package/dist/api/com/atproto/sync/getRepoStatus.d.ts.map +1 -0
- package/dist/api/com/atproto/sync/getRepoStatus.js +28 -0
- package/dist/api/com/atproto/sync/getRepoStatus.js.map +1 -0
- package/dist/api/com/atproto/sync/index.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/index.js +2 -0
- package/dist/api/com/atproto/sync/index.js.map +1 -1
- package/dist/api/com/atproto/sync/listBlobs.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/listBlobs.js +2 -8
- package/dist/api/com/atproto/sync/listBlobs.js.map +1 -1
- package/dist/api/com/atproto/sync/listRepos.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/listRepos.js +13 -8
- package/dist/api/com/atproto/sync/listRepos.js.map +1 -1
- package/dist/api/com/atproto/sync/subscribeRepos.d.ts.map +1 -1
- package/dist/api/com/atproto/sync/subscribeRepos.js +8 -0
- package/dist/api/com/atproto/sync/subscribeRepos.js.map +1 -1
- package/dist/api/com/atproto/sync/util.d.ts +11 -0
- package/dist/api/com/atproto/sync/util.d.ts.map +1 -0
- package/dist/api/com/atproto/sync/util.js +41 -0
- package/dist/api/com/atproto/sync/util.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lexicon/index.d.ts +2 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +4 -0
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +105 -0
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +185 -4
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/defs.d.ts +1 -1
- package/dist/lexicon/types/com/atproto/sync/getBlob.d.ts +1 -0
- package/dist/lexicon/types/com/atproto/sync/getBlob.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/getBlocks.d.ts +1 -0
- package/dist/lexicon/types/com/atproto/sync/getBlocks.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/getLatestCommit.d.ts +1 -1
- package/dist/lexicon/types/com/atproto/sync/getLatestCommit.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/getRecord.d.ts +1 -0
- package/dist/lexicon/types/com/atproto/sync/getRecord.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/getRepo.d.ts +1 -0
- package/dist/lexicon/types/com/atproto/sync/getRepo.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/getRepoStatus.d.ts +42 -0
- package/dist/lexicon/types/com/atproto/sync/getRepoStatus.d.ts.map +1 -0
- package/dist/lexicon/types/com/atproto/sync/getRepoStatus.js +3 -0
- package/dist/lexicon/types/com/atproto/sync/getRepoStatus.js.map +1 -0
- package/dist/lexicon/types/com/atproto/sync/listBlobs.d.ts +1 -0
- package/dist/lexicon/types/com/atproto/sync/listBlobs.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/listRepos.d.ts +3 -0
- package/dist/lexicon/types/com/atproto/sync/listRepos.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/listRepos.js.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/subscribeRepos.d.ts +19 -4
- package/dist/lexicon/types/com/atproto/sync/subscribeRepos.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/subscribeRepos.js +11 -1
- package/dist/lexicon/types/com/atproto/sync/subscribeRepos.js.map +1 -1
- package/dist/scripts/index.d.ts +4 -0
- package/dist/scripts/index.d.ts.map +1 -0
- package/dist/scripts/index.js +8 -0
- package/dist/scripts/index.js.map +1 -0
- package/dist/scripts/rebuild-repo.d.ts +3 -0
- package/dist/scripts/rebuild-repo.d.ts.map +1 -0
- package/dist/scripts/rebuild-repo.js +121 -0
- package/dist/scripts/rebuild-repo.js.map +1 -0
- package/dist/sequencer/db/schema.d.ts +1 -1
- package/dist/sequencer/db/schema.d.ts.map +1 -1
- package/dist/sequencer/events.d.ts +27 -2
- package/dist/sequencer/events.d.ts.map +1 -1
- package/dist/sequencer/events.js +35 -2
- package/dist/sequencer/events.js.map +1 -1
- package/dist/sequencer/sequencer.d.ts +8 -6
- package/dist/sequencer/sequencer.d.ts.map +1 -1
- package/dist/sequencer/sequencer.js +22 -9
- package/dist/sequencer/sequencer.js.map +1 -1
- package/package.json +4 -4
- package/src/account-manager/helpers/account.ts +8 -0
- package/src/account-manager/index.ts +19 -6
- package/src/api/com/atproto/admin/deleteAccount.ts +7 -2
- package/src/api/com/atproto/admin/updateAccountHandle.ts +1 -1
- package/src/api/com/atproto/admin/updateSubjectStatus.ts +2 -0
- package/src/api/com/atproto/identity/submitPlcOperation.ts +1 -0
- package/src/api/com/atproto/identity/updateHandle.ts +1 -1
- package/src/api/com/atproto/repo/describeRepo.ts +2 -4
- package/src/api/com/atproto/server/activateAccount.ts +2 -1
- package/src/api/com/atproto/server/createAccount.ts +6 -3
- package/src/api/com/atproto/server/deactivateAccount.ts +2 -0
- package/src/api/com/atproto/server/deleteAccount.ts +7 -3
- package/src/api/com/atproto/server/util.ts +12 -5
- package/src/api/com/atproto/sync/deprecated/getCheckout.ts +6 -8
- package/src/api/com/atproto/sync/deprecated/getHead.ts +7 -10
- package/src/api/com/atproto/sync/getBlob.ts +8 -6
- package/src/api/com/atproto/sync/getBlocks.ts +6 -7
- package/src/api/com/atproto/sync/getLatestCommit.ts +7 -10
- package/src/api/com/atproto/sync/getRecord.ts +7 -7
- package/src/api/com/atproto/sync/getRepo.ts +6 -7
- package/src/api/com/atproto/sync/getRepoStatus.ts +31 -0
- package/src/api/com/atproto/sync/index.ts +2 -0
- package/src/api/com/atproto/sync/listBlobs.ts +6 -8
- package/src/api/com/atproto/sync/listRepos.ts +13 -8
- package/src/api/com/atproto/sync/subscribeRepos.ts +7 -0
- package/src/api/com/atproto/sync/util.ts +59 -0
- package/src/index.ts +1 -0
- package/src/lexicon/index.ts +12 -0
- package/src/lexicon/lexicons.ts +193 -7
- package/src/lexicon/types/chat/bsky/convo/defs.ts +1 -1
- package/src/lexicon/types/com/atproto/sync/getBlob.ts +6 -0
- package/src/lexicon/types/com/atproto/sync/getBlocks.ts +6 -0
- package/src/lexicon/types/com/atproto/sync/getLatestCommit.ts +1 -1
- package/src/lexicon/types/com/atproto/sync/getRecord.ts +6 -0
- package/src/lexicon/types/com/atproto/sync/getRepo.ts +1 -0
- package/src/lexicon/types/com/atproto/sync/getRepoStatus.ts +52 -0
- package/src/lexicon/types/com/atproto/sync/listBlobs.ts +1 -0
- package/src/lexicon/types/com/atproto/sync/listRepos.ts +3 -0
- package/src/lexicon/types/com/atproto/sync/subscribeRepos.ts +30 -3
- package/src/scripts/index.ts +5 -0
- package/src/scripts/rebuild-repo.ts +143 -0
- package/src/sequencer/db/schema.ts +1 -0
- package/src/sequencer/events.ts +47 -0
- package/src/sequencer/sequencer.ts +35 -14
- package/tests/account-deactivation.test.ts +36 -10
- package/tests/account-deletion.test.ts +10 -2
- package/tests/moderation.test.ts +2 -2
- package/tests/proxied/notif.test.ts +1 -0
- package/tests/sequencer.test.ts +2 -2
- package/tests/sync/list.test.ts +1 -0
- package/tests/sync/subscribe-repos.test.ts +224 -40
- package/tests/sync/sync.test.ts +48 -4
package/dist/sequencer/events.js
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.tombstoneEvt = exports.identityEvt = exports.handleEvt = exports.commitEvt = exports.commitEvtOp = exports.formatSeqTombstone = exports.formatSeqIdentityEvt = exports.formatSeqHandleUpdate = exports.formatSeqCommit = void 0;
|
3
|
+
exports.tombstoneEvt = exports.accountEvt = exports.identityEvt = exports.handleEvt = exports.commitEvt = exports.commitEvtOp = exports.formatSeqTombstone = exports.formatSeqAccountEvt = exports.formatSeqIdentityEvt = exports.formatSeqHandleUpdate = exports.formatSeqCommit = void 0;
|
4
4
|
const zod_1 = require("zod");
|
5
5
|
const common_1 = require("@atproto/common");
|
6
6
|
const repo_1 = require("@atproto/repo");
|
7
|
+
const account_manager_1 = require("../account-manager");
|
7
8
|
const formatSeqCommit = async (did, commitData, writes) => {
|
8
9
|
let tooBig;
|
9
10
|
const ops = [];
|
@@ -67,10 +68,13 @@ const formatSeqHandleUpdate = async (did, handle) => {
|
|
67
68
|
};
|
68
69
|
};
|
69
70
|
exports.formatSeqHandleUpdate = formatSeqHandleUpdate;
|
70
|
-
const formatSeqIdentityEvt = async (did) => {
|
71
|
+
const formatSeqIdentityEvt = async (did, handle) => {
|
71
72
|
const evt = {
|
72
73
|
did,
|
73
74
|
};
|
75
|
+
if (handle) {
|
76
|
+
evt.handle = handle;
|
77
|
+
}
|
74
78
|
return {
|
75
79
|
did,
|
76
80
|
eventType: 'identity',
|
@@ -79,6 +83,22 @@ const formatSeqIdentityEvt = async (did) => {
|
|
79
83
|
};
|
80
84
|
};
|
81
85
|
exports.formatSeqIdentityEvt = formatSeqIdentityEvt;
|
86
|
+
const formatSeqAccountEvt = async (did, status) => {
|
87
|
+
const evt = {
|
88
|
+
did,
|
89
|
+
active: status === 'active',
|
90
|
+
};
|
91
|
+
if (status !== account_manager_1.AccountStatus.Active) {
|
92
|
+
evt.status = status;
|
93
|
+
}
|
94
|
+
return {
|
95
|
+
did,
|
96
|
+
eventType: 'account',
|
97
|
+
event: (0, common_1.cborEncode)(evt),
|
98
|
+
sequencedAt: new Date().toISOString(),
|
99
|
+
};
|
100
|
+
};
|
101
|
+
exports.formatSeqAccountEvt = formatSeqAccountEvt;
|
82
102
|
const formatSeqTombstone = async (did) => {
|
83
103
|
const evt = {
|
84
104
|
did,
|
@@ -118,6 +138,19 @@ exports.handleEvt = zod_1.z.object({
|
|
118
138
|
});
|
119
139
|
exports.identityEvt = zod_1.z.object({
|
120
140
|
did: zod_1.z.string(),
|
141
|
+
handle: zod_1.z.string().optional(),
|
142
|
+
});
|
143
|
+
exports.accountEvt = zod_1.z.object({
|
144
|
+
did: zod_1.z.string(),
|
145
|
+
active: zod_1.z.boolean(),
|
146
|
+
status: zod_1.z
|
147
|
+
.enum([
|
148
|
+
account_manager_1.AccountStatus.Takendown,
|
149
|
+
account_manager_1.AccountStatus.Suspended,
|
150
|
+
account_manager_1.AccountStatus.Deleted,
|
151
|
+
account_manager_1.AccountStatus.Deactivated,
|
152
|
+
])
|
153
|
+
.optional(),
|
121
154
|
});
|
122
155
|
exports.tombstoneEvt = zod_1.z.object({
|
123
156
|
did: zod_1.z.string(),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/sequencer/events.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AACvB,4CAAoD;AACpD,wCAMsB;
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/sequencer/events.ts"],"names":[],"mappings":"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"}
|
@@ -4,6 +4,7 @@ import { SeqEvt } from './events';
|
|
4
4
|
import { SequencerDb, RepoSeqEntry, RepoSeqInsert } from './db';
|
5
5
|
import { PreparedWrite } from '../repo';
|
6
6
|
import { Crawlers } from '../crawlers';
|
7
|
+
import { AccountStatus } from '../account-manager/helpers/account';
|
7
8
|
export * from './events';
|
8
9
|
declare const Sequencer_base: new () => SequencerEmitter;
|
9
10
|
export declare class Sequencer extends Sequencer_base {
|
@@ -27,12 +28,13 @@ export declare class Sequencer extends Sequencer_base {
|
|
27
28
|
}): Promise<SeqEvt[]>;
|
28
29
|
private pollDb;
|
29
30
|
private exponentialBackoff;
|
30
|
-
sequenceEvt(evt: RepoSeqInsert): Promise<
|
31
|
-
sequenceCommit(did: string, commitData: CommitData, writes: PreparedWrite[]): Promise<
|
32
|
-
sequenceHandleUpdate(did: string, handle: string): Promise<
|
33
|
-
sequenceIdentityEvt(did: string): Promise<
|
34
|
-
|
35
|
-
|
31
|
+
sequenceEvt(evt: RepoSeqInsert): Promise<number>;
|
32
|
+
sequenceCommit(did: string, commitData: CommitData, writes: PreparedWrite[]): Promise<number>;
|
33
|
+
sequenceHandleUpdate(did: string, handle: string): Promise<number>;
|
34
|
+
sequenceIdentityEvt(did: string, handle?: string): Promise<number>;
|
35
|
+
sequenceAccountEvt(did: string, status: AccountStatus): Promise<number>;
|
36
|
+
sequenceTombstone(did: string): Promise<number>;
|
37
|
+
deleteAllForUser(did: string, excludingSeqs?: number[]): Promise<void>;
|
36
38
|
}
|
37
39
|
type SeqRow = RepoSeqEntry;
|
38
40
|
type SequencerEvents = {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,eAAe,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,eAAe,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAKL,MAAM,EAOP,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,aAAa,EAEd,MAAM,MAAM,CAAA;AACb,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAElE,cAAc,UAAU,CAAA;;AAExB,qBAAa,SAAU,SAAQ,cAA4C;IAQhE,QAAQ,EAAE,QAAQ;IAClB,QAAQ;IARjB,EAAE,EAAE,WAAW,CAAA;IACf,SAAS,UAAQ;IACjB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAO;IACxC,kBAAkB,SAAI;gBAGpB,UAAU,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,QAAQ,SAAI,EACnB,wBAAwB,UAAQ;IAQ5B,KAAK;IAWL,OAAO;IAQP,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAU9B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAW5C,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWvD,eAAe,CAAC,IAAI,EAAE;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YA0EP,MAAM;YAwBN,kBAAkB;IAM1B,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAQhD,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,aAAa,EAAE,GACtB,OAAO,CAAC,MAAM,CAAC;IAKZ,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlE,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlE,kBAAkB,CACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC;IAKZ,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/C,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,GAAE,MAAM,EAAO;CAUjE;AAED,KAAK,MAAM,GAAG,YAAY,CAAA;AAE1B,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,eAAe,CAAC,CAAA;AAE5D,eAAe,SAAS,CAAA"}
|
@@ -167,6 +167,14 @@ class Sequencer extends events_1.default {
|
|
167
167
|
evt: evt,
|
168
168
|
});
|
169
169
|
}
|
170
|
+
else if (row.eventType === 'account') {
|
171
|
+
seqEvts.push({
|
172
|
+
type: 'account',
|
173
|
+
seq: row.seq,
|
174
|
+
time: row.sequencedAt,
|
175
|
+
evt: evt,
|
176
|
+
});
|
177
|
+
}
|
170
178
|
else if (row.eventType === 'tombstone') {
|
171
179
|
seqEvts.push({
|
172
180
|
type: 'tombstone',
|
@@ -210,30 +218,35 @@ class Sequencer extends events_1.default {
|
|
210
218
|
await (0, common_1.wait)(waitTime);
|
211
219
|
}
|
212
220
|
async sequenceEvt(evt) {
|
213
|
-
await this.db.executeWithRetry(this.db.db.insertInto('repo_seq').values(evt));
|
221
|
+
const res = await this.db.executeWithRetry(this.db.db.insertInto('repo_seq').values(evt).returningAll());
|
214
222
|
this.crawlers.notifyOfUpdate();
|
223
|
+
return res[0].seq;
|
215
224
|
}
|
216
225
|
async sequenceCommit(did, commitData, writes) {
|
217
226
|
const evt = await (0, events_2.formatSeqCommit)(did, commitData, writes);
|
218
|
-
await this.sequenceEvt(evt);
|
227
|
+
return await this.sequenceEvt(evt);
|
219
228
|
}
|
220
229
|
async sequenceHandleUpdate(did, handle) {
|
221
230
|
const evt = await (0, events_2.formatSeqHandleUpdate)(did, handle);
|
222
|
-
await this.sequenceEvt(evt);
|
231
|
+
return await this.sequenceEvt(evt);
|
232
|
+
}
|
233
|
+
async sequenceIdentityEvt(did, handle) {
|
234
|
+
const evt = await (0, events_2.formatSeqIdentityEvt)(did, handle);
|
235
|
+
return await this.sequenceEvt(evt);
|
223
236
|
}
|
224
|
-
async
|
225
|
-
const evt = await (0, events_2.
|
226
|
-
await this.sequenceEvt(evt);
|
237
|
+
async sequenceAccountEvt(did, status) {
|
238
|
+
const evt = await (0, events_2.formatSeqAccountEvt)(did, status);
|
239
|
+
return await this.sequenceEvt(evt);
|
227
240
|
}
|
228
241
|
async sequenceTombstone(did) {
|
229
242
|
const evt = await (0, events_2.formatSeqTombstone)(did);
|
230
|
-
await this.sequenceEvt(evt);
|
243
|
+
return await this.sequenceEvt(evt);
|
231
244
|
}
|
232
|
-
async deleteAllForUser(did) {
|
245
|
+
async deleteAllForUser(did, excludingSeqs = []) {
|
233
246
|
await this.db.executeWithRetry(this.db.db
|
234
247
|
.deleteFrom('repo_seq')
|
235
248
|
.where('did', '=', did)
|
236
|
-
.where('
|
249
|
+
.if(excludingSeqs.length > 0, (qb) => qb.where('seq', 'not in', excludingSeqs)));
|
237
250
|
}
|
238
251
|
}
|
239
252
|
exports.Sequencer = Sequencer;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sequencer.js","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,oDAAiC;AAEjC,sCAA4C;AAC5C,4CAA0D;AAE1D,
|
1
|
+
{"version":3,"file":"sequencer.js","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@atproto/pds",
|
3
|
-
"version": "0.4.
|
3
|
+
"version": "0.4.29",
|
4
4
|
"license": "MIT",
|
5
5
|
"description": "Reference implementation of atproto Personal Data Server (PDS)",
|
6
6
|
"keywords": [
|
@@ -43,7 +43,7 @@
|
|
43
43
|
"typed-emitter": "^2.1.0",
|
44
44
|
"uint8arrays": "3.0.0",
|
45
45
|
"zod": "^3.21.4",
|
46
|
-
"@atproto/api": "^0.12.
|
46
|
+
"@atproto/api": "^0.12.14",
|
47
47
|
"@atproto/aws": "^0.2.0",
|
48
48
|
"@atproto/common": "^0.4.0",
|
49
49
|
"@atproto/crypto": "^0.4.0",
|
@@ -70,8 +70,8 @@
|
|
70
70
|
"jest": "^28.1.2",
|
71
71
|
"ts-node": "^10.8.2",
|
72
72
|
"ws": "^8.12.0",
|
73
|
-
"@atproto/api": "^0.12.
|
74
|
-
"@atproto/bsky": "^0.0.
|
73
|
+
"@atproto/api": "^0.12.14",
|
74
|
+
"@atproto/bsky": "^0.0.57",
|
75
75
|
"@atproto/lex-cli": "^0.4.0"
|
76
76
|
},
|
77
77
|
"scripts": {
|
@@ -16,6 +16,14 @@ export type AvailabilityFlags = {
|
|
16
16
|
includeDeactivated?: boolean
|
17
17
|
}
|
18
18
|
|
19
|
+
export enum AccountStatus {
|
20
|
+
Active = 'active',
|
21
|
+
Takendown = 'takendown',
|
22
|
+
Suspended = 'suspended',
|
23
|
+
Deleted = 'deleted',
|
24
|
+
Deactivated = 'deactivated',
|
25
|
+
}
|
26
|
+
|
19
27
|
const selectAccountQB = (db: AccountDb, flags?: AvailabilityFlags) => {
|
20
28
|
const { includeTakenDown = false, includeDeactivated = false } = flags ?? {}
|
21
29
|
const { ref } = db.db.dynamic
|
@@ -4,6 +4,7 @@ import { CID } from 'multiformats/cid'
|
|
4
4
|
import { AccountDb, EmailTokenPurpose, getDb, getMigrator } from './db'
|
5
5
|
import * as scrypt from './helpers/scrypt'
|
6
6
|
import * as account from './helpers/account'
|
7
|
+
import { AccountStatus } from './helpers/account'
|
7
8
|
import { ActorAccount } from './helpers/account'
|
8
9
|
import * as repo from './helpers/repo'
|
9
10
|
import * as auth from './helpers/auth'
|
@@ -13,6 +14,8 @@ import * as emailToken from './helpers/email-token'
|
|
13
14
|
import { AuthScope } from '../auth-verifier'
|
14
15
|
import { StatusAttr } from '../lexicon/types/com/atproto/admin/defs'
|
15
16
|
|
17
|
+
export { AccountStatus } from './helpers/account'
|
18
|
+
|
16
19
|
export class AccountManager {
|
17
20
|
db: AccountDb
|
18
21
|
|
@@ -51,12 +54,6 @@ export class AccountManager {
|
|
51
54
|
return account.getAccountByEmail(this.db, email, flags)
|
52
55
|
}
|
53
56
|
|
54
|
-
// Repo exists and is not taken-down
|
55
|
-
async isRepoAvailable(did: string) {
|
56
|
-
const got = await this.getAccount(did)
|
57
|
-
return !!got
|
58
|
-
}
|
59
|
-
|
60
57
|
async isAccountActivated(did: string): Promise<boolean> {
|
61
58
|
const account = await this.getAccount(did, { includeDeactivated: true })
|
62
59
|
if (!account) return false
|
@@ -71,6 +68,22 @@ export class AccountManager {
|
|
71
68
|
return got?.did ?? null
|
72
69
|
}
|
73
70
|
|
71
|
+
async getAccountStatus(handleOrDid: string): Promise<AccountStatus> {
|
72
|
+
const got = await this.getAccount(handleOrDid, {
|
73
|
+
includeDeactivated: true,
|
74
|
+
includeTakenDown: true,
|
75
|
+
})
|
76
|
+
if (!got) {
|
77
|
+
return AccountStatus.Deleted
|
78
|
+
} else if (got.takedownRef) {
|
79
|
+
return AccountStatus.Takendown
|
80
|
+
} else if (got.deactivatedAt) {
|
81
|
+
return AccountStatus.Deactivated
|
82
|
+
} else {
|
83
|
+
return AccountStatus.Active
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
74
87
|
async createAccount(opts: {
|
75
88
|
did: string
|
76
89
|
handle: string
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { Server } from '../../../../lexicon'
|
2
2
|
import AppContext from '../../../../context'
|
3
|
+
import { AccountStatus } from '../../../../account-manager'
|
3
4
|
|
4
5
|
export default function (server: Server, ctx: AppContext) {
|
5
6
|
server.com.atproto.admin.deleteAccount({
|
@@ -8,8 +9,12 @@ export default function (server: Server, ctx: AppContext) {
|
|
8
9
|
const { did } = input.body
|
9
10
|
await ctx.actorStore.destroy(did)
|
10
11
|
await ctx.accountManager.deleteAccount(did)
|
11
|
-
await ctx.sequencer.sequenceTombstone(did)
|
12
|
-
await ctx.sequencer.
|
12
|
+
const tombstoneSeq = await ctx.sequencer.sequenceTombstone(did)
|
13
|
+
const accountSeq = await ctx.sequencer.sequenceAccountEvt(
|
14
|
+
did,
|
15
|
+
AccountStatus.Deleted,
|
16
|
+
)
|
17
|
+
await ctx.sequencer.deleteAllForUser(did, [accountSeq, tombstoneSeq])
|
13
18
|
},
|
14
19
|
})
|
15
20
|
}
|
@@ -45,7 +45,7 @@ export default function (server: Server, ctx: AppContext) {
|
|
45
45
|
|
46
46
|
try {
|
47
47
|
await ctx.sequencer.sequenceHandleUpdate(did, handle)
|
48
|
-
await ctx.sequencer.sequenceIdentityEvt(did)
|
48
|
+
await ctx.sequencer.sequenceIdentityEvt(did, handle)
|
49
49
|
} catch (err) {
|
50
50
|
httpLogger.error(
|
51
51
|
{ err, did, handle },
|
@@ -17,6 +17,8 @@ export default function (server: Server, ctx: AppContext) {
|
|
17
17
|
if (takedown) {
|
18
18
|
if (isRepoRef(subject)) {
|
19
19
|
await ctx.accountManager.takedownAccount(subject.did, takedown)
|
20
|
+
const status = await ctx.accountManager.getAccountStatus(subject.did)
|
21
|
+
await ctx.sequencer.sequenceAccountEvt(subject.did, status)
|
20
22
|
} else if (isStrongRef(subject)) {
|
21
23
|
const uri = new AtUri(subject.uri)
|
22
24
|
await ctx.actorStore.transact(uri.hostname, (store) =>
|
@@ -57,7 +57,7 @@ export default function (server: Server, ctx: AppContext) {
|
|
57
57
|
|
58
58
|
try {
|
59
59
|
await ctx.sequencer.sequenceHandleUpdate(requester, handle)
|
60
|
-
await ctx.sequencer.sequenceIdentityEvt(requester)
|
60
|
+
await ctx.sequencer.sequenceIdentityEvt(requester, handle)
|
61
61
|
} catch (err) {
|
62
62
|
httpLogger.error(
|
63
63
|
{ err, did: requester, handle },
|
@@ -3,15 +3,13 @@ import * as id from '@atproto/identity'
|
|
3
3
|
import { Server } from '../../../../lexicon'
|
4
4
|
import AppContext from '../../../../context'
|
5
5
|
import { INVALID_HANDLE } from '@atproto/syntax'
|
6
|
+
import { assertRepoAvailability } from '../sync/util'
|
6
7
|
|
7
8
|
export default function (server: Server, ctx: AppContext) {
|
8
9
|
server.com.atproto.repo.describeRepo(async ({ params }) => {
|
9
10
|
const { repo } = params
|
10
11
|
|
11
|
-
const account = await ctx
|
12
|
-
if (account === null) {
|
13
|
-
throw new InvalidRequestError(`Could not find user: ${repo}`)
|
14
|
-
}
|
12
|
+
const account = await assertRepoAvailability(ctx, repo, false)
|
15
13
|
|
16
14
|
let didDoc
|
17
15
|
try {
|
@@ -36,7 +36,8 @@ export default function (server: Server, ctx: AppContext) {
|
|
36
36
|
})
|
37
37
|
|
38
38
|
// @NOTE: we're over-emitting for now for backwards compatibility, can reduce this in the future
|
39
|
-
await ctx.
|
39
|
+
const status = await ctx.accountManager.getAccountStatus(requester)
|
40
|
+
await ctx.sequencer.sequenceAccountEvt(requester, status)
|
40
41
|
await ctx.sequencer.sequenceHandleUpdate(
|
41
42
|
requester,
|
42
43
|
account.handle ?? INVALID_HANDLE,
|
@@ -11,7 +11,8 @@ import {
|
|
11
11
|
import { Server } from '../../../../lexicon'
|
12
12
|
import { InputSchema as CreateAccountInput } from '../../../../lexicon/types/com/atproto/server/createAccount'
|
13
13
|
import AppContext from '../../../../context'
|
14
|
-
import {
|
14
|
+
import { safeResolveDidDoc } from './util'
|
15
|
+
import { AccountStatus } from '../../../../account-manager'
|
15
16
|
|
16
17
|
export default function (server: Server, ctx: AppContext) {
|
17
18
|
server.com.atproto.server.createAccount({
|
@@ -56,6 +57,8 @@ export default function (server: Server, ctx: AppContext) {
|
|
56
57
|
}
|
57
58
|
}
|
58
59
|
|
60
|
+
didDoc = await safeResolveDidDoc(ctx, did, true)
|
61
|
+
|
59
62
|
creds = await ctx.accountManager.createAccount({
|
60
63
|
did,
|
61
64
|
handle,
|
@@ -68,11 +71,11 @@ export default function (server: Server, ctx: AppContext) {
|
|
68
71
|
})
|
69
72
|
|
70
73
|
if (!deactivated) {
|
74
|
+
await ctx.sequencer.sequenceIdentityEvt(did, handle)
|
75
|
+
await ctx.sequencer.sequenceAccountEvt(did, AccountStatus.Active)
|
71
76
|
await ctx.sequencer.sequenceCommit(did, commit, [])
|
72
|
-
await ctx.sequencer.sequenceIdentityEvt(did)
|
73
77
|
}
|
74
78
|
await ctx.accountManager.updateRepoRoot(did, commit.cid, commit.rev)
|
75
|
-
didDoc = await didDocForSession(ctx, did, true)
|
76
79
|
await ctx.actorStore.clearReservedKeypair(signingKey.did(), did)
|
77
80
|
} catch (err) {
|
78
81
|
// this will only be reached if the actor store _did not_ exist before
|
@@ -10,6 +10,8 @@ export default function (server: Server, ctx: AppContext) {
|
|
10
10
|
requester,
|
11
11
|
input.body.deleteAfter ?? null,
|
12
12
|
)
|
13
|
+
const status = await ctx.accountManager.getAccountStatus(requester)
|
14
|
+
await ctx.sequencer.sequenceAccountEvt(requester, status)
|
13
15
|
},
|
14
16
|
})
|
15
17
|
}
|
@@ -3,6 +3,7 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server'
|
|
3
3
|
import { Server } from '../../../../lexicon'
|
4
4
|
import AppContext from '../../../../context'
|
5
5
|
import { authPassthru } from '../../../proxy'
|
6
|
+
import { AccountStatus } from '../../../../account-manager'
|
6
7
|
|
7
8
|
export default function (server: Server, ctx: AppContext) {
|
8
9
|
server.com.atproto.server.deleteAccount({
|
@@ -44,9 +45,12 @@ export default function (server: Server, ctx: AppContext) {
|
|
44
45
|
)
|
45
46
|
await ctx.actorStore.destroy(did)
|
46
47
|
await ctx.accountManager.deleteAccount(did)
|
47
|
-
await ctx.sequencer.
|
48
|
-
|
49
|
-
|
48
|
+
const accountSeq = await ctx.sequencer.sequenceAccountEvt(
|
49
|
+
did,
|
50
|
+
AccountStatus.Deleted,
|
51
|
+
)
|
52
|
+
const tombstoneSeq = await ctx.sequencer.sequenceTombstone(did)
|
53
|
+
await ctx.sequencer.deleteAllForUser(did, [accountSeq, tombstoneSeq])
|
50
54
|
},
|
51
55
|
})
|
52
56
|
}
|
@@ -2,7 +2,7 @@ import * as crypto from '@atproto/crypto'
|
|
2
2
|
import { DidDocument } from '@atproto/identity'
|
3
3
|
import { ServerConfig } from '../../../../config'
|
4
4
|
import AppContext from '../../../../context'
|
5
|
-
import {
|
5
|
+
import { httpLogger } from '../../../../logger'
|
6
6
|
import { InvalidRequestError } from '@atproto/xrpc-server'
|
7
7
|
import { getPdsEndpoint, getSigningDidKey } from '@atproto/common'
|
8
8
|
|
@@ -28,21 +28,28 @@ export const getRandomToken = () => {
|
|
28
28
|
return token.slice(0, 5) + '-' + token.slice(5, 10)
|
29
29
|
}
|
30
30
|
|
31
|
-
|
32
|
-
export const didDocForSession = async (
|
31
|
+
export const safeResolveDidDoc = async (
|
33
32
|
ctx: AppContext,
|
34
33
|
did: string,
|
35
34
|
forceRefresh?: boolean,
|
36
35
|
): Promise<DidDocument | undefined> => {
|
37
|
-
if (!ctx.cfg.identity.enableDidDocWithSession) return
|
38
36
|
try {
|
39
37
|
const didDoc = await ctx.idResolver.did.resolve(did, forceRefresh)
|
40
38
|
return didDoc ?? undefined
|
41
39
|
} catch (err) {
|
42
|
-
|
40
|
+
httpLogger.warn({ err, did }, 'failed to resolve did doc')
|
43
41
|
}
|
44
42
|
}
|
45
43
|
|
44
|
+
export const didDocForSession = async (
|
45
|
+
ctx: AppContext,
|
46
|
+
did: string,
|
47
|
+
forceRefresh?: boolean,
|
48
|
+
): Promise<DidDocument | undefined> => {
|
49
|
+
if (!ctx.cfg.identity.enableDidDocWithSession) return
|
50
|
+
return safeResolveDidDoc(ctx, did, forceRefresh)
|
51
|
+
}
|
52
|
+
|
46
53
|
export const isValidDidDocForService = async (
|
47
54
|
ctx: AppContext,
|
48
55
|
did: string,
|
@@ -1,20 +1,18 @@
|
|
1
|
-
import { InvalidRequestError } from '@atproto/xrpc-server'
|
2
1
|
import { Server } from '../../../../../lexicon'
|
3
2
|
import AppContext from '../../../../../context'
|
4
3
|
import { getCarStream } from '../getRepo'
|
4
|
+
import { assertRepoAvailability } from '../util'
|
5
5
|
|
6
6
|
export default function (server: Server, ctx: AppContext) {
|
7
7
|
server.com.atproto.sync.getCheckout({
|
8
8
|
auth: ctx.authVerifier.optionalAccessOrAdminToken,
|
9
9
|
handler: async ({ params, auth }) => {
|
10
10
|
const { did } = params
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
}
|
17
|
-
}
|
11
|
+
await assertRepoAvailability(
|
12
|
+
ctx,
|
13
|
+
did,
|
14
|
+
ctx.authVerifier.isUserOrAdmin(auth, did),
|
15
|
+
)
|
18
16
|
|
19
17
|
const carStream = await getCarStream(ctx, did)
|
20
18
|
|
@@ -1,22 +1,19 @@
|
|
1
1
|
import { InvalidRequestError } from '@atproto/xrpc-server'
|
2
2
|
import { Server } from '../../../../../lexicon'
|
3
3
|
import AppContext from '../../../../../context'
|
4
|
+
import { assertRepoAvailability } from '../util'
|
4
5
|
|
5
6
|
export default function (server: Server, ctx: AppContext) {
|
6
7
|
server.com.atproto.sync.getHead({
|
7
8
|
auth: ctx.authVerifier.optionalAccessOrAdminToken,
|
8
9
|
handler: async ({ params, auth }) => {
|
9
10
|
const { did } = params
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
'HeadNotFound',
|
17
|
-
)
|
18
|
-
}
|
19
|
-
}
|
11
|
+
await assertRepoAvailability(
|
12
|
+
ctx,
|
13
|
+
did,
|
14
|
+
ctx.authVerifier.isUserOrAdmin(auth, did),
|
15
|
+
)
|
16
|
+
|
20
17
|
const root = await ctx.actorStore.read(did, (store) =>
|
21
18
|
store.repo.storage.getRoot(),
|
22
19
|
)
|
@@ -3,17 +3,19 @@ import { Server } from '../../../../lexicon'
|
|
3
3
|
import AppContext from '../../../../context'
|
4
4
|
import { InvalidRequestError } from '@atproto/xrpc-server'
|
5
5
|
import { BlobNotFoundError } from '@atproto/repo'
|
6
|
+
import { assertRepoAvailability } from './util'
|
6
7
|
|
7
8
|
export default function (server: Server, ctx: AppContext) {
|
8
9
|
server.com.atproto.sync.getBlob({
|
9
10
|
auth: ctx.authVerifier.optionalAccessOrAdminToken,
|
10
11
|
handler: async ({ params, res, auth }) => {
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
const { did } = params
|
13
|
+
await assertRepoAvailability(
|
14
|
+
ctx,
|
15
|
+
did,
|
16
|
+
ctx.authVerifier.isUserOrAdmin(auth, did),
|
17
|
+
)
|
18
|
+
|
17
19
|
const cid = CID.parse(params.cid)
|
18
20
|
const found = await ctx.actorStore.read(params.did, async (store) => {
|
19
21
|
try {
|
@@ -4,19 +4,18 @@ import { byteIterableToStream } from '@atproto/common'
|
|
4
4
|
import { blocksToCarStream } from '@atproto/repo'
|
5
5
|
import { Server } from '../../../../lexicon'
|
6
6
|
import AppContext from '../../../../context'
|
7
|
+
import { assertRepoAvailability } from './util'
|
7
8
|
|
8
9
|
export default function (server: Server, ctx: AppContext) {
|
9
10
|
server.com.atproto.sync.getBlocks({
|
10
11
|
auth: ctx.authVerifier.optionalAccessOrAdminToken,
|
11
12
|
handler: async ({ params, auth }) => {
|
12
13
|
const { did } = params
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
}
|
19
|
-
}
|
14
|
+
await assertRepoAvailability(
|
15
|
+
ctx,
|
16
|
+
did,
|
17
|
+
ctx.authVerifier.isUserOrAdmin(auth, did),
|
18
|
+
)
|
20
19
|
|
21
20
|
const cids = params.cids.map((c) => CID.parse(c))
|
22
21
|
const got = await ctx.actorStore.read(did, (store) =>
|