@atproto/pds 0.4.217 → 0.4.218
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.
- package/CHANGELOG.md +18 -0
- package/dist/account-manager/oauth-store.d.ts.map +1 -1
- package/dist/account-manager/oauth-store.js +1 -1
- package/dist/account-manager/oauth-store.js.map +1 -1
- package/dist/actor-store/blob/transactor.d.ts +6 -6
- package/dist/actor-store/blob/transactor.d.ts.map +1 -1
- package/dist/actor-store/blob/transactor.js +1 -4
- package/dist/actor-store/blob/transactor.js.map +1 -1
- package/dist/api/com/atproto/repo/importRepo.js +1 -1
- package/dist/api/com/atproto/repo/importRepo.js.map +1 -1
- package/dist/api/com/atproto/repo/putRecord.js.map +1 -1
- package/dist/lexicons/app/bsky/actor/defs.defs.d.ts +1 -0
- package/dist/lexicons/app/bsky/actor/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/actor/defs.defs.js +1 -0
- package/dist/lexicons/app/bsky/actor/defs.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/actor/profile.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/actor/profile.defs.js +2 -10
- package/dist/lexicons/app/bsky/actor/profile.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/embed/external.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/embed/external.defs.js +1 -1
- package/dist/lexicons/app/bsky/embed/external.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/embed/images.defs.d.ts +3 -0
- package/dist/lexicons/app/bsky/embed/images.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/embed/images.defs.js +1 -5
- package/dist/lexicons/app/bsky/embed/images.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/embed/video.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/embed/video.defs.js +2 -6
- package/dist/lexicons/app/bsky/embed/video.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/feed/generator.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/feed/generator.defs.js +1 -5
- package/dist/lexicons/app/bsky/feed/generator.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/graph/list.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/graph/list.defs.js +1 -5
- package/dist/lexicons/app/bsky/graph/list.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.d.ts +3 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.defs.d.ts +22 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.defs.js +53 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.js +45 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.d.ts +3 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.defs.d.ts +31 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.defs.js +20 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.js +45 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.d.ts +3 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.defs.d.ts +24 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.defs.js +54 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.js +45 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.d.ts +3 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.defs.d.ts +33 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.defs.js +21 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.js +45 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.d.ts +3 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.defs.d.ts +24 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.defs.js +54 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.js +45 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.d.ts +3 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.defs.d.ts +33 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.defs.js +21 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.js +45 -0
- package/dist/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced.d.ts +6 -0
- package/dist/lexicons/app/bsky/unspecced.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/unspecced.js +7 -1
- package/dist/lexicons/app/bsky/unspecced.js.map +1 -1
- package/dist/lexicons/app/bsky/video/defs.defs.js +1 -1
- package/dist/lexicons/app/bsky/video/defs.defs.js.map +1 -1
- package/dist/lexicons/com/atproto/repo/uploadBlob.defs.d.ts +2 -6
- package/dist/lexicons/com/atproto/repo/uploadBlob.defs.d.ts.map +1 -1
- package/dist/lexicons/com/atproto/repo/uploadBlob.defs.js +1 -1
- package/dist/lexicons/com/atproto/repo/uploadBlob.defs.js.map +1 -1
- package/dist/read-after-write/viewer.d.ts.map +1 -1
- package/dist/read-after-write/viewer.js +7 -6
- package/dist/read-after-write/viewer.js.map +1 -1
- package/dist/repo/prepare.d.ts.map +1 -1
- package/dist/repo/prepare.js.map +1 -1
- package/dist/repo/types.d.ts +3 -3
- package/dist/repo/types.d.ts.map +1 -1
- package/dist/repo/types.js.map +1 -1
- package/package.json +14 -14
- package/src/account-manager/oauth-store.ts +2 -1
- package/src/actor-store/blob/transactor.ts +9 -15
- package/src/api/com/atproto/repo/importRepo.ts +1 -1
- package/src/api/com/atproto/repo/putRecord.ts +2 -2
- package/src/read-after-write/viewer.ts +10 -7
- package/src/repo/prepare.ts +2 -2
- package/src/repo/types.ts +3 -3
- package/tests/file-uploads.test.ts +17 -9
- package/tsconfig.build.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @atproto/pds
|
|
2
2
|
|
|
3
|
+
## 0.4.218
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#4555](https://github.com/bluesky-social/atproto/pull/4555) [`aa1763d`](https://github.com/bluesky-social/atproto/commit/aa1763df0f1bb46014ba6a416646a08c61d97950) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Hydrate mod labels on actor `status` record views
|
|
8
|
+
|
|
9
|
+
- [#4823](https://github.com/bluesky-social/atproto/pull/4823) [`d8801e2`](https://github.com/bluesky-social/atproto/commit/d8801e2a17fe7062b7aa674475b384ead7518a17) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Increase max image upload size to 2 MB from 1 MB
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`c62651d`](https://github.com/bluesky-social/atproto/commit/c62651dd69f1e18bd854b66e499b91fee9eaa856), [`f6f100c`](https://github.com/bluesky-social/atproto/commit/f6f100c33700a7ff58a1458109cc7420131feed0), [`c62651d`](https://github.com/bluesky-social/atproto/commit/c62651dd69f1e18bd854b66e499b91fee9eaa856), [`c62651d`](https://github.com/bluesky-social/atproto/commit/c62651dd69f1e18bd854b66e499b91fee9eaa856), [`f6f100c`](https://github.com/bluesky-social/atproto/commit/f6f100c33700a7ff58a1458109cc7420131feed0)]:
|
|
12
|
+
- @atproto/lex-data@0.0.15
|
|
13
|
+
- @atproto/lex@0.0.24
|
|
14
|
+
- @atproto/lex-json@0.0.15
|
|
15
|
+
- @atproto/common@0.5.16
|
|
16
|
+
- @atproto/lex-cbor@0.0.16
|
|
17
|
+
- @atproto/repo@0.9.1
|
|
18
|
+
- @atproto/xrpc-server@0.10.19
|
|
19
|
+
- @atproto/oauth-provider@0.15.16
|
|
20
|
+
|
|
3
21
|
## 0.4.217
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-store.d.ts","sourceRoot":"","sources":["../../src/account-manager/oauth-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA2B,MAAM,cAAc,CAAA;AAE9D,OAAO,EAAE,OAAO,EAAoB,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"oauth-store.d.ts","sourceRoot":"","sources":["../../src/account-manager/oauth-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA2B,MAAM,cAAc,CAAA;AAE9D,OAAO,EAAE,OAAO,EAAoB,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EACL,YAAY,EAKb,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,QAAQ,EACR,IAAI,EACJ,aAAa,EACb,UAAU,EACV,QAAQ,EACR,WAAW,EACX,kBAAkB,EAIlB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,yBAAyB,EACzB,yBAAyB,EACzB,UAAU,EACV,GAAG,EACH,SAAS,EACT,OAAO,EACP,SAAS,EACT,UAAU,EACV,iBAAiB,EAClB,MAAM,yBAAyB,CAAA;AAKhC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,SAAS,EAAyB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAYlD;;;;;GAKG;AACH,qBAAa,UACX,YAAW,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU;IAG1E,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBATd,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,EACvB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GAAG,IAAI;IAGhD,OAAO,KAAK,EAAE,GAIb;IAED,OAAO,KAAK,UAAU,GAErB;YAEa,uBAAuB;YAavB,gBAAgB;IAYxB,aAAa,CAAC,EAClB,MAAM,EAAE,OAAO,EACf,UAAU,EACV,MAAM,EACN,KAAK,EACL,QAAQ,GACT,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAiF1B,mBAAmB,CAAC,EACxB,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAER,QAAoB,GACrB,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BvC,mBAAmB,CACvB,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC;IAIV,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;QAClC,OAAO,EAAE,OAAO,CAAA;QAChB,iBAAiB,EAAE,iBAAiB,CAAA;KACrC,CAAC;IAmBI,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE,gBAAgB,CACpB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAoB1B,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,kBAAkB,CACtB,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,CAAA;KAAE,GAAG;QAAE,QAAQ,EAAE,QAAQ,CAAA;KAAE,GAC5C,OAAO,CAAC,aAAa,EAAE,CAAC;IA+BrB,oBAAoB,CAAC,EACzB,MAAM,EAAE,OAAO,EACf,KAAK,GACN,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAuBhD,oBAAoB,CACxB,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAkBpB,wBAAwB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC7D,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9D,WAAW,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAiBvD,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE,aAAa,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IASlE,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjE,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC;IAK1D,YAAY,CAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;IAMV,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAItD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1C,WAAW,CACf,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,SAAS,EACf,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,IAAI,CAAC;IAgBV,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKjD,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAOtD,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,WAAW,CACf,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,EACnB,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC;IA6BV,uBAAuB,CAC3B,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAatB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YAK9C,WAAW;YAWX,YAAY;CAmC3B"}
|
|
@@ -506,7 +506,7 @@ class OAuthStore {
|
|
|
506
506
|
const { avatar, displayName } = profile;
|
|
507
507
|
account.name || (account.name = displayName);
|
|
508
508
|
account.picture || (account.picture = avatar
|
|
509
|
-
? this.imageUrlBuilder.build('avatar', did,
|
|
509
|
+
? this.imageUrlBuilder.build('avatar', did, (0, lex_1.getBlobCidString)(avatar))
|
|
510
510
|
: undefined);
|
|
511
511
|
}
|
|
512
512
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-store.js","sourceRoot":"","sources":["../../src/account-manager/oauth-store.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport { Client, createOp as createPlcOp } from '@did-plc/lib'\nimport { Selectable } from 'kysely'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport {\n HandleString,\n asAtIdentifierString,\n isDidString,\n isHandleString,\n} from '@atproto/lex'\nimport {\n Account,\n AccountStore,\n AuthenticateAccountData,\n AuthorizedClientData,\n AuthorizedClients,\n ClientId,\n Code,\n DeviceAccount,\n DeviceData,\n DeviceId,\n DeviceStore,\n FoundRequestResult,\n HandleUnavailableError,\n InvalidInviteCodeError,\n InvalidRequestError,\n LexiconData,\n LexiconStore,\n NewTokenData,\n RefreshToken,\n RequestData,\n RequestId,\n RequestStore,\n ResetPasswordConfirmInput,\n ResetPasswordRequestInput,\n SignUpData,\n Sub,\n TokenData,\n TokenId,\n TokenInfo,\n TokenStore,\n UpdateRequestData,\n} from '@atproto/oauth-provider'\nimport {\n AuthRequiredError as XrpcAuthRequiredError,\n InvalidRequestError as XrpcInvalidRequestError,\n} from '@atproto/xrpc-server'\nimport { ActorStore } from '../actor-store/actor-store'\nimport { BackgroundQueue } from '../background'\nimport { fromDateISO } from '../db'\nimport { ImageUrlBuilder } from '../image/image-url-builder'\nimport { dbLogger } from '../logger'\nimport { ServerMailer } from '../mailer'\nimport { Sequencer, syncEvtDataFromCommit } from '../sequencer'\nimport { AccountManager } from './account-manager'\nimport * as schemas from './db/schema'\nimport * as accountHelper from './helpers/account'\nimport { AccountStatus } from './helpers/account'\nimport * as accountDeviceHelper from './helpers/account-device'\nimport * as authRequestHelper from './helpers/authorization-request'\nimport * as authorizedClientHelper from './helpers/authorized-client'\nimport * as deviceHelper from './helpers/device'\nimport * as lexiconHelper from './helpers/lexicon'\nimport * as tokenHelper from './helpers/token'\nimport * as usedRefreshTokenHelper from './helpers/used-refresh-token'\n\n/**\n * This class' purpose is to implement the interface needed by the OAuthProvider\n * to interact with the account database (through the {@link AccountManager}).\n *\n * @note The use of this class assumes that there is no entryway.\n */\nexport class OAuthStore\n implements AccountStore, RequestStore, DeviceStore, LexiconStore, TokenStore\n{\n constructor(\n private readonly accountManager: AccountManager,\n private readonly actorStore: ActorStore,\n private readonly imageUrlBuilder: ImageUrlBuilder,\n private readonly backgroundQueue: BackgroundQueue,\n private readonly mailer: ServerMailer,\n private readonly sequencer: Sequencer,\n private readonly plcClient: Client,\n private readonly plcRotationKey: Keypair,\n private readonly publicUrl: string,\n private readonly recoveryDidKey: string | null,\n ) {}\n\n private get db() {\n const { db } = this.accountManager\n if (db.destroyed) throw new Error('Database connection is closed')\n return db\n }\n\n private get serviceDid() {\n return this.accountManager.serviceDid\n }\n\n private async verifyEmailAvailability(email: string): Promise<void> {\n // @NOTE Email validity & disposability check performed by the OAuthProvider\n\n const account = await this.accountManager.getAccountByEmail(email, {\n includeDeactivated: true,\n includeTakenDown: true,\n })\n\n if (account) {\n throw new InvalidRequestError(`Email already taken`)\n }\n }\n\n private async verifyInviteCode(code: string) {\n try {\n await this.accountManager.ensureInviteIsAvailable(code)\n } catch (err) {\n const message =\n err instanceof XrpcInvalidRequestError ? err.message : undefined\n throw new InvalidInviteCodeError(message, err)\n }\n }\n\n // AccountStore\n\n async createAccount({\n locale: _locale,\n inviteCode,\n handle,\n email,\n password,\n }: SignUpData): Promise<Account> {\n // @TODO Send an account creation confirmation email (+verification link) to the user (in their locale)\n // @NOTE Password strength & length already enforced by the OAuthProvider\n\n assert(isHandleString(handle), 'Handle must be a valid HandleString')\n\n await Promise.all([\n this.verifyEmailAvailability(email),\n this.verifyHandleAvailability(handle),\n !inviteCode || this.verifyInviteCode(inviteCode),\n ])\n\n // @TODO The code bellow should probably be refactored to be common with the\n // code of the `com.atproto.server.createAccount` XRPC endpoint.\n\n const signingKey = await Secp256k1Keypair.create({ exportable: true })\n const signingKeyDid = signingKey.did()\n\n const plcCreate = await createPlcOp({\n signingKey: signingKeyDid,\n rotationKeys: this.recoveryDidKey\n ? [this.recoveryDidKey, this.plcRotationKey.did()]\n : [this.plcRotationKey.did()],\n handle,\n pds: this.publicUrl,\n signer: this.plcRotationKey,\n })\n\n const { did, op } = plcCreate\n assert(isDidString(did), 'Generated DID is not a valid DidString')\n\n try {\n await this.actorStore.create(did, signingKey)\n try {\n const commit = await this.actorStore.transact(did, (actorTxn) =>\n actorTxn.repo.createRepo([]),\n )\n\n await this.plcClient.sendOperation(did, op)\n\n await this.accountManager.createAccount({\n did,\n handle,\n email,\n password,\n inviteCode,\n repoCid: commit.cid,\n repoRev: commit.rev,\n })\n try {\n await this.sequencer.sequenceIdentityEvt(did, handle)\n await this.sequencer.sequenceAccountEvt(did, AccountStatus.Active)\n await this.sequencer.sequenceCommit(did, commit)\n await this.sequencer.sequenceSyncEvt(\n did,\n syncEvtDataFromCommit(commit),\n )\n await this.accountManager.updateRepoRoot(did, commit.cid, commit.rev)\n await this.actorStore.clearReservedKeypair(signingKeyDid, did)\n\n const account = await this.accountManager.getAccount(did)\n if (!account) throw new Error('Account not found')\n\n return await this.buildAccount(account)\n } catch (err) {\n this.accountManager.deleteAccount(did)\n throw err\n }\n } catch (err) {\n await this.actorStore.destroy(did)\n throw err\n }\n } catch (err) {\n // XrpcError => OAuthError\n if (err instanceof XrpcInvalidRequestError) {\n throw new InvalidRequestError(err.message, err)\n }\n throw err\n }\n }\n\n async authenticateAccount({\n locale: _locale,\n username: identifier,\n password,\n // Not supported by the PDS (yet?)\n emailOtp = undefined,\n }: AuthenticateAccountData): Promise<Account> {\n // @TODO (?) Send an email to the user to notify them of the login attempt\n try {\n // Should never happen\n if (emailOtp != null) {\n throw new Error('Email OTP is not supported')\n }\n\n const { user, appPassword, isSoftDeleted } =\n await this.accountManager.login({ identifier, password })\n\n if (isSoftDeleted) {\n throw new InvalidRequestError('Account was taken down')\n }\n\n if (appPassword) {\n throw new InvalidRequestError('App passwords are not allowed')\n }\n\n return this.buildAccount(user)\n } catch (err) {\n if (err instanceof XrpcAuthRequiredError) {\n throw new InvalidRequestError(err.message, err)\n }\n throw err\n }\n }\n\n async setAuthorizedClient(\n sub: Sub,\n clientId: ClientId,\n data: AuthorizedClientData,\n ): Promise<void> {\n await authorizedClientHelper.upsert(this.db, sub, clientId, data)\n }\n\n async getAccount(sub: Sub): Promise<{\n account: Account\n authorizedClients: AuthorizedClients\n }> {\n const accountRow = await accountHelper.getAccount(\n this.db,\n // @TODO @atproto/oauth-provider should strongly type `Sub` as `DidString`\n asAtIdentifierString(sub),\n { includeDeactivated: true },\n )\n\n assert(accountRow, 'Account not found')\n\n const account = await this.buildAccount(accountRow)\n const authorizedClients = await authorizedClientHelper.getAuthorizedClients(\n this.db,\n sub,\n )\n\n return { account, authorizedClients }\n }\n\n async upsertDeviceAccount(deviceId: DeviceId, sub: string): Promise<void> {\n await this.db.executeWithRetry(\n accountDeviceHelper.upsertQB(this.db, deviceId, sub),\n )\n }\n\n async getDeviceAccount(\n deviceId: DeviceId,\n sub: string,\n ): Promise<DeviceAccount | null> {\n const row = await accountDeviceHelper\n .selectQB(this.db, { deviceId, sub })\n .executeTakeFirst()\n\n if (!row) return null\n\n return {\n deviceId,\n deviceData: deviceHelper.rowToDeviceData(row),\n account: await this.buildAccount(row),\n authorizedClients: await authorizedClientHelper.getAuthorizedClients(\n this.db,\n sub,\n ),\n createdAt: fromDateISO(row.adCreatedAt),\n updatedAt: fromDateISO(row.adUpdatedAt),\n }\n }\n\n async removeDeviceAccount(deviceId: DeviceId, sub: Sub): Promise<void> {\n await this.db.executeWithRetry(\n accountDeviceHelper.removeQB(this.db, deviceId, sub),\n )\n }\n\n async listDeviceAccounts(\n filter: { sub: Sub } | { deviceId: DeviceId },\n ): Promise<DeviceAccount[]> {\n const rows = await accountDeviceHelper.selectQB(this.db, filter).execute()\n\n const uniqueDids = [...new Set(rows.map((row) => row.did))]\n\n // Enrich all distinct account with their profile data\n const accounts = new Map(\n await Promise.all(\n Array.from(uniqueDids, async (did): Promise<[Sub, Account]> => {\n const row = rows.find((r) => r.did === did)!\n return [did, await this.buildAccount(row)]\n }),\n ),\n )\n\n const authorizedClientsMap =\n await authorizedClientHelper.getAuthorizedClientsMulti(\n this.db,\n uniqueDids,\n )\n\n return rows.map((row) => ({\n deviceId: row.deviceId,\n deviceData: deviceHelper.rowToDeviceData(row),\n account: accounts.get(row.did)!,\n authorizedClients: authorizedClientsMap.get(row.did)!,\n createdAt: fromDateISO(row.adCreatedAt),\n updatedAt: fromDateISO(row.adUpdatedAt),\n }))\n }\n\n async resetPasswordRequest({\n locale: _locale,\n email,\n }: ResetPasswordRequestInput): Promise<Account | null> {\n const account = await this.accountManager.getAccountByEmail(email, {\n includeDeactivated: true,\n includeTakenDown: true,\n })\n\n if (!account?.email || !account?.handle) return null\n\n const { handle } = account\n const token = await this.accountManager.createEmailToken(\n account.did,\n 'reset_password',\n )\n\n // @TODO Use the locale to send the email in the right language\n await this.mailer.sendResetPassword(\n { handle, token },\n { to: account.email },\n )\n\n return this.buildAccount(account)\n }\n\n async resetPasswordConfirm(\n data: ResetPasswordConfirmInput,\n ): Promise<Account | null> {\n try {\n const did = await this.accountManager.resetPassword(data)\n const account = await this.accountManager.getAccount(did, {\n includeDeactivated: true,\n includeTakenDown: true,\n })\n\n return account ? this.buildAccount(account) : null\n } catch (err) {\n if (err instanceof XrpcInvalidRequestError) {\n return null\n }\n\n throw err\n }\n }\n\n async verifyHandleAvailability(handle: HandleString): Promise<void> {\n // @NOTE Handle validity & normalization already enforced by the OAuthProvider\n try {\n const normalized =\n await this.accountManager.normalizeAndValidateHandle(handle)\n\n // Should never happen (OAuthProvider should have already validated the\n // handle) This check is just a safeguard against future normalization\n // changes.\n if (normalized !== handle) {\n throw new HandleUnavailableError('syntax', 'Invalid handle')\n }\n\n const account = await this.accountManager.getAccount(normalized, {\n includeDeactivated: true,\n includeTakenDown: true,\n })\n\n if (account) {\n throw new HandleUnavailableError('taken')\n }\n } catch (err) {\n if (err instanceof XrpcInvalidRequestError) {\n throw err.customErrorName === 'HandleNotAvailable'\n ? new HandleUnavailableError('taken', err.message)\n : new HandleUnavailableError('syntax', err.message)\n }\n\n throw err\n }\n }\n\n // RequestStore\n\n async createRequest(id: RequestId, data: RequestData): Promise<void> {\n await this.db.executeWithRetry(\n authRequestHelper.createQB(this.db, id, data),\n )\n }\n\n async readRequest(id: RequestId): Promise<RequestData | null> {\n try {\n const row = await authRequestHelper.readQB(this.db, id).executeTakeFirst()\n if (!row) return null\n return authRequestHelper.rowToRequestData(row)\n } finally {\n // Take the opportunity to clean up expired requests. Do this after we got\n // the current (potentially expired) request data to allow the provider to\n // handle expired requests.\n this.backgroundQueue.add(async () => {\n await this.db.executeWithRetry(\n authRequestHelper.removeOldExpiredQB(this.db),\n )\n })\n }\n }\n\n async updateRequest(id: RequestId, data: UpdateRequestData): Promise<void> {\n await this.db.executeWithRetry(\n authRequestHelper.updateQB(this.db, id, data),\n )\n }\n\n async deleteRequest(id: RequestId): Promise<void> {\n await this.db.executeWithRetry(authRequestHelper.removeByIdQB(this.db, id))\n }\n\n async consumeRequestCode(code: Code): Promise<FoundRequestResult | null> {\n const row = await authRequestHelper\n .consumeByCodeQB(this.db, code)\n .executeTakeFirst()\n return row ? authRequestHelper.rowToFoundRequestResult(row) : null\n }\n\n // DeviceStore\n\n async createDevice(deviceId: DeviceId, data: DeviceData): Promise<void> {\n await this.db.executeWithRetry(\n deviceHelper.createQB(this.db, deviceId, data),\n )\n }\n\n async readDevice(deviceId: DeviceId): Promise<null | DeviceData> {\n const row = await deviceHelper.readQB(this.db, deviceId).executeTakeFirst()\n return row ? deviceHelper.rowToDeviceData(row) : null\n }\n\n async updateDevice(\n deviceId: DeviceId,\n data: Partial<DeviceData>,\n ): Promise<void> {\n await this.db.executeWithRetry(\n deviceHelper.updateQB(this.db, deviceId, data),\n )\n }\n\n async deleteDevice(deviceId: DeviceId): Promise<void> {\n // Will cascade to device_account (device_account_device_id_fk)\n await this.db.executeWithRetry(deviceHelper.removeQB(this.db, deviceId))\n }\n\n // LexiconStore\n\n async findLexicon(nsid: string): Promise<LexiconData | null> {\n return lexiconHelper.find(this.db, nsid)\n }\n\n async storeLexicon(nsid: string, data: LexiconData): Promise<void> {\n return lexiconHelper.upsert(this.db, nsid, data)\n }\n\n async deleteLexicon(nsid: string): Promise<void> {\n return lexiconHelper.remove(this.db, nsid)\n }\n\n // TokenStore\n\n async createToken(\n id: TokenId,\n data: TokenData,\n refreshToken?: RefreshToken,\n ): Promise<void> {\n await this.db.transaction(async (dbTxn) => {\n if (refreshToken) {\n const { count } = await usedRefreshTokenHelper\n .countQB(dbTxn, refreshToken)\n .executeTakeFirstOrThrow()\n\n if (count > 0) {\n throw new Error('Refresh token already in use')\n }\n }\n\n return tokenHelper.createQB(dbTxn, id, data, refreshToken).execute()\n })\n }\n\n async listAccountTokens(sub: Sub): Promise<TokenInfo[]> {\n const rows = await tokenHelper.findByQB(this.db, { did: sub }).execute()\n return Promise.all(rows.map((row) => this.toTokenInfo(row)))\n }\n\n async readToken(tokenId: TokenId): Promise<TokenInfo | null> {\n const row = await tokenHelper\n .findByQB(this.db, { tokenId })\n .executeTakeFirst()\n return row ? this.toTokenInfo(row) : null\n }\n\n async deleteToken(tokenId: TokenId): Promise<void> {\n // Will cascade to used_refresh_token (used_refresh_token_fk)\n await this.db.executeWithRetry(tokenHelper.removeQB(this.db, tokenId))\n }\n\n async rotateToken(\n tokenId: TokenId,\n newTokenId: TokenId,\n newRefreshToken: RefreshToken,\n newData: NewTokenData,\n ): Promise<void> {\n const err = await this.db.transaction(async (dbTxn) => {\n const { id, currentRefreshToken } = await tokenHelper\n .forRotateQB(dbTxn, tokenId)\n .executeTakeFirstOrThrow()\n\n if (currentRefreshToken) {\n await usedRefreshTokenHelper\n .insertQB(dbTxn, id, currentRefreshToken)\n .execute()\n }\n\n const { count } = await usedRefreshTokenHelper\n .countQB(dbTxn, newRefreshToken)\n .executeTakeFirstOrThrow()\n\n if (count > 0) {\n // Do NOT throw (we don't want the transaction to be rolled back)\n return new Error('New refresh token already in use')\n }\n\n await tokenHelper\n .rotateQB(dbTxn, id, newTokenId, newRefreshToken, newData)\n .execute()\n })\n\n if (err) throw err\n }\n\n async findTokenByRefreshToken(\n refreshToken: RefreshToken,\n ): Promise<TokenInfo | null> {\n const used = await usedRefreshTokenHelper\n .findByTokenQB(this.db, refreshToken)\n .executeTakeFirst()\n\n const search = used\n ? { id: used.tokenId }\n : { currentRefreshToken: refreshToken }\n\n const row = await tokenHelper.findByQB(this.db, search).executeTakeFirst()\n return row ? this.toTokenInfo(row) : null\n }\n\n async findTokenByCode(code: Code): Promise<TokenInfo | null> {\n const row = await tokenHelper.findByQB(this.db, { code }).executeTakeFirst()\n return row ? this.toTokenInfo(row) : null\n }\n\n private async toTokenInfo(\n row: accountHelper.ActorAccount & Selectable<schemas.Token>,\n ): Promise<TokenInfo> {\n return {\n id: row.tokenId,\n data: tokenHelper.toTokenData(row),\n account: await this.buildAccount(row),\n currentRefreshToken: row.currentRefreshToken,\n }\n }\n\n private async buildAccount(\n row: accountHelper.ActorAccount,\n ): Promise<Account> {\n const account: Account = {\n sub: row.did,\n aud: this.serviceDid,\n email: row.email || undefined,\n email_verified: row.email ? row.emailConfirmedAt != null : undefined,\n preferred_username: row.handle || undefined,\n }\n\n if (!account.name || !account.picture) {\n const did = account.sub\n\n const profile = await this.actorStore\n .read(did, async (store) => {\n return store.record.getProfileRecord()\n })\n .catch((err) => {\n dbLogger.error({ err }, 'Failed to get profile record')\n return null // No need to propagate\n })\n\n if (profile) {\n const { avatar, displayName } = profile\n\n account.name ||= displayName\n account.picture ||= avatar\n ? this.imageUrlBuilder.build('avatar', did, avatar.ref.toString())\n : undefined\n }\n }\n\n return account\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oauth-store.js","sourceRoot":"","sources":["../../src/account-manager/oauth-store.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport { Client, createOp as createPlcOp } from '@did-plc/lib'\nimport { Selectable } from 'kysely'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport {\n HandleString,\n asAtIdentifierString,\n getBlobCidString,\n isDidString,\n isHandleString,\n} from '@atproto/lex'\nimport {\n Account,\n AccountStore,\n AuthenticateAccountData,\n AuthorizedClientData,\n AuthorizedClients,\n ClientId,\n Code,\n DeviceAccount,\n DeviceData,\n DeviceId,\n DeviceStore,\n FoundRequestResult,\n HandleUnavailableError,\n InvalidInviteCodeError,\n InvalidRequestError,\n LexiconData,\n LexiconStore,\n NewTokenData,\n RefreshToken,\n RequestData,\n RequestId,\n RequestStore,\n ResetPasswordConfirmInput,\n ResetPasswordRequestInput,\n SignUpData,\n Sub,\n TokenData,\n TokenId,\n TokenInfo,\n TokenStore,\n UpdateRequestData,\n} from '@atproto/oauth-provider'\nimport {\n AuthRequiredError as XrpcAuthRequiredError,\n InvalidRequestError as XrpcInvalidRequestError,\n} from '@atproto/xrpc-server'\nimport { ActorStore } from '../actor-store/actor-store'\nimport { BackgroundQueue } from '../background'\nimport { fromDateISO } from '../db'\nimport { ImageUrlBuilder } from '../image/image-url-builder'\nimport { dbLogger } from '../logger'\nimport { ServerMailer } from '../mailer'\nimport { Sequencer, syncEvtDataFromCommit } from '../sequencer'\nimport { AccountManager } from './account-manager'\nimport * as schemas from './db/schema'\nimport * as accountHelper from './helpers/account'\nimport { AccountStatus } from './helpers/account'\nimport * as accountDeviceHelper from './helpers/account-device'\nimport * as authRequestHelper from './helpers/authorization-request'\nimport * as authorizedClientHelper from './helpers/authorized-client'\nimport * as deviceHelper from './helpers/device'\nimport * as lexiconHelper from './helpers/lexicon'\nimport * as tokenHelper from './helpers/token'\nimport * as usedRefreshTokenHelper from './helpers/used-refresh-token'\n\n/**\n * This class' purpose is to implement the interface needed by the OAuthProvider\n * to interact with the account database (through the {@link AccountManager}).\n *\n * @note The use of this class assumes that there is no entryway.\n */\nexport class OAuthStore\n implements AccountStore, RequestStore, DeviceStore, LexiconStore, TokenStore\n{\n constructor(\n private readonly accountManager: AccountManager,\n private readonly actorStore: ActorStore,\n private readonly imageUrlBuilder: ImageUrlBuilder,\n private readonly backgroundQueue: BackgroundQueue,\n private readonly mailer: ServerMailer,\n private readonly sequencer: Sequencer,\n private readonly plcClient: Client,\n private readonly plcRotationKey: Keypair,\n private readonly publicUrl: string,\n private readonly recoveryDidKey: string | null,\n ) {}\n\n private get db() {\n const { db } = this.accountManager\n if (db.destroyed) throw new Error('Database connection is closed')\n return db\n }\n\n private get serviceDid() {\n return this.accountManager.serviceDid\n }\n\n private async verifyEmailAvailability(email: string): Promise<void> {\n // @NOTE Email validity & disposability check performed by the OAuthProvider\n\n const account = await this.accountManager.getAccountByEmail(email, {\n includeDeactivated: true,\n includeTakenDown: true,\n })\n\n if (account) {\n throw new InvalidRequestError(`Email already taken`)\n }\n }\n\n private async verifyInviteCode(code: string) {\n try {\n await this.accountManager.ensureInviteIsAvailable(code)\n } catch (err) {\n const message =\n err instanceof XrpcInvalidRequestError ? err.message : undefined\n throw new InvalidInviteCodeError(message, err)\n }\n }\n\n // AccountStore\n\n async createAccount({\n locale: _locale,\n inviteCode,\n handle,\n email,\n password,\n }: SignUpData): Promise<Account> {\n // @TODO Send an account creation confirmation email (+verification link) to the user (in their locale)\n // @NOTE Password strength & length already enforced by the OAuthProvider\n\n assert(isHandleString(handle), 'Handle must be a valid HandleString')\n\n await Promise.all([\n this.verifyEmailAvailability(email),\n this.verifyHandleAvailability(handle),\n !inviteCode || this.verifyInviteCode(inviteCode),\n ])\n\n // @TODO The code bellow should probably be refactored to be common with the\n // code of the `com.atproto.server.createAccount` XRPC endpoint.\n\n const signingKey = await Secp256k1Keypair.create({ exportable: true })\n const signingKeyDid = signingKey.did()\n\n const plcCreate = await createPlcOp({\n signingKey: signingKeyDid,\n rotationKeys: this.recoveryDidKey\n ? [this.recoveryDidKey, this.plcRotationKey.did()]\n : [this.plcRotationKey.did()],\n handle,\n pds: this.publicUrl,\n signer: this.plcRotationKey,\n })\n\n const { did, op } = plcCreate\n assert(isDidString(did), 'Generated DID is not a valid DidString')\n\n try {\n await this.actorStore.create(did, signingKey)\n try {\n const commit = await this.actorStore.transact(did, (actorTxn) =>\n actorTxn.repo.createRepo([]),\n )\n\n await this.plcClient.sendOperation(did, op)\n\n await this.accountManager.createAccount({\n did,\n handle,\n email,\n password,\n inviteCode,\n repoCid: commit.cid,\n repoRev: commit.rev,\n })\n try {\n await this.sequencer.sequenceIdentityEvt(did, handle)\n await this.sequencer.sequenceAccountEvt(did, AccountStatus.Active)\n await this.sequencer.sequenceCommit(did, commit)\n await this.sequencer.sequenceSyncEvt(\n did,\n syncEvtDataFromCommit(commit),\n )\n await this.accountManager.updateRepoRoot(did, commit.cid, commit.rev)\n await this.actorStore.clearReservedKeypair(signingKeyDid, did)\n\n const account = await this.accountManager.getAccount(did)\n if (!account) throw new Error('Account not found')\n\n return await this.buildAccount(account)\n } catch (err) {\n this.accountManager.deleteAccount(did)\n throw err\n }\n } catch (err) {\n await this.actorStore.destroy(did)\n throw err\n }\n } catch (err) {\n // XrpcError => OAuthError\n if (err instanceof XrpcInvalidRequestError) {\n throw new InvalidRequestError(err.message, err)\n }\n throw err\n }\n }\n\n async authenticateAccount({\n locale: _locale,\n username: identifier,\n password,\n // Not supported by the PDS (yet?)\n emailOtp = undefined,\n }: AuthenticateAccountData): Promise<Account> {\n // @TODO (?) Send an email to the user to notify them of the login attempt\n try {\n // Should never happen\n if (emailOtp != null) {\n throw new Error('Email OTP is not supported')\n }\n\n const { user, appPassword, isSoftDeleted } =\n await this.accountManager.login({ identifier, password })\n\n if (isSoftDeleted) {\n throw new InvalidRequestError('Account was taken down')\n }\n\n if (appPassword) {\n throw new InvalidRequestError('App passwords are not allowed')\n }\n\n return this.buildAccount(user)\n } catch (err) {\n if (err instanceof XrpcAuthRequiredError) {\n throw new InvalidRequestError(err.message, err)\n }\n throw err\n }\n }\n\n async setAuthorizedClient(\n sub: Sub,\n clientId: ClientId,\n data: AuthorizedClientData,\n ): Promise<void> {\n await authorizedClientHelper.upsert(this.db, sub, clientId, data)\n }\n\n async getAccount(sub: Sub): Promise<{\n account: Account\n authorizedClients: AuthorizedClients\n }> {\n const accountRow = await accountHelper.getAccount(\n this.db,\n // @TODO @atproto/oauth-provider should strongly type `Sub` as `DidString`\n asAtIdentifierString(sub),\n { includeDeactivated: true },\n )\n\n assert(accountRow, 'Account not found')\n\n const account = await this.buildAccount(accountRow)\n const authorizedClients = await authorizedClientHelper.getAuthorizedClients(\n this.db,\n sub,\n )\n\n return { account, authorizedClients }\n }\n\n async upsertDeviceAccount(deviceId: DeviceId, sub: string): Promise<void> {\n await this.db.executeWithRetry(\n accountDeviceHelper.upsertQB(this.db, deviceId, sub),\n )\n }\n\n async getDeviceAccount(\n deviceId: DeviceId,\n sub: string,\n ): Promise<DeviceAccount | null> {\n const row = await accountDeviceHelper\n .selectQB(this.db, { deviceId, sub })\n .executeTakeFirst()\n\n if (!row) return null\n\n return {\n deviceId,\n deviceData: deviceHelper.rowToDeviceData(row),\n account: await this.buildAccount(row),\n authorizedClients: await authorizedClientHelper.getAuthorizedClients(\n this.db,\n sub,\n ),\n createdAt: fromDateISO(row.adCreatedAt),\n updatedAt: fromDateISO(row.adUpdatedAt),\n }\n }\n\n async removeDeviceAccount(deviceId: DeviceId, sub: Sub): Promise<void> {\n await this.db.executeWithRetry(\n accountDeviceHelper.removeQB(this.db, deviceId, sub),\n )\n }\n\n async listDeviceAccounts(\n filter: { sub: Sub } | { deviceId: DeviceId },\n ): Promise<DeviceAccount[]> {\n const rows = await accountDeviceHelper.selectQB(this.db, filter).execute()\n\n const uniqueDids = [...new Set(rows.map((row) => row.did))]\n\n // Enrich all distinct account with their profile data\n const accounts = new Map(\n await Promise.all(\n Array.from(uniqueDids, async (did): Promise<[Sub, Account]> => {\n const row = rows.find((r) => r.did === did)!\n return [did, await this.buildAccount(row)]\n }),\n ),\n )\n\n const authorizedClientsMap =\n await authorizedClientHelper.getAuthorizedClientsMulti(\n this.db,\n uniqueDids,\n )\n\n return rows.map((row) => ({\n deviceId: row.deviceId,\n deviceData: deviceHelper.rowToDeviceData(row),\n account: accounts.get(row.did)!,\n authorizedClients: authorizedClientsMap.get(row.did)!,\n createdAt: fromDateISO(row.adCreatedAt),\n updatedAt: fromDateISO(row.adUpdatedAt),\n }))\n }\n\n async resetPasswordRequest({\n locale: _locale,\n email,\n }: ResetPasswordRequestInput): Promise<Account | null> {\n const account = await this.accountManager.getAccountByEmail(email, {\n includeDeactivated: true,\n includeTakenDown: true,\n })\n\n if (!account?.email || !account?.handle) return null\n\n const { handle } = account\n const token = await this.accountManager.createEmailToken(\n account.did,\n 'reset_password',\n )\n\n // @TODO Use the locale to send the email in the right language\n await this.mailer.sendResetPassword(\n { handle, token },\n { to: account.email },\n )\n\n return this.buildAccount(account)\n }\n\n async resetPasswordConfirm(\n data: ResetPasswordConfirmInput,\n ): Promise<Account | null> {\n try {\n const did = await this.accountManager.resetPassword(data)\n const account = await this.accountManager.getAccount(did, {\n includeDeactivated: true,\n includeTakenDown: true,\n })\n\n return account ? this.buildAccount(account) : null\n } catch (err) {\n if (err instanceof XrpcInvalidRequestError) {\n return null\n }\n\n throw err\n }\n }\n\n async verifyHandleAvailability(handle: HandleString): Promise<void> {\n // @NOTE Handle validity & normalization already enforced by the OAuthProvider\n try {\n const normalized =\n await this.accountManager.normalizeAndValidateHandle(handle)\n\n // Should never happen (OAuthProvider should have already validated the\n // handle) This check is just a safeguard against future normalization\n // changes.\n if (normalized !== handle) {\n throw new HandleUnavailableError('syntax', 'Invalid handle')\n }\n\n const account = await this.accountManager.getAccount(normalized, {\n includeDeactivated: true,\n includeTakenDown: true,\n })\n\n if (account) {\n throw new HandleUnavailableError('taken')\n }\n } catch (err) {\n if (err instanceof XrpcInvalidRequestError) {\n throw err.customErrorName === 'HandleNotAvailable'\n ? new HandleUnavailableError('taken', err.message)\n : new HandleUnavailableError('syntax', err.message)\n }\n\n throw err\n }\n }\n\n // RequestStore\n\n async createRequest(id: RequestId, data: RequestData): Promise<void> {\n await this.db.executeWithRetry(\n authRequestHelper.createQB(this.db, id, data),\n )\n }\n\n async readRequest(id: RequestId): Promise<RequestData | null> {\n try {\n const row = await authRequestHelper.readQB(this.db, id).executeTakeFirst()\n if (!row) return null\n return authRequestHelper.rowToRequestData(row)\n } finally {\n // Take the opportunity to clean up expired requests. Do this after we got\n // the current (potentially expired) request data to allow the provider to\n // handle expired requests.\n this.backgroundQueue.add(async () => {\n await this.db.executeWithRetry(\n authRequestHelper.removeOldExpiredQB(this.db),\n )\n })\n }\n }\n\n async updateRequest(id: RequestId, data: UpdateRequestData): Promise<void> {\n await this.db.executeWithRetry(\n authRequestHelper.updateQB(this.db, id, data),\n )\n }\n\n async deleteRequest(id: RequestId): Promise<void> {\n await this.db.executeWithRetry(authRequestHelper.removeByIdQB(this.db, id))\n }\n\n async consumeRequestCode(code: Code): Promise<FoundRequestResult | null> {\n const row = await authRequestHelper\n .consumeByCodeQB(this.db, code)\n .executeTakeFirst()\n return row ? authRequestHelper.rowToFoundRequestResult(row) : null\n }\n\n // DeviceStore\n\n async createDevice(deviceId: DeviceId, data: DeviceData): Promise<void> {\n await this.db.executeWithRetry(\n deviceHelper.createQB(this.db, deviceId, data),\n )\n }\n\n async readDevice(deviceId: DeviceId): Promise<null | DeviceData> {\n const row = await deviceHelper.readQB(this.db, deviceId).executeTakeFirst()\n return row ? deviceHelper.rowToDeviceData(row) : null\n }\n\n async updateDevice(\n deviceId: DeviceId,\n data: Partial<DeviceData>,\n ): Promise<void> {\n await this.db.executeWithRetry(\n deviceHelper.updateQB(this.db, deviceId, data),\n )\n }\n\n async deleteDevice(deviceId: DeviceId): Promise<void> {\n // Will cascade to device_account (device_account_device_id_fk)\n await this.db.executeWithRetry(deviceHelper.removeQB(this.db, deviceId))\n }\n\n // LexiconStore\n\n async findLexicon(nsid: string): Promise<LexiconData | null> {\n return lexiconHelper.find(this.db, nsid)\n }\n\n async storeLexicon(nsid: string, data: LexiconData): Promise<void> {\n return lexiconHelper.upsert(this.db, nsid, data)\n }\n\n async deleteLexicon(nsid: string): Promise<void> {\n return lexiconHelper.remove(this.db, nsid)\n }\n\n // TokenStore\n\n async createToken(\n id: TokenId,\n data: TokenData,\n refreshToken?: RefreshToken,\n ): Promise<void> {\n await this.db.transaction(async (dbTxn) => {\n if (refreshToken) {\n const { count } = await usedRefreshTokenHelper\n .countQB(dbTxn, refreshToken)\n .executeTakeFirstOrThrow()\n\n if (count > 0) {\n throw new Error('Refresh token already in use')\n }\n }\n\n return tokenHelper.createQB(dbTxn, id, data, refreshToken).execute()\n })\n }\n\n async listAccountTokens(sub: Sub): Promise<TokenInfo[]> {\n const rows = await tokenHelper.findByQB(this.db, { did: sub }).execute()\n return Promise.all(rows.map((row) => this.toTokenInfo(row)))\n }\n\n async readToken(tokenId: TokenId): Promise<TokenInfo | null> {\n const row = await tokenHelper\n .findByQB(this.db, { tokenId })\n .executeTakeFirst()\n return row ? this.toTokenInfo(row) : null\n }\n\n async deleteToken(tokenId: TokenId): Promise<void> {\n // Will cascade to used_refresh_token (used_refresh_token_fk)\n await this.db.executeWithRetry(tokenHelper.removeQB(this.db, tokenId))\n }\n\n async rotateToken(\n tokenId: TokenId,\n newTokenId: TokenId,\n newRefreshToken: RefreshToken,\n newData: NewTokenData,\n ): Promise<void> {\n const err = await this.db.transaction(async (dbTxn) => {\n const { id, currentRefreshToken } = await tokenHelper\n .forRotateQB(dbTxn, tokenId)\n .executeTakeFirstOrThrow()\n\n if (currentRefreshToken) {\n await usedRefreshTokenHelper\n .insertQB(dbTxn, id, currentRefreshToken)\n .execute()\n }\n\n const { count } = await usedRefreshTokenHelper\n .countQB(dbTxn, newRefreshToken)\n .executeTakeFirstOrThrow()\n\n if (count > 0) {\n // Do NOT throw (we don't want the transaction to be rolled back)\n return new Error('New refresh token already in use')\n }\n\n await tokenHelper\n .rotateQB(dbTxn, id, newTokenId, newRefreshToken, newData)\n .execute()\n })\n\n if (err) throw err\n }\n\n async findTokenByRefreshToken(\n refreshToken: RefreshToken,\n ): Promise<TokenInfo | null> {\n const used = await usedRefreshTokenHelper\n .findByTokenQB(this.db, refreshToken)\n .executeTakeFirst()\n\n const search = used\n ? { id: used.tokenId }\n : { currentRefreshToken: refreshToken }\n\n const row = await tokenHelper.findByQB(this.db, search).executeTakeFirst()\n return row ? this.toTokenInfo(row) : null\n }\n\n async findTokenByCode(code: Code): Promise<TokenInfo | null> {\n const row = await tokenHelper.findByQB(this.db, { code }).executeTakeFirst()\n return row ? this.toTokenInfo(row) : null\n }\n\n private async toTokenInfo(\n row: accountHelper.ActorAccount & Selectable<schemas.Token>,\n ): Promise<TokenInfo> {\n return {\n id: row.tokenId,\n data: tokenHelper.toTokenData(row),\n account: await this.buildAccount(row),\n currentRefreshToken: row.currentRefreshToken,\n }\n }\n\n private async buildAccount(\n row: accountHelper.ActorAccount,\n ): Promise<Account> {\n const account: Account = {\n sub: row.did,\n aud: this.serviceDid,\n email: row.email || undefined,\n email_verified: row.email ? row.emailConfirmedAt != null : undefined,\n preferred_username: row.handle || undefined,\n }\n\n if (!account.name || !account.picture) {\n const did = account.sub\n\n const profile = await this.actorStore\n .read(did, async (store) => {\n return store.record.getProfileRecord()\n })\n .catch((err) => {\n dbLogger.error({ err }, 'Failed to get profile record')\n return null // No need to propagate\n })\n\n if (profile) {\n const { avatar, displayName } = profile\n\n account.name ||= displayName\n account.picture ||= avatar\n ? this.imageUrlBuilder.build('avatar', did, getBlobCidString(avatar))\n : undefined\n }\n }\n\n return account\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import stream from 'node:stream';
|
|
2
|
-
import { BlobRef, Cid,
|
|
2
|
+
import { BlobRef, Cid, TypedBlobRef } from '@atproto/lex-data';
|
|
3
3
|
import { BlobStore } from '@atproto/repo';
|
|
4
4
|
import { AtUri } from '@atproto/syntax';
|
|
5
5
|
import { BackgroundQueue } from '../../background';
|
|
@@ -18,15 +18,15 @@ export declare class BlobTransactor extends BlobReader {
|
|
|
18
18
|
blobstore: BlobStore;
|
|
19
19
|
backgroundQueue: BackgroundQueue;
|
|
20
20
|
constructor(db: ActorDb, blobstore: BlobStore, backgroundQueue: BackgroundQueue);
|
|
21
|
-
insertBlobs(recordUri: string, blobs: Iterable<BlobRef
|
|
21
|
+
insertBlobs(recordUri: string, blobs: Iterable<BlobRef>): Promise<void>;
|
|
22
22
|
uploadBlobAndGetMetadata(userSuggestedMime: string, blobStream: stream.Readable): Promise<BlobMetadata>;
|
|
23
|
-
trackUntetheredBlob(metadata: BlobMetadata): Promise<
|
|
23
|
+
trackUntetheredBlob(metadata: BlobMetadata): Promise<TypedBlobRef>;
|
|
24
24
|
processWriteBlobs(rev: string, writes: PreparedWrite[]): Promise<void>;
|
|
25
25
|
updateBlobTakedownStatus(cid: Cid, takedown: com.atproto.admin.defs.StatusAttr): Promise<void>;
|
|
26
26
|
deleteDereferencedBlobs(writes: PreparedWrite[], skipBlobStore?: boolean): Promise<void>;
|
|
27
|
-
verifyBlobAndMakePermanent(blob:
|
|
28
|
-
insertBlobMetadata(blob:
|
|
29
|
-
associateBlob(blob:
|
|
27
|
+
verifyBlobAndMakePermanent(blob: TypedBlobRef, signal?: AbortSignal): Promise<void>;
|
|
28
|
+
insertBlobMetadata(blob: TypedBlobRef): Promise<void>;
|
|
29
|
+
associateBlob(blob: TypedBlobRef, recordUri: AtUri): Promise<void>;
|
|
30
30
|
}
|
|
31
31
|
export declare class CidNotFound extends Error {
|
|
32
32
|
cid: Cid;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactor.d.ts","sourceRoot":"","sources":["../../../src/actor-store/blob/transactor.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAA;AAIhC,OAAO,EACL,OAAO,EACP,GAAG,EACH,
|
|
1
|
+
{"version":3,"file":"transactor.d.ts","sourceRoot":"","sources":["../../../src/actor-store/blob/transactor.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAA;AAIhC,OAAO,EACL,OAAO,EACP,GAAG,EACH,YAAY,EAIb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAqB,SAAS,EAAiB,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,KAAK,EAAyB,MAAM,iBAAiB,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAqB,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;IACR,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,cAAe,SAAQ,UAAU;IAEnC,EAAE,EAAE,OAAO;IACX,SAAS,EAAE,SAAS;IACpB,eAAe,EAAE,eAAe;gBAFhC,EAAE,EAAE,OAAO,EACX,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe;IAKnC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC;IAevD,wBAAwB,CAC5B,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,CAAC,QAAQ,GAC1B,OAAO,CAAC,YAAY,CAAC;IAgBlB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAsClE,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE;IAuCtD,wBAAwB,CAC5B,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU;IAgCvC,uBAAuB,CAC3B,MAAM,EAAE,aAAa,EAAE,EACvB,aAAa,CAAC,EAAE,OAAO;IAyDnB,0BAA0B,CAC9B,IAAI,EAAE,YAAY,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC;IAiDV,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;CAUzE;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,GAAG,EAAE,GAAG,CAAA;gBACI,GAAG,EAAE,GAAG;CAIrB"}
|
|
@@ -39,7 +39,7 @@ class BlobTransactor extends reader_1.BlobReader {
|
|
|
39
39
|
async insertBlobs(recordUri, blobs) {
|
|
40
40
|
const values = Array.from(blobs, (blob) => ({
|
|
41
41
|
recordUri,
|
|
42
|
-
blobCid:
|
|
42
|
+
blobCid: (0, lex_data_1.getBlobCidString)(blob),
|
|
43
43
|
}));
|
|
44
44
|
if (values.length) {
|
|
45
45
|
await this.db.db
|
|
@@ -310,7 +310,4 @@ function isUpdate(write) {
|
|
|
310
310
|
function isDelete(write) {
|
|
311
311
|
return write.action === repo_1.WriteOpAction.Delete;
|
|
312
312
|
}
|
|
313
|
-
function blobCid(blob) {
|
|
314
|
-
return '$type' in blob ? blob.ref : (0, lex_data_1.parseCid)(blob.cid);
|
|
315
|
-
}
|
|
316
313
|
//# sourceMappingURL=transactor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactor.js","sourceRoot":"","sources":["../../../src/actor-store/blob/transactor.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'node:crypto'\nimport stream from 'node:stream'\nimport { fromStream as fileTypeFromStream } from 'file-type'\nimport PQueue from 'p-queue'\nimport { SECOND, cloneStream, streamSize } from '@atproto/common'\nimport {\n BlobRef,\n Cid,\n LegacyBlobRef,\n cidForRawHash,\n parseCid,\n} from '@atproto/lex-data'\nimport { BlobNotFoundError, BlobStore, WriteOpAction } from '@atproto/repo'\nimport { AtUri, currentDatetimeString } from '@atproto/syntax'\nimport { InvalidRequestError } from '@atproto/xrpc-server'\nimport { BackgroundQueue } from '../../background'\nimport { com } from '../../lexicons/index.js'\nimport { blobStoreLogger as log } from '../../logger'\nimport { PreparedWrite } from '../../repo/types'\nimport { ActorDb, Blob as BlobTable } from '../db'\nimport { BlobReader } from './reader'\n\nexport type BlobMetadata = {\n tempKey: string\n size: number\n cid: Cid\n mimeType: string\n}\n\nexport class BlobTransactor extends BlobReader {\n constructor(\n public db: ActorDb,\n public blobstore: BlobStore,\n public backgroundQueue: BackgroundQueue,\n ) {\n super(db, blobstore)\n }\n\n async insertBlobs(\n recordUri: string,\n blobs: Iterable<BlobRef | LegacyBlobRef>,\n ) {\n const values = Array.from(blobs, (blob) => ({\n recordUri,\n blobCid: blobCid(blob).toString(),\n }))\n\n if (values.length) {\n await this.db.db\n .insertInto('record_blob')\n .values(values)\n .onConflict((oc) => oc.doNothing())\n .execute()\n }\n }\n\n async uploadBlobAndGetMetadata(\n userSuggestedMime: string,\n blobStream: stream.Readable,\n ): Promise<BlobMetadata> {\n const [tempKey, size, sha256, sniffedMime] = await Promise.all([\n this.blobstore.putTemp(cloneStream(blobStream)),\n streamSize(cloneStream(blobStream)),\n sha256Stream(cloneStream(blobStream)),\n mimeTypeFromStream(cloneStream(blobStream)),\n ])\n\n return {\n tempKey,\n size,\n cid: cidForRawHash(sha256),\n mimeType: sniffedMime || userSuggestedMime,\n }\n }\n\n async trackUntetheredBlob(metadata: BlobMetadata): Promise<BlobRef> {\n const { tempKey, size, cid, mimeType } = metadata\n const cidStr = cid.toString()\n\n const found = await this.db.db\n .selectFrom('blob')\n .selectAll()\n .where('cid', '=', cidStr)\n .executeTakeFirst()\n if (found?.takedownRef) {\n throw new InvalidRequestError('Blob has been takendown, cannot re-upload')\n }\n\n await this.db.db\n .insertInto('blob')\n .values({\n cid: cidStr,\n mimeType,\n size,\n tempKey,\n createdAt: currentDatetimeString(),\n })\n .onConflict((oc) =>\n oc\n .column('cid')\n .doUpdateSet({ tempKey })\n .where('blob.tempKey', 'is not', null),\n )\n .execute()\n\n return {\n $type: 'blob',\n ref: cid,\n mimeType,\n size,\n }\n }\n\n async processWriteBlobs(rev: string, writes: PreparedWrite[]) {\n await this.deleteDereferencedBlobs(writes)\n\n const ac = new AbortController()\n\n // Limit the number of parallel requests made to the BlobStore by using a\n // a queue with concurrency management.\n type Task = () => Promise<void>\n const tasks: Task[] = []\n\n for (const write of writes) {\n if (isCreate(write) || isUpdate(write)) {\n for (const blob of write.blobs) {\n tasks.push(async () => {\n if (ac.signal.aborted) return\n await this.associateBlob(blob, write.uri)\n await this.verifyBlobAndMakePermanent(blob, ac.signal)\n })\n }\n }\n }\n\n try {\n const queue = new PQueue({\n concurrency: 20,\n // The blob store should already limit the time of every operation. We\n // add a timeout here as an extra precaution.\n timeout: 60 * SECOND,\n throwOnTimeout: true,\n })\n\n // Will reject as soon as any task fails, causing the \"finally\" block\n // below to run, aborting every other pending tasks.\n await queue.addAll(tasks)\n } finally {\n ac.abort()\n }\n }\n\n async updateBlobTakedownStatus(\n cid: Cid,\n takedown: com.atproto.admin.defs.StatusAttr,\n ) {\n const takedownRef = takedown.applied\n ? takedown.ref ?? currentDatetimeString()\n : null\n await this.db.db\n .updateTable('blob')\n .set({ takedownRef })\n .where('cid', '=', cid.toString())\n .executeTakeFirst()\n\n try {\n // @NOTE find a way to not perform i/o operations during the transaction\n // (typically by using a state in the \"blob\" table, and another process to\n // handle the actual i/o)\n if (takedown.applied) {\n await this.blobstore.quarantine(cid)\n } else {\n await this.blobstore.unquarantine(cid)\n }\n } catch (err) {\n if (!(err instanceof BlobNotFoundError)) {\n log.error(\n { err, cid: cid.toString() },\n 'could not update blob takedown status',\n )\n\n throw err\n }\n }\n }\n\n async deleteDereferencedBlobs(\n writes: PreparedWrite[],\n skipBlobStore?: boolean,\n ) {\n const deletes = writes.filter(isDelete)\n const updates = writes.filter(isUpdate)\n const uris = [...deletes, ...updates].map((w) => w.uri.toString())\n if (uris.length === 0) return\n\n const deletedRepoBlobs = await this.db.db\n .deleteFrom('record_blob')\n .where('recordUri', 'in', uris)\n .returning('blobCid')\n .execute()\n if (deletedRepoBlobs.length === 0) return\n\n const deletedRepoBlobCids = deletedRepoBlobs.map((row) => row.blobCid)\n const duplicateCids = await this.db.db\n .selectFrom('record_blob')\n .where('blobCid', 'in', deletedRepoBlobCids)\n .select('blobCid')\n .execute()\n\n const newBlobCids = writes\n .filter((w) => isUpdate(w) || isCreate(w))\n .flatMap((w) => w.blobs.map((b) => b.ref.toString()))\n\n const cidsToKeep = [\n ...newBlobCids,\n ...duplicateCids.map((row) => row.blobCid),\n ]\n\n const cidsToDelete = deletedRepoBlobCids.filter(\n (cid) => !cidsToKeep.includes(cid),\n )\n if (cidsToDelete.length === 0) return\n\n await this.db.db\n .deleteFrom('blob')\n .where('cid', 'in', cidsToDelete)\n .execute()\n\n if (!skipBlobStore) {\n this.db.onCommit(() => {\n this.backgroundQueue.add(async () => {\n try {\n const cids = cidsToDelete.map((cid) => parseCid(cid))\n await this.blobstore.deleteMany(cids)\n } catch (err) {\n log.error(\n { err, cids: cidsToDelete },\n 'could not delete blobs from blobstore',\n )\n }\n })\n })\n }\n }\n\n async verifyBlobAndMakePermanent(\n blob: BlobRef,\n signal?: AbortSignal,\n ): Promise<void> {\n const found = await this.db.db\n .selectFrom('blob')\n .select(['tempKey', 'size', 'mimeType'])\n .where('cid', '=', blob.ref.toString())\n .where('takedownRef', 'is', null)\n .executeTakeFirst()\n\n signal?.throwIfAborted()\n\n if (!found) {\n throw new InvalidRequestError(\n `Could not find blob: ${blob.ref.toString()}`,\n 'BlobNotFound',\n )\n }\n\n if (found.tempKey) {\n verifyBlob(blob, found)\n\n // @NOTE it is less than ideal to perform async (i/o) operations during a\n // transaction. Especially since there have been instances of the actor-db\n // being locked, requiring to kick the processes.\n\n // The better solution would be to update the blob state in the database\n // (e.g. \"makeItPermanent\") and to process those updates outside of the\n // transaction.\n\n await this.blobstore\n .makePermanent(found.tempKey, blob.ref)\n .catch((err) => {\n log.error(\n { err, cid: blob.ref.toString() },\n 'could not make blob permanent',\n )\n\n throw err\n })\n\n signal?.throwIfAborted()\n\n await this.db.db\n .updateTable('blob')\n .set({ tempKey: null })\n .where('tempKey', '=', found.tempKey)\n .execute()\n }\n }\n\n async insertBlobMetadata(blob: BlobRef): Promise<void> {\n await this.db.db\n .insertInto('blob')\n .values({\n cid: blob.ref.toString(),\n mimeType: blob.mimeType,\n size: blob.size,\n createdAt: currentDatetimeString(),\n })\n .onConflict((oc) => oc.doNothing())\n .execute()\n }\n\n async associateBlob(blob: BlobRef, recordUri: AtUri): Promise<void> {\n await this.db.db\n .insertInto('record_blob')\n .values({\n blobCid: blob.ref.toString(),\n recordUri: recordUri.toString(),\n })\n .onConflict((oc) => oc.doNothing())\n .execute()\n }\n}\n\nexport class CidNotFound extends Error {\n cid: Cid\n constructor(cid: Cid) {\n super(`cid not found: ${cid.toString()}`)\n this.cid = cid\n }\n}\n\nasync function sha256Stream(toHash: stream.Readable): Promise<Uint8Array> {\n const hash = crypto.createHash('sha256')\n try {\n for await (const chunk of toHash) {\n hash.write(chunk)\n }\n } catch (err) {\n hash.end()\n throw err\n }\n hash.end()\n return hash.read()\n}\n\nasync function mimeTypeFromStream(\n blobStream: stream.Readable,\n): Promise<string | undefined> {\n const fileType = await fileTypeFromStream(blobStream)\n blobStream.destroy()\n return fileType?.mime\n}\n\n/**\n * Ensures that the blob referenced in the record matches the stored blob.\n */\nfunction verifyBlob(\n blob: BlobRef,\n found: Pick<BlobTable, 'size' | 'mimeType'>,\n) {\n if (blob.mimeType !== found.mimeType) {\n throw new InvalidRequestError(\n `Referenced Mimetype does not match stored blob. Expected: ${found.mimeType}, Got: ${blob.mimeType}`,\n 'InvalidMimeType',\n )\n }\n\n if (blob.size !== found.size) {\n throw new InvalidRequestError(\n `Referenced Size does not match stored blob. Expected: ${found.size}, Got: ${blob.size}`,\n 'InvalidSize',\n )\n }\n}\n\nfunction isCreate(write: PreparedWrite) {\n return write.action === WriteOpAction.Create\n}\nfunction isUpdate(write: PreparedWrite) {\n return write.action === WriteOpAction.Update\n}\nfunction isDelete(write: PreparedWrite) {\n return write.action === WriteOpAction.Delete\n}\n\nfunction blobCid(blob: BlobRef | LegacyBlobRef): Cid {\n return '$type' in blob ? blob.ref : parseCid(blob.cid)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"transactor.js","sourceRoot":"","sources":["../../../src/actor-store/blob/transactor.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'node:crypto'\nimport stream from 'node:stream'\nimport { fromStream as fileTypeFromStream } from 'file-type'\nimport PQueue from 'p-queue'\nimport { SECOND, cloneStream, streamSize } from '@atproto/common'\nimport {\n BlobRef,\n Cid,\n TypedBlobRef,\n cidForRawHash,\n getBlobCidString,\n parseCid,\n} from '@atproto/lex-data'\nimport { BlobNotFoundError, BlobStore, WriteOpAction } from '@atproto/repo'\nimport { AtUri, currentDatetimeString } from '@atproto/syntax'\nimport { InvalidRequestError } from '@atproto/xrpc-server'\nimport { BackgroundQueue } from '../../background'\nimport { com } from '../../lexicons/index.js'\nimport { blobStoreLogger as log } from '../../logger'\nimport { PreparedWrite } from '../../repo/types'\nimport { ActorDb, Blob as BlobTable } from '../db'\nimport { BlobReader } from './reader'\n\nexport type BlobMetadata = {\n tempKey: string\n size: number\n cid: Cid\n mimeType: string\n}\n\nexport class BlobTransactor extends BlobReader {\n constructor(\n public db: ActorDb,\n public blobstore: BlobStore,\n public backgroundQueue: BackgroundQueue,\n ) {\n super(db, blobstore)\n }\n\n async insertBlobs(recordUri: string, blobs: Iterable<BlobRef>) {\n const values = Array.from(blobs, (blob) => ({\n recordUri,\n blobCid: getBlobCidString(blob),\n }))\n\n if (values.length) {\n await this.db.db\n .insertInto('record_blob')\n .values(values)\n .onConflict((oc) => oc.doNothing())\n .execute()\n }\n }\n\n async uploadBlobAndGetMetadata(\n userSuggestedMime: string,\n blobStream: stream.Readable,\n ): Promise<BlobMetadata> {\n const [tempKey, size, sha256, sniffedMime] = await Promise.all([\n this.blobstore.putTemp(cloneStream(blobStream)),\n streamSize(cloneStream(blobStream)),\n sha256Stream(cloneStream(blobStream)),\n mimeTypeFromStream(cloneStream(blobStream)),\n ])\n\n return {\n tempKey,\n size,\n cid: cidForRawHash(sha256),\n mimeType: sniffedMime || userSuggestedMime,\n }\n }\n\n async trackUntetheredBlob(metadata: BlobMetadata): Promise<TypedBlobRef> {\n const { tempKey, size, cid, mimeType } = metadata\n const cidStr = cid.toString()\n\n const found = await this.db.db\n .selectFrom('blob')\n .selectAll()\n .where('cid', '=', cidStr)\n .executeTakeFirst()\n if (found?.takedownRef) {\n throw new InvalidRequestError('Blob has been takendown, cannot re-upload')\n }\n\n await this.db.db\n .insertInto('blob')\n .values({\n cid: cidStr,\n mimeType,\n size,\n tempKey,\n createdAt: currentDatetimeString(),\n })\n .onConflict((oc) =>\n oc\n .column('cid')\n .doUpdateSet({ tempKey })\n .where('blob.tempKey', 'is not', null),\n )\n .execute()\n\n return {\n $type: 'blob',\n ref: cid,\n mimeType,\n size,\n }\n }\n\n async processWriteBlobs(rev: string, writes: PreparedWrite[]) {\n await this.deleteDereferencedBlobs(writes)\n\n const ac = new AbortController()\n\n // Limit the number of parallel requests made to the BlobStore by using a\n // a queue with concurrency management.\n type Task = () => Promise<void>\n const tasks: Task[] = []\n\n for (const write of writes) {\n if (isCreate(write) || isUpdate(write)) {\n for (const blob of write.blobs) {\n tasks.push(async () => {\n if (ac.signal.aborted) return\n await this.associateBlob(blob, write.uri)\n await this.verifyBlobAndMakePermanent(blob, ac.signal)\n })\n }\n }\n }\n\n try {\n const queue = new PQueue({\n concurrency: 20,\n // The blob store should already limit the time of every operation. We\n // add a timeout here as an extra precaution.\n timeout: 60 * SECOND,\n throwOnTimeout: true,\n })\n\n // Will reject as soon as any task fails, causing the \"finally\" block\n // below to run, aborting every other pending tasks.\n await queue.addAll(tasks)\n } finally {\n ac.abort()\n }\n }\n\n async updateBlobTakedownStatus(\n cid: Cid,\n takedown: com.atproto.admin.defs.StatusAttr,\n ) {\n const takedownRef = takedown.applied\n ? takedown.ref ?? currentDatetimeString()\n : null\n await this.db.db\n .updateTable('blob')\n .set({ takedownRef })\n .where('cid', '=', cid.toString())\n .executeTakeFirst()\n\n try {\n // @NOTE find a way to not perform i/o operations during the transaction\n // (typically by using a state in the \"blob\" table, and another process to\n // handle the actual i/o)\n if (takedown.applied) {\n await this.blobstore.quarantine(cid)\n } else {\n await this.blobstore.unquarantine(cid)\n }\n } catch (err) {\n if (!(err instanceof BlobNotFoundError)) {\n log.error(\n { err, cid: cid.toString() },\n 'could not update blob takedown status',\n )\n\n throw err\n }\n }\n }\n\n async deleteDereferencedBlobs(\n writes: PreparedWrite[],\n skipBlobStore?: boolean,\n ) {\n const deletes = writes.filter(isDelete)\n const updates = writes.filter(isUpdate)\n const uris = [...deletes, ...updates].map((w) => w.uri.toString())\n if (uris.length === 0) return\n\n const deletedRepoBlobs = await this.db.db\n .deleteFrom('record_blob')\n .where('recordUri', 'in', uris)\n .returning('blobCid')\n .execute()\n if (deletedRepoBlobs.length === 0) return\n\n const deletedRepoBlobCids = deletedRepoBlobs.map((row) => row.blobCid)\n const duplicateCids = await this.db.db\n .selectFrom('record_blob')\n .where('blobCid', 'in', deletedRepoBlobCids)\n .select('blobCid')\n .execute()\n\n const newBlobCids = writes\n .filter((w) => isUpdate(w) || isCreate(w))\n .flatMap((w) => w.blobs.map((b) => b.ref.toString()))\n\n const cidsToKeep = [\n ...newBlobCids,\n ...duplicateCids.map((row) => row.blobCid),\n ]\n\n const cidsToDelete = deletedRepoBlobCids.filter(\n (cid) => !cidsToKeep.includes(cid),\n )\n if (cidsToDelete.length === 0) return\n\n await this.db.db\n .deleteFrom('blob')\n .where('cid', 'in', cidsToDelete)\n .execute()\n\n if (!skipBlobStore) {\n this.db.onCommit(() => {\n this.backgroundQueue.add(async () => {\n try {\n const cids = cidsToDelete.map((cid) => parseCid(cid))\n await this.blobstore.deleteMany(cids)\n } catch (err) {\n log.error(\n { err, cids: cidsToDelete },\n 'could not delete blobs from blobstore',\n )\n }\n })\n })\n }\n }\n\n async verifyBlobAndMakePermanent(\n blob: TypedBlobRef,\n signal?: AbortSignal,\n ): Promise<void> {\n const found = await this.db.db\n .selectFrom('blob')\n .select(['tempKey', 'size', 'mimeType'])\n .where('cid', '=', blob.ref.toString())\n .where('takedownRef', 'is', null)\n .executeTakeFirst()\n\n signal?.throwIfAborted()\n\n if (!found) {\n throw new InvalidRequestError(\n `Could not find blob: ${blob.ref.toString()}`,\n 'BlobNotFound',\n )\n }\n\n if (found.tempKey) {\n verifyBlob(blob, found)\n\n // @NOTE it is less than ideal to perform async (i/o) operations during a\n // transaction. Especially since there have been instances of the actor-db\n // being locked, requiring to kick the processes.\n\n // The better solution would be to update the blob state in the database\n // (e.g. \"makeItPermanent\") and to process those updates outside of the\n // transaction.\n\n await this.blobstore\n .makePermanent(found.tempKey, blob.ref)\n .catch((err) => {\n log.error(\n { err, cid: blob.ref.toString() },\n 'could not make blob permanent',\n )\n\n throw err\n })\n\n signal?.throwIfAborted()\n\n await this.db.db\n .updateTable('blob')\n .set({ tempKey: null })\n .where('tempKey', '=', found.tempKey)\n .execute()\n }\n }\n\n async insertBlobMetadata(blob: TypedBlobRef): Promise<void> {\n await this.db.db\n .insertInto('blob')\n .values({\n cid: blob.ref.toString(),\n mimeType: blob.mimeType,\n size: blob.size,\n createdAt: currentDatetimeString(),\n })\n .onConflict((oc) => oc.doNothing())\n .execute()\n }\n\n async associateBlob(blob: TypedBlobRef, recordUri: AtUri): Promise<void> {\n await this.db.db\n .insertInto('record_blob')\n .values({\n blobCid: blob.ref.toString(),\n recordUri: recordUri.toString(),\n })\n .onConflict((oc) => oc.doNothing())\n .execute()\n }\n}\n\nexport class CidNotFound extends Error {\n cid: Cid\n constructor(cid: Cid) {\n super(`cid not found: ${cid.toString()}`)\n this.cid = cid\n }\n}\n\nasync function sha256Stream(toHash: stream.Readable): Promise<Uint8Array> {\n const hash = crypto.createHash('sha256')\n try {\n for await (const chunk of toHash) {\n hash.write(chunk)\n }\n } catch (err) {\n hash.end()\n throw err\n }\n hash.end()\n return hash.read()\n}\n\nasync function mimeTypeFromStream(\n blobStream: stream.Readable,\n): Promise<string | undefined> {\n const fileType = await fileTypeFromStream(blobStream)\n blobStream.destroy()\n return fileType?.mime\n}\n\n/**\n * Ensures that the blob referenced in the record matches the stored blob.\n */\nfunction verifyBlob(\n blob: TypedBlobRef,\n found: Pick<BlobTable, 'size' | 'mimeType'>,\n) {\n if (blob.mimeType !== found.mimeType) {\n throw new InvalidRequestError(\n `Referenced Mimetype does not match stored blob. Expected: ${found.mimeType}, Got: ${blob.mimeType}`,\n 'InvalidMimeType',\n )\n }\n\n if (blob.size !== found.size) {\n throw new InvalidRequestError(\n `Referenced Size does not match stored blob. Expected: ${found.size}, Got: ${blob.size}`,\n 'InvalidSize',\n )\n }\n}\n\nfunction isCreate(write: PreparedWrite) {\n return write.action === WriteOpAction.Create\n}\nfunction isUpdate(write: PreparedWrite) {\n return write.action === WriteOpAction.Update\n}\nfunction isDelete(write: PreparedWrite) {\n return write.action === WriteOpAction.Delete\n}\n"]}
|
|
@@ -63,7 +63,7 @@ function default_1(server, ctx) {
|
|
|
63
63
|
throw new xrpc_server_1.InvalidRequestError(`Could not parse record at '${write.collection}/${write.rkey}'`);
|
|
64
64
|
}
|
|
65
65
|
await store.record.indexRecord(uri, write.cid, parsedRecord, write.action, rev, now);
|
|
66
|
-
const recordBlobs = Array.from((0, lex_data_1.enumBlobRefs)(parsedRecord, { allowLegacy: true }));
|
|
66
|
+
const recordBlobs = Array.from((0, lex_data_1.enumBlobRefs)(parsedRecord, { allowLegacy: true, strict: false }));
|
|
67
67
|
await store.repo.blob.insertBlobs(uri.toString(), recordBlobs);
|
|
68
68
|
}
|
|
69
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importRepo.js","sourceRoot":"","sources":["../../../../../src/api/com/atproto/repo/importRepo.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"importRepo.js","sourceRoot":"","sources":["../../../../../src/api/com/atproto/repo/importRepo.ts"],"names":[],"mappings":"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","sourcesContent":["import { TID } from '@atproto/common'\nimport { LexMap, enumBlobRefs } from '@atproto/lex-data'\nimport {\n BlockMap,\n WriteOpAction,\n getAndParseRecord,\n readCarStream,\n verifyDiff,\n} from '@atproto/repo'\nimport { AtUri } from '@atproto/syntax'\nimport { InvalidRequestError, Server } from '@atproto/xrpc-server'\nimport { ACCESS_FULL } from '../../../../auth-scope'\nimport { AppContext } from '../../../../context'\nimport { com } from '../../../../lexicons/index.js'\n\nexport default function (server: Server, ctx: AppContext) {\n server.add(com.atproto.repo.importRepo, {\n opts: {\n blobLimit: ctx.cfg.service.maxImportSize,\n },\n auth: ctx.authVerifier.authorization({\n checkTakedown: true,\n scopes: ACCESS_FULL,\n authorize: (permissions) => {\n permissions.assertAccount({ attr: 'repo', action: 'manage' })\n },\n }),\n handler: async ({ input, auth }) => {\n if (!ctx.cfg.service.acceptingImports) {\n throw new InvalidRequestError('Service is not accepting repo imports')\n }\n\n const { did } = auth.credentials\n\n // @NOTE process as much as we can before the transaction, in particular\n // the reading of the body stream.\n const { roots, blocks } = await readCarStream(input.body)\n if (roots.length !== 1) {\n await blocks.dump()\n throw new InvalidRequestError('expected one root')\n }\n\n const blockMap = new BlockMap()\n for await (const block of blocks) {\n blockMap.set(block.cid, block.bytes)\n }\n\n await ctx.actorStore.transact(did, async (store) => {\n const now = new Date().toISOString()\n const rev = TID.nextStr()\n const did = store.repo.did\n\n const currRepo = await store.repo.maybeLoadRepo()\n const diff = await verifyDiff(\n currRepo,\n blockMap,\n roots[0],\n undefined,\n undefined,\n { ensureLeaves: false },\n )\n diff.commit.rev = rev\n await store.repo.storage.applyCommit(diff.commit, currRepo === null)\n\n // @NOTE There is no point in performing the following concurrently\n // since better-sqlite3 is synchronous.\n for (const write of diff.writes) {\n const uri = AtUri.make(did, write.collection, write.rkey)\n if (write.action === WriteOpAction.Delete) {\n await store.record.deleteRecord(uri)\n } else {\n let parsedRecord: LexMap\n try {\n // @NOTE getAndParseRecord returns a promise for historical\n // reasons but it's internal processing is actually synchronous.\n const parsed = await getAndParseRecord(blockMap, write.cid)\n parsedRecord = parsed.record\n } catch {\n throw new InvalidRequestError(\n `Could not parse record at '${write.collection}/${write.rkey}'`,\n )\n }\n\n await store.record.indexRecord(\n uri,\n write.cid,\n parsedRecord,\n write.action,\n rev,\n now,\n )\n const recordBlobs = Array.from(\n enumBlobRefs(parsedRecord, { allowLegacy: true, strict: false }),\n )\n await store.repo.blob.insertBlobs(uri.toString(), recordBlobs)\n }\n }\n })\n },\n })\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"putRecord.js","sourceRoot":"","sources":["../../../../../src/api/com/atproto/repo/putRecord.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BlobRef,\n LegacyBlobRef,\n LexMap,\n isLegacyBlobRef,\n parseCid,\n} from '@atproto/lex-data'\nimport { AtUri } from '@atproto/syntax'\nimport {\n AuthRequiredError,\n InvalidRequestError,\n Server,\n} from '@atproto/xrpc-server'\nimport { ActorStoreTransactor } from '../../../../actor-store/actor-store-transactor'\nimport { AppContext } from '../../../../context'\nimport { app, com } from '../../../../lexicons/index.js'\nimport { dbLogger } from '../../../../logger'\nimport {\n BadCommitSwapError,\n BadRecordSwapError,\n InvalidRecordError,\n PreparedCreate,\n PreparedUpdate,\n prepareCreate,\n prepareUpdate,\n} from '../../../../repo'\n\nexport default function (server: Server, ctx: AppContext) {\n server.add(com.atproto.repo.putRecord, {\n auth: ctx.authVerifier.authorization({\n // @NOTE the \"checkTakedown\" and \"checkDeactivated\" checks are typically\n // performed during auth. However, since this method's \"repo\" parameter\n // can be a handle, we will need to fetch the account again to ensure that\n // the handle matches the DID from the request's credentials. In order to\n // avoid fetching the account twice (during auth, and then again in the\n // controller), the checks are disabled here:\n\n // checkTakedown: true,\n // checkDeactivated: true,\n authorize: () => {\n // Performed in the handler as it requires the request body\n },\n }),\n rateLimit: [\n {\n name: 'repo-write-hour',\n calcKey: ({ auth }) => auth.credentials.did,\n calcPoints: () => 2,\n },\n {\n name: 'repo-write-day',\n calcKey: ({ auth }) => auth.credentials.did,\n calcPoints: () => 2,\n },\n ],\n handler: async ({ auth, input }) => {\n const {\n repo,\n collection,\n rkey,\n record,\n validate,\n swapCommit,\n swapRecord,\n } = input.body\n\n const account = await ctx.authVerifier.findAccount(repo, {\n checkDeactivated: true,\n checkTakedown: true,\n })\n\n const did = account.did\n if (did !== auth.credentials.did) {\n throw new AuthRequiredError()\n }\n\n // We can't compute permissions based on the request payload (\"input\") in\n // the 'auth' phase, so we do it here.\n if (auth.credentials.type === 'oauth') {\n auth.credentials.permissions.assertRepo({\n action: 'create',\n collection,\n })\n auth.credentials.permissions.assertRepo({\n action: 'update',\n collection,\n })\n }\n\n const uri = AtUri.make(did, collection, rkey)\n const swapCommitCid = swapCommit ? parseCid(swapCommit) : undefined\n const swapRecordCid =\n typeof swapRecord === 'string' ? parseCid(swapRecord) : swapRecord\n\n const { commit, write } = await ctx.actorStore.transact(\n did,\n async (actorTxn) => {\n const current = await actorTxn.record.getRecord(uri, null, true)\n const isUpdate = current !== null\n\n // @TODO temporaray hack for legacy blob refs in profiles - remove after migrating legacy blobs\n if (isUpdate && collection === app.bsky.actor.profile.$type) {\n await updateProfileLegacyBlobRef(actorTxn, record)\n }\n\n const writeInfo = {\n did,\n collection,\n rkey,\n record,\n swapCid: swapRecordCid,\n validate,\n }\n\n let write: PreparedCreate | PreparedUpdate\n try {\n write = isUpdate\n ? await prepareUpdate(writeInfo)\n : await prepareCreate(writeInfo)\n } catch (err) {\n if (err instanceof InvalidRecordError) {\n throw new InvalidRequestError(err.message)\n }\n throw err\n }\n\n // no-op\n if (current && current.cid === write.cid.toString()) {\n return {\n commit: null,\n write,\n }\n }\n\n const commit = await actorTxn.repo\n .processWrites([write], swapCommitCid)\n .catch((err) => {\n if (\n err instanceof BadCommitSwapError ||\n err instanceof BadRecordSwapError\n ) {\n throw new InvalidRequestError(err.message, 'InvalidSwap')\n } else {\n throw err\n }\n })\n\n await ctx.sequencer.sequenceCommit(did, commit)\n\n return { commit, write }\n },\n )\n\n if (commit !== null) {\n await ctx.accountManager\n .updateRepoRoot(did, commit.cid, commit.rev)\n .catch((err) => {\n dbLogger.error(\n { err, did, cid: commit.cid, rev: commit.rev },\n 'failed to update account root',\n )\n })\n }\n\n return {\n encoding: 'application/json',\n body: {\n uri: write.uri.toString(),\n cid: write.cid.toString(),\n commit: commit\n ? {\n cid: commit.cid.toString(),\n rev: commit.rev,\n }\n : undefined,\n validationStatus: write.validationStatus,\n },\n }\n },\n })\n}\n\n// WARNING: mutates object\nasync function updateProfileLegacyBlobRef(\n actorStore: ActorStoreTransactor,\n record: LexMap,\n): Promise<void> {\n if (isLegacyBlobRef(record.avatar)) {\n record.avatar = await upgradeLegacyBlob(actorStore, record.avatar)\n }\n if (isLegacyBlobRef(record.banner)) {\n record.banner = await upgradeLegacyBlob(actorStore, record.banner)\n }\n}\n\nasync function upgradeLegacyBlob(\n actorStore: ActorStoreTransactor,\n legacyBlob: LegacyBlobRef,\n): Promise<BlobRef> {\n const ref = parseCid(legacyBlob.cid)\n const blob = await actorStore.repo.blob.getBlobMetadata(ref)\n return {\n $type: 'blob',\n mimeType: legacyBlob.mimeType,\n ref,\n size: blob.size,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"putRecord.js","sourceRoot":"","sources":["../../../../../src/api/com/atproto/repo/putRecord.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n LegacyBlobRef,\n LexMap,\n TypedBlobRef,\n isLegacyBlobRef,\n parseCid,\n} from '@atproto/lex-data'\nimport { AtUri } from '@atproto/syntax'\nimport {\n AuthRequiredError,\n InvalidRequestError,\n Server,\n} from '@atproto/xrpc-server'\nimport { ActorStoreTransactor } from '../../../../actor-store/actor-store-transactor'\nimport { AppContext } from '../../../../context'\nimport { app, com } from '../../../../lexicons/index.js'\nimport { dbLogger } from '../../../../logger'\nimport {\n BadCommitSwapError,\n BadRecordSwapError,\n InvalidRecordError,\n PreparedCreate,\n PreparedUpdate,\n prepareCreate,\n prepareUpdate,\n} from '../../../../repo'\n\nexport default function (server: Server, ctx: AppContext) {\n server.add(com.atproto.repo.putRecord, {\n auth: ctx.authVerifier.authorization({\n // @NOTE the \"checkTakedown\" and \"checkDeactivated\" checks are typically\n // performed during auth. However, since this method's \"repo\" parameter\n // can be a handle, we will need to fetch the account again to ensure that\n // the handle matches the DID from the request's credentials. In order to\n // avoid fetching the account twice (during auth, and then again in the\n // controller), the checks are disabled here:\n\n // checkTakedown: true,\n // checkDeactivated: true,\n authorize: () => {\n // Performed in the handler as it requires the request body\n },\n }),\n rateLimit: [\n {\n name: 'repo-write-hour',\n calcKey: ({ auth }) => auth.credentials.did,\n calcPoints: () => 2,\n },\n {\n name: 'repo-write-day',\n calcKey: ({ auth }) => auth.credentials.did,\n calcPoints: () => 2,\n },\n ],\n handler: async ({ auth, input }) => {\n const {\n repo,\n collection,\n rkey,\n record,\n validate,\n swapCommit,\n swapRecord,\n } = input.body\n\n const account = await ctx.authVerifier.findAccount(repo, {\n checkDeactivated: true,\n checkTakedown: true,\n })\n\n const did = account.did\n if (did !== auth.credentials.did) {\n throw new AuthRequiredError()\n }\n\n // We can't compute permissions based on the request payload (\"input\") in\n // the 'auth' phase, so we do it here.\n if (auth.credentials.type === 'oauth') {\n auth.credentials.permissions.assertRepo({\n action: 'create',\n collection,\n })\n auth.credentials.permissions.assertRepo({\n action: 'update',\n collection,\n })\n }\n\n const uri = AtUri.make(did, collection, rkey)\n const swapCommitCid = swapCommit ? parseCid(swapCommit) : undefined\n const swapRecordCid =\n typeof swapRecord === 'string' ? parseCid(swapRecord) : swapRecord\n\n const { commit, write } = await ctx.actorStore.transact(\n did,\n async (actorTxn) => {\n const current = await actorTxn.record.getRecord(uri, null, true)\n const isUpdate = current !== null\n\n // @TODO temporaray hack for legacy blob refs in profiles - remove after migrating legacy blobs\n if (isUpdate && collection === app.bsky.actor.profile.$type) {\n await updateProfileLegacyBlobRef(actorTxn, record)\n }\n\n const writeInfo = {\n did,\n collection,\n rkey,\n record,\n swapCid: swapRecordCid,\n validate,\n }\n\n let write: PreparedCreate | PreparedUpdate\n try {\n write = isUpdate\n ? await prepareUpdate(writeInfo)\n : await prepareCreate(writeInfo)\n } catch (err) {\n if (err instanceof InvalidRecordError) {\n throw new InvalidRequestError(err.message)\n }\n throw err\n }\n\n // no-op\n if (current && current.cid === write.cid.toString()) {\n return {\n commit: null,\n write,\n }\n }\n\n const commit = await actorTxn.repo\n .processWrites([write], swapCommitCid)\n .catch((err) => {\n if (\n err instanceof BadCommitSwapError ||\n err instanceof BadRecordSwapError\n ) {\n throw new InvalidRequestError(err.message, 'InvalidSwap')\n } else {\n throw err\n }\n })\n\n await ctx.sequencer.sequenceCommit(did, commit)\n\n return { commit, write }\n },\n )\n\n if (commit !== null) {\n await ctx.accountManager\n .updateRepoRoot(did, commit.cid, commit.rev)\n .catch((err) => {\n dbLogger.error(\n { err, did, cid: commit.cid, rev: commit.rev },\n 'failed to update account root',\n )\n })\n }\n\n return {\n encoding: 'application/json',\n body: {\n uri: write.uri.toString(),\n cid: write.cid.toString(),\n commit: commit\n ? {\n cid: commit.cid.toString(),\n rev: commit.rev,\n }\n : undefined,\n validationStatus: write.validationStatus,\n },\n }\n },\n })\n}\n\n// WARNING: mutates object\nasync function updateProfileLegacyBlobRef(\n actorStore: ActorStoreTransactor,\n record: LexMap,\n): Promise<void> {\n if (isLegacyBlobRef(record.avatar)) {\n record.avatar = await upgradeLegacyBlob(actorStore, record.avatar)\n }\n if (isLegacyBlobRef(record.banner)) {\n record.banner = await upgradeLegacyBlob(actorStore, record.banner)\n }\n}\n\nasync function upgradeLegacyBlob(\n actorStore: ActorStoreTransactor,\n legacyBlob: LegacyBlobRef,\n): Promise<TypedBlobRef> {\n const ref = parseCid(legacyBlob.cid)\n const blob = await actorStore.repo.blob.getBlobMetadata(ref)\n return {\n $type: 'blob',\n mimeType: legacyBlob.mimeType,\n ref,\n size: blob.size,\n }\n}\n"]}
|
|
@@ -697,6 +697,7 @@ type StatusView = {
|
|
|
697
697
|
* An optional embed associated with the status.
|
|
698
698
|
*/
|
|
699
699
|
embed?: l.$Typed<EmbedExternal.View> | l.Unknown$TypedObject;
|
|
700
|
+
labels?: LabelDefs.Label[];
|
|
700
701
|
/**
|
|
701
702
|
* The date when this status will expire. The application might choose to no longer return the status after expiration.
|
|
702
703
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defs.defs.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/actor/defs.defs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"defs.defs.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/actor/defs.defs.ts"],"names":[],"mappings":"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"}
|
|
@@ -297,6 +297,7 @@ const statusView = lex_1.l.typedObject($nsid, 'statusView', lex_1.l.object({
|
|
|
297
297
|
status: lex_1.l.string(),
|
|
298
298
|
record: lex_1.l.lexMap(),
|
|
299
299
|
embed: lex_1.l.optional(lex_1.l.typedUnion([lex_1.l.typedRef((() => EmbedExternal.view))], false)),
|
|
300
|
+
labels: lex_1.l.optional(lex_1.l.array(lex_1.l.ref((() => LabelDefs.label)))),
|
|
300
301
|
expiresAt: lex_1.l.optional(lex_1.l.string({ format: 'datetime' })),
|
|
301
302
|
isActive: lex_1.l.optional(lex_1.l.boolean()),
|
|
302
303
|
isDisabled: lex_1.l.optional(lex_1.l.boolean()),
|