From 61dc0d60e19b88c6427a54c6d95a391b5f4da7bd Mon Sep 17 00:00:00 2001 From: Matthieu Sieben <matthieusieben@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:06:58 +0100 Subject: [PATCH] Add linting rule to sort imports (#3220) * Add linting rule to sort imports * remove spacing between import groups * changeset * changeset * prettier config fine tuning * forbid use of deprecated imports * tidy --- .changeset/fair-tigers-thank.md | 41 + .changeset/mighty-actors-complain.md | 22 + .changeset/olive-teachers-yawn.md | 5 + .eslintrc | 67 +- .gitignore | 2 +- .prettierignore | 6 +- .prettierrc | 7 + .vscode/settings.json | 6 + package.json | 5 +- packages/api/bench/agent.bench.ts | 9 - packages/api/src/agent.ts | 13 +- packages/api/src/index.ts | 6 +- packages/api/src/mocker.ts | 6 +- packages/api/src/moderation/decision.ts | 14 +- packages/api/src/moderation/index.ts | 22 +- .../api/src/moderation/subjects/account.ts | 2 +- .../src/moderation/subjects/feed-generator.ts | 2 +- .../src/moderation/subjects/notification.ts | 2 +- packages/api/src/moderation/subjects/post.ts | 10 +- .../api/src/moderation/subjects/profile.ts | 2 +- .../api/src/moderation/subjects/user-list.ts | 2 +- packages/api/src/moderation/types.ts | 2 +- packages/api/src/moderation/util.ts | 2 +- packages/api/src/rich-text/detection.ts | 2 +- packages/api/src/rich-text/rich-text.ts | 4 +- packages/api/src/util.ts | 17 +- packages/api/tests/atp-agent.test.ts | 2 +- packages/api/tests/dispatcher.test.ts | 8 +- packages/api/tests/errors.test.ts | 2 +- .../api/tests/moderation-behaviors.test.ts | 6 +- .../tests/moderation-custom-labels.test.ts | 8 +- .../api/tests/moderation-mutewords.test.ts | 1 - .../api/tests/moderation-quoteposts.test.ts | 6 +- packages/api/tests/moderation.test.ts | 8 +- .../api/tests/rich-text-sanitization.test.ts | 2 +- .../api/tests/util/moderation-behavior.ts | 4 +- packages/aws/package.json | 3 + packages/aws/src/kms.ts | 2 +- packages/aws/src/s3.ts | 6 +- packages/bsky/bin/migration-create.ts | 4 +- packages/bsky/package.json | 3 + .../bsky/src/api/app/bsky/actor/getProfile.ts | 10 +- .../src/api/app/bsky/actor/getProfiles.ts | 12 +- .../src/api/app/bsky/actor/getSuggestions.ts | 14 +- .../src/api/app/bsky/actor/searchActors.ts | 12 +- .../app/bsky/actor/searchActorsTypeahead.ts | 10 +- .../src/api/app/bsky/feed/getActorFeeds.ts | 14 +- .../src/api/app/bsky/feed/getActorLikes.ts | 18 +- .../src/api/app/bsky/feed/getAuthorFeed.ts | 20 +- .../bsky/src/api/app/bsky/feed/getFeed.ts | 31 +- .../src/api/app/bsky/feed/getFeedGenerator.ts | 6 +- .../api/app/bsky/feed/getFeedGenerators.ts | 8 +- .../bsky/src/api/app/bsky/feed/getLikes.ts | 13 +- .../bsky/src/api/app/bsky/feed/getListFeed.ts | 18 +- .../src/api/app/bsky/feed/getPostThread.ts | 14 +- .../bsky/src/api/app/bsky/feed/getPosts.ts | 14 +- .../bsky/src/api/app/bsky/feed/getQuotes.ts | 14 +- .../src/api/app/bsky/feed/getRepostedBy.ts | 10 +- .../api/app/bsky/feed/getSuggestedFeeds.ts | 4 +- .../bsky/src/api/app/bsky/feed/getTimeline.ts | 18 +- .../bsky/src/api/app/bsky/feed/searchPosts.ts | 12 +- .../app/bsky/graph/getActorStarterPacks.ts | 14 +- .../bsky/src/api/app/bsky/graph/getBlocks.ts | 8 +- .../src/api/app/bsky/graph/getFollowers.ts | 12 +- .../bsky/src/api/app/bsky/graph/getFollows.ts | 12 +- .../api/app/bsky/graph/getKnownFollowers.ts | 4 +- .../bsky/src/api/app/bsky/graph/getList.ts | 24 +- .../src/api/app/bsky/graph/getListBlocks.ts | 8 +- .../src/api/app/bsky/graph/getListMutes.ts | 8 +- .../bsky/src/api/app/bsky/graph/getLists.ts | 8 +- .../bsky/src/api/app/bsky/graph/getMutes.ts | 6 +- .../api/app/bsky/graph/getRelationships.ts | 2 +- .../src/api/app/bsky/graph/getStarterPack.ts | 8 +- .../src/api/app/bsky/graph/getStarterPacks.ts | 10 +- .../bsky/graph/getSuggestedFollowsByActor.ts | 8 +- .../bsky/src/api/app/bsky/graph/muteActor.ts | 2 +- .../src/api/app/bsky/graph/muteActorList.ts | 2 +- .../bsky/src/api/app/bsky/graph/muteThread.ts | 2 +- .../api/app/bsky/graph/searchStarterPacks.ts | 16 +- .../src/api/app/bsky/graph/unmuteActor.ts | 2 +- .../src/api/app/bsky/graph/unmuteActorList.ts | 2 +- .../src/api/app/bsky/graph/unmuteThread.ts | 2 +- .../src/api/app/bsky/labeler/getServices.ts | 4 +- .../app/bsky/notification/getUnreadCount.ts | 4 +- .../bsky/notification/listNotifications.ts | 12 +- .../app/bsky/notification/putPreferences.ts | 2 +- .../api/app/bsky/notification/registerPush.ts | 2 +- .../api/app/bsky/notification/updateSeen.ts | 6 +- .../src/api/app/bsky/unspecced/getConfig.ts | 2 +- .../unspecced/getPopularFeedGenerators.ts | 4 +- .../bsky/unspecced/getTaggedSuggestions.ts | 2 +- .../app/bsky/unspecced/getTrendingTopics.ts | 14 +- packages/bsky/src/api/blob-dispatcher.ts | 3 +- packages/bsky/src/api/blob-resolver.ts | 25 +- .../api/com/atproto/admin/getAccountInfos.ts | 4 +- .../api/com/atproto/admin/getSubjectStatus.ts | 2 +- .../com/atproto/admin/updateSubjectStatus.ts | 4 +- .../api/com/atproto/identity/resolveHandle.ts | 4 +- .../src/api/com/atproto/label/queryLabels.ts | 4 +- .../src/api/com/atproto/repo/getRecord.ts | 4 +- .../src/api/com/atproto/temp/fetchLabels.ts | 4 +- packages/bsky/src/api/health.ts | 8 +- packages/bsky/src/api/index.ts | 48 +- packages/bsky/src/api/well-known.ts | 8 +- packages/bsky/src/auth-verifier.ts | 12 +- packages/bsky/src/bsync.ts | 6 +- packages/bsky/src/context.ts | 18 +- packages/bsky/src/courier.ts | 6 +- packages/bsky/src/data-plane/bsync/index.ts | 12 +- packages/bsky/src/data-plane/client.ts | 2 +- .../bsky/src/data-plane/server/background.ts | 2 +- .../data-plane/server/db/database-schema.ts | 66 +- packages/bsky/src/data-plane/server/db/db.ts | 12 +- .../bsky/src/data-plane/server/db/util.ts | 4 +- packages/bsky/src/data-plane/server/index.ts | 10 +- .../src/data-plane/server/indexing/index.ts | 48 +- .../server/indexing/plugins/block.ts | 8 +- .../indexing/plugins/chat-declaration.ts | 8 +- .../server/indexing/plugins/feed-generator.ts | 8 +- .../server/indexing/plugins/follow.ts | 12 +- .../server/indexing/plugins/labeler.ts | 8 +- .../server/indexing/plugins/like.ts | 10 +- .../server/indexing/plugins/list-block.ts | 8 +- .../server/indexing/plugins/list-item.ts | 10 +- .../server/indexing/plugins/list.ts | 10 +- .../server/indexing/plugins/post-gate.ts | 10 +- .../server/indexing/plugins/post.ts | 40 +- .../server/indexing/plugins/profile.ts | 10 +- .../server/indexing/plugins/repost.ts | 10 +- .../server/indexing/plugins/starter-pack.ts | 8 +- .../server/indexing/plugins/thread-gate.ts | 10 +- .../data-plane/server/indexing/processor.ts | 8 +- .../src/data-plane/server/routes/feeds.ts | 2 +- .../src/data-plane/server/routes/follows.ts | 2 +- .../src/data-plane/server/routes/identity.ts | 4 +- .../src/data-plane/server/routes/index.ts | 4 +- .../data-plane/server/routes/interactions.ts | 2 +- .../src/data-plane/server/routes/labels.ts | 4 +- .../src/data-plane/server/routes/likes.ts | 2 +- .../src/data-plane/server/routes/lists.ts | 4 +- .../src/data-plane/server/routes/mutes.ts | 4 +- .../src/data-plane/server/routes/notifs.ts | 6 +- .../src/data-plane/server/routes/posts.ts | 2 +- .../src/data-plane/server/routes/profile.ts | 8 +- .../src/data-plane/server/routes/quotes.ts | 2 +- .../src/data-plane/server/routes/records.ts | 4 +- .../data-plane/server/routes/relationships.ts | 2 +- .../src/data-plane/server/routes/reposts.ts | 2 +- .../data-plane/server/routes/suggestions.ts | 2 +- .../src/data-plane/server/subscription.ts | 6 +- packages/bsky/src/data-plane/server/util.ts | 4 +- packages/bsky/src/error.ts | 2 +- packages/bsky/src/feature-gates.ts | 2 - packages/bsky/src/hydration/feed.ts | 20 +- packages/bsky/src/hydration/graph.ts | 8 +- packages/bsky/src/hydration/hydrator.ts | 54 +- packages/bsky/src/hydration/label.ts | 8 +- packages/bsky/src/hydration/util.ts | 4 +- packages/bsky/src/image/index.ts | 2 +- packages/bsky/src/image/server.ts | 25 +- packages/bsky/src/image/sharp.ts | 4 +- packages/bsky/src/index.ts | 46 +- packages/bsky/src/logger.ts | 2 +- packages/bsky/src/redis.ts | 2 +- packages/bsky/src/util/http.ts | 2 +- packages/bsky/src/util/uris.ts | 2 +- packages/bsky/src/views/index.ts | 45 +- packages/bsky/src/views/types.ts | 18 +- packages/bsky/src/views/util.ts | 8 +- packages/bsky/tests/_util.ts | 9 +- packages/bsky/tests/admin/admin-auth.test.ts | 4 +- packages/bsky/tests/admin/moderation.test.ts | 2 +- packages/bsky/tests/auth.test.ts | 2 +- packages/bsky/tests/blob-resolver.test.ts | 4 +- .../data-plane/duplicate-records.test.ts | 6 +- .../data-plane/handle-invalidation.test.ts | 4 +- .../bsky/tests/data-plane/indexing.test.ts | 16 +- .../tests/data-plane/subscription.test.ts | 2 +- .../tests/data-plane/thread-mutes.test.ts | 2 +- packages/bsky/tests/entryway-auth.test.ts | 10 +- packages/bsky/tests/feed-generation.test.ts | 16 +- packages/bsky/tests/hydration/util.test.ts | 2 +- packages/bsky/tests/image/server.test.ts | 4 +- packages/bsky/tests/image/uri.test.ts | 4 +- packages/bsky/tests/label-hydration.test.ts | 2 +- packages/bsky/tests/postgates.test.ts | 5 +- packages/bsky/tests/query-labels.test.ts | 2 +- .../bsky/tests/seed/feed-hidden-replies.ts | 2 +- packages/bsky/tests/seed/known-followers.ts | 2 +- packages/bsky/tests/seed/postgates.ts | 2 +- packages/bsky/tests/server.test.ts | 4 +- .../tests/views/account-deactivation.test.ts | 2 +- packages/bsky/tests/views/actor-likes.test.ts | 2 +- .../bsky/tests/views/actor-search.test.ts | 4 +- packages/bsky/tests/views/author-feed.test.ts | 20 +- packages/bsky/tests/views/block-lists.test.ts | 6 +- packages/bsky/tests/views/blocks.test.ts | 8 +- .../tests/views/feed-hidden-replies.test.ts | 5 +- .../bsky/tests/views/feed-view-post.test.ts | 4 +- packages/bsky/tests/views/follows.test.ts | 4 +- .../bsky/tests/views/known-followers.test.ts | 5 +- .../bsky/tests/views/labeler-service.test.ts | 4 +- .../tests/views/labels-needs-review.test.ts | 4 +- .../bsky/tests/views/labels-takedown.test.ts | 2 +- packages/bsky/tests/views/likes.test.ts | 4 +- packages/bsky/tests/views/list-feed.test.ts | 4 +- packages/bsky/tests/views/lists.test.ts | 4 +- packages/bsky/tests/views/mute-lists.test.ts | 6 +- packages/bsky/tests/views/mutes.test.ts | 4 +- .../bsky/tests/views/notifications.test.ts | 6 +- packages/bsky/tests/views/posts.test.ts | 6 +- packages/bsky/tests/views/profile.test.ts | 6 +- packages/bsky/tests/views/quotes.test.ts | 4 +- packages/bsky/tests/views/reposts.test.ts | 4 +- .../bsky/tests/views/starter-packs.test.ts | 6 +- .../tests/views/suggested-follows.test.ts | 4 +- packages/bsky/tests/views/suggestions.test.ts | 4 +- packages/bsky/tests/views/thread.test.ts | 4 +- .../bsky/tests/views/threadgating.test.ts | 6 +- packages/bsky/tests/views/timeline.test.ts | 12 +- packages/bsync/bin/migration-create.ts | 4 +- packages/bsync/package.json | 3 + packages/bsync/src/config.ts | 2 +- packages/bsync/src/context.ts | 6 +- packages/bsync/src/db/index.ts | 16 +- packages/bsync/src/db/schema/index.ts | 4 +- packages/bsync/src/db/types.ts | 2 +- packages/bsync/src/index.ts | 10 +- packages/bsync/src/logger.ts | 2 +- .../bsync/src/routes/add-mute-operation.ts | 8 +- .../bsync/src/routes/add-notif-operation.ts | 8 +- packages/bsync/src/routes/auth.ts | 2 +- packages/bsync/src/routes/index.ts | 6 +- .../bsync/src/routes/scan-mute-operations.ts | 4 +- .../bsync/src/routes/scan-notif-operations.ts | 4 +- packages/bsync/tests/mutes.test.ts | 4 +- packages/bsync/tests/notifications.test.ts | 4 +- packages/common-web/src/tid.ts | 4 +- packages/common-web/tests/check.test.ts | 2 +- packages/common-web/tests/tid.test.ts | 2 +- packages/common/package.json | 3 + packages/common/src/fs.ts | 4 +- packages/common/src/ipld.ts | 8 +- packages/common/src/logger.ts | 4 +- packages/common/src/streams.ts | 2 +- packages/common/tests/ipld-multi.test.ts | 2 +- packages/common/tests/ipld-vectors.ts | 2 - packages/common/tests/ipld.test.ts | 2 +- packages/common/tests/streams.test.ts | 2 +- packages/crypto/package.json | 3 + packages/crypto/src/did.ts | 3 +- packages/crypto/src/p256/keypair.ts | 7 +- packages/crypto/src/p256/operations.ts | 1 - packages/crypto/src/p256/plugin.ts | 9 +- packages/crypto/src/plugins.ts | 6 +- packages/crypto/src/secp256k1/keypair.ts | 3 - packages/crypto/src/secp256k1/operations.ts | 1 - packages/crypto/src/secp256k1/plugin.ts | 9 +- packages/crypto/src/verify.ts | 2 +- packages/crypto/tests/did.test.ts | 2 +- packages/crypto/tests/key-compression.test.ts | 8 +- packages/crypto/tests/keypairs.test.ts | 8 +- packages/crypto/tests/signatures.test.ts | 18 +- packages/dev-env/package.json | 3 + packages/dev-env/src/bsky.ts | 6 +- packages/dev-env/src/feed-gen.ts | 10 +- packages/dev-env/src/introspect.ts | 6 +- packages/dev-env/src/mock/index.ts | 6 +- packages/dev-env/src/moderator-client.ts | 4 +- packages/dev-env/src/network-no-appview.ts | 8 +- packages/dev-env/src/network.ts | 18 +- packages/dev-env/src/ozone-service-profile.ts | 2 +- packages/dev-env/src/ozone.ts | 10 +- packages/dev-env/src/pds.ts | 10 +- packages/dev-env/src/plc.ts | 2 +- packages/dev-env/src/seed/author-feed.ts | 2 +- packages/dev-env/src/seed/basic.ts | 4 +- packages/dev-env/src/seed/client.ts | 11 +- packages/dev-env/src/seed/likes.ts | 2 +- packages/dev-env/src/seed/quotes.ts | 2 +- packages/dev-env/src/seed/reposts.ts | 2 +- packages/dev-env/src/types.ts | 4 +- packages/dev-env/src/util.ts | 6 +- packages/did/src/atproto.ts | 5 +- packages/did/src/did-document.ts | 1 - packages/identity/package.json | 3 + packages/identity/src/did/atproto-data.ts | 12 +- packages/identity/src/did/base-resolver.ts | 10 +- packages/identity/src/did/did-resolver.ts | 10 +- packages/identity/src/did/memory-cache.ts | 2 +- packages/identity/src/did/plc-resolver.ts | 2 +- packages/identity/src/did/web-resolver.ts | 2 +- packages/identity/src/handle/index.ts | 2 +- packages/identity/src/id-resolver.ts | 2 +- packages/identity/tests/did-cache.test.ts | 8 +- packages/identity/tests/did-resolver.test.ts | 8 +- .../identity/tests/handle-resolver.test.ts | 2 +- packages/identity/tests/web/db.ts | 2 - packages/identity/tests/web/server.ts | 6 +- .../did-resolver/src/did-cache-memory.ts | 1 - .../internal/did-resolver/src/did-cache.ts | 5 +- .../did-resolver/src/did-resolver-base.ts | 7 +- .../internal/did-resolver/src/did-resolver.ts | 1 - .../internal/did-resolver/src/methods/plc.ts | 3 +- .../internal/did-resolver/src/methods/web.ts | 5 +- packages/internal/fetch-node/package.json | 3 + packages/internal/fetch-node/src/safe.ts | 3 +- packages/internal/fetch-node/src/unicast.ts | 16 +- packages/internal/fetch/src/fetch-response.ts | 5 +- .../handle-resolver-node/package.json | 3 + .../src/atproto-handle-resolver-node.ts | 1 - .../src/node-resolve-txt-factory.ts | 1 - .../src/app-view-handle-resolver.ts | 3 +- .../src/atproto-doh-handle-resolver.ts | 2 +- .../src/cached-handle-resolver.ts | 2 +- .../src/identity-resolver.ts | 6 +- .../package.json | 6 + .../src/index.ts | 1 - .../internal/simple-store-memory/src/index.ts | 3 +- .../simple-store/src/cached-getter.ts | 2 +- packages/lex-cli/package.json | 3 + packages/lex-cli/src/codegen/client.ts | 14 +- packages/lex-cli/src/codegen/common.ts | 4 +- packages/lex-cli/src/codegen/lex-gen.ts | 16 +- packages/lex-cli/src/codegen/server.ts | 14 +- packages/lex-cli/src/codegen/util.ts | 2 +- packages/lex-cli/src/index.ts | 18 +- packages/lex-cli/src/mdgen/index.ts | 2 +- packages/lex-cli/src/util.ts | 10 +- packages/lexicon/src/blob-refs.ts | 2 +- packages/lexicon/src/lexicons.ts | 14 +- packages/lexicon/src/serialize.ts | 6 +- packages/lexicon/src/validation.ts | 1 - packages/lexicon/src/validators/blob.ts | 2 +- packages/lexicon/src/validators/complex.ts | 3 +- packages/lexicon/src/validators/formats.ts | 8 +- packages/lexicon/src/validators/primitives.ts | 10 +- packages/lexicon/src/validators/xrpc.ts | 5 +- packages/oauth/jwk-jose/src/jose-key.ts | 29 +- .../oauth/jwk-webcrypto/src/webcrypto-key.ts | 3 +- packages/oauth/jwk/src/jwks.ts | 1 - packages/oauth/jwk/src/jwt.ts | 1 - .../rollup.config.js | 9 +- .../auth/credential/use-credential-auth.ts | 2 +- .../src/auth/oauth/use-oauth.ts | 1 - .../src/browser-oauth-client.ts | 7 +- .../src/browser-oauth-database.ts | 5 +- .../src/indexed-db-store.ts | 2 +- .../oauth-client-browser/src/indexed-db/db.ts | 2 +- packages/oauth/oauth-client-node/package.json | 3 + .../oauth-client-node/src/node-dpop-store.ts | 2 +- .../src/node-oauth-client.ts | 10 +- .../src/atproto-token-response.ts | 5 +- packages/oauth/oauth-client/src/fetch-dpop.ts | 4 +- ...-authorization-server-metadata-resolver.ts | 14 +- .../oauth/oauth-client/src/oauth-client.ts | 21 +- ...th-protected-resource-metadata-resolver.ts | 8 +- .../oauth/oauth-client/src/oauth-resolver.ts | 11 +- .../oauth-client/src/oauth-response-error.ts | 2 +- .../oauth-client/src/oauth-server-agent.ts | 5 +- .../oauth-client/src/oauth-server-factory.ts | 3 +- .../oauth/oauth-client/src/oauth-session.ts | 3 +- packages/oauth/oauth-client/src/runtime.ts | 3 +- .../oauth/oauth-client/src/session-getter.ts | 7 +- .../oauth/oauth-client/src/state-store.ts | 2 +- packages/oauth/oauth-client/src/types.ts | 5 +- .../src/validate-client-metadata.ts | 1 - packages/oauth/oauth-provider/package.json | 3 + .../oauth/oauth-provider/rollup.config.js | 9 +- .../src/account/account-store.ts | 3 +- .../oauth-provider/src/account/account.ts | 2 +- .../src/assets/app/hooks/use-api.ts | 3 +- .../oauth-provider/src/assets/app/lib/api.ts | 1 - .../src/assets/assets-middleware.ts | 1 - .../oauth/oauth-provider/src/assets/index.ts | 5 +- .../oauth-provider/src/client/client-auth.ts | 3 +- .../src/client/client-manager.ts | 27 +- .../oauth-provider/src/client/client-store.ts | 1 - .../oauth-provider/src/client/client-utils.ts | 1 - .../oauth/oauth-provider/src/client/client.ts | 29 +- .../oauth-provider/src/device/device-data.ts | 1 - .../src/device/device-details.ts | 1 - .../oauth-provider/src/device/device-id.ts | 1 - .../src/device/device-manager.ts | 5 +- .../oauth-provider/src/device/session-id.ts | 1 - .../oauth-provider/src/dpop/dpop-manager.ts | 2 - .../oauth-provider/src/dpop/dpop-nonce.ts | 1 - .../errors/invalid-client-metadata-error.ts | 2 +- .../src/errors/invalid-token-error.ts | 3 +- .../src/errors/www-authenticate-error.ts | 1 - .../oauth-provider/src/lib/http/accept.ts | 1 - .../oauth-provider/src/lib/http/middleware.ts | 2 +- .../oauth-provider/src/lib/http/request.ts | 5 +- .../oauth-provider/src/lib/http/response.ts | 1 - .../oauth-provider/src/lib/http/stream.ts | 7 +- .../src/lib/util/authorization-header.ts | 3 +- .../oauth-provider/src/lib/util/hostname.ts | 2 +- .../src/metadata/build-metadata.ts | 1 - .../oauth/oauth-provider/src/oauth-hooks.ts | 1 - .../oauth-provider/src/oauth-provider.ts | 17 +- .../oauth-provider/src/oauth-verifier.ts | 3 +- .../src/output/build-authorize-data.ts | 1 - .../src/output/build-error-payload.ts | 3 +- .../src/output/output-manager.ts | 5 +- .../src/output/send-authorize-redirect.ts | 3 +- .../src/output/send-web-page.ts | 5 +- .../src/replay/replay-manager.ts | 2 +- .../src/replay/replay-store-redis.ts | 1 - .../oauth/oauth-provider/src/request/code.ts | 1 - .../src/request/request-data.ts | 1 - .../oauth-provider/src/request/request-id.ts | 1 - .../src/request/request-info.ts | 2 +- .../src/request/request-manager.ts | 7 +- .../src/request/request-store-memory.ts | 2 +- .../src/request/request-store-redis.ts | 3 +- .../oauth-provider/src/request/request-uri.ts | 1 - .../src/signer/signed-token-payload.ts | 3 +- .../oauth/oauth-provider/src/signer/signer.ts | 3 +- .../oauth-provider/src/token/refresh-token.ts | 1 - .../oauth-provider/src/token/token-claims.ts | 3 +- .../oauth-provider/src/token/token-data.ts | 1 - .../oauth-provider/src/token/token-id.ts | 1 - .../oauth-provider/src/token/token-manager.ts | 3 +- .../src/token/verify-token-claims.ts | 1 - .../src/oauth-authorization-request-jar.ts | 2 +- .../src/oauth-authorization-request-par.ts | 1 - .../oauth-authorization-request-parameters.ts | 3 +- .../src/oauth-authorization-request-query.ts | 1 - .../src/oauth-authorization-request-uri.ts | 1 - .../oauth-authorization-server-metadata.ts | 1 - .../src/oauth-client-credentials.ts | 3 +- .../src/oauth-client-id-loopback.ts | 2 +- .../oauth-types/src/oauth-client-metadata.ts | 3 +- .../src/oauth-protected-resource-metadata.ts | 1 - .../oauth-types/src/oauth-redirect-uri.ts | 4 +- .../oauth-types/src/oauth-token-response.ts | 3 +- packages/oauth/oauth-types/src/uri.ts | 17 +- packages/ozone/bin/migration-create.ts | 4 +- packages/ozone/package.json | 3 + .../ozone/src/api/chat/getActorMetadata.ts | 4 +- .../ozone/src/api/chat/getMessageContext.ts | 4 +- packages/ozone/src/api/chat/index.ts | 2 +- .../src/api/communication/createTemplate.ts | 4 +- .../src/api/communication/deleteTemplate.ts | 2 +- .../src/api/communication/listTemplates.ts | 2 +- .../src/api/communication/updateTemplate.ts | 4 +- packages/ozone/src/api/health.ts | 8 +- packages/ozone/src/api/index.ts | 42 +- packages/ozone/src/api/label/fetchLabels.ts | 2 +- packages/ozone/src/api/label/queryLabels.ts | 6 +- .../ozone/src/api/label/subscribeLabels.ts | 6 +- .../ozone/src/api/moderation/emitEvent.ts | 12 +- packages/ozone/src/api/moderation/getEvent.ts | 2 +- .../ozone/src/api/moderation/getRecord.ts | 8 +- .../ozone/src/api/moderation/getRecords.ts | 6 +- packages/ozone/src/api/moderation/getRepo.ts | 2 +- packages/ozone/src/api/moderation/getRepos.ts | 2 +- .../ozone/src/api/moderation/queryEvents.ts | 2 +- .../ozone/src/api/moderation/queryStatuses.ts | 2 +- .../ozone/src/api/moderation/searchRepos.ts | 4 +- packages/ozone/src/api/proxied.ts | 2 +- packages/ozone/src/api/report/createReport.ts | 10 +- packages/ozone/src/api/server/getConfig.ts | 2 +- packages/ozone/src/api/set/addValues.ts | 2 +- packages/ozone/src/api/set/deleteSet.ts | 2 +- packages/ozone/src/api/set/deleteValues.ts | 2 +- packages/ozone/src/api/set/getValues.ts | 2 +- packages/ozone/src/api/set/querySets.ts | 2 +- packages/ozone/src/api/set/upsertSet.ts | 2 +- packages/ozone/src/api/setting/listOptions.ts | 2 +- .../ozone/src/api/setting/removeOptions.ts | 4 +- .../ozone/src/api/setting/upsertOption.ts | 14 +- packages/ozone/src/api/team/addMember.ts | 2 +- packages/ozone/src/api/team/deleteMember.ts | 2 +- packages/ozone/src/api/team/listMembers.ts | 2 +- packages/ozone/src/api/team/updateMember.ts | 2 +- packages/ozone/src/api/util.ts | 22 +- packages/ozone/src/api/well-known.ts | 8 +- .../src/communication-service/template.ts | 2 +- packages/ozone/src/config/config.ts | 2 +- packages/ozone/src/config/secrets.ts | 2 +- packages/ozone/src/context.ts | 35 +- packages/ozone/src/daemon/blob-diverter.ts | 15 +- packages/ozone/src/daemon/context.ts | 16 +- packages/ozone/src/daemon/event-pusher.ts | 12 +- packages/ozone/src/daemon/event-reverser.ts | 2 +- packages/ozone/src/daemon/index.ts | 2 +- .../src/daemon/materialized-view-refresher.ts | 2 +- packages/ozone/src/db/index.ts | 16 +- ...220T144630860Z-stats-materialized-views.ts | 4 +- packages/ozone/src/db/pagination.ts | 2 +- packages/ozone/src/db/schema/index.ts | 25 +- .../db/schema/moderation_subject_status.ts | 2 +- packages/ozone/src/db/types.ts | 2 +- packages/ozone/src/error.ts | 2 +- packages/ozone/src/index.ts | 22 +- packages/ozone/src/logger.ts | 2 +- packages/ozone/src/mod-service/index.ts | 66 +- packages/ozone/src/mod-service/status.ts | 2 +- packages/ozone/src/mod-service/subject.ts | 10 +- packages/ozone/src/mod-service/types.ts | 4 +- packages/ozone/src/mod-service/views.ts | 33 +- packages/ozone/src/sequencer/outbox.ts | 4 +- packages/ozone/src/sequencer/sequencer.ts | 12 +- packages/ozone/src/set/service.ts | 4 +- packages/ozone/src/setting/service.ts | 10 +- packages/ozone/src/setting/validators.ts | 2 +- .../ozone/src/tag-service/embed-tagger.ts | 6 +- packages/ozone/src/tag-service/index.ts | 8 +- .../ozone/src/tag-service/language-tagger.ts | 3 +- packages/ozone/src/team/index.ts | 14 +- packages/ozone/src/util.ts | 4 +- packages/ozone/tests/3p-labeler.test.ts | 18 +- packages/ozone/tests/_util.ts | 8 +- .../tests/ack-all-subjects-of-account.test.ts | 8 +- packages/ozone/tests/blob-divert.test.ts | 2 +- .../tests/communication-templates.test.ts | 2 +- packages/ozone/tests/content-tagger.test.ts | 2 +- packages/ozone/tests/get-config.test.ts | 2 +- packages/ozone/tests/get-lists.test.ts | 8 +- packages/ozone/tests/get-profiles.test.ts | 7 +- packages/ozone/tests/get-record.test.ts | 8 +- packages/ozone/tests/get-records.test.ts | 8 +- packages/ozone/tests/get-repo.test.ts | 6 +- packages/ozone/tests/get-repos.test.ts | 6 +- packages/ozone/tests/get-starter-pack.test.ts | 10 +- .../ozone/tests/moderation-appeals.test.ts | 12 +- .../ozone/tests/moderation-events.test.ts | 14 +- .../tests/moderation-status-tags.test.ts | 6 +- .../ozone/tests/moderation-statuses.test.ts | 16 +- packages/ozone/tests/moderation.test.ts | 18 +- packages/ozone/tests/protected-tags.test.ts | 8 +- packages/ozone/tests/query-labels.test.ts | 6 +- .../tests/record-and-account-events.test.ts | 15 +- packages/ozone/tests/repo-search.test.ts | 4 +- packages/ozone/tests/report-muting.test.ts | 12 +- packages/ozone/tests/sequencer.test.ts | 6 +- packages/ozone/tests/server.test.ts | 2 +- packages/ozone/tests/sets.test.ts | 4 +- packages/ozone/tests/settings.test.ts | 4 +- packages/ozone/tests/takedown.test.ts | 17 +- packages/ozone/tests/team.test.ts | 2 +- packages/pds/bin/migration-create.ts | 4 +- packages/pds/package.json | 3 + packages/pds/src/account-manager/db/index.ts | 2 +- .../db/schema/authorization-request.ts | 2 +- .../src/account-manager/db/schema/device.ts | 2 +- .../src/account-manager/db/schema/index.ts | 14 +- .../src/account-manager/db/schema/token.ts | 3 +- .../db/schema/used-refresh-token.ts | 2 +- .../src/account-manager/helpers/account.ts | 6 +- .../helpers/authorization-request.ts | 4 +- .../account-manager/helpers/device-account.ts | 3 +- .../pds/src/account-manager/helpers/device.ts | 6 +- .../account-manager/helpers/email-token.ts | 2 +- .../pds/src/account-manager/helpers/invite.ts | 2 +- .../src/account-manager/helpers/password.ts | 4 +- .../pds/src/account-manager/helpers/scrypt.ts | 4 +- .../pds/src/account-manager/helpers/token.ts | 2 +- packages/pds/src/account-manager/index.ts | 7 +- .../pds/src/actor-store/actor-store-reader.ts | 2 +- packages/pds/src/actor-store/actor-store.ts | 8 +- packages/pds/src/actor-store/blob/reader.ts | 4 +- .../pds/src/actor-store/blob/transactor.ts | 20 +- packages/pds/src/actor-store/db/index.ts | 2 +- .../pds/src/actor-store/db/schema/index.ts | 6 +- packages/pds/src/actor-store/migrate.ts | 2 +- .../src/actor-store/preference/transactor.ts | 4 +- packages/pds/src/actor-store/record/reader.ts | 4 +- .../pds/src/actor-store/record/transactor.ts | 6 +- packages/pds/src/actor-store/repo/reader.ts | 2 - .../src/actor-store/repo/sql-repo-reader.ts | 8 +- .../actor-store/repo/sql-repo-transactor.ts | 4 +- .../pds/src/actor-store/repo/transactor.ts | 8 +- .../src/api/app/bsky/actor/getPreferences.ts | 4 +- .../pds/src/api/app/bsky/actor/getProfile.ts | 4 +- .../pds/src/api/app/bsky/actor/getProfiles.ts | 4 +- packages/pds/src/api/app/bsky/actor/index.ts | 3 +- .../src/api/app/bsky/actor/putPreferences.ts | 4 +- .../src/api/app/bsky/feed/getActorLikes.ts | 4 +- .../src/api/app/bsky/feed/getAuthorFeed.ts | 6 +- packages/pds/src/api/app/bsky/feed/getFeed.ts | 10 +- .../src/api/app/bsky/feed/getPostThread.ts | 13 +- .../pds/src/api/app/bsky/feed/getTimeline.ts | 4 +- packages/pds/src/api/app/bsky/feed/index.ts | 2 +- packages/pds/src/api/app/bsky/index.ts | 2 +- .../src/api/app/bsky/notification/index.ts | 2 +- .../api/app/bsky/notification/registerPush.ts | 8 +- .../pds/src/api/app/bsky/util/resolver.ts | 2 +- .../api/com/atproto/admin/deleteAccount.ts | 4 +- .../atproto/admin/disableAccountInvites.ts | 2 +- .../com/atproto/admin/disableInviteCodes.ts | 2 +- .../com/atproto/admin/enableAccountInvites.ts | 2 +- .../api/com/atproto/admin/getAccountInfo.ts | 5 +- .../api/com/atproto/admin/getAccountInfos.ts | 2 +- .../api/com/atproto/admin/getInviteCodes.ts | 8 +- .../api/com/atproto/admin/getSubjectStatus.ts | 2 +- .../pds/src/api/com/atproto/admin/index.ts | 22 +- .../src/api/com/atproto/admin/sendEmail.ts | 4 +- .../com/atproto/admin/updateAccountEmail.ts | 2 +- .../com/atproto/admin/updateAccountHandle.ts | 2 +- .../atproto/admin/updateAccountPassword.ts | 2 +- .../com/atproto/admin/updateSubjectStatus.ts | 6 +- .../pds/src/api/com/atproto/admin/util.ts | 2 +- .../identity/getRecommendedDidCredentials.ts | 2 +- .../pds/src/api/com/atproto/identity/index.ts | 6 +- .../identity/requestPlcOperationSignature.ts | 6 +- .../api/com/atproto/identity/resolveHandle.ts | 4 +- .../com/atproto/identity/signPlcOperation.ts | 6 +- .../atproto/identity/submitPlcOperation.ts | 4 +- .../api/com/atproto/identity/updateHandle.ts | 6 +- packages/pds/src/api/com/atproto/index.ts | 2 +- .../com/atproto/moderation/createReport.ts | 8 +- .../src/api/com/atproto/moderation/index.ts | 2 +- .../src/api/com/atproto/repo/applyWrites.ts | 18 +- .../src/api/com/atproto/repo/createRecord.ts | 7 +- .../src/api/com/atproto/repo/deleteRecord.ts | 13 +- .../src/api/com/atproto/repo/describeRepo.ts | 6 +- .../pds/src/api/com/atproto/repo/getRecord.ts | 4 +- .../src/api/com/atproto/repo/importRepo.ts | 14 +- .../pds/src/api/com/atproto/repo/index.ts | 6 +- .../api/com/atproto/repo/listMissingBlobs.ts | 2 +- .../src/api/com/atproto/repo/listRecords.ts | 4 +- .../pds/src/api/com/atproto/repo/putRecord.ts | 6 +- .../src/api/com/atproto/repo/uploadBlob.ts | 4 +- .../api/com/atproto/server/activateAccount.ts | 5 +- .../com/atproto/server/checkAccountStatus.ts | 2 +- .../api/com/atproto/server/confirmEmail.ts | 4 +- .../api/com/atproto/server/createAccount.ts | 13 +- .../com/atproto/server/createAppPassword.ts | 3 +- .../com/atproto/server/createInviteCode.ts | 2 +- .../com/atproto/server/createInviteCodes.ts | 4 +- .../api/com/atproto/server/createSession.ts | 3 +- .../com/atproto/server/deactivateAccount.ts | 2 +- .../api/com/atproto/server/deleteAccount.ts | 6 +- .../api/com/atproto/server/deleteSession.ts | 2 +- .../api/com/atproto/server/describeServer.ts | 2 +- .../atproto/server/getAccountInviteCodes.ts | 6 +- .../api/com/atproto/server/getServiceAuth.ts | 8 +- .../src/api/com/atproto/server/getSession.ts | 7 +- .../pds/src/api/com/atproto/server/index.ts | 51 +- .../com/atproto/server/listAppPasswords.ts | 3 +- .../api/com/atproto/server/refreshSession.ts | 5 +- .../atproto/server/requestAccountDelete.ts | 4 +- .../server/requestEmailConfirmation.ts | 4 +- .../com/atproto/server/requestEmailUpdate.ts | 6 +- .../atproto/server/requestPasswordReset.ts | 2 +- .../com/atproto/server/reserveSigningKey.ts | 2 +- .../api/com/atproto/server/resetPassword.ts | 4 +- .../com/atproto/server/revokeAppPassword.ts | 3 +- .../src/api/com/atproto/server/updateEmail.ts | 6 +- .../pds/src/api/com/atproto/server/util.ts | 8 +- .../atproto/sync/deprecated/getCheckout.ts | 2 +- .../com/atproto/sync/deprecated/getHead.ts | 2 +- .../pds/src/api/com/atproto/sync/getBlob.ts | 8 +- .../pds/src/api/com/atproto/sync/getBlocks.ts | 4 +- .../api/com/atproto/sync/getLatestCommit.ts | 2 +- .../pds/src/api/com/atproto/sync/getRecord.ts | 8 +- .../pds/src/api/com/atproto/sync/getRepo.ts | 8 +- .../src/api/com/atproto/sync/getRepoStatus.ts | 6 +- .../pds/src/api/com/atproto/sync/index.ts | 10 +- .../pds/src/api/com/atproto/sync/listBlobs.ts | 6 +- .../pds/src/api/com/atproto/sync/listRepos.ts | 6 +- .../api/com/atproto/sync/subscribeRepos.ts | 4 +- packages/pds/src/api/com/atproto/sync/util.ts | 2 +- .../api/com/atproto/temp/checkSignupQueue.ts | 6 +- .../pds/src/api/com/atproto/temp/index.ts | 2 +- packages/pds/src/api/index.ts | 4 +- packages/pds/src/api/proxy.ts | 2 +- packages/pds/src/auth-routes.ts | 5 +- packages/pds/src/auth-verifier.ts | 5 +- packages/pds/src/basic-routes.ts | 8 +- packages/pds/src/config/config.ts | 2 +- packages/pds/src/config/env.ts | 2 +- packages/pds/src/context.ts | 51 +- packages/pds/src/crawlers.ts | 2 +- packages/pds/src/db/db.ts | 10 +- packages/pds/src/db/migrator.ts | 2 +- packages/pds/src/db/tables/moderation.ts | 4 +- packages/pds/src/db/util.ts | 4 +- packages/pds/src/did-cache/db/index.ts | 2 +- packages/pds/src/did-cache/index.ts | 2 +- packages/pds/src/disk-blobstore.ts | 14 +- packages/pds/src/error.ts | 4 +- packages/pds/src/handle/index.ts | 4 +- packages/pds/src/image/index.ts | 4 +- packages/pds/src/index.ts | 30 +- packages/pds/src/logger.ts | 2 +- packages/pds/src/mailer/index.ts | 3 +- packages/pds/src/mailer/moderation.ts | 2 +- .../src/mailer/templates/confirm-email.d.ts | 2 +- .../src/mailer/templates/delete-account.d.ts | 2 +- .../src/mailer/templates/plc-operation.d.ts | 2 +- .../src/mailer/templates/reset-password.d.ts | 2 +- .../src/mailer/templates/update-email.d.ts | 2 +- packages/pds/src/oauth/provider.ts | 1 - packages/pds/src/pipethrough.ts | 10 +- packages/pds/src/read-after-write/types.ts | 6 +- packages/pds/src/read-after-write/util.ts | 5 +- packages/pds/src/read-after-write/viewer.ts | 36 +- packages/pds/src/redis.ts | 2 +- packages/pds/src/repo/prepare.ts | 38 +- packages/pds/src/repo/types.ts | 4 +- packages/pds/src/scripts/rebuild-repo.ts | 4 +- packages/pds/src/sequencer/db/index.ts | 2 +- packages/pds/src/sequencer/events.ts | 8 +- packages/pds/src/sequencer/outbox.ts | 4 +- packages/pds/src/sequencer/sequencer.ts | 24 +- packages/pds/src/util/compression.ts | 2 +- packages/pds/src/util/params.ts | 2 +- packages/pds/src/well-known.ts | 8 +- packages/pds/tests/_util.ts | 10 +- packages/pds/tests/account-deletion.test.ts | 14 +- packages/pds/tests/account-migration.test.ts | 6 +- packages/pds/tests/account.test.ts | 4 +- packages/pds/tests/app-passwords.test.ts | 2 +- packages/pds/tests/blob-deletes.test.ts | 4 +- packages/pds/tests/create-post.test.ts | 6 +- packages/pds/tests/crud.test.ts | 10 +- packages/pds/tests/email-confirmation.test.ts | 10 +- packages/pds/tests/entryway.test.ts | 10 +- packages/pds/tests/file-uploads.test.ts | 14 +- packages/pds/tests/handles.test.ts | 6 +- packages/pds/tests/invites-admin.test.ts | 2 +- packages/pds/tests/moderation.test.ts | 4 +- packages/pds/tests/moderator-auth.test.ts | 12 +- packages/pds/tests/oauth.test.ts | 8 +- packages/pds/tests/plc-operations.test.ts | 12 +- packages/pds/tests/preferences.test.ts | 4 +- packages/pds/tests/proxied/admin.test.ts | 4 +- packages/pds/tests/proxied/feedgen.test.ts | 8 +- packages/pds/tests/proxied/notif.test.ts | 10 +- packages/pds/tests/proxied/procedures.test.ts | 2 +- .../pds/tests/proxied/proxy-catchall.test.ts | 12 +- .../pds/tests/proxied/proxy-header.test.ts | 10 +- .../tests/proxied/read-after-write.test.ts | 12 +- packages/pds/tests/proxied/views.test.ts | 6 +- packages/pds/tests/races.test.ts | 4 +- packages/pds/tests/rate-limits.test.ts | 2 +- packages/pds/tests/sequencer.test.ts | 14 +- packages/pds/tests/server.test.ts | 8 +- packages/pds/tests/sync/list.test.ts | 2 +- .../pds/tests/sync/subscribe-repos.test.ts | 18 +- packages/pds/tests/sync/sync.test.ts | 6 +- packages/pds/tests/takedown-appeal.test.ts | 2 +- packages/repo/bench/mst.bench.ts | 4 +- packages/repo/package.json | 3 + packages/repo/src/block-map.ts | 4 +- packages/repo/src/data-diff.ts | 6 +- packages/repo/src/mst/diff.ts | 4 +- packages/repo/src/mst/mst.ts | 17 +- packages/repo/src/mst/util.ts | 6 +- packages/repo/src/mst/walker.ts | 2 - packages/repo/src/parse.ts | 6 +- packages/repo/src/readable-repo.ts | 16 +- packages/repo/src/repo.ts | 18 +- .../repo/src/storage/memory-blockstore.ts | 4 +- .../repo/src/storage/readable-blockstore.ts | 4 +- packages/repo/src/storage/sync-storage.ts | 4 +- packages/repo/src/storage/types.ts | 6 +- packages/repo/src/sync/consumer.ts | 14 +- packages/repo/src/sync/provider.ts | 8 +- packages/repo/src/types.ts | 10 +- packages/repo/src/util.ts | 25 +- packages/repo/tests/_util.ts | 18 +- packages/repo/tests/commit-data.test.ts | 2 +- packages/repo/tests/mst.test.ts | 8 +- packages/repo/tests/proofs.test.ts | 1 - packages/repo/tests/repo.test.ts | 6 +- packages/repo/tests/sync.test.ts | 5 +- packages/sync/package.json | 3 + packages/sync/src/events.ts | 2 +- packages/sync/src/firehose/index.ts | 30 +- packages/sync/src/firehose/lexicons.ts | 3 +- packages/sync/src/runner/memory-runner.ts | 2 - packages/sync/src/util.ts | 2 +- packages/sync/tests/firehose.test.ts | 6 +- packages/syntax/src/aturi_validation.ts | 2 +- packages/syntax/tests/aturi.test.ts | 4 +- packages/syntax/tests/datetime.test.ts | 8 +- packages/syntax/tests/did.test.ts | 6 +- packages/syntax/tests/handle.test.ts | 10 +- packages/syntax/tests/nsid.test.ts | 8 +- packages/syntax/tests/recordkey.test.ts | 6 +- packages/syntax/tests/tid.test.ts | 6 +- packages/xrpc-server/package.json | 3 + packages/xrpc-server/src/auth.ts | 2 +- packages/xrpc-server/src/rate-limiter.ts | 2 +- packages/xrpc-server/src/server.ts | 41 +- packages/xrpc-server/src/stream/frames.ts | 8 +- packages/xrpc-server/src/stream/server.ts | 6 +- packages/xrpc-server/src/stream/stream.ts | 6 +- .../xrpc-server/src/stream/subscription.ts | 2 +- .../src/stream/websocket-keepalive.ts | 2 +- packages/xrpc-server/src/types.ts | 70 +- packages/xrpc-server/src/util.ts | 19 +- packages/xrpc-server/tests/_util.ts | 2 +- packages/xrpc-server/tests/auth.test.ts | 8 +- packages/xrpc-server/tests/bodies.test.ts | 8 +- packages/xrpc-server/tests/errors.test.ts | 2 +- packages/xrpc-server/tests/frames.test.ts | 2 +- packages/xrpc-server/tests/ipld.test.ts | 4 +- packages/xrpc-server/tests/parameters.test.ts | 2 +- packages/xrpc-server/tests/procedures.test.ts | 4 +- packages/xrpc-server/tests/queries.test.ts | 2 +- packages/xrpc-server/tests/responses.test.ts | 4 +- packages/xrpc-server/tests/stream.test.ts | 6 +- .../xrpc-server/tests/subscriptions.test.ts | 10 +- packages/xrpc/src/client.ts | 2 +- packages/xrpc/src/index.ts | 2 + packages/xrpc/src/util.ts | 4 +- pnpm-lock.yaml | 895 ++++++++++++++++++ services/bsky/api.js | 8 +- services/bsync/index.js | 6 +- services/ozone/api.js | 6 +- services/pds/index.js | 2 +- services/pds/run-script.js | 2 +- services/pds/tracer.js | 5 +- 818 files changed, 3643 insertions(+), 2797 deletions(-) create mode 100644 .changeset/fair-tigers-thank.md create mode 100644 .changeset/mighty-actors-complain.md create mode 100644 .changeset/olive-teachers-yawn.md create mode 100644 .vscode/settings.json delete mode 100644 packages/api/bench/agent.bench.ts diff --git a/.changeset/fair-tigers-thank.md b/.changeset/fair-tigers-thank.md new file mode 100644 index 00000000..9491e3c4 --- /dev/null +++ b/.changeset/fair-tigers-thank.md @@ -0,0 +1,41 @@ +--- +"@atproto-labs/rollup-plugin-bundle-manifest": patch +"@atproto/oauth-client-browser-example": patch +"@atproto-labs/handle-resolver-node": patch +"@atproto-labs/simple-store-memory": patch +"@atproto-labs/identity-resolver": patch +"@atproto/oauth-client-browser": patch +"@atproto-labs/handle-resolver": patch +"@atproto/oauth-client-node": patch +"@atproto-labs/did-resolver": patch +"@atproto-labs/simple-store": patch +"@atproto/oauth-provider": patch +"@atproto-labs/fetch-node": patch +"@atproto/jwk-webcrypto": patch +"@atproto/oauth-client": patch +"@atproto/oauth-types": patch +"@atproto-labs/fetch": patch +"@atproto/jwk-jose": patch +"@atproto/xrpc-server": patch +"@atproto/common-web": patch +"@atproto/jwk": patch +"@atproto/identity": patch +"@atproto/dev-env": patch +"@atproto/lex-cli": patch +"@atproto/lexicon": patch +"@atproto/common": patch +"@atproto/crypto": patch +"@atproto/syntax": patch +"@atproto/bsync": patch +"@atproto/ozone": patch +"@atproto/bsky": patch +"@atproto/repo": patch +"@atproto/sync": patch +"@atproto/xrpc": patch +"@atproto/api": patch +"@atproto/aws": patch +"@atproto/did": patch +"@atproto/pds": patch +--- + +Apply new linting rules regarding import order diff --git a/.changeset/mighty-actors-complain.md b/.changeset/mighty-actors-complain.md new file mode 100644 index 00000000..02236e7d --- /dev/null +++ b/.changeset/mighty-actors-complain.md @@ -0,0 +1,22 @@ +--- +"@atproto-labs/rollup-plugin-bundle-manifest": patch +"@atproto-labs/handle-resolver-node": patch +"@atproto/oauth-client-node": patch +"@atproto/oauth-provider": patch +"@atproto-labs/fetch-node": patch +"@atproto/xrpc-server": patch +"@atproto/identity": patch +"@atproto/dev-env": patch +"@atproto/lex-cli": patch +"@atproto/common": patch +"@atproto/crypto": patch +"@atproto/bsync": patch +"@atproto/ozone": patch +"@atproto/bsky": patch +"@atproto/repo": patch +"@atproto/sync": patch +"@atproto/aws": patch +"@atproto/pds": patch +--- + +Update NodeJS engine requirement to >=18.7.0 diff --git a/.changeset/olive-teachers-yawn.md b/.changeset/olive-teachers-yawn.md new file mode 100644 index 00000000..2211f115 --- /dev/null +++ b/.changeset/olive-teachers-yawn.md @@ -0,0 +1,5 @@ +--- +"@atproto/oauth-types": patch +--- + +Support environments not providing URL.canParse diff --git a/.eslintrc b/.eslintrc index 8529167b..8afe9bb5 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,24 +1,48 @@ { "root": true, - // parse TypeScript files - // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser - "parser": "@typescript-eslint/parser", - // configure eslint using options described at - // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin - "plugins": ["@typescript-eslint"], "extends": [ "eslint:recommended", + "plugin:@typescript-eslint/base", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", - "prettier" + "plugin:import/recommended", + "plugin:import/typescript" ], + "plugins": ["n"], "ignorePatterns": ["dist", "node_modules"], "rules": { "no-var": "error", "prefer-const": "warn", "no-misleading-character-class": "warn", "eqeqeq": ["error", "always", { "null": "ignore" }], + "n/global-require": "error", + "n/no-extraneous-import": "error", + "n/prefer-node-protocol": "error", + "import/extensions": ["off", "ignorePackages"], + "import/export": "off", + "import/namespace": "off", + "import/no-deprecated": "error", + "import/no-absolute-path": "error", + "import/no-dynamic-require": "error", + "import/no-self-import": "error", + "import/order": [ + "error", + { + "named": true, + "distinctGroup": true, + "alphabetize": { "order": "asc" }, + "newlines-between": "never", + "groups": [ + "builtin", + "external", + "internal", + "parent", + ["index", "sibling"], + "object" + ] + } + ], "@typescript-eslint/no-unused-vars": [ "warn", { "argsIgnorePattern": "^_", "varsIgnorePattern": "^_" } @@ -43,6 +67,33 @@ "rules": { "@typescript-eslint/no-var-requires": "off" } + }, + { + "files": ["**/*.test.ts", "**/tests/**/*.ts"], + "rules": { + "n/no-extraneous-import": [ + "error", + { "allowModules": ["@atproto/dev-env"] } + ] + } } - ] + ], + "settings": { + "node": { "version": ">=18.7.0" }, + "import/internal-regex": "^@atproto(?:-labs)?/", + "import/parsers": { "@typescript-eslint/parser": [".ts", ".tsx"] }, + "import/resolver": { + "typescript": { + "project": [ + "tsconfig.json", + "packages/oauth/*/tsconfig.json", + "packages/internal/*/tsconfig.json", + "packages/*/tsconfig.json" + ] + }, + "node": { + "extensions": [".js", ".jsx", ".json"] + } + } + } } diff --git a/.gitignore b/.gitignore index dccb907c..cda9f584 100644 --- a/.gitignore +++ b/.gitignore @@ -5,12 +5,12 @@ yarn-error.log packages/**/dist .idea packages/*/coverage -.vscode/ test.sqlite .DS_Store *.log *.tsbuildinfo .*.env +.env.* .env \#*\# *~ diff --git a/.prettierignore b/.prettierignore index 16e700de..681b5d03 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,12 +1,8 @@ node_modules interop-test-files +__snapshots__ dist -build -.nyc_output -coverage pnpm-lock.yaml .pnpm* .changeset -*.d.ts -packages/bsky/src/data-plane/gen CHANGELOG.md diff --git a/.prettierrc b/.prettierrc index 078e4235..d7161f6a 100644 --- a/.prettierrc +++ b/.prettierrc @@ -9,6 +9,13 @@ "options": { "singleQuote": false } + }, + { + "files": [".eslintrc"], + "options": { + "parser": "json", + "trailingComma": "none" + } } ] } diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..b5230afc --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "files.associations": { + "**/tsconfig/*.json": "jsonc" + } +} diff --git a/package.json b/package.json index e9de3327..2601cf84 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "license": "MIT", "private": true, "engines": { - "node": "18" + "node": ">=18.7.0" }, "packageManager": "pnpm@8.15.9", "scripts": { @@ -43,6 +43,9 @@ "dotenv": "^16.0.3", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.7.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-n": "^17.15.0", "eslint-plugin-prettier": "^5.1.3", "jest": "^28.1.2", "node-gyp": "^9.3.1", diff --git a/packages/api/bench/agent.bench.ts b/packages/api/bench/agent.bench.ts deleted file mode 100644 index 333fbd49..00000000 --- a/packages/api/bench/agent.bench.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { BskyAgent } from '@atproto/api' - -describe('Agent Benchmarks', () => { - it('Creates new Agent instance 10 times', () => { - for (let i = 0; i < 10; i++) { - new BskyAgent({ service: 'https://bsky.social' }) - } - }) -}) diff --git a/packages/api/src/agent.ts b/packages/api/src/agent.ts index 7613e58d..b0be3ba7 100644 --- a/packages/api/src/agent.ts +++ b/packages/api/src/agent.ts @@ -1,12 +1,7 @@ +import AwaitLock from 'await-lock' import { TID } from '@atproto/common-web' import { AtUri, ensureValidDid } from '@atproto/syntax' -import { - buildFetchHandler, - BuildFetchHandlerOptions, - FetchHandler, - XrpcClient, -} from '@atproto/xrpc' -import AwaitLock from 'await-lock' +import { FetchHandler, XrpcClient, buildFetchHandler } from '@atproto/xrpc' import { AppBskyActorDefs, AppBskyActorProfile, @@ -38,14 +33,14 @@ import { BskyThreadViewPreference, } from './types' import { - asDid, Did, + asDid, getSavedFeedType, isDid, sanitizeMutedWordValue, savedFeedsToUriArrays, - validateSavedFeed, validateNux, + validateSavedFeed, } from './util' const FEED_VIEW_PREF_DEFAULTS = { diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 43d46020..8ced8afe 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -4,10 +4,10 @@ import { lexicons as internalLexicons } from './client/lexicons' export { AtUri } from '@atproto/syntax' export { BlobRef, + jsonStringToLex, + jsonToLex, lexToJson, stringifyLex, - jsonToLex, - jsonStringToLex, } from '@atproto/lexicon' export { parseLanguage } from '@atproto/common-web' export * from './types' @@ -22,7 +22,7 @@ export * from './rich-text/util' export * from './moderation' export * from './moderation/types' export * from './mocker' -export { LABELS, DEFAULT_LABEL_SETTINGS } from './moderation/const/labels' +export { DEFAULT_LABEL_SETTINGS, LABELS } from './moderation/const/labels' export { Agent } from './agent' export { AtpAgent, type AtpAgentOptions } from './atp-agent' diff --git a/packages/api/src/mocker.ts b/packages/api/src/mocker.ts index 556dba96..905268de 100644 --- a/packages/api/src/mocker.ts +++ b/packages/api/src/mocker.ts @@ -1,11 +1,11 @@ import { - ComAtprotoLabelDefs, - AppBskyFeedDefs, AppBskyActorDefs, - AppBskyFeedPost, AppBskyEmbedRecord, + AppBskyFeedDefs, + AppBskyFeedPost, AppBskyGraphDefs, AppBskyNotificationListNotifications, + ComAtprotoLabelDefs, } from './client' const FAKE_CID = 'bafyreiclp443lavogvhj3d2ob2cxbfuscni2k5jk7bebjzg7khl3esabwq' diff --git a/packages/api/src/moderation/decision.ts b/packages/api/src/moderation/decision.ts index 042a90bb..bc33e100 100644 --- a/packages/api/src/moderation/decision.ts +++ b/packages/api/src/moderation/decision.ts @@ -1,20 +1,20 @@ import { AppBskyGraphDefs } from '../client/index' +import { LABELS } from './const/labels' import { BLOCK_BEHAVIOR, - MUTE_BEHAVIOR, - MUTEWORD_BEHAVIOR, + CUSTOM_LABEL_VALUE_RE, HIDE_BEHAVIOR, - NOOP_BEHAVIOR, Label, LabelPreference, + LabelTarget, + MUTEWORD_BEHAVIOR, + MUTE_BEHAVIOR, + ModerationBehavior, ModerationCause, ModerationOpts, - LabelTarget, - ModerationBehavior, - CUSTOM_LABEL_VALUE_RE, + NOOP_BEHAVIOR, } from './types' import { ModerationUI } from './ui' -import { LABELS } from './const/labels' enum ModerationBehaviorSeverity { High, diff --git a/packages/api/src/moderation/index.ts b/packages/api/src/moderation/index.ts index 503e635c..b2375899 100644 --- a/packages/api/src/moderation/index.ts +++ b/packages/api/src/moderation/index.ts @@ -1,18 +1,18 @@ -import { - ModerationSubjectProfile, - ModerationSubjectPost, - ModerationSubjectNotification, - ModerationSubjectFeedGenerator, - ModerationSubjectUserList, - ModerationOpts, -} from './types' +import { ModerationDecision } from './decision' import { decideAccount } from './subjects/account' -import { decideProfile } from './subjects/profile' +import { decideFeedGenerator } from './subjects/feed-generator' import { decideNotification } from './subjects/notification' import { decidePost } from './subjects/post' -import { decideFeedGenerator } from './subjects/feed-generator' +import { decideProfile } from './subjects/profile' import { decideUserList } from './subjects/user-list' -import { ModerationDecision } from './decision' +import { + ModerationOpts, + ModerationSubjectFeedGenerator, + ModerationSubjectNotification, + ModerationSubjectPost, + ModerationSubjectProfile, + ModerationSubjectUserList, +} from './types' export { ModerationUI } from './ui' export { ModerationDecision } from './decision' diff --git a/packages/api/src/moderation/subjects/account.ts b/packages/api/src/moderation/subjects/account.ts index a1c873b7..6014d46f 100644 --- a/packages/api/src/moderation/subjects/account.ts +++ b/packages/api/src/moderation/subjects/account.ts @@ -1,5 +1,5 @@ import { ModerationDecision } from '../decision' -import { Label, ModerationSubjectProfile, ModerationOpts } from '../types' +import { Label, ModerationOpts, ModerationSubjectProfile } from '../types' export function decideAccount( subject: ModerationSubjectProfile, diff --git a/packages/api/src/moderation/subjects/feed-generator.ts b/packages/api/src/moderation/subjects/feed-generator.ts index 3afada34..8568f90f 100644 --- a/packages/api/src/moderation/subjects/feed-generator.ts +++ b/packages/api/src/moderation/subjects/feed-generator.ts @@ -1,5 +1,5 @@ import { ModerationDecision } from '../decision' -import { ModerationSubjectFeedGenerator, ModerationOpts } from '../types' +import { ModerationOpts, ModerationSubjectFeedGenerator } from '../types' import { decideAccount } from './account' import { decideProfile } from './profile' diff --git a/packages/api/src/moderation/subjects/notification.ts b/packages/api/src/moderation/subjects/notification.ts index 61076686..2e3a8a09 100644 --- a/packages/api/src/moderation/subjects/notification.ts +++ b/packages/api/src/moderation/subjects/notification.ts @@ -1,5 +1,5 @@ import { ModerationDecision } from '../decision' -import { ModerationSubjectNotification, ModerationOpts } from '../types' +import { ModerationOpts, ModerationSubjectNotification } from '../types' import { decideAccount } from './account' import { decideProfile } from './profile' diff --git a/packages/api/src/moderation/subjects/post.ts b/packages/api/src/moderation/subjects/post.ts index f17ec402..8d0b7c6d 100644 --- a/packages/api/src/moderation/subjects/post.ts +++ b/packages/api/src/moderation/subjects/post.ts @@ -1,14 +1,14 @@ -import { ModerationDecision } from '../decision' import { - AppBskyFeedPost, + AppBskyActorDefs, + AppBskyEmbedExternal, AppBskyEmbedImages, AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia, - AppBskyEmbedExternal, - AppBskyActorDefs, + AppBskyFeedPost, } from '../../client' -import { ModerationSubjectPost, ModerationOpts } from '../types' +import { ModerationDecision } from '../decision' import { hasMutedWord } from '../mutewords' +import { ModerationOpts, ModerationSubjectPost } from '../types' import { decideAccount } from './account' import { decideProfile } from './profile' diff --git a/packages/api/src/moderation/subjects/profile.ts b/packages/api/src/moderation/subjects/profile.ts index f76e2bfa..0dfcf67b 100644 --- a/packages/api/src/moderation/subjects/profile.ts +++ b/packages/api/src/moderation/subjects/profile.ts @@ -1,5 +1,5 @@ import { ModerationDecision } from '../decision' -import { Label, ModerationSubjectProfile, ModerationOpts } from '../types' +import { Label, ModerationOpts, ModerationSubjectProfile } from '../types' export function decideProfile( subject: ModerationSubjectProfile, diff --git a/packages/api/src/moderation/subjects/user-list.ts b/packages/api/src/moderation/subjects/user-list.ts index f5ed1517..f2d5f408 100644 --- a/packages/api/src/moderation/subjects/user-list.ts +++ b/packages/api/src/moderation/subjects/user-list.ts @@ -1,7 +1,7 @@ import { AtUri } from '@atproto/syntax' import { AppBskyActorDefs } from '../../client/index' import { ModerationDecision } from '../decision' -import { ModerationSubjectUserList, ModerationOpts } from '../types' +import { ModerationOpts, ModerationSubjectUserList } from '../types' import { decideAccount } from './account' import { decideProfile } from './profile' diff --git a/packages/api/src/moderation/types.ts b/packages/api/src/moderation/types.ts index bbf8d842..6d2371b1 100644 --- a/packages/api/src/moderation/types.ts +++ b/packages/api/src/moderation/types.ts @@ -1,8 +1,8 @@ import { AppBskyActorDefs, AppBskyFeedDefs, - AppBskyNotificationListNotifications, AppBskyGraphDefs, + AppBskyNotificationListNotifications, ComAtprotoLabelDefs, } from '../client/index' import { KnownLabelValue } from './const/labels' diff --git a/packages/api/src/moderation/util.ts b/packages/api/src/moderation/util.ts index c7ac5bdf..4c4c4eb2 100644 --- a/packages/api/src/moderation/util.ts +++ b/packages/api/src/moderation/util.ts @@ -6,9 +6,9 @@ import { } from '../client' import { InterpretedLabelValueDefinition, - ModerationBehavior, LabelPreference, LabelValueDefinitionFlag, + ModerationBehavior, } from './types' export function isQuotedPost(embed: unknown): embed is AppBskyEmbedRecord.View { diff --git a/packages/api/src/rich-text/detection.ts b/packages/api/src/rich-text/detection.ts index 8d1e0552..f4b190e1 100644 --- a/packages/api/src/rich-text/detection.ts +++ b/packages/api/src/rich-text/detection.ts @@ -2,10 +2,10 @@ import TLDs from 'tlds' import { AppBskyRichtextFacet } from '../client' import { UnicodeString } from './unicode' import { - URL_REGEX, MENTION_REGEX, TAG_REGEX, TRAILING_PUNCTUATION_REGEX, + URL_REGEX, } from './util' export type Facet = AppBskyRichtextFacet.Main diff --git a/packages/api/src/rich-text/rich-text.ts b/packages/api/src/rich-text/rich-text.ts index 2b7d0227..44f48b5f 100644 --- a/packages/api/src/rich-text/rich-text.ts +++ b/packages/api/src/rich-text/rich-text.ts @@ -92,9 +92,9 @@ F: 0 1 2 3 4 5 6 7 8 910 // string indices */ import { AppBskyFeedPost, AppBskyRichtextFacet, AtpBaseClient } from '../client' -import { UnicodeString } from './unicode' -import { sanitizeRichText } from './sanitization' import { detectFacets } from './detection' +import { sanitizeRichText } from './sanitization' +import { UnicodeString } from './unicode' export type Facet = AppBskyRichtextFacet.Main export type FacetLink = AppBskyRichtextFacet.Link diff --git a/packages/api/src/util.ts b/packages/api/src/util.ts index 145ffba7..5e9e28bf 100644 --- a/packages/api/src/util.ts +++ b/packages/api/src/util.ts @@ -1,9 +1,8 @@ -import { AtUri } from '@atproto/syntax' +import { z } from 'zod' import { TID } from '@atproto/common-web' -import zod from 'zod' - -import { Nux } from './client/types/app/bsky/actor/defs' +import { AtUri } from '@atproto/syntax' import { AppBskyActorDefs } from './client' +import { Nux } from './client/types/app/bsky/actor/defs' export function sanitizeMutedWordValue(value: string) { return ( @@ -97,12 +96,12 @@ export const asDid = (value: string): Did => { throw new TypeError(`Invalid DID: ${value}`) } -export const nuxSchema = zod +export const nuxSchema = z .object({ - id: zod.string().max(64), - completed: zod.boolean(), - data: zod.string().max(300).optional(), - expiresAt: zod.string().datetime().optional(), + id: z.string().max(64), + completed: z.boolean(), + data: z.string().max(300).optional(), + expiresAt: z.string().datetime().optional(), }) .strict() diff --git a/packages/api/tests/atp-agent.test.ts b/packages/api/tests/atp-agent.test.ts index b2387dba..823faf63 100644 --- a/packages/api/tests/atp-agent.test.ts +++ b/packages/api/tests/atp-agent.test.ts @@ -1,5 +1,5 @@ -import { TestNetworkNoAppView } from '@atproto/dev-env' import { TID } from '@atproto/common-web' +import { TestNetworkNoAppView } from '@atproto/dev-env' import { AppBskyActorDefs, AppBskyActorProfile, diff --git a/packages/api/tests/dispatcher.test.ts b/packages/api/tests/dispatcher.test.ts index 0c686aa9..11c4802c 100644 --- a/packages/api/tests/dispatcher.test.ts +++ b/packages/api/tests/dispatcher.test.ts @@ -1,13 +1,13 @@ +import assert from 'node:assert' import { AddressInfo } from 'node:net' -import assert from 'assert' +import { getPdsEndpoint, isValidDidDoc } from '@atproto/common-web' +import { TestNetworkNoAppView } from '@atproto/dev-env' import { AtpAgent, - AtpSessionEvent, AtpSessionData, + AtpSessionEvent, BSKY_LABELER_DID, } from '../src' -import { TestNetworkNoAppView } from '@atproto/dev-env' -import { getPdsEndpoint, isValidDidDoc } from '@atproto/common-web' import { createHeaderEchoServer } from './util/echo-server' const getPdsEndpointUrl = (...args: Parameters<typeof getPdsEndpoint>) => { diff --git a/packages/api/tests/errors.test.ts b/packages/api/tests/errors.test.ts index 2d903f2f..e2cfff26 100644 --- a/packages/api/tests/errors.test.ts +++ b/packages/api/tests/errors.test.ts @@ -1,5 +1,5 @@ -import { AtpAgent, ComAtprotoServerCreateAccount } from '..' import { TestNetworkNoAppView } from '@atproto/dev-env' +import { AtpAgent, ComAtprotoServerCreateAccount } from '..' describe('errors', () => { let network: TestNetworkNoAppView diff --git a/packages/api/tests/moderation-behaviors.test.ts b/packages/api/tests/moderation-behaviors.test.ts index 7e8b54a6..a180828b 100644 --- a/packages/api/tests/moderation-behaviors.test.ts +++ b/packages/api/tests/moderation-behaviors.test.ts @@ -1,10 +1,10 @@ -import { moderateProfile, moderatePost } from '../src' +import { moderatePost, moderateProfile } from '../src' import { ModerationBehaviorSuiteRunner, - SuiteUsers, + ModerationTestSuiteScenario, SuiteConfigurations, SuiteScenarios, - ModerationTestSuiteScenario, + SuiteUsers, } from './util/moderation-behavior' const USERS: SuiteUsers = { diff --git a/packages/api/tests/moderation-custom-labels.test.ts b/packages/api/tests/moderation-custom-labels.test.ts index 3e051fb0..0af184ae 100644 --- a/packages/api/tests/moderation-custom-labels.test.ts +++ b/packages/api/tests/moderation-custom-labels.test.ts @@ -1,10 +1,10 @@ import { - moderateProfile, - moderatePost, - mock, - ModerationOpts, InterpretedLabelValueDefinition, + ModerationOpts, interpretLabelValueDefinition, + mock, + moderatePost, + moderateProfile, } from '../src' import './util/moderation-behavior' diff --git a/packages/api/tests/moderation-mutewords.test.ts b/packages/api/tests/moderation-mutewords.test.ts index 681dddc7..b8eb014e 100644 --- a/packages/api/tests/moderation-mutewords.test.ts +++ b/packages/api/tests/moderation-mutewords.test.ts @@ -1,5 +1,4 @@ import { RichText, mock, moderatePost } from '../src/' - import { hasMutedWord } from '../src/moderation/mutewords' describe(`hasMutedWord`, () => { diff --git a/packages/api/tests/moderation-quoteposts.test.ts b/packages/api/tests/moderation-quoteposts.test.ts index 1ed415d3..2041f190 100644 --- a/packages/api/tests/moderation-quoteposts.test.ts +++ b/packages/api/tests/moderation-quoteposts.test.ts @@ -1,9 +1,9 @@ import { - moderatePost, - mock, - ModerationOpts, InterpretedLabelValueDefinition, + ModerationOpts, interpretLabelValueDefinition, + mock, + moderatePost, } from '../src' import './util/moderation-behavior' diff --git a/packages/api/tests/moderation.test.ts b/packages/api/tests/moderation.test.ts index d7d3f9d4..f85e4a53 100644 --- a/packages/api/tests/moderation.test.ts +++ b/packages/api/tests/moderation.test.ts @@ -1,11 +1,11 @@ +import { ModerationOpts } from '../dist' import { - moderateProfile, - moderatePost, - mock, interpretLabelValueDefinition, + mock, + moderatePost, + moderateProfile, } from '../src' import './util/moderation-behavior' -import { ModerationOpts } from '../dist' describe('Moderation', () => { it('Applies self-labels on profiles according to the global preferences', () => { diff --git a/packages/api/tests/rich-text-sanitization.test.ts b/packages/api/tests/rich-text-sanitization.test.ts index 6e2a8894..45365df1 100644 --- a/packages/api/tests/rich-text-sanitization.test.ts +++ b/packages/api/tests/rich-text-sanitization.test.ts @@ -1,4 +1,4 @@ -import { RichText, sanitizeRichText, Facet, UnicodeString } from '../src' +import { Facet, RichText, UnicodeString, sanitizeRichText } from '../src' describe('sanitizeRichText: cleanNewlines', () => { it('removes more than two consecutive new lines', () => { diff --git a/packages/api/tests/util/moderation-behavior.ts b/packages/api/tests/util/moderation-behavior.ts index 9cc8a9a0..f3098685 100644 --- a/packages/api/tests/util/moderation-behavior.ts +++ b/packages/api/tests/util/moderation-behavior.ts @@ -1,8 +1,8 @@ import { - ModerationUI, - ModerationOpts, ComAtprotoLabelDefs, LabelPreference, + ModerationOpts, + ModerationUI, } from '../../src' import { mock as m } from '../../src/mocker' diff --git a/packages/aws/package.json b/packages/aws/package.json index b277284b..752d6850 100644 --- a/packages/aws/package.json +++ b/packages/aws/package.json @@ -18,6 +18,9 @@ "scripts": { "build": "tsc --build tsconfig.build.json" }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto/common": "workspace:^", "@atproto/crypto": "workspace:^", diff --git a/packages/aws/src/kms.ts b/packages/aws/src/kms.ts index da2eb183..7589307d 100644 --- a/packages/aws/src/kms.ts +++ b/packages/aws/src/kms.ts @@ -1,8 +1,8 @@ import * as aws from '@aws-sdk/client-kms' import { secp256k1 as noble } from '@noble/curves/secp256k1' +import KeyEncoder from 'key-encoder' import * as ui8 from 'uint8arrays' import * as crypto from '@atproto/crypto' -import KeyEncoder from 'key-encoder' const keyEncoder = new KeyEncoder('secp256k1') diff --git a/packages/aws/src/s3.ts b/packages/aws/src/s3.ts index 81014d63..682a5a0c 100644 --- a/packages/aws/src/s3.ts +++ b/packages/aws/src/s3.ts @@ -1,9 +1,9 @@ +import stream from 'node:stream' import * as aws from '@aws-sdk/client-s3' import { Upload } from '@aws-sdk/lib-storage' -import { BlobStore, BlobNotFoundError } from '@atproto/repo' -import { randomStr } from '@atproto/crypto' import { CID } from 'multiformats/cid' -import stream from 'stream' +import { randomStr } from '@atproto/crypto' +import { BlobNotFoundError, BlobStore } from '@atproto/repo' export type S3Config = { bucket: string; uploadTimeoutMs?: number } & Omit< aws.S3ClientConfig, diff --git a/packages/bsky/bin/migration-create.ts b/packages/bsky/bin/migration-create.ts index 27edc5e0..4d77afd9 100644 --- a/packages/bsky/bin/migration-create.ts +++ b/packages/bsky/bin/migration-create.ts @@ -1,7 +1,7 @@ #!/usr/bin/env ts-node -import * as fs from 'fs/promises' -import * as path from 'path' +import * as fs from 'node:fs/promises' +import * as path from 'node:path' export async function main() { const now = new Date() diff --git a/packages/bsky/package.json b/packages/bsky/package.json index 79646010..069885e6 100644 --- a/packages/bsky/package.json +++ b/packages/bsky/package.json @@ -26,6 +26,9 @@ "migration:create": "ts-node ./bin/migration-create.ts", "buf:gen": "buf generate ../bsync/proto && buf generate ./proto" }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto-labs/fetch-node": "workspace:*", "@atproto-labs/xrpc-utils": "workspace:*", diff --git a/packages/bsky/src/api/app/bsky/actor/getProfile.ts b/packages/bsky/src/api/app/bsky/actor/getProfile.ts index 04631211..a28d7904 100644 --- a/packages/bsky/src/api/app/bsky/actor/getProfile.ts +++ b/packages/bsky/src/api/app/bsky/actor/getProfile.ts @@ -1,15 +1,15 @@ import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/actor/getProfile' -import AppContext from '../../../../context' -import { resHeaders } from '../../../util' -import { createPipeline, noRules } from '../../../../pipeline' +import { AppContext } from '../../../../context' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/actor/getProfile' +import { createPipeline, noRules } from '../../../../pipeline' import { Views } from '../../../../views' +import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getProfile = createPipeline(skeleton, hydration, noRules, presentation) diff --git a/packages/bsky/src/api/app/bsky/actor/getProfiles.ts b/packages/bsky/src/api/app/bsky/actor/getProfiles.ts index 3328bda7..9f7eb8b5 100644 --- a/packages/bsky/src/api/app/bsky/actor/getProfiles.ts +++ b/packages/bsky/src/api/app/bsky/actor/getProfiles.ts @@ -1,16 +1,16 @@ import { mapDefined } from '@atproto/common' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/actor/getProfiles' -import AppContext from '../../../../context' -import { resHeaders } from '../../../util' -import { createPipeline, noRules } from '../../../../pipeline' +import { AppContext } from '../../../../context' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' +import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' +import { QueryParams } from '../../../../lexicon/types/app/bsky/actor/getProfiles' +import { createPipeline, noRules } from '../../../../pipeline' +import { Views } from '../../../../views' +import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getProfile = createPipeline(skeleton, hydration, noRules, presentation) diff --git a/packages/bsky/src/api/app/bsky/actor/getSuggestions.ts b/packages/bsky/src/api/app/bsky/actor/getSuggestions.ts index 4af0927f..b6f29a2a 100644 --- a/packages/bsky/src/api/app/bsky/actor/getSuggestions.ts +++ b/packages/bsky/src/api/app/bsky/actor/getSuggestions.ts @@ -1,18 +1,18 @@ -import { mapDefined, noUndefinedVals } from '@atproto/common' import { AtpAgent } from '@atproto/api' +import { mapDefined, noUndefinedVals } from '@atproto/common' import { HeadersMap } from '@atproto/xrpc' -import AppContext from '../../../../context' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/actor/getSuggestions' -import { createPipeline } from '../../../../pipeline' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/actor/getSuggestions' +import { createPipeline } from '../../../../pipeline' +import { Views } from '../../../../views' import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/actor/searchActors.ts b/packages/bsky/src/api/app/bsky/actor/searchActors.ts index 9e0d944e..88dc6213 100644 --- a/packages/bsky/src/api/app/bsky/actor/searchActors.ts +++ b/packages/bsky/src/api/app/bsky/actor/searchActors.ts @@ -1,7 +1,10 @@ -import AppContext from '../../../../context' -import { Server } from '../../../../lexicon' -import { mapDefined } from '@atproto/common' import { AtpAgent } from '@atproto/api' +import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' +import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/actor/searchActors' import { HydrationFnInput, @@ -10,10 +13,7 @@ import { SkeletonFnInput, createPipeline, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' -import { parseString } from '../../../../hydration/util' import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/actor/searchActorsTypeahead.ts b/packages/bsky/src/api/app/bsky/actor/searchActorsTypeahead.ts index e5fbe0e3..1808833d 100644 --- a/packages/bsky/src/api/app/bsky/actor/searchActorsTypeahead.ts +++ b/packages/bsky/src/api/app/bsky/actor/searchActorsTypeahead.ts @@ -1,7 +1,10 @@ -import AppContext from '../../../../context' -import { Server } from '../../../../lexicon' import { AtpAgent } from '@atproto/api' import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' +import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/actor/searchActorsTypeahead' import { HydrationFnInput, @@ -10,10 +13,7 @@ import { SkeletonFnInput, createPipeline, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' -import { parseString } from '../../../../hydration/util' import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/feed/getActorFeeds.ts b/packages/bsky/src/api/app/bsky/feed/getActorFeeds.ts index 55624324..b71bead2 100644 --- a/packages/bsky/src/api/app/bsky/feed/getActorFeeds.ts +++ b/packages/bsky/src/api/app/bsky/feed/getActorFeeds.ts @@ -1,17 +1,17 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import { mapDefined } from '@atproto/common' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getActorFeeds' -import AppContext from '../../../../context' -import { createPipeline, noRules } from '../../../../pipeline' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getActorFeeds' +import { createPipeline, noRules } from '../../../../pipeline' +import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/feed/getActorLikes.ts b/packages/bsky/src/api/app/bsky/feed/getActorLikes.ts index 897a1c25..1c83ddcc 100644 --- a/packages/bsky/src/api/app/bsky/feed/getActorLikes.ts +++ b/packages/bsky/src/api/app/bsky/feed/getActorLikes.ts @@ -1,20 +1,20 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import { mapDefined } from '@atproto/common' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getActorLikes' -import AppContext from '../../../../context' -import { clearlyBadCursor, resHeaders } from '../../../util' -import { createPipeline } from '../../../../pipeline' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' +import { FeedItem } from '../../../../hydration/feed' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getActorLikes' +import { createPipeline } from '../../../../pipeline' import { uriToDid as creatorFromUri } from '../../../../util/uris' -import { FeedItem } from '../../../../hydration/feed' +import { Views } from '../../../../views' +import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getActorLikes = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/feed/getAuthorFeed.ts b/packages/bsky/src/api/app/bsky/feed/getAuthorFeed.ts index d0804bde..61ba7831 100644 --- a/packages/bsky/src/api/app/bsky/feed/getAuthorFeed.ts +++ b/packages/bsky/src/api/app/bsky/feed/getAuthorFeed.ts @@ -1,23 +1,23 @@ import { mapDefined } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getAuthorFeed' -import AppContext from '../../../../context' -import { clearlyBadCursor, resHeaders } from '../../../util' -import { createPipeline } from '../../../../pipeline' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' +import { Actor } from '../../../../hydration/actor' +import { FeedItem, Post } from '../../../../hydration/feed' import { HydrateCtx, HydrationState, Hydrator, mergeStates, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' import { parseString } from '../../../../hydration/util' -import { safePinnedPost, uriToDid } from '../../../../util/uris' -import { Actor } from '../../../../hydration/actor' -import { FeedItem, Post } from '../../../../hydration/feed' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getAuthorFeed' +import { createPipeline } from '../../../../pipeline' import { FeedType } from '../../../../proto/bsky_pb' +import { safePinnedPost, uriToDid } from '../../../../util/uris' +import { Views } from '../../../../views' +import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getAuthorFeed = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/feed/getFeed.ts b/packages/bsky/src/api/app/bsky/feed/getFeed.ts index decd4a04..e61ac0e9 100644 --- a/packages/bsky/src/api/app/bsky/feed/getFeed.ts +++ b/packages/bsky/src/api/app/bsky/feed/getFeed.ts @@ -1,17 +1,25 @@ -import { mapDefined } from '@atproto/common' +import { AppBskyFeedGetFeedSkeleton, AtpAgent } from '@atproto/api' +import { mapDefined, noUndefinedVals } from '@atproto/common' +import { ResponseType, XRPCError } from '@atproto/xrpc' import { InvalidRequestError, - UpstreamFailureError, ServerTimer, + UpstreamFailureError, serverTimingHeader, } from '@atproto/xrpc-server' -import { ResponseType, XRPCError } from '@atproto/xrpc' -import { AtpAgent, AppBskyFeedGetFeedSkeleton } from '@atproto/api' -import { noUndefinedVals } from '@atproto/common' +import { AppContext } from '../../../../context' +import { + Code, + getServiceEndpoint, + isDataplaneError, + unpackIdentityServices, +} from '../../../../data-plane' +import { FeedItem } from '../../../../hydration/feed' +import { HydrateCtx } from '../../../../hydration/hydrator' +import { Server } from '../../../../lexicon' +import { ids } from '../../../../lexicon/lexicons' import { QueryParams as GetFeedParams } from '../../../../lexicon/types/app/bsky/feed/getFeed' import { OutputSchema as SkeletonOutput } from '../../../../lexicon/types/app/bsky/feed/getFeedSkeleton' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { HydrationFnInput, PresentationFnInput, @@ -19,17 +27,8 @@ import { SkeletonFnInput, createPipeline, } from '../../../../pipeline' -import { HydrateCtx } from '../../../../hydration/hydrator' -import { FeedItem } from '../../../../hydration/feed' import { GetIdentityByDidResponse } from '../../../../proto/bsky_pb' -import { - Code, - getServiceEndpoint, - isDataplaneError, - unpackIdentityServices, -} from '../../../../data-plane' import { BSKY_USER_AGENT, resHeaders } from '../../../util' -import { ids } from '../../../../lexicon/lexicons' export default function (server: Server, ctx: AppContext) { const getFeed = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/feed/getFeedGenerator.ts b/packages/bsky/src/api/app/bsky/feed/getFeedGenerator.ts index 647bfdd0..12ce1d4d 100644 --- a/packages/bsky/src/api/app/bsky/feed/getFeedGenerator.ts +++ b/packages/bsky/src/api/app/bsky/feed/getFeedGenerator.ts @@ -1,13 +1,13 @@ import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { GetIdentityByDidResponse } from '../../../../proto/bsky_pb' +import { AppContext } from '../../../../context' import { Code, getServiceEndpoint, isDataplaneError, unpackIdentityServices, } from '../../../../data-plane' +import { Server } from '../../../../lexicon' +import { GetIdentityByDidResponse } from '../../../../proto/bsky_pb' import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/feed/getFeedGenerators.ts b/packages/bsky/src/api/app/bsky/feed/getFeedGenerators.ts index 9bf3eaf2..9f8dea40 100644 --- a/packages/bsky/src/api/app/bsky/feed/getFeedGenerators.ts +++ b/packages/bsky/src/api/app/bsky/feed/getFeedGenerators.ts @@ -1,13 +1,13 @@ import { mapDefined } from '@atproto/common' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getFeedGenerators' -import AppContext from '../../../../context' -import { createPipeline, noRules } from '../../../../pipeline' +import { AppContext } from '../../../../context' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getFeedGenerators' +import { createPipeline, noRules } from '../../../../pipeline' import { Views } from '../../../../views' import { resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/feed/getLikes.ts b/packages/bsky/src/api/app/bsky/feed/getLikes.ts index e9963045..4e09bf00 100644 --- a/packages/bsky/src/api/app/bsky/feed/getLikes.ts +++ b/packages/bsky/src/api/app/bsky/feed/getLikes.ts @@ -1,20 +1,19 @@ import { mapDefined } from '@atproto/common' import { normalizeDatetimeAlways } from '@atproto/syntax' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getLikes' -import AppContext from '../../../../context' -import { createPipeline, RulesFnInput } from '../../../../pipeline' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { HydrateCtx, HydrationState, Hydrator, - mergeStates, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getLikes' +import { RulesFnInput, createPipeline } from '../../../../pipeline' import { uriToDid as creatorFromUri } from '../../../../util/uris' +import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' -import { InvalidRequestError } from '@atproto/xrpc-server' export default function (server: Server, ctx: AppContext) { const getLikes = createPipeline(skeleton, hydration, noBlocks, presentation) diff --git a/packages/bsky/src/api/app/bsky/feed/getListFeed.ts b/packages/bsky/src/api/app/bsky/feed/getListFeed.ts index 7d30f3ac..e750350a 100644 --- a/packages/bsky/src/api/app/bsky/feed/getListFeed.ts +++ b/packages/bsky/src/api/app/bsky/feed/getListFeed.ts @@ -1,20 +1,20 @@ -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getListFeed' -import AppContext from '../../../../context' -import { clearlyBadCursor, resHeaders } from '../../../util' -import { createPipeline } from '../../../../pipeline' +import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' +import { FeedItem } from '../../../../hydration/feed' import { HydrateCtx, HydrationState, Hydrator, mergeStates, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' -import { mapDefined } from '@atproto/common' import { parseString } from '../../../../hydration/util' -import { FeedItem } from '../../../../hydration/feed' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getListFeed' +import { createPipeline } from '../../../../pipeline' import { uriToDid } from '../../../../util/uris' +import { Views } from '../../../../views' +import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getListFeed = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/feed/getPostThread.ts b/packages/bsky/src/api/app/bsky/feed/getPostThread.ts index e15f91aa..5b6613b7 100644 --- a/packages/bsky/src/api/app/bsky/feed/getPostThread.ts +++ b/packages/bsky/src/api/app/bsky/feed/getPostThread.ts @@ -1,12 +1,14 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { ServerConfig } from '../../../../config' +import { AppContext } from '../../../../context' +import { Code, DataPlaneClient, isDataplaneError } from '../../../../data-plane' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { isNotFoundPost } from '../../../../lexicon/types/app/bsky/feed/defs' import { - QueryParams, OutputSchema, + QueryParams, } from '../../../../lexicon/types/app/bsky/feed/getPostThread' -import AppContext from '../../../../context' -import { ATPROTO_REPO_REV, resHeaders } from '../../../util' import { HydrationFnInput, PresentationFnInput, @@ -14,11 +16,9 @@ import { createPipeline, noRules, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { DataPlaneClient, isDataplaneError, Code } from '../../../../data-plane' import { postUriToThreadgateUri } from '../../../../util/uris' -import { ServerConfig } from '../../../../config' +import { Views } from '../../../../views' +import { ATPROTO_REPO_REV, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getPostThread = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/feed/getPosts.ts b/packages/bsky/src/api/app/bsky/feed/getPosts.ts index 86fa1cc3..6b441631 100644 --- a/packages/bsky/src/api/app/bsky/feed/getPosts.ts +++ b/packages/bsky/src/api/app/bsky/feed/getPosts.ts @@ -1,17 +1,17 @@ import { dedupeStrs, mapDefined } from '@atproto/common' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getPosts' -import AppContext from '../../../../context' -import { createPipeline } from '../../../../pipeline' +import { AppContext } from '../../../../context' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { uriToDid as creatorFromUri } from '../../../../util/uris' -import { resHeaders } from '../../../util' +import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getPosts' +import { createPipeline } from '../../../../pipeline' +import { uriToDid as creatorFromUri } from '../../../../util/uris' +import { Views } from '../../../../views' +import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getPosts = createPipeline(skeleton, hydration, noBlocks, presentation) diff --git a/packages/bsky/src/api/app/bsky/feed/getQuotes.ts b/packages/bsky/src/api/app/bsky/feed/getQuotes.ts index 630f02d5..d7c7f95d 100644 --- a/packages/bsky/src/api/app/bsky/feed/getQuotes.ts +++ b/packages/bsky/src/api/app/bsky/feed/getQuotes.ts @@ -1,17 +1,17 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { createPipeline } from '../../../../pipeline' -import { clearlyBadCursor, resHeaders } from '../../../util' +import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { mapDefined } from '@atproto/common' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getQuotes' import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getQuotes' +import { createPipeline } from '../../../../pipeline' import { uriToDid } from '../../../../util/uris' +import { Views } from '../../../../views' +import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getQuotes = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/feed/getRepostedBy.ts b/packages/bsky/src/api/app/bsky/feed/getRepostedBy.ts index 6055c557..cf514bbf 100644 --- a/packages/bsky/src/api/app/bsky/feed/getRepostedBy.ts +++ b/packages/bsky/src/api/app/bsky/feed/getRepostedBy.ts @@ -1,16 +1,16 @@ import { mapDefined } from '@atproto/common' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getRepostedBy' -import AppContext from '../../../../context' -import { createPipeline } from '../../../../pipeline' +import { AppContext } from '../../../../context' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getRepostedBy' +import { createPipeline } from '../../../../pipeline' import { uriToDid as creatorFromUri } from '../../../../util/uris' +import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/feed/getSuggestedFeeds.ts b/packages/bsky/src/api/app/bsky/feed/getSuggestedFeeds.ts index ad13b3a0..17e91c54 100644 --- a/packages/bsky/src/api/app/bsky/feed/getSuggestedFeeds.ts +++ b/packages/bsky/src/api/app/bsky/feed/getSuggestedFeeds.ts @@ -1,7 +1,7 @@ import { mapDefined } from '@atproto/common' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/feed/getTimeline.ts b/packages/bsky/src/api/app/bsky/feed/getTimeline.ts index 37f1b601..31930e99 100644 --- a/packages/bsky/src/api/app/bsky/feed/getTimeline.ts +++ b/packages/bsky/src/api/app/bsky/feed/getTimeline.ts @@ -1,18 +1,18 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getTimeline' -import { clearlyBadCursor, resHeaders } from '../../../util' -import { createPipeline } from '../../../../pipeline' +import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' +import { FeedItem } from '../../../../hydration/feed' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' import { parseString } from '../../../../hydration/util' -import { mapDefined } from '@atproto/common' -import { FeedItem } from '../../../../hydration/feed' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/getTimeline' +import { createPipeline } from '../../../../pipeline' +import { Views } from '../../../../views' +import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getTimeline = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/feed/searchPosts.ts b/packages/bsky/src/api/app/bsky/feed/searchPosts.ts index 853c5453..d0d31951 100644 --- a/packages/bsky/src/api/app/bsky/feed/searchPosts.ts +++ b/packages/bsky/src/api/app/bsky/feed/searchPosts.ts @@ -1,7 +1,10 @@ -import AppContext from '../../../../context' -import { Server } from '../../../../lexicon' import { AtpAgent } from '@atproto/api' import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' +import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/feed/searchPosts' import { HydrationFnInput, @@ -10,11 +13,8 @@ import { SkeletonFnInput, createPipeline, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' -import { parseString } from '../../../../hydration/util' import { uriToDid as creatorFromUri } from '../../../../util/uris' +import { Views } from '../../../../views' import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/graph/getActorStarterPacks.ts b/packages/bsky/src/api/app/bsky/graph/getActorStarterPacks.ts index e56efe17..744297b9 100644 --- a/packages/bsky/src/api/app/bsky/graph/getActorStarterPacks.ts +++ b/packages/bsky/src/api/app/bsky/graph/getActorStarterPacks.ts @@ -1,20 +1,20 @@ +import { mapDefined } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' +import { parseString } from '../../../../hydration/util' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getActorStarterPacks' -import AppContext from '../../../../context' import { - createPipeline, HydrationFnInput, - noRules, PresentationFnInput, SkeletonFnInput, + createPipeline, + noRules, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { resHeaders } from '../../../util' -import { DataPlaneClient } from '../../../../data-plane' -import { parseString } from '../../../../hydration/util' -import { mapDefined } from '@atproto/common' export default function (server: Server, ctx: AppContext) { const getActorStarterPacks = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/graph/getBlocks.ts b/packages/bsky/src/api/app/bsky/graph/getBlocks.ts index 3042b07e..bed8610b 100644 --- a/packages/bsky/src/api/app/bsky/graph/getBlocks.ts +++ b/packages/bsky/src/api/app/bsky/graph/getBlocks.ts @@ -1,15 +1,15 @@ import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getBlocks' -import AppContext from '../../../../context' import { - createPipeline, HydrationFnInput, - noRules, PresentationFnInput, SkeletonFnInput, + createPipeline, + noRules, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/graph/getFollowers.ts b/packages/bsky/src/api/app/bsky/graph/getFollowers.ts index 76a501a3..80594ab1 100644 --- a/packages/bsky/src/api/app/bsky/graph/getFollowers.ts +++ b/packages/bsky/src/api/app/bsky/graph/getFollowers.ts @@ -1,8 +1,13 @@ import { mapDefined } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { + HydrateCtx, + Hydrator, + mergeStates, +} from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getFollowers' -import AppContext from '../../../../context' import { HydrationFnInput, PresentationFnInput, @@ -11,11 +16,6 @@ import { createPipeline, } from '../../../../pipeline' import { uriToDid as didFromUri } from '../../../../util/uris' -import { - HydrateCtx, - Hydrator, - mergeStates, -} from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/graph/getFollows.ts b/packages/bsky/src/api/app/bsky/graph/getFollows.ts index 94aac9cd..46bf7af6 100644 --- a/packages/bsky/src/api/app/bsky/graph/getFollows.ts +++ b/packages/bsky/src/api/app/bsky/graph/getFollows.ts @@ -1,8 +1,13 @@ import { mapDefined } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { + HydrateCtx, + Hydrator, + mergeStates, +} from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getFollowers' -import AppContext from '../../../../context' import { HydrationFnInput, PresentationFnInput, @@ -10,11 +15,6 @@ import { SkeletonFnInput, createPipeline, } from '../../../../pipeline' -import { - HydrateCtx, - Hydrator, - mergeStates, -} from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/graph/getKnownFollowers.ts b/packages/bsky/src/api/app/bsky/graph/getKnownFollowers.ts index 71501ba2..b314e0a1 100644 --- a/packages/bsky/src/api/app/bsky/graph/getKnownFollowers.ts +++ b/packages/bsky/src/api/app/bsky/graph/getKnownFollowers.ts @@ -1,8 +1,9 @@ import { mapDefined } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getKnownFollowers' -import AppContext from '../../../../context' import { HydrationFnInput, PresentationFnInput, @@ -10,7 +11,6 @@ import { SkeletonFnInput, createPipeline, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/graph/getList.ts b/packages/bsky/src/api/app/bsky/graph/getList.ts index 995bc294..e009637c 100644 --- a/packages/bsky/src/api/app/bsky/graph/getList.ts +++ b/packages/bsky/src/api/app/bsky/graph/getList.ts @@ -1,25 +1,25 @@ import { mapDefined } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getList' -import AppContext from '../../../../context' -import { - createPipeline, - HydrationFnInput, - PresentationFnInput, - RulesFnInput, - SkeletonFnInput, -} from '../../../../pipeline' +import { AppContext } from '../../../../context' import { HydrateCtx, HydrationState, Hydrator, mergeManyStates, } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { clearlyBadCursor, resHeaders } from '../../../util' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getList' +import { + HydrationFnInput, + PresentationFnInput, + RulesFnInput, + SkeletonFnInput, + createPipeline, +} from '../../../../pipeline' import { ListItemInfo } from '../../../../proto/bsky_pb' import { uriToDid as didFromUri } from '../../../../util/uris' +import { Views } from '../../../../views' +import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getList = createPipeline(skeleton, hydration, noBlocks, presentation) diff --git a/packages/bsky/src/api/app/bsky/graph/getListBlocks.ts b/packages/bsky/src/api/app/bsky/graph/getListBlocks.ts index 89f79edb..70fd3c9b 100644 --- a/packages/bsky/src/api/app/bsky/graph/getListBlocks.ts +++ b/packages/bsky/src/api/app/bsky/graph/getListBlocks.ts @@ -1,15 +1,15 @@ import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getListBlocks' -import AppContext from '../../../../context' import { - createPipeline, HydrationFnInput, - noRules, PresentationFnInput, SkeletonFnInput, + createPipeline, + noRules, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/graph/getListMutes.ts b/packages/bsky/src/api/app/bsky/graph/getListMutes.ts index fbd62c21..61f951d0 100644 --- a/packages/bsky/src/api/app/bsky/graph/getListMutes.ts +++ b/packages/bsky/src/api/app/bsky/graph/getListMutes.ts @@ -1,15 +1,15 @@ import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getListBlocks' -import AppContext from '../../../../context' import { - createPipeline, HydrationFnInput, - noRules, PresentationFnInput, SkeletonFnInput, + createPipeline, + noRules, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/graph/getLists.ts b/packages/bsky/src/api/app/bsky/graph/getLists.ts index 31d24171..e913658a 100644 --- a/packages/bsky/src/api/app/bsky/graph/getLists.ts +++ b/packages/bsky/src/api/app/bsky/graph/getLists.ts @@ -1,17 +1,17 @@ import { mapDefined } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getLists' import { REFERENCELIST } from '../../../../lexicon/types/app/bsky/graph/defs' -import AppContext from '../../../../context' +import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getLists' import { - createPipeline, HydrationFnInput, PresentationFnInput, RulesFnInput, SkeletonFnInput, + createPipeline, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/graph/getMutes.ts b/packages/bsky/src/api/app/bsky/graph/getMutes.ts index 1f417c32..c28671ad 100644 --- a/packages/bsky/src/api/app/bsky/graph/getMutes.ts +++ b/packages/bsky/src/api/app/bsky/graph/getMutes.ts @@ -1,9 +1,8 @@ import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getMutes' -import AppContext from '../../../../context' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' import { HydrationFnInput, PresentationFnInput, @@ -11,6 +10,7 @@ import { createPipeline, noRules, } from '../../../../pipeline' +import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/graph/getRelationships.ts b/packages/bsky/src/api/app/bsky/graph/getRelationships.ts index 47aaa6cd..b311ac91 100644 --- a/packages/bsky/src/api/app/bsky/graph/getRelationships.ts +++ b/packages/bsky/src/api/app/bsky/graph/getRelationships.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.getRelationships({ diff --git a/packages/bsky/src/api/app/bsky/graph/getStarterPack.ts b/packages/bsky/src/api/app/bsky/graph/getStarterPack.ts index 770f7929..8832bfd5 100644 --- a/packages/bsky/src/api/app/bsky/graph/getStarterPack.ts +++ b/packages/bsky/src/api/app/bsky/graph/getStarterPack.ts @@ -1,15 +1,15 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getStarterPack' -import AppContext from '../../../../context' import { - createPipeline, HydrationFnInput, - noRules, PresentationFnInput, SkeletonFnInput, + createPipeline, + noRules, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/graph/getStarterPacks.ts b/packages/bsky/src/api/app/bsky/graph/getStarterPacks.ts index 845bc87b..dac4baf0 100644 --- a/packages/bsky/src/api/app/bsky/graph/getStarterPacks.ts +++ b/packages/bsky/src/api/app/bsky/graph/getStarterPacks.ts @@ -1,15 +1,15 @@ import { dedupeStrs, mapDefined } from '@atproto/common' -import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getStarterPacks' -import AppContext from '../../../../context' -import { resHeaders } from '../../../util' -import { createPipeline, noRules } from '../../../../pipeline' +import { AppContext } from '../../../../context' import { HydrateCtx, HydrationState, Hydrator, } from '../../../../hydration/hydrator' +import { Server } from '../../../../lexicon' +import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getStarterPacks' +import { createPipeline, noRules } from '../../../../pipeline' import { Views } from '../../../../views' +import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const getStarterPacks = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts b/packages/bsky/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts index c7eec21b..9aeb9816 100644 --- a/packages/bsky/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts +++ b/packages/bsky/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts @@ -1,10 +1,11 @@ +import { AtpAgent } from '@atproto/api' import { mapDefined, noUndefinedVals } from '@atproto/common' -import { InvalidRequestError } from '@atproto/xrpc-server' -import AtpAgent from '@atproto/api' import { HeadersMap } from '@atproto/xrpc' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/getSuggestedFollowsByActor' -import AppContext from '../../../../context' import { HydrationFnInput, PresentationFnInput, @@ -12,7 +13,6 @@ import { SkeletonFnInput, createPipeline, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' import { resHeaders } from '../../../util' diff --git a/packages/bsky/src/api/app/bsky/graph/muteActor.ts b/packages/bsky/src/api/app/bsky/graph/muteActor.ts index 051e5564..2f25af79 100644 --- a/packages/bsky/src/api/app/bsky/graph/muteActor.ts +++ b/packages/bsky/src/api/app/bsky/graph/muteActor.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { MuteOperation_Type } from '../../../../proto/bsync_pb' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/graph/muteActorList.ts b/packages/bsky/src/api/app/bsky/graph/muteActorList.ts index 2f9f8c75..177e6a7c 100644 --- a/packages/bsky/src/api/app/bsky/graph/muteActorList.ts +++ b/packages/bsky/src/api/app/bsky/graph/muteActorList.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { MuteOperation_Type } from '../../../../proto/bsync_pb' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/graph/muteThread.ts b/packages/bsky/src/api/app/bsky/graph/muteThread.ts index a0e1cf9d..013a6772 100644 --- a/packages/bsky/src/api/app/bsky/graph/muteThread.ts +++ b/packages/bsky/src/api/app/bsky/graph/muteThread.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { MuteOperation_Type } from '../../../../proto/bsync_pb' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/graph/searchStarterPacks.ts b/packages/bsky/src/api/app/bsky/graph/searchStarterPacks.ts index 53ca0dba..5665950a 100644 --- a/packages/bsky/src/api/app/bsky/graph/searchStarterPacks.ts +++ b/packages/bsky/src/api/app/bsky/graph/searchStarterPacks.ts @@ -1,7 +1,10 @@ -import AppContext from '../../../../context' -import { Server } from '../../../../lexicon' +import { AtpAgent } from '@atproto/api' import { mapDefined } from '@atproto/common' -import { AtpAgent, AtUri } from '@atproto/api' +import { AppContext } from '../../../../context' +import { DataPlaneClient } from '../../../../data-plane' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' +import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/graph/searchStarterPacks' import { HydrationFnInput, @@ -10,12 +13,9 @@ import { SkeletonFnInput, createPipeline, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' -import { DataPlaneClient } from '../../../../data-plane' -import { parseString } from '../../../../hydration/util' -import { resHeaders } from '../../../util' import { uriToDid as creatorFromUri } from '../../../../util/uris' +import { Views } from '../../../../views' +import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { const searchStarterPacks = createPipeline( diff --git a/packages/bsky/src/api/app/bsky/graph/unmuteActor.ts b/packages/bsky/src/api/app/bsky/graph/unmuteActor.ts index 5462d7a7..393da722 100644 --- a/packages/bsky/src/api/app/bsky/graph/unmuteActor.ts +++ b/packages/bsky/src/api/app/bsky/graph/unmuteActor.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { MuteOperation_Type } from '../../../../proto/bsync_pb' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/graph/unmuteActorList.ts b/packages/bsky/src/api/app/bsky/graph/unmuteActorList.ts index 2c80e421..8ebd4c70 100644 --- a/packages/bsky/src/api/app/bsky/graph/unmuteActorList.ts +++ b/packages/bsky/src/api/app/bsky/graph/unmuteActorList.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { MuteOperation_Type } from '../../../../proto/bsync_pb' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/graph/unmuteThread.ts b/packages/bsky/src/api/app/bsky/graph/unmuteThread.ts index d8e53200..55507633 100644 --- a/packages/bsky/src/api/app/bsky/graph/unmuteThread.ts +++ b/packages/bsky/src/api/app/bsky/graph/unmuteThread.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { MuteOperation_Type } from '../../../../proto/bsync_pb' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/labeler/getServices.ts b/packages/bsky/src/api/app/bsky/labeler/getServices.ts index f5df1cbf..c40b6a4b 100644 --- a/packages/bsky/src/api/app/bsky/labeler/getServices.ts +++ b/packages/bsky/src/api/app/bsky/labeler/getServices.ts @@ -1,6 +1,6 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { mapDefined } from '@atproto/common' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' import { resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/notification/getUnreadCount.ts b/packages/bsky/src/api/app/bsky/notification/getUnreadCount.ts index fe58a66b..1b25638d 100644 --- a/packages/bsky/src/api/app/bsky/notification/getUnreadCount.ts +++ b/packages/bsky/src/api/app/bsky/notification/getUnreadCount.ts @@ -1,7 +1,8 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' import { QueryParams } from '../../../../lexicon/types/app/bsky/notification/getUnreadCount' -import AppContext from '../../../../context' import { HydrationFnInput, PresentationFnInput, @@ -9,7 +10,6 @@ import { createPipeline, noRules, } from '../../../../pipeline' -import { Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/notification/listNotifications.ts b/packages/bsky/src/api/app/bsky/notification/listNotifications.ts index 8f4fa2f0..07d11dac 100644 --- a/packages/bsky/src/api/app/bsky/notification/listNotifications.ts +++ b/packages/bsky/src/api/app/bsky/notification/listNotifications.ts @@ -1,20 +1,20 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import { mapDefined } from '@atproto/common' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' -import { QueryParams } from '../../../../lexicon/types/app/bsky/notification/listNotifications' import { isRecord as isPostRecord } from '../../../../lexicon/types/app/bsky/feed/post' -import AppContext from '../../../../context' +import { QueryParams } from '../../../../lexicon/types/app/bsky/notification/listNotifications' import { - createPipeline, HydrationFnInput, PresentationFnInput, RulesFnInput, SkeletonFnInput, + createPipeline, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' -import { Views } from '../../../../views' import { Notification } from '../../../../proto/bsky_pb' import { uriToDid as didFromUri } from '../../../../util/uris' +import { Views } from '../../../../views' import { clearlyBadCursor, resHeaders } from '../../../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/notification/putPreferences.ts b/packages/bsky/src/api/app/bsky/notification/putPreferences.ts index 7cafa228..901b2549 100644 --- a/packages/bsky/src/api/app/bsky/notification/putPreferences.ts +++ b/packages/bsky/src/api/app/bsky/notification/putPreferences.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.notification.putPreferences({ diff --git a/packages/bsky/src/api/app/bsky/notification/registerPush.ts b/packages/bsky/src/api/app/bsky/notification/registerPush.ts index 32c04b60..959a20ac 100644 --- a/packages/bsky/src/api/app/bsky/notification/registerPush.ts +++ b/packages/bsky/src/api/app/bsky/notification/registerPush.ts @@ -2,8 +2,8 @@ import { InvalidRequestError, MethodNotImplementedError, } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { AppPlatform } from '../../../../proto/courier_pb' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/notification/updateSeen.ts b/packages/bsky/src/api/app/bsky/notification/updateSeen.ts index 923b4dfe..2ecdea14 100644 --- a/packages/bsky/src/api/app/bsky/notification/updateSeen.ts +++ b/packages/bsky/src/api/app/bsky/notification/updateSeen.ts @@ -1,7 +1,7 @@ -import murmur from 'murmurhash' import { Struct, Timestamp } from '@bufbuild/protobuf' +import { v3 as murmurV3 } from 'murmurhash' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.notification.updateSeen({ @@ -45,5 +45,5 @@ function getNotifId(viewer: string, seenAt: Date) { const key = ['mark-read-generic', viewer, seenAt.getTime().toString()].join( '::', ) - return murmur.v3(key).toString(16) + return murmurV3(key).toString(16) } diff --git a/packages/bsky/src/api/app/bsky/unspecced/getConfig.ts b/packages/bsky/src/api/app/bsky/unspecced/getConfig.ts index f77c4a19..441c3f1f 100644 --- a/packages/bsky/src/api/app/bsky/unspecced/getConfig.ts +++ b/packages/bsky/src/api/app/bsky/unspecced/getConfig.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' // THIS IS A TEMPORARY UNSPECCED ROUTE export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts b/packages/bsky/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts index d9694382..8753c44a 100644 --- a/packages/bsky/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts +++ b/packages/bsky/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts @@ -1,7 +1,7 @@ import { mapDefined } from '@atproto/common' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { parseString } from '../../../../hydration/util' +import { Server } from '../../../../lexicon' import { clearlyBadCursor, resHeaders } from '../../../util' // THIS IS A TEMPORARY UNSPECCED ROUTE diff --git a/packages/bsky/src/api/app/bsky/unspecced/getTaggedSuggestions.ts b/packages/bsky/src/api/app/bsky/unspecced/getTaggedSuggestions.ts index 79df4857..ffe07750 100644 --- a/packages/bsky/src/api/app/bsky/unspecced/getTaggedSuggestions.ts +++ b/packages/bsky/src/api/app/bsky/unspecced/getTaggedSuggestions.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' // THIS IS A TEMPORARY UNSPECCED ROUTE export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/app/bsky/unspecced/getTrendingTopics.ts b/packages/bsky/src/api/app/bsky/unspecced/getTrendingTopics.ts index 35187f78..7c53caec 100644 --- a/packages/bsky/src/api/app/bsky/unspecced/getTrendingTopics.ts +++ b/packages/bsky/src/api/app/bsky/unspecced/getTrendingTopics.ts @@ -1,19 +1,19 @@ +import AtpAgent from '@atproto/api' import { noUndefinedVals } from '@atproto/common' -import AppContext from '../../../../context' +import { InternalServerError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Server } from '../../../../lexicon' +import { TrendingTopic } from '../../../../lexicon/types/app/bsky/unspecced/defs' +import { QueryParams } from '../../../../lexicon/types/app/bsky/unspecced/getTrendingTopics' import { - createPipeline, HydrationFnInput, PresentationFnInput, RulesFnInput, SkeletonFnInput, + createPipeline, } from '../../../../pipeline' -import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator' import { Views } from '../../../../views' -import { QueryParams } from '../../../../lexicon/types/app/bsky/unspecced/getTrendingTopics' -import AtpAgent from '@atproto/api' -import { TrendingTopic } from '../../../../lexicon/types/app/bsky/unspecced/defs' -import { InternalServerError } from '@atproto/xrpc-server' export default function (server: Server, ctx: AppContext) { const getTrendingTopics = createPipeline( diff --git a/packages/bsky/src/api/blob-dispatcher.ts b/packages/bsky/src/api/blob-dispatcher.ts index 24dd9694..3baa89a0 100644 --- a/packages/bsky/src/api/blob-dispatcher.ts +++ b/packages/bsky/src/api/blob-dispatcher.ts @@ -1,6 +1,5 @@ -import { isUnicastIp, unicastLookup } from '@atproto-labs/fetch-node' import { Agent, Dispatcher, Pool, RetryAgent } from 'undici' - +import { isUnicastIp, unicastLookup } from '@atproto-labs/fetch-node' import { ServerConfig } from '../config' import { RETRYABLE_HTTP_STATUS_CODES } from '../util/retry' diff --git a/packages/bsky/src/api/blob-resolver.ts b/packages/bsky/src/api/blob-resolver.ts index 562c1003..c7098065 100644 --- a/packages/bsky/src/api/blob-resolver.ts +++ b/packages/bsky/src/api/blob-resolver.ts @@ -1,23 +1,22 @@ +import { Duplex, Transform, Writable } from 'node:stream' +import { pipeline } from 'node:stream/promises' +import createError, { isHttpError } from 'http-errors' +import { CID } from 'multiformats/cid' +import { Dispatcher } from 'undici' +import { + VerifyCidError, + VerifyCidTransform, + createDecoders, +} from '@atproto/common' +import { AtprotoDid, isAtprotoDid } from '@atproto/did' import { ACCEPT_ENCODING_COMPRESSED, ACCEPT_ENCODING_UNCOMPRESSED, buildProxiedContentEncoding, formatAcceptHeader, } from '@atproto-labs/xrpc-utils' -import { - createDecoders, - VerifyCidError, - VerifyCidTransform, -} from '@atproto/common' -import { AtprotoDid, isAtprotoDid } from '@atproto/did' -import createError, { isHttpError } from 'http-errors' -import { CID } from 'multiformats/cid' -import { Duplex, Transform, Writable } from 'node:stream' -import { pipeline } from 'node:stream/promises' -import { Dispatcher } from 'undici' - import { ServerConfig } from '../config' -import AppContext from '../context' +import { AppContext } from '../context' import { Code, DataPlaneClient, diff --git a/packages/bsky/src/api/com/atproto/admin/getAccountInfos.ts b/packages/bsky/src/api/com/atproto/admin/getAccountInfos.ts index 788e7dbe..4efee135 100644 --- a/packages/bsky/src/api/com/atproto/admin/getAccountInfos.ts +++ b/packages/bsky/src/api/com/atproto/admin/getAccountInfos.ts @@ -1,7 +1,7 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { mapDefined } from '@atproto/common' import { INVALID_HANDLE } from '@atproto/syntax' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.getAccountInfos({ diff --git a/packages/bsky/src/api/com/atproto/admin/getSubjectStatus.ts b/packages/bsky/src/api/com/atproto/admin/getSubjectStatus.ts index 3be4c1c0..74078737 100644 --- a/packages/bsky/src/api/com/atproto/admin/getSubjectStatus.ts +++ b/packages/bsky/src/api/com/atproto/admin/getSubjectStatus.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { OutputSchema } from '../../../../lexicon/types/com/atproto/admin/getSubjectStatus' export default function (server: Server, ctx: AppContext) { diff --git a/packages/bsky/src/api/com/atproto/admin/updateSubjectStatus.ts b/packages/bsky/src/api/com/atproto/admin/updateSubjectStatus.ts index 8256efbe..14cf1b9a 100644 --- a/packages/bsky/src/api/com/atproto/admin/updateSubjectStatus.ts +++ b/packages/bsky/src/api/com/atproto/admin/updateSubjectStatus.ts @@ -1,10 +1,10 @@ import { Timestamp } from '@bufbuild/protobuf' import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { - isRepoRef, isRepoBlobRef, + isRepoRef, } from '../../../../lexicon/types/com/atproto/admin/defs' import { isMain as isStrongRef } from '../../../../lexicon/types/com/atproto/repo/strongRef' diff --git a/packages/bsky/src/api/com/atproto/identity/resolveHandle.ts b/packages/bsky/src/api/com/atproto/identity/resolveHandle.ts index 6cb524c6..f917ede3 100644 --- a/packages/bsky/src/api/com/atproto/identity/resolveHandle.ts +++ b/packages/bsky/src/api/com/atproto/identity/resolveHandle.ts @@ -1,7 +1,7 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import * as ident from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.identity.resolveHandle(async ({ req, params }) => { diff --git a/packages/bsky/src/api/com/atproto/label/queryLabels.ts b/packages/bsky/src/api/com/atproto/label/queryLabels.ts index dbbf32d1..f9d2b144 100644 --- a/packages/bsky/src/api/com/atproto/label/queryLabels.ts +++ b/packages/bsky/src/api/com/atproto/label/queryLabels.ts @@ -1,6 +1,6 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' export default function (server: Server, ctx: AppContext) { server.com.atproto.label.queryLabels(async ({ params }) => { diff --git a/packages/bsky/src/api/com/atproto/repo/getRecord.ts b/packages/bsky/src/api/com/atproto/repo/getRecord.ts index bb8c8660..c7c9897c 100644 --- a/packages/bsky/src/api/com/atproto/repo/getRecord.ts +++ b/packages/bsky/src/api/com/atproto/repo/getRecord.ts @@ -1,7 +1,7 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import { AtUri } from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.repo.getRecord({ diff --git a/packages/bsky/src/api/com/atproto/temp/fetchLabels.ts b/packages/bsky/src/api/com/atproto/temp/fetchLabels.ts index 044a8d4d..5bbebc40 100644 --- a/packages/bsky/src/api/com/atproto/temp/fetchLabels.ts +++ b/packages/bsky/src/api/com/atproto/temp/fetchLabels.ts @@ -1,6 +1,6 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' export default function (server: Server, _ctx: AppContext) { server.com.atproto.temp.fetchLabels(async (_reqCtx) => { diff --git a/packages/bsky/src/api/health.ts b/packages/bsky/src/api/health.ts index 8b0f42da..dd385909 100644 --- a/packages/bsky/src/api/health.ts +++ b/packages/bsky/src/api/health.ts @@ -1,8 +1,8 @@ -import express from 'express' -import AppContext from '../context' +import { Router } from 'express' +import { AppContext } from '../context' -export const createRouter = (ctx: AppContext): express.Router => { - const router = express.Router() +export const createRouter = (ctx: AppContext): Router => { + const router = Router() router.get('/', function (req, res) { res.type('text/plain') diff --git a/packages/bsky/src/api/index.ts b/packages/bsky/src/api/index.ts index a8eaabf2..3eb29266 100644 --- a/packages/bsky/src/api/index.ts +++ b/packages/bsky/src/api/index.ts @@ -1,8 +1,12 @@ +import { AppContext } from '../context' import { Server } from '../lexicon' -import AppContext from '../context' -import getTimeline from './app/bsky/feed/getTimeline' +import getProfile from './app/bsky/actor/getProfile' +import getProfiles from './app/bsky/actor/getProfiles' +import getSuggestions from './app/bsky/actor/getSuggestions' +import searchActors from './app/bsky/actor/searchActors' +import searchActorsTypeahead from './app/bsky/actor/searchActorsTypeahead' import getActorFeeds from './app/bsky/feed/getActorFeeds' -import getSuggestedFeeds from './app/bsky/feed/getSuggestedFeeds' +import getActorLikes from './app/bsky/feed/getActorLikes' import getAuthorFeed from './app/bsky/feed/getAuthorFeed' import getFeed from './app/bsky/feed/getFeed' import getFeedGenerator from './app/bsky/feed/getFeedGenerator' @@ -11,53 +15,49 @@ import getLikes from './app/bsky/feed/getLikes' import getListFeed from './app/bsky/feed/getListFeed' import getPostThread from './app/bsky/feed/getPostThread' import getPosts from './app/bsky/feed/getPosts' -import searchPosts from './app/bsky/feed/searchPosts' -import getActorLikes from './app/bsky/feed/getActorLikes' import getQuotes from './app/bsky/feed/getQuotes' -import getProfile from './app/bsky/actor/getProfile' -import getProfiles from './app/bsky/actor/getProfiles' import getRepostedBy from './app/bsky/feed/getRepostedBy' +import getSuggestedFeeds from './app/bsky/feed/getSuggestedFeeds' +import getTimeline from './app/bsky/feed/getTimeline' +import searchPosts from './app/bsky/feed/searchPosts' import getActorStarterPacks from './app/bsky/graph/getActorStarterPacks' import getBlocks from './app/bsky/graph/getBlocks' -import getListBlocks from './app/bsky/graph/getListBlocks' import getFollowers from './app/bsky/graph/getFollowers' -import getKnownFollowers from './app/bsky/graph/getKnownFollowers' import getFollows from './app/bsky/graph/getFollows' +import getKnownFollowers from './app/bsky/graph/getKnownFollowers' import getList from './app/bsky/graph/getList' -import getLists from './app/bsky/graph/getLists' +import getListBlocks from './app/bsky/graph/getListBlocks' import getListMutes from './app/bsky/graph/getListMutes' +import getLists from './app/bsky/graph/getLists' import getMutes from './app/bsky/graph/getMutes' import getRelationships from './app/bsky/graph/getRelationships' import getStarterPack from './app/bsky/graph/getStarterPack' import getStarterPacks from './app/bsky/graph/getStarterPacks' -import searchStarterPacks from './app/bsky/graph/searchStarterPacks' -import muteActor from './app/bsky/graph/muteActor' -import unmuteActor from './app/bsky/graph/unmuteActor' -import muteActorList from './app/bsky/graph/muteActorList' -import unmuteActorList from './app/bsky/graph/unmuteActorList' -import muteThread from './app/bsky/graph/muteThread' -import unmuteThread from './app/bsky/graph/unmuteThread' import getSuggestedFollowsByActor from './app/bsky/graph/getSuggestedFollowsByActor' -import getTrendingTopics from './app/bsky/unspecced/getTrendingTopics' +import muteActor from './app/bsky/graph/muteActor' +import muteActorList from './app/bsky/graph/muteActorList' +import muteThread from './app/bsky/graph/muteThread' +import searchStarterPacks from './app/bsky/graph/searchStarterPacks' +import unmuteActor from './app/bsky/graph/unmuteActor' +import unmuteActorList from './app/bsky/graph/unmuteActorList' +import unmuteThread from './app/bsky/graph/unmuteThread' import getLabelerServices from './app/bsky/labeler/getServices' -import searchActors from './app/bsky/actor/searchActors' -import searchActorsTypeahead from './app/bsky/actor/searchActorsTypeahead' -import getSuggestions from './app/bsky/actor/getSuggestions' import getUnreadCount from './app/bsky/notification/getUnreadCount' import listNotifications from './app/bsky/notification/listNotifications' -import updateSeen from './app/bsky/notification/updateSeen' import putPreferences from './app/bsky/notification/putPreferences' import registerPush from './app/bsky/notification/registerPush' +import updateSeen from './app/bsky/notification/updateSeen' import getConfig from './app/bsky/unspecced/getConfig' import getPopularFeedGenerators from './app/bsky/unspecced/getPopularFeedGenerators' import getTaggedSuggestions from './app/bsky/unspecced/getTaggedSuggestions' +import getTrendingTopics from './app/bsky/unspecced/getTrendingTopics' +import getAccountInfos from './com/atproto/admin/getAccountInfos' import getSubjectStatus from './com/atproto/admin/getSubjectStatus' import updateSubjectStatus from './com/atproto/admin/updateSubjectStatus' -import getAccountInfos from './com/atproto/admin/getAccountInfos' import resolveHandle from './com/atproto/identity/resolveHandle' +import queryLabels from './com/atproto/label/queryLabels' import getRecord from './com/atproto/repo/getRecord' import fetchLabels from './com/atproto/temp/fetchLabels' -import queryLabels from './com/atproto/label/queryLabels' export * as health from './health' diff --git a/packages/bsky/src/api/well-known.ts b/packages/bsky/src/api/well-known.ts index e628d0ab..cc65a0d8 100644 --- a/packages/bsky/src/api/well-known.ts +++ b/packages/bsky/src/api/well-known.ts @@ -1,8 +1,8 @@ -import express from 'express' -import AppContext from '../context' +import { Router } from 'express' +import { AppContext } from '../context' -export const createRouter = (ctx: AppContext): express.Router => { - const router = express.Router() +export const createRouter = (ctx: AppContext): Router => { + const router = Router() const did = ctx.cfg.serverDid if (did.startsWith('did:web:')) { diff --git a/packages/bsky/src/auth-verifier.ts b/packages/bsky/src/auth-verifier.ts index d1bc06cc..29cfa1bb 100644 --- a/packages/bsky/src/auth-verifier.ts +++ b/packages/bsky/src/auth-verifier.ts @@ -1,15 +1,16 @@ import crypto, { KeyObject } from 'node:crypto' +import express from 'express' +import * as jose from 'jose' +import KeyEncoder from 'key-encoder' +import * as ui8 from 'uint8arrays' +import { SECP256K1_JWT_ALG, parseDidKey } from '@atproto/crypto' import { AuthRequiredError, + VerifySignatureWithKeyFn, cryptoVerifySignatureWithKey, parseReqNsid, verifyJwt as verifyServiceJwt, - VerifySignatureWithKeyFn, } from '@atproto/xrpc-server' -import KeyEncoder from 'key-encoder' -import * as ui8 from 'uint8arrays' -import * as jose from 'jose' -import express from 'express' import { Code, DataPlaneClient, @@ -18,7 +19,6 @@ import { unpackIdentityKeys, } from './data-plane' import { GetIdentityByDidResponse } from './proto/bsky_pb' -import { parseDidKey, SECP256K1_JWT_ALG } from '@atproto/crypto' type ReqCtx = { req: express.Request diff --git a/packages/bsky/src/bsync.ts b/packages/bsky/src/bsync.ts index 40a21a9c..83e0bc7b 100644 --- a/packages/bsky/src/bsync.ts +++ b/packages/bsky/src/bsync.ts @@ -1,15 +1,15 @@ -import { Service } from './proto/bsync_connect' import { Code, ConnectError, + Interceptor, PromiseClient, createPromiseClient, - Interceptor, } from '@connectrpc/connect' import { - createConnectTransport, ConnectTransportOptions, + createConnectTransport, } from '@connectrpc/connect-node' +import { Service } from './proto/bsync_connect' export type BsyncClient = PromiseClient<typeof Service> diff --git a/packages/bsky/src/context.ts b/packages/bsky/src/context.ts index 06e48ba8..55c66599 100644 --- a/packages/bsky/src/context.ts +++ b/packages/bsky/src/context.ts @@ -1,23 +1,23 @@ -import express from 'express' import * as plc from '@did-plc/lib' -import { IdResolver } from '@atproto/identity' +import express from 'express' +import { Dispatcher } from 'undici' import { AtpAgent } from '@atproto/api' import { Keypair } from '@atproto/crypto' -import { ServerConfig } from './config' -import { DataPlaneClient } from './data-plane/client' -import { Hydrator } from './hydration/hydrator' -import { Views } from './views' +import { IdResolver } from '@atproto/identity' import { AuthVerifier } from './auth-verifier' import { BsyncClient } from './bsync' +import { ServerConfig } from './config' import { CourierClient } from './courier' +import { DataPlaneClient } from './data-plane/client' import { FeatureGates } from './feature-gates' +import { Hydrator } from './hydration/hydrator' +import { httpLogger as log } from './logger' import { ParsedLabelers, defaultLabelerHeader, parseLabelerHeader, } from './util' -import { httpLogger as log } from './logger' -import { Dispatcher } from 'undici' +import { Views } from './views' export class AppContext { constructor( @@ -112,5 +112,3 @@ export class AppContext { return parsed } } - -export default AppContext diff --git a/packages/bsky/src/courier.ts b/packages/bsky/src/courier.ts index aeb09589..8de5fe72 100644 --- a/packages/bsky/src/courier.ts +++ b/packages/bsky/src/courier.ts @@ -1,15 +1,15 @@ -import { Service } from './proto/courier_connect' import { Code, ConnectError, + Interceptor, PromiseClient, createPromiseClient, - Interceptor, } from '@connectrpc/connect' import { - createConnectTransport, ConnectTransportOptions, + createConnectTransport, } from '@connectrpc/connect-node' +import { Service } from './proto/courier_connect' export type CourierClient = PromiseClient<typeof Service> diff --git a/packages/bsky/src/data-plane/bsync/index.ts b/packages/bsky/src/data-plane/bsync/index.ts index a8ad5746..722d4fa7 100644 --- a/packages/bsky/src/data-plane/bsync/index.ts +++ b/packages/bsky/src/data-plane/bsync/index.ts @@ -1,14 +1,14 @@ -import http from 'http' -import events from 'events' -import assert from 'assert' -import express from 'express' +import assert from 'node:assert' +import events from 'node:events' +import http from 'node:http' import { ConnectRouter } from '@connectrpc/connect' import { expressConnectMiddleware } from '@connectrpc/connect-express' +import express from 'express' import { AtUri } from '@atproto/syntax' -import { Database } from '../server/db' +import { ids } from '../../lexicon/lexicons' import { Service } from '../../proto/bsync_connect' import { MuteOperation_Type } from '../../proto/bsync_pb' -import { ids } from '../../lexicon/lexicons' +import { Database } from '../server/db' export class MockBsync { constructor(public server: http.Server) {} diff --git a/packages/bsky/src/data-plane/client.ts b/packages/bsky/src/data-plane/client.ts index 11e68a66..0b12db4c 100644 --- a/packages/bsky/src/data-plane/client.ts +++ b/packages/bsky/src/data-plane/client.ts @@ -1,6 +1,5 @@ import assert from 'node:assert' import { randomInt } from 'node:crypto' -import * as ui8 from 'uint8arrays' import { Code, ConnectError, @@ -9,6 +8,7 @@ import { makeAnyClient, } from '@connectrpc/connect' import { createGrpcTransport } from '@connectrpc/connect-node' +import * as ui8 from 'uint8arrays' import { getDidKeyFromMultibase } from '@atproto/identity' import { Service } from '../proto/bsky_connect' diff --git a/packages/bsky/src/data-plane/server/background.ts b/packages/bsky/src/data-plane/server/background.ts index 59d8ccf0..ef74d3a0 100644 --- a/packages/bsky/src/data-plane/server/background.ts +++ b/packages/bsky/src/data-plane/server/background.ts @@ -1,6 +1,6 @@ import PQueue from 'p-queue' -import { Database } from './db' import { dbLogger } from '../../logger' +import { Database } from './db' // A simple queue for in-process, out-of-band/backgrounded work diff --git a/packages/bsky/src/data-plane/server/db/database-schema.ts b/packages/bsky/src/data-plane/server/db/database-schema.ts index 195b0948..5fe3f830 100644 --- a/packages/bsky/src/data-plane/server/db/database-schema.ts +++ b/packages/bsky/src/data-plane/server/db/database-schema.ts @@ -1,42 +1,42 @@ import { Kysely } from 'kysely' -import * as duplicateRecord from './tables/duplicate-record' -import * as profile from './tables/profile' -import * as profileAgg from './tables/profile-agg' -import * as post from './tables/post' -import * as postEmbed from './tables/post-embed' -import * as postAgg from './tables/post-agg' -import * as repost from './tables/repost' -import * as threadgate from './tables/thread-gate' -import * as postgate from './tables/post-gate' -import * as feedItem from './tables/feed-item' -import * as follow from './tables/follow' -import * as like from './tables/like' -import * as list from './tables/list' -import * as listItem from './tables/list-item' -import * as listMute from './tables/list-mute' -import * as listBlock from './tables/list-block' -import * as mute from './tables/mute' -import * as actorBlock from './tables/actor-block' -import * as threadMute from './tables/thread-mute' -import * as feedGenerator from './tables/feed-generator' -import * as subscription from './tables/subscription' import * as actor from './tables/actor' +import * as actorBlock from './tables/actor-block' import * as actorState from './tables/actor-state' import * as actorSync from './tables/actor-sync' -import * as record from './tables/record' +import * as algo from './tables/algo' +import * as blobTakedown from './tables/blob-takedown' +import * as didCache from './tables/did-cache' +import * as duplicateRecord from './tables/duplicate-record' +import * as feedGenerator from './tables/feed-generator' +import * as feedItem from './tables/feed-item' +import * as follow from './tables/follow' +import * as label from './tables/label' +import * as labeler from './tables/labeler' +import * as like from './tables/like' +import * as list from './tables/list' +import * as listBlock from './tables/list-block' +import * as listItem from './tables/list-item' +import * as listMute from './tables/list-mute' +import * as mute from './tables/mute' import * as notification from './tables/notification' import * as notificationPushToken from './tables/notification-push-token' -import * as didCache from './tables/did-cache' -import * as label from './tables/label' -import * as algo from './tables/algo' -import * as viewParam from './tables/view-param' -import * as suggestedFollow from './tables/suggested-follow' -import * as suggestedFeed from './tables/suggested-feed' -import * as taggedSuggestion from './tables/tagged-suggestion' -import * as blobTakedown from './tables/blob-takedown' -import * as labeler from './tables/labeler' -import * as starterPack from './tables/starter-pack' +import * as post from './tables/post' +import * as postAgg from './tables/post-agg' +import * as postEmbed from './tables/post-embed' +import * as postgate from './tables/post-gate' +import * as profile from './tables/profile' +import * as profileAgg from './tables/profile-agg' import * as quote from './tables/quote' +import * as record from './tables/record' +import * as repost from './tables/repost' +import * as starterPack from './tables/starter-pack' +import * as subscription from './tables/subscription' +import * as suggestedFeed from './tables/suggested-feed' +import * as suggestedFollow from './tables/suggested-follow' +import * as taggedSuggestion from './tables/tagged-suggestion' +import * as threadgate from './tables/thread-gate' +import * as threadMute from './tables/thread-mute' +import * as viewParam from './tables/view-param' export type DatabaseSchemaType = duplicateRecord.PartialDB & profile.PartialDB & @@ -78,5 +78,3 @@ export type DatabaseSchemaType = duplicateRecord.PartialDB & quote.PartialDB export type DatabaseSchema = Kysely<DatabaseSchemaType> - -export default DatabaseSchema diff --git a/packages/bsky/src/data-plane/server/db/db.ts b/packages/bsky/src/data-plane/server/db/db.ts index 9b1cc645..063aef8e 100644 --- a/packages/bsky/src/data-plane/server/db/db.ts +++ b/packages/bsky/src/data-plane/server/db/db.ts @@ -1,5 +1,5 @@ -import assert from 'assert' -import EventEmitter from 'events' +import assert from 'node:assert' +import EventEmitter from 'node:events' import { Kysely, KyselyPlugin, @@ -11,13 +11,13 @@ import { RootOperationNode, UnknownRow, } from 'kysely' -import TypedEmitter from 'typed-emitter' import { Pool as PgPool, types as pgTypes } from 'pg' -import * as migrations from './migrations' -import DatabaseSchema, { DatabaseSchemaType } from './database-schema' -import { PgOptions } from './types' +import TypedEmitter from 'typed-emitter' import { dbLogger } from '../../../logger' +import { DatabaseSchema, DatabaseSchemaType } from './database-schema' +import * as migrations from './migrations' import { CtxMigrationProvider } from './migrations/provider' +import { PgOptions } from './types' export class Database { pool: PgPool diff --git a/packages/bsky/src/data-plane/server/db/util.ts b/packages/bsky/src/data-plane/server/db/util.ts index cee5d100..ae9dddbf 100644 --- a/packages/bsky/src/data-plane/server/db/util.ts +++ b/packages/bsky/src/data-plane/server/db/util.ts @@ -4,12 +4,12 @@ import { ExpressionBuilder, RawBuilder, SelectQueryBuilder, - sql, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler, + sql, } from 'kysely' -import DatabaseSchema, { DatabaseSchemaType } from './database-schema' +import { DatabaseSchema, DatabaseSchemaType } from './database-schema' export const actorWhereClause = (actor: string) => { if (actor.startsWith('did:')) { diff --git a/packages/bsky/src/data-plane/server/index.ts b/packages/bsky/src/data-plane/server/index.ts index a12c63a2..6814e58a 100644 --- a/packages/bsky/src/data-plane/server/index.ts +++ b/packages/bsky/src/data-plane/server/index.ts @@ -1,10 +1,10 @@ -import http from 'http' -import events from 'events' -import express from 'express' +import events from 'node:events' +import http from 'node:http' import { expressConnectMiddleware } from '@connectrpc/connect-express' -import createRoutes from './routes' -import { Database } from './db' +import express from 'express' import { IdResolver, MemoryCache } from '@atproto/identity' +import { Database } from './db' +import createRoutes from './routes' export { RepoSubscription } from './subscription' diff --git a/packages/bsky/src/data-plane/server/indexing/index.ts b/packages/bsky/src/data-plane/server/indexing/index.ts index 66f9f98f..17578099 100644 --- a/packages/bsky/src/data-plane/server/indexing/index.ts +++ b/packages/bsky/src/data-plane/server/indexing/index.ts @@ -1,38 +1,38 @@ import { sql } from 'kysely' import { CID } from 'multiformats/cid' import { AtpAgent, ComAtprotoSyncGetLatestCommit } from '@atproto/api' +import { DAY, HOUR } from '@atproto/common' +import { IdResolver, getPds } from '@atproto/identity' +import { ValidationError } from '@atproto/lexicon' import { - readCarWithRoot, - WriteOpAction, - verifyRepo, VerifiedRepo, + WriteOpAction, getAndParseRecord, + readCarWithRoot, + verifyRepo, } from '@atproto/repo' import { AtUri } from '@atproto/syntax' -import { IdResolver, getPds } from '@atproto/identity' -import { DAY, HOUR } from '@atproto/common' -import { ValidationError } from '@atproto/lexicon' -import { Database } from '../db' -import { Actor } from '../db/tables/actor' -import * as Post from './plugins/post' -import * as Threadgate from './plugins/thread-gate' -import * as Postgate from './plugins/post-gate' -import * as Like from './plugins/like' -import * as Repost from './plugins/repost' -import * as Follow from './plugins/follow' -import * as Profile from './plugins/profile' -import * as List from './plugins/list' -import * as ListItem from './plugins/list-item' -import * as ListBlock from './plugins/list-block' -import * as Block from './plugins/block' -import * as FeedGenerator from './plugins/feed-generator' -import * as StarterPack from './plugins/starter-pack' -import * as Labeler from './plugins/labeler' -import * as ChatDeclaration from './plugins/chat-declaration' -import RecordProcessor from './processor' import { subLogger } from '../../../logger' import { retryXrpc } from '../../../util/retry' import { BackgroundQueue } from '../background' +import { Database } from '../db' +import { Actor } from '../db/tables/actor' +import * as Block from './plugins/block' +import * as ChatDeclaration from './plugins/chat-declaration' +import * as FeedGenerator from './plugins/feed-generator' +import * as Follow from './plugins/follow' +import * as Labeler from './plugins/labeler' +import * as Like from './plugins/like' +import * as List from './plugins/list' +import * as ListBlock from './plugins/list-block' +import * as ListItem from './plugins/list-item' +import * as Post from './plugins/post' +import * as Postgate from './plugins/post-gate' +import * as Profile from './plugins/profile' +import * as Repost from './plugins/repost' +import * as StarterPack from './plugins/starter-pack' +import * as Threadgate from './plugins/thread-gate' +import { RecordProcessor } from './processor' export class IndexingService { records: { diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/block.ts b/packages/bsky/src/data-plane/server/indexing/plugins/block.ts index ec4956a0..290a376f 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/block.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/block.ts @@ -1,12 +1,12 @@ import { Selectable } from 'kysely' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as Block from '../../../../lexicon/types/app/bsky/graph/block' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' +import * as Block from '../../../../lexicon/types/app/bsky/graph/block' +import { BackgroundQueue } from '../../background' import { Database } from '../../db' import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import RecordProcessor from '../processor' -import { BackgroundQueue } from '../../background' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyGraphBlock type IndexedBlock = Selectable<DatabaseSchemaType['actor_block']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/chat-declaration.ts b/packages/bsky/src/data-plane/server/indexing/plugins/chat-declaration.ts index e234768e..08e16859 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/chat-declaration.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/chat-declaration.ts @@ -1,10 +1,10 @@ -import { AtUri } from '@atproto/syntax' import { CID } from 'multiformats/cid' +import { AtUri } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' -import { DatabaseSchema } from '../../db/database-schema' -import RecordProcessor from '../processor' -import { Database } from '../../db' import { BackgroundQueue } from '../../background' +import { Database } from '../../db' +import { DatabaseSchema } from '../../db/database-schema' +import { RecordProcessor } from '../processor' // @NOTE this indexer is a placeholder to ensure it gets indexed in the generic records table diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/feed-generator.ts b/packages/bsky/src/data-plane/server/indexing/plugins/feed-generator.ts index f3b82c75..8e567680 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/feed-generator.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/feed-generator.ts @@ -1,12 +1,12 @@ import { Selectable } from 'kysely' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as FeedGenerator from '../../../../lexicon/types/app/bsky/feed/generator' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' +import * as FeedGenerator from '../../../../lexicon/types/app/bsky/feed/generator' +import { BackgroundQueue } from '../../background' import { Database } from '../../db' import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import RecordProcessor from '../processor' -import { BackgroundQueue } from '../../background' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyFeedGenerator type IndexedFeedGenerator = Selectable<DatabaseSchemaType['feed_generator']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/follow.ts b/packages/bsky/src/data-plane/server/indexing/plugins/follow.ts index 6f238755..36f8e1d9 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/follow.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/follow.ts @@ -1,13 +1,13 @@ import { Selectable } from 'kysely' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as Follow from '../../../../lexicon/types/app/bsky/graph/follow' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' -import RecordProcessor from '../processor' -import { Database } from '../../db' -import { countAll, excluded } from '../../db/util' -import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' +import * as Follow from '../../../../lexicon/types/app/bsky/graph/follow' import { BackgroundQueue } from '../../background' +import { Database } from '../../db' +import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' +import { countAll, excluded } from '../../db/util' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyGraphFollow type IndexedFollow = Selectable<DatabaseSchemaType['follow']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/labeler.ts b/packages/bsky/src/data-plane/server/indexing/plugins/labeler.ts index 5efdb0e3..7ee47905 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/labeler.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/labeler.ts @@ -1,12 +1,12 @@ import { Selectable } from 'kysely' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as Labeler from '../../../../lexicon/types/app/bsky/labeler/service' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' +import * as Labeler from '../../../../lexicon/types/app/bsky/labeler/service' +import { BackgroundQueue } from '../../background' import { Database } from '../../db' import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import RecordProcessor from '../processor' -import { BackgroundQueue } from '../../background' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyLabelerService type IndexedLabeler = Selectable<DatabaseSchemaType['labeler']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/like.ts b/packages/bsky/src/data-plane/server/indexing/plugins/like.ts index 98e9fc72..6afd30af 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/like.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/like.ts @@ -1,13 +1,13 @@ import { Selectable } from 'kysely' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as Like from '../../../../lexicon/types/app/bsky/feed/like' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' -import RecordProcessor from '../processor' -import { countAll, excluded } from '../../db/util' +import * as Like from '../../../../lexicon/types/app/bsky/feed/like' +import { BackgroundQueue } from '../../background' import { Database } from '../../db' import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import { BackgroundQueue } from '../../background' +import { countAll, excluded } from '../../db/util' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyFeedLike type IndexedLike = Selectable<DatabaseSchemaType['like']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/list-block.ts b/packages/bsky/src/data-plane/server/indexing/plugins/list-block.ts index 09eabcdb..19cd392b 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/list-block.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/list-block.ts @@ -1,12 +1,12 @@ import { Selectable } from 'kysely' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as ListBlock from '../../../../lexicon/types/app/bsky/graph/listblock' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' +import * as ListBlock from '../../../../lexicon/types/app/bsky/graph/listblock' +import { BackgroundQueue } from '../../background' import { Database } from '../../db' import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import RecordProcessor from '../processor' -import { BackgroundQueue } from '../../background' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyGraphListblock type IndexedListBlock = Selectable<DatabaseSchemaType['list_block']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/list-item.ts b/packages/bsky/src/data-plane/server/indexing/plugins/list-item.ts index f2a43cff..0536176d 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/list-item.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/list-item.ts @@ -1,13 +1,13 @@ import { Selectable } from 'kysely' -import { InvalidRequestError } from '@atproto/xrpc-server' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as ListItem from '../../../../lexicon/types/app/bsky/graph/listitem' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' import * as lex from '../../../../lexicon/lexicons' -import RecordProcessor from '../processor' +import * as ListItem from '../../../../lexicon/types/app/bsky/graph/listitem' +import { BackgroundQueue } from '../../background' import { Database } from '../../db' import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import { BackgroundQueue } from '../../background' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyGraphListitem type IndexedListItem = Selectable<DatabaseSchemaType['list_item']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/list.ts b/packages/bsky/src/data-plane/server/indexing/plugins/list.ts index f6deaf0a..7451060d 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/list.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/list.ts @@ -1,12 +1,12 @@ import { Selectable } from 'kysely' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as List from '../../../../lexicon/types/app/bsky/graph/list' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' -import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import RecordProcessor from '../processor' -import { Database } from '../../db' +import * as List from '../../../../lexicon/types/app/bsky/graph/list' import { BackgroundQueue } from '../../background' +import { Database } from '../../db' +import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyGraphList type IndexedList = Selectable<DatabaseSchemaType['list']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/post-gate.ts b/packages/bsky/src/data-plane/server/indexing/plugins/post-gate.ts index 3b92d4a1..34b9bb4b 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/post-gate.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/post-gate.ts @@ -1,12 +1,12 @@ +import { CID } from 'multiformats/cid' import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { InvalidRequestError } from '@atproto/xrpc-server' -import { CID } from 'multiformats/cid' -import * as Postgate from '../../../../lexicon/types/app/bsky/feed/postgate' import * as lex from '../../../../lexicon/lexicons' -import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import { Database } from '../../db' -import RecordProcessor from '../processor' +import * as Postgate from '../../../../lexicon/types/app/bsky/feed/postgate' import { BackgroundQueue } from '../../background' +import { Database } from '../../db' +import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyFeedPostgate type IndexedGate = DatabaseSchemaType['post_gate'] diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/post.ts b/packages/bsky/src/data-plane/server/indexing/plugins/post.ts index 606d2aff..80ce4513 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/post.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/post.ts @@ -1,27 +1,33 @@ import { Insertable, Selectable, sql } from 'kysely' import { CID } from 'multiformats/cid' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { jsonStringToLex } from '@atproto/lexicon' -import { - Record as PostRecord, - ReplyRef, -} from '../../../../lexicon/types/app/bsky/feed/post' -import { Record as GateRecord } from '../../../../lexicon/types/app/bsky/feed/threadgate' -import { Record as PostgateRecord } from '../../../../lexicon/types/app/bsky/feed/postgate' -import { isMain as isEmbedImage } from '../../../../lexicon/types/app/bsky/embed/images' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' +import * as lex from '../../../../lexicon/lexicons' import { isMain as isEmbedExternal } from '../../../../lexicon/types/app/bsky/embed/external' +import { isMain as isEmbedImage } from '../../../../lexicon/types/app/bsky/embed/images' import { isMain as isEmbedRecord } from '../../../../lexicon/types/app/bsky/embed/record' import { isMain as isEmbedRecordWithMedia } from '../../../../lexicon/types/app/bsky/embed/recordWithMedia' import { isMain as isEmbedVideo } from '../../../../lexicon/types/app/bsky/embed/video' import { - isMention, + Record as PostRecord, + ReplyRef, +} from '../../../../lexicon/types/app/bsky/feed/post' +import { Record as PostgateRecord } from '../../../../lexicon/types/app/bsky/feed/postgate' +import { Record as GateRecord } from '../../../../lexicon/types/app/bsky/feed/threadgate' +import { isLink, + isMention, } from '../../../../lexicon/types/app/bsky/richtext/facet' -import * as lex from '../../../../lexicon/lexicons' -import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import RecordProcessor from '../processor' -import { Notification } from '../../db/tables/notification' +import { + postUriToPostgateUri, + postUriToThreadgateUri, + uriToDid, +} from '../../../../util/uris' +import { parsePostgate } from '../../../../views/util' +import { BackgroundQueue } from '../../background' import { Database } from '../../db' +import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' +import { Notification } from '../../db/tables/notification' import { countAll, excluded } from '../../db/util' import { getAncestorsAndSelfQb, @@ -29,13 +35,7 @@ import { invalidReplyRoot as checkInvalidReplyRoot, violatesThreadGate as checkViolatesThreadGate, } from '../../util' -import { BackgroundQueue } from '../../background' -import { parsePostgate } from '../../../../views/util' -import { - postUriToThreadgateUri, - postUriToPostgateUri, - uriToDid, -} from '../../../../util/uris' +import { RecordProcessor } from '../processor' type Notif = Insertable<Notification> type Post = Selectable<DatabaseSchemaType['post']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/profile.ts b/packages/bsky/src/data-plane/server/indexing/plugins/profile.ts index 762fb4c4..deeca3f5 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/profile.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/profile.ts @@ -1,11 +1,11 @@ -import { AtUri } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as Profile from '../../../../lexicon/types/app/bsky/actor/profile' +import { AtUri } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' -import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import RecordProcessor from '../processor' -import { Database } from '../../db' +import * as Profile from '../../../../lexicon/types/app/bsky/actor/profile' import { BackgroundQueue } from '../../background' +import { Database } from '../../db' +import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyActorProfile type IndexedProfile = DatabaseSchemaType['profile'] diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/repost.ts b/packages/bsky/src/data-plane/server/indexing/plugins/repost.ts index ec2e7754..c43267b8 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/repost.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/repost.ts @@ -1,13 +1,13 @@ import { Selectable } from 'kysely' import { CID } from 'multiformats/cid' import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' -import * as Repost from '../../../../lexicon/types/app/bsky/feed/repost' import * as lex from '../../../../lexicon/lexicons' -import RecordProcessor from '../processor' -import { Database } from '../../db' -import { countAll, excluded } from '../../db/util' -import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' +import * as Repost from '../../../../lexicon/types/app/bsky/feed/repost' import { BackgroundQueue } from '../../background' +import { Database } from '../../db' +import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' +import { countAll, excluded } from '../../db/util' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyFeedRepost type IndexedRepost = Selectable<DatabaseSchemaType['repost']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/starter-pack.ts b/packages/bsky/src/data-plane/server/indexing/plugins/starter-pack.ts index 844c8454..fe237c5c 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/starter-pack.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/starter-pack.ts @@ -1,12 +1,12 @@ import { Selectable } from 'kysely' -import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import * as StarterPack from '../../../../lexicon/types/app/bsky/graph/starterpack' +import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import * as lex from '../../../../lexicon/lexicons' +import * as StarterPack from '../../../../lexicon/types/app/bsky/graph/starterpack' +import { BackgroundQueue } from '../../background' import { Database } from '../../db' import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import RecordProcessor from '../processor' -import { BackgroundQueue } from '../../background' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyGraphStarterpack type IndexedStarterPack = Selectable<DatabaseSchemaType['starter_pack']> diff --git a/packages/bsky/src/data-plane/server/indexing/plugins/thread-gate.ts b/packages/bsky/src/data-plane/server/indexing/plugins/thread-gate.ts index bbcd4219..a6c53d84 100644 --- a/packages/bsky/src/data-plane/server/indexing/plugins/thread-gate.ts +++ b/packages/bsky/src/data-plane/server/indexing/plugins/thread-gate.ts @@ -1,12 +1,12 @@ +import { CID } from 'multiformats/cid' import { AtUri, normalizeDatetimeAlways } from '@atproto/syntax' import { InvalidRequestError } from '@atproto/xrpc-server' -import { CID } from 'multiformats/cid' -import * as Threadgate from '../../../../lexicon/types/app/bsky/feed/threadgate' import * as lex from '../../../../lexicon/lexicons' -import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' -import { Database } from '../../db' -import RecordProcessor from '../processor' +import * as Threadgate from '../../../../lexicon/types/app/bsky/feed/threadgate' import { BackgroundQueue } from '../../background' +import { Database } from '../../db' +import { DatabaseSchema, DatabaseSchemaType } from '../../db/database-schema' +import { RecordProcessor } from '../processor' const lexId = lex.ids.AppBskyFeedThreadgate type IndexedGate = DatabaseSchemaType['thread_gate'] diff --git a/packages/bsky/src/data-plane/server/indexing/processor.ts b/packages/bsky/src/data-plane/server/indexing/processor.ts index d88d230d..ade9dea3 100644 --- a/packages/bsky/src/data-plane/server/indexing/processor.ts +++ b/packages/bsky/src/data-plane/server/indexing/processor.ts @@ -1,13 +1,13 @@ import { Insertable } from 'kysely' import { CID } from 'multiformats/cid' -import { AtUri } from '@atproto/syntax' import { chunkArray } from '@atproto/common' import { jsonStringToLex, stringifyLex } from '@atproto/lexicon' +import { AtUri } from '@atproto/syntax' import { lexicons } from '../../../lexicon/lexicons' -import { Database } from '../db' -import DatabaseSchema from '../db/database-schema' -import { Notification } from '../db/tables/notification' import { BackgroundQueue } from '../background' +import { Database } from '../db' +import { DatabaseSchema } from '../db/database-schema' +import { Notification } from '../db/tables/notification' // @NOTE re: insertions and deletions. Due to how record updates are handled, // (insertFn) should have the same effect as (insertFn -> deleteFn -> insertFn). diff --git a/packages/bsky/src/data-plane/server/routes/feeds.ts b/packages/bsky/src/data-plane/server/routes/feeds.ts index 60b737a8..4a0135d7 100644 --- a/packages/bsky/src/data-plane/server/routes/feeds.ts +++ b/packages/bsky/src/data-plane/server/routes/feeds.ts @@ -1,8 +1,8 @@ import { ServiceImpl } from '@connectrpc/connect' import { Service } from '../../../proto/bsky_connect' +import { FeedType } from '../../../proto/bsky_pb' import { Database } from '../db' import { TimeCidKeyset, paginate } from '../db/pagination' -import { FeedType } from '../../../proto/bsky_pb' export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({ async getAuthorFeed(req) { diff --git a/packages/bsky/src/data-plane/server/routes/follows.ts b/packages/bsky/src/data-plane/server/routes/follows.ts index 8ef27fdf..9038807f 100644 --- a/packages/bsky/src/data-plane/server/routes/follows.ts +++ b/packages/bsky/src/data-plane/server/routes/follows.ts @@ -1,5 +1,5 @@ -import { keyBy } from '@atproto/common' import { ServiceImpl } from '@connectrpc/connect' +import { keyBy } from '@atproto/common' import { Service } from '../../../proto/bsky_connect' import { FollowsFollowing } from '../../../proto/bsky_pb' import { Database } from '../db' diff --git a/packages/bsky/src/data-plane/server/routes/identity.ts b/packages/bsky/src/data-plane/server/routes/identity.ts index fb8dffc0..007ace4f 100644 --- a/packages/bsky/src/data-plane/server/routes/identity.ts +++ b/packages/bsky/src/data-plane/server/routes/identity.ts @@ -1,8 +1,8 @@ +import { Timestamp } from '@bufbuild/protobuf' import { Code, ConnectError, ServiceImpl } from '@connectrpc/connect' +import { DidDocument, IdResolver, getDid, getHandle } from '@atproto/identity' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' -import { DidDocument, IdResolver, getDid, getHandle } from '@atproto/identity' -import { Timestamp } from '@bufbuild/protobuf' export default ( _db: Database, diff --git a/packages/bsky/src/data-plane/server/routes/index.ts b/packages/bsky/src/data-plane/server/routes/index.ts index 5504d38f..f64bf4bd 100644 --- a/packages/bsky/src/data-plane/server/routes/index.ts +++ b/packages/bsky/src/data-plane/server/routes/index.ts @@ -1,6 +1,7 @@ import { ConnectRouter } from '@connectrpc/connect' import { IdResolver } from '@atproto/identity' import { Service } from '../../../proto/bsky_connect' +import { Database } from '../db' import blocks from './blocks' import feedGens from './feed-gens' import feeds from './feeds' @@ -20,11 +21,10 @@ import records from './records' import relationships from './relationships' import reposts from './reposts' import search from './search' +import starterPacks from './starter-packs' import suggestions from './suggestions' import sync from './sync' import threads from './threads' -import starterPacks from './starter-packs' -import { Database } from '../db' export default (db: Database, idResolver: IdResolver) => (router: ConnectRouter) => diff --git a/packages/bsky/src/data-plane/server/routes/interactions.ts b/packages/bsky/src/data-plane/server/routes/interactions.ts index 2a0e00f2..2ce84b39 100644 --- a/packages/bsky/src/data-plane/server/routes/interactions.ts +++ b/packages/bsky/src/data-plane/server/routes/interactions.ts @@ -1,5 +1,5 @@ -import { DAY, keyBy } from '@atproto/common' import { ServiceImpl } from '@connectrpc/connect' +import { DAY, keyBy } from '@atproto/common' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' import { countAll } from '../db/util' diff --git a/packages/bsky/src/data-plane/server/routes/labels.ts b/packages/bsky/src/data-plane/server/routes/labels.ts index ccd485da..045279f8 100644 --- a/packages/bsky/src/data-plane/server/routes/labels.ts +++ b/packages/bsky/src/data-plane/server/routes/labels.ts @@ -1,9 +1,9 @@ +import { ServiceImpl } from '@connectrpc/connect' +import { Selectable } from 'kysely' import * as ui8 from 'uint8arrays' import { noUndefinedVals } from '@atproto/common' -import { ServiceImpl } from '@connectrpc/connect' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' -import { Selectable } from 'kysely' import { Label } from '../db/tables/label' type LabelRow = Selectable<Label> diff --git a/packages/bsky/src/data-plane/server/routes/likes.ts b/packages/bsky/src/data-plane/server/routes/likes.ts index cb9af0b8..5404325e 100644 --- a/packages/bsky/src/data-plane/server/routes/likes.ts +++ b/packages/bsky/src/data-plane/server/routes/likes.ts @@ -1,6 +1,6 @@ import assert from 'node:assert' -import { keyBy } from '@atproto/common' import { ServiceImpl } from '@connectrpc/connect' +import { keyBy } from '@atproto/common' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' import { TimeCidKeyset, paginate } from '../db/pagination' diff --git a/packages/bsky/src/data-plane/server/routes/lists.ts b/packages/bsky/src/data-plane/server/routes/lists.ts index 064d0e9c..a9122010 100644 --- a/packages/bsky/src/data-plane/server/routes/lists.ts +++ b/packages/bsky/src/data-plane/server/routes/lists.ts @@ -1,9 +1,9 @@ -import { keyBy } from '@atproto/common' import { ServiceImpl } from '@connectrpc/connect' +import { keyBy } from '@atproto/common' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' -import { countAll } from '../db/util' import { TimeCidKeyset, paginate } from '../db/pagination' +import { countAll } from '../db/util' export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({ async getActorLists(req) { diff --git a/packages/bsky/src/data-plane/server/routes/mutes.ts b/packages/bsky/src/data-plane/server/routes/mutes.ts index d941ffc6..58b24e5c 100644 --- a/packages/bsky/src/data-plane/server/routes/mutes.ts +++ b/packages/bsky/src/data-plane/server/routes/mutes.ts @@ -1,11 +1,11 @@ -import assert from 'assert' +import assert from 'node:assert' import { ServiceImpl } from '@connectrpc/connect' +import { keyBy } from '@atproto/common' import { AtUri } from '@atproto/syntax' import { ids } from '../../../lexicon/lexicons' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' import { CreatedAtDidKeyset, TimeCidKeyset, paginate } from '../db/pagination' -import { keyBy } from '@atproto/common' export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({ async getActorMutesActor(req) { diff --git a/packages/bsky/src/data-plane/server/routes/notifs.ts b/packages/bsky/src/data-plane/server/routes/notifs.ts index 282c2098..f8a53efc 100644 --- a/packages/bsky/src/data-plane/server/routes/notifs.ts +++ b/packages/bsky/src/data-plane/server/routes/notifs.ts @@ -1,10 +1,10 @@ -import { sql } from 'kysely' -import { ServiceImpl } from '@connectrpc/connect' import { Timestamp } from '@bufbuild/protobuf' +import { ServiceImpl } from '@connectrpc/connect' +import { sql } from 'kysely' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' -import { countAll, notSoftDeletedClause } from '../db/util' import { TimeCidKeyset, paginate } from '../db/pagination' +import { countAll, notSoftDeletedClause } from '../db/util' export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({ async getNotifications(req) { diff --git a/packages/bsky/src/data-plane/server/routes/posts.ts b/packages/bsky/src/data-plane/server/routes/posts.ts index b4004905..aa85688f 100644 --- a/packages/bsky/src/data-plane/server/routes/posts.ts +++ b/packages/bsky/src/data-plane/server/routes/posts.ts @@ -1,6 +1,6 @@ import { ServiceImpl } from '@connectrpc/connect' -import { Service } from '../../../proto/bsky_connect' import { keyBy } from '@atproto/common' +import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({ diff --git a/packages/bsky/src/data-plane/server/routes/profile.ts b/packages/bsky/src/data-plane/server/routes/profile.ts index 7f56ff95..7d98f110 100644 --- a/packages/bsky/src/data-plane/server/routes/profile.ts +++ b/packages/bsky/src/data-plane/server/routes/profile.ts @@ -1,10 +1,10 @@ import { ServiceImpl } from '@connectrpc/connect' -import { Service } from '../../../proto/bsky_connect' -import { keyBy } from '@atproto/common' -import { getRecords } from './records' -import { Database } from '../db' import { sql } from 'kysely' +import { keyBy } from '@atproto/common' import { parseRecordBytes } from '../../../hydration/util' +import { Service } from '../../../proto/bsky_connect' +import { Database } from '../db' +import { getRecords } from './records' export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({ async getActors(req) { diff --git a/packages/bsky/src/data-plane/server/routes/quotes.ts b/packages/bsky/src/data-plane/server/routes/quotes.ts index 70992101..0e5ff182 100644 --- a/packages/bsky/src/data-plane/server/routes/quotes.ts +++ b/packages/bsky/src/data-plane/server/routes/quotes.ts @@ -1,7 +1,7 @@ import { ServiceImpl } from '@connectrpc/connect' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' -import { paginate, TimeCidKeyset } from '../db/pagination' +import { TimeCidKeyset, paginate } from '../db/pagination' export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({ async getQuotesBySubjectSorted(req) { diff --git a/packages/bsky/src/data-plane/server/routes/records.ts b/packages/bsky/src/data-plane/server/routes/records.ts index 97c5c573..3234acfb 100644 --- a/packages/bsky/src/data-plane/server/routes/records.ts +++ b/packages/bsky/src/data-plane/server/routes/records.ts @@ -1,8 +1,8 @@ -import { keyBy } from '@atproto/common' -import { AtUri } from '@atproto/syntax' import { Timestamp } from '@bufbuild/protobuf' import { ServiceImpl } from '@connectrpc/connect' import * as ui8 from 'uint8arrays' +import { keyBy } from '@atproto/common' +import { AtUri } from '@atproto/syntax' import { ids } from '../../../lexicon/lexicons' import { Service } from '../../../proto/bsky_connect' import { PostRecordMeta, Record } from '../../../proto/bsky_pb' diff --git a/packages/bsky/src/data-plane/server/routes/relationships.ts b/packages/bsky/src/data-plane/server/routes/relationships.ts index b6a16d4b..209fba79 100644 --- a/packages/bsky/src/data-plane/server/routes/relationships.ts +++ b/packages/bsky/src/data-plane/server/routes/relationships.ts @@ -1,5 +1,5 @@ -import { sql } from 'kysely' import { ServiceImpl } from '@connectrpc/connect' +import { sql } from 'kysely' import { keyBy } from '@atproto/common' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' diff --git a/packages/bsky/src/data-plane/server/routes/reposts.ts b/packages/bsky/src/data-plane/server/routes/reposts.ts index 4b9e1f9f..30506347 100644 --- a/packages/bsky/src/data-plane/server/routes/reposts.ts +++ b/packages/bsky/src/data-plane/server/routes/reposts.ts @@ -1,5 +1,5 @@ -import { keyBy } from '@atproto/common' import { ServiceImpl } from '@connectrpc/connect' +import { keyBy } from '@atproto/common' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' import { TimeCidKeyset, paginate } from '../db/pagination' diff --git a/packages/bsky/src/data-plane/server/routes/suggestions.ts b/packages/bsky/src/data-plane/server/routes/suggestions.ts index 68b1dc54..57d8faf3 100644 --- a/packages/bsky/src/data-plane/server/routes/suggestions.ts +++ b/packages/bsky/src/data-plane/server/routes/suggestions.ts @@ -1,5 +1,5 @@ -import { sql } from 'kysely' import { ServiceImpl } from '@connectrpc/connect' +import { sql } from 'kysely' import { Service } from '../../../proto/bsky_connect' import { Database } from '../db' diff --git a/packages/bsky/src/data-plane/server/subscription.ts b/packages/bsky/src/data-plane/server/subscription.ts index c52e09f8..0ef25569 100644 --- a/packages/bsky/src/data-plane/server/subscription.ts +++ b/packages/bsky/src/data-plane/server/subscription.ts @@ -1,10 +1,10 @@ -import { Firehose, MemoryRunner } from '@atproto/sync' import { IdResolver } from '@atproto/identity' import { WriteOpAction } from '@atproto/repo' +import { Firehose, MemoryRunner } from '@atproto/sync' import { subLogger as log } from '../../logger' -import { IndexingService } from './indexing' -import { Database } from './db' import { BackgroundQueue } from './background' +import { Database } from './db' +import { IndexingService } from './indexing' export class RepoSubscription { firehose: Firehose diff --git a/packages/bsky/src/data-plane/server/util.ts b/packages/bsky/src/data-plane/server/util.ts index e873fb1f..55d090cb 100644 --- a/packages/bsky/src/data-plane/server/util.ts +++ b/packages/bsky/src/data-plane/server/util.ts @@ -4,9 +4,9 @@ import { ReplyRef, } from '../../lexicon/types/app/bsky/feed/post' import { Record as GateRecord } from '../../lexicon/types/app/bsky/feed/threadgate' -import DatabaseSchema from './db/database-schema' -import { valuesList } from './db/util' import { parseThreadGate } from '../../views/util' +import { DatabaseSchema } from './db/database-schema' +import { valuesList } from './db/util' export const getDescendentsQb = ( db: DatabaseSchema, diff --git a/packages/bsky/src/error.ts b/packages/bsky/src/error.ts index a4de90f5..65fbf17b 100644 --- a/packages/bsky/src/error.ts +++ b/packages/bsky/src/error.ts @@ -1,5 +1,5 @@ -import { XRPCError } from '@atproto/xrpc-server' import { ErrorRequestHandler } from 'express' +import { XRPCError } from '@atproto/xrpc-server' import { httpLogger as log } from './logger' export const handler: ErrorRequestHandler = (err, _req, res, next) => { diff --git a/packages/bsky/src/feature-gates.ts b/packages/bsky/src/feature-gates.ts index ccfa9280..d49b647c 100644 --- a/packages/bsky/src/feature-gates.ts +++ b/packages/bsky/src/feature-gates.ts @@ -1,8 +1,6 @@ import Statsig, { StatsigUser } from 'statsig-node' import { sha256Hex } from '@atproto/crypto' - import { featureGatesLogger } from './logger' -import type { ServerConfig } from './config' export type Config = { apiKey?: string diff --git a/packages/bsky/src/hydration/feed.ts b/packages/bsky/src/hydration/feed.ts index 1db35e4f..2d561569 100644 --- a/packages/bsky/src/hydration/feed.ts +++ b/packages/bsky/src/hydration/feed.ts @@ -1,10 +1,16 @@ +import { dedupeStrs } from '@atproto/common' import { DataPlaneClient } from '../data-plane/client' -import { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post' -import { Record as LikeRecord } from '../lexicon/types/app/bsky/feed/like' -import { Record as RepostRecord } from '../lexicon/types/app/bsky/feed/repost' import { Record as FeedGenRecord } from '../lexicon/types/app/bsky/feed/generator' -import { Record as ThreadgateRecord } from '../lexicon/types/app/bsky/feed/threadgate' +import { Record as LikeRecord } from '../lexicon/types/app/bsky/feed/like' +import { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post' import { Record as PostgateRecord } from '../lexicon/types/app/bsky/feed/postgate' +import { Record as RepostRecord } from '../lexicon/types/app/bsky/feed/repost' +import { Record as ThreadgateRecord } from '../lexicon/types/app/bsky/feed/threadgate' +import { + postUriToPostgateUri, + postUriToThreadgateUri, + uriToDid as didFromUri, +} from '../util/uris' import { HydrationMap, ItemRef, @@ -13,12 +19,6 @@ import { parseString, split, } from './util' -import { dedupeStrs } from '@atproto/common' -import { - postUriToThreadgateUri, - postUriToPostgateUri, - uriToDid as didFromUri, -} from '../util/uris' export type Post = RecordInfo<PostRecord> & { violatesThreadGate: boolean diff --git a/packages/bsky/src/hydration/graph.ts b/packages/bsky/src/hydration/graph.ts index a153e96c..148a7e0d 100644 --- a/packages/bsky/src/hydration/graph.ts +++ b/packages/bsky/src/hydration/graph.ts @@ -1,11 +1,11 @@ -import { Record as FollowRecord } from '../lexicon/types/app/bsky/graph/follow' +import { DataPlaneClient } from '../data-plane/client' import { Record as BlockRecord } from '../lexicon/types/app/bsky/graph/block' -import { Record as StarterPackRecord } from '../lexicon/types/app/bsky/graph/starterpack' +import { Record as FollowRecord } from '../lexicon/types/app/bsky/graph/follow' import { Record as ListRecord } from '../lexicon/types/app/bsky/graph/list' import { Record as ListItemRecord } from '../lexicon/types/app/bsky/graph/listitem' -import { DataPlaneClient } from '../data-plane/client' -import { HydrationMap, ItemRef, RecordInfo, parseRecord } from './util' +import { Record as StarterPackRecord } from '../lexicon/types/app/bsky/graph/starterpack' import { FollowInfo } from '../proto/bsky_pb' +import { HydrationMap, ItemRef, RecordInfo, parseRecord } from './util' export type List = RecordInfo<ListRecord> export type Lists = HydrationMap<List> diff --git a/packages/bsky/src/hydration/hydrator.ts b/packages/bsky/src/hydration/hydrator.ts index 39d6015e..788b9c52 100644 --- a/packages/bsky/src/hydration/hydrator.ts +++ b/packages/bsky/src/hydration/hydrator.ts @@ -1,21 +1,40 @@ -import assert from 'assert' +import assert from 'node:assert' import { mapDefined } from '@atproto/common' import { AtUri } from '@atproto/syntax' import { DataPlaneClient } from '../data-plane/client' -import { Notification } from '../proto/bsky_pb' import { ids } from '../lexicon/lexicons' import { isMain as isEmbedRecord } from '../lexicon/types/app/bsky/embed/record' import { isMain as isEmbedRecordWithMedia } from '../lexicon/types/app/bsky/embed/recordWithMedia' import { isListRule as isThreadgateListRule } from '../lexicon/types/app/bsky/feed/threadgate' import { hydrationLogger } from '../logger' +import { Notification } from '../proto/bsky_pb' +import { ParsedLabelers } from '../util' +import { uriToDid, uriToDid as didFromUri } from '../util/uris' import { ActorHydrator, - ProfileAggs, Actors, - ProfileViewerStates, - ProfileViewerState, KnownFollowers, + ProfileAggs, + ProfileViewerState, + ProfileViewerStates, } from './actor' +import { + FeedGenAggs, + FeedGenViewerStates, + FeedGens, + FeedHydrator, + FeedItem, + Likes, + Post, + PostAggs, + PostViewerStates, + Postgates, + Posts, + Reposts, + ThreadContexts, + ThreadRef, + Threadgates, +} from './feed' import { Follows, GraphHydrator, @@ -36,32 +55,13 @@ import { } from './label' import { HydrationMap, - RecordInfo, ItemRef, - urisByCollection, + RecordInfo, + mergeManyMaps, mergeMaps, mergeNestedMaps, - mergeManyMaps, + urisByCollection, } from './util' -import { uriToDid as didFromUri, uriToDid } from '../util/uris' -import { - FeedGenAggs, - FeedGens, - FeedGenViewerStates, - FeedHydrator, - Likes, - Post, - Posts, - Reposts, - PostAggs, - PostViewerStates, - Threadgates, - Postgates, - FeedItem, - ThreadContexts, - ThreadRef, -} from './feed' -import { ParsedLabelers } from '../util' export class HydrateCtx { labelers = this.vals.labelers diff --git a/packages/bsky/src/hydration/label.ts b/packages/bsky/src/hydration/label.ts index 89fb3eed..13e46e13 100644 --- a/packages/bsky/src/hydration/label.ts +++ b/packages/bsky/src/hydration/label.ts @@ -1,6 +1,9 @@ +import { AtUri } from '@atproto/syntax' import { DataPlaneClient } from '../data-plane/client' -import { Label } from '../lexicon/types/com/atproto/label/defs' +import { ids } from '../lexicon/lexicons' import { Record as LabelerRecord } from '../lexicon/types/app/bsky/labeler/service' +import { Label } from '../lexicon/types/com/atproto/label/defs' +import { ParsedLabelers } from '../util' import { HydrationMap, Merges, @@ -9,9 +12,6 @@ import { parseRecord, parseString, } from './util' -import { AtUri } from '@atproto/syntax' -import { ids } from '../lexicon/lexicons' -import { ParsedLabelers } from '../util' export type { Label } from '../lexicon/types/com/atproto/label/defs' diff --git a/packages/bsky/src/hydration/util.ts b/packages/bsky/src/hydration/util.ts index 7fe3b026..fae89596 100644 --- a/packages/bsky/src/hydration/util.ts +++ b/packages/bsky/src/hydration/util.ts @@ -1,7 +1,7 @@ -import { AtUri } from '@atproto/syntax' -import { jsonToLex } from '@atproto/lexicon' import { CID } from 'multiformats/cid' import * as ui8 from 'uint8arrays' +import { jsonToLex } from '@atproto/lexicon' +import { AtUri } from '@atproto/syntax' import { lexicons } from '../lexicon/lexicons' import { Record } from '../proto/bsky_pb' diff --git a/packages/bsky/src/image/index.ts b/packages/bsky/src/image/index.ts index 3197b5ae..56781f3a 100644 --- a/packages/bsky/src/image/index.ts +++ b/packages/bsky/src/image/index.ts @@ -1,2 +1,2 @@ export * from './sharp' -export type { Options, ImageInfo } from './util' +export type { ImageInfo, Options } from './util' diff --git a/packages/bsky/src/image/server.ts b/packages/bsky/src/image/server.ts index 3ee752b2..f4427bd2 100644 --- a/packages/bsky/src/image/server.ts +++ b/packages/bsky/src/image/server.ts @@ -1,26 +1,25 @@ -import { - cloneStream, - createDecoders, - isErrnoException, - VerifyCidError, - VerifyCidTransform, -} from '@atproto/common' -import { BlobNotFoundError } from '@atproto/repo' -import createError, { isHttpError } from 'http-errors' import fsSync from 'node:fs' import fs from 'node:fs/promises' import os from 'node:os' import path from 'node:path' import { Duplex, Readable } from 'node:stream' import { pipeline } from 'node:stream/promises' - -import { streamBlob, StreamBlobOptions } from '../api/blob-resolver' -import AppContext from '../context' +import createError, { isHttpError } from 'http-errors' +import { + VerifyCidError, + VerifyCidTransform, + cloneStream, + createDecoders, + isErrnoException, +} from '@atproto/common' +import { BlobNotFoundError } from '@atproto/repo' +import { StreamBlobOptions, streamBlob } from '../api/blob-resolver' +import { AppContext } from '../context' import { Middleware, responseSignal } from '../util/http' import log from './logger' import { createImageProcessor, createImageUpscaler } from './sharp' import { BadPathError, ImageUriBuilder } from './uri' -import { formatsToMimes, Options, SharpInfo } from './util' +import { Options, SharpInfo, formatsToMimes } from './util' export function createMiddleware( ctx: AppContext, diff --git a/packages/bsky/src/image/sharp.ts b/packages/bsky/src/image/sharp.ts index 0df4dc9e..030a2f08 100644 --- a/packages/bsky/src/image/sharp.ts +++ b/packages/bsky/src/image/sharp.ts @@ -1,8 +1,8 @@ -import { errHasMsg } from '@atproto/common' import { PassThrough, Readable } from 'node:stream' import { pipeline } from 'node:stream/promises' import sharp from 'sharp' -import { formatsToMimes, ImageInfo, Options } from './util' +import { errHasMsg } from '@atproto/common' +import { ImageInfo, Options, formatsToMimes } from './util' export type { Options } diff --git a/packages/bsky/src/index.ts b/packages/bsky/src/index.ts index 3c3f826d..68462f9c 100644 --- a/packages/bsky/src/index.ts +++ b/packages/bsky/src/index.ts @@ -1,39 +1,39 @@ -import express from 'express' -import http from 'http' -import { AddressInfo } from 'net' -import events from 'events' -import { createHttpTerminator, HttpTerminator } from 'http-terminator' -import cors from 'cors' +import events from 'node:events' +import http from 'node:http' +import { AddressInfo } from 'node:net' import compression from 'compression' +import cors from 'cors' +import express from 'express' +import { HttpTerminator, createHttpTerminator } from 'http-terminator' import { AtpAgent } from '@atproto/api' -import { IdResolver } from '@atproto/identity' import { DAY, SECOND } from '@atproto/common' import { Keypair } from '@atproto/crypto' -import API, { health, wellKnown, blobResolver } from './api' -import * as error from './error' -import { loggerMiddleware } from './logger' -import { ServerConfig } from './config' -import { createServer } from './lexicon' -import { ImageUriBuilder } from './image/uri' -import * as imageServer from './image/server' -import AppContext from './context' -import { createDataPlaneClient } from './data-plane/client' -import { Hydrator } from './hydration/hydrator' -import { Views } from './views' +import { IdResolver } from '@atproto/identity' +import API, { blobResolver, health, wellKnown } from './api' +import { createBlobDispatcher } from './api/blob-dispatcher' import { AuthVerifier, createPublicKeyObject } from './auth-verifier' import { authWithApiKey as bsyncAuth, createBsyncClient } from './bsync' +import { ServerConfig } from './config' +import { AppContext } from './context' import { authWithApiKey as courierAuth, createCourierClient } from './courier' +import { createDataPlaneClient } from './data-plane/client' +import * as error from './error' import { FeatureGates } from './feature-gates' +import { Hydrator } from './hydration/hydrator' +import * as imageServer from './image/server' +import { ImageUriBuilder } from './image/uri' +import { createServer } from './lexicon' +import { loggerMiddleware } from './logger' +import { Views } from './views' import { VideoUriBuilder } from './views/util' -import { createBlobDispatcher } from './api/blob-dispatcher' -export * from './data-plane' -export type { ServerConfigValues } from './config' export { ServerConfig } from './config' +export type { ServerConfigValues } from './config' +export { AppContext } from './context' +export * from './data-plane' +export { BackgroundQueue } from './data-plane/server/background' export { Database } from './data-plane/server/db' export { Redis } from './redis' -export { AppContext } from './context' -export { BackgroundQueue } from './data-plane/server/background' export class BskyAppView { public ctx: AppContext diff --git a/packages/bsky/src/logger.ts b/packages/bsky/src/logger.ts index 0355ac34..81530b2f 100644 --- a/packages/bsky/src/logger.ts +++ b/packages/bsky/src/logger.ts @@ -1,6 +1,6 @@ import { IncomingMessage } from 'node:http' import { stdSerializers } from 'pino' -import pinoHttp from 'pino-http' +import { pinoHttp } from 'pino-http' import { obfuscateHeaders, subsystemLogger } from '@atproto/common' export const dbLogger: ReturnType<typeof subsystemLogger> = diff --git a/packages/bsky/src/redis.ts b/packages/bsky/src/redis.ts index 3104f021..b9f3d3fc 100644 --- a/packages/bsky/src/redis.ts +++ b/packages/bsky/src/redis.ts @@ -1,4 +1,4 @@ -import assert from 'assert' +import assert from 'node:assert' import { Redis as RedisDriver } from 'ioredis' export class Redis { diff --git a/packages/bsky/src/util/http.ts b/packages/bsky/src/util/http.ts index fcc980d6..3a5d8b53 100644 --- a/packages/bsky/src/util/http.ts +++ b/packages/bsky/src/util/http.ts @@ -1,5 +1,5 @@ -import createHttpError from 'http-errors' import { IncomingMessage, ServerResponse } from 'node:http' +import createHttpError from 'http-errors' import { IncomingHttpHeaders } from 'undici/types/header' type NextFunction = (err?: unknown) => void diff --git a/packages/bsky/src/util/uris.ts b/packages/bsky/src/util/uris.ts index 044dc37d..95b8f22b 100644 --- a/packages/bsky/src/util/uris.ts +++ b/packages/bsky/src/util/uris.ts @@ -1,8 +1,8 @@ import { AtUri } from '@atproto/syntax' import { ids } from '../lexicon/lexicons' import { - validateMain as validateStrongRef, Main as StrongRef, + validateMain as validateStrongRef, } from '../lexicon/types/com/atproto/repo/strongRef' /** diff --git a/packages/bsky/src/views/index.ts b/packages/bsky/src/views/index.ts index e0290eb9..78273ad2 100644 --- a/packages/bsky/src/views/index.ts +++ b/packages/bsky/src/views/index.ts @@ -1,12 +1,16 @@ -import { AtUri, INVALID_HANDLE, normalizeDatetimeAlways } from '@atproto/syntax' import { mapDefined } from '@atproto/common' -import { ImageUriBuilder } from '../image/uri' +import { AtUri, INVALID_HANDLE, normalizeDatetimeAlways } from '@atproto/syntax' +import { ProfileViewerState } from '../hydration/actor' +import { FeedItem, Post, Repost } from '../hydration/feed' import { HydrationState } from '../hydration/hydrator' +import { Label } from '../hydration/label' +import { RecordInfo } from '../hydration/util' +import { ImageUriBuilder } from '../image/uri' import { ids } from '../lexicon/lexicons' import { - ProfileViewDetailed, ProfileView, ProfileViewBasic, + ProfileViewDetailed, ViewerState as ProfileViewer, } from '../lexicon/types/app/bsky/actor/defs' import { @@ -15,14 +19,15 @@ import { GeneratorView, NotFoundPost, PostView, - ReasonRepost, ReasonPin, + ReasonRepost, ReplyRef, ThreadViewPost, ThreadgateView, isPostView, } from '../lexicon/types/app/bsky/feed/defs' import { isRecord as isPostRecord } from '../lexicon/types/app/bsky/feed/post' +import { isListRule } from '../lexicon/types/app/bsky/feed/threadgate' import { ListView, ListViewBasic, @@ -30,23 +35,23 @@ import { StarterPackViewBasic, } from '../lexicon/types/app/bsky/graph/defs' import { - parseThreadGate, - cidFromBlobJson, - VideoUriBuilder, - parsePostgate, -} from './util' + LabelerView, + LabelerViewDetailed, +} from '../lexicon/types/app/bsky/labeler/defs' +import { isSelfLabels } from '../lexicon/types/com/atproto/label/defs' +import { Notification } from '../proto/bsky_pb' import { - uriToDid as creatorFromUri, + postUriToPostgateUri, + postUriToThreadgateUri, safePinnedPost, uriToDid, + uriToDid as creatorFromUri, } from '../util/uris' -import { isListRule } from '../lexicon/types/app/bsky/feed/threadgate' -import { isSelfLabels } from '../lexicon/types/com/atproto/label/defs' import { Embed, EmbedBlocked, - EmbedNotFound, EmbedDetached, + EmbedNotFound, EmbedView, ExternalEmbed, ExternalEmbedView, @@ -68,16 +73,12 @@ import { isRecordWithMedia, isVideoEmbed, } from './types' -import { Label } from '../hydration/label' -import { FeedItem, Post, Repost } from '../hydration/feed' -import { RecordInfo } from '../hydration/util' import { - LabelerView, - LabelerViewDetailed, -} from '../lexicon/types/app/bsky/labeler/defs' -import { Notification } from '../proto/bsky_pb' -import { postUriToThreadgateUri, postUriToPostgateUri } from '../util/uris' -import { ProfileViewerState } from '../hydration/actor' + VideoUriBuilder, + cidFromBlobJson, + parsePostgate, + parseThreadGate, +} from './util' export class Views { public imgUriBuilder: ImageUriBuilder = this.opts.imgUriBuilder diff --git a/packages/bsky/src/views/types.ts b/packages/bsky/src/views/types.ts index 3470a857..a3e30c82 100644 --- a/packages/bsky/src/views/types.ts +++ b/packages/bsky/src/views/types.ts @@ -1,15 +1,11 @@ -import { - Main as ImagesEmbed, - View as ImagesEmbedView, -} from '../lexicon/types/app/bsky/embed/images' -import { - Main as VideoEmbed, - View as VideoEmbedView, -} from '../lexicon/types/app/bsky/embed/video' import { Main as ExternalEmbed, View as ExternalEmbedView, } from '../lexicon/types/app/bsky/embed/external' +import { + Main as ImagesEmbed, + View as ImagesEmbedView, +} from '../lexicon/types/app/bsky/embed/images' import { Main as RecordEmbed, View as RecordEmbedView, @@ -19,6 +15,10 @@ import { Main as RecordWithMedia, View as RecordWithMediaView, } from '../lexicon/types/app/bsky/embed/recordWithMedia' +import { + Main as VideoEmbed, + View as VideoEmbedView, +} from '../lexicon/types/app/bsky/embed/video' import { BlockedPost, GeneratorView, @@ -47,8 +47,8 @@ export type { Main as RecordEmbed, View as RecordEmbedView, ViewBlocked as EmbedBlocked, - ViewNotFound as EmbedNotFound, ViewDetached as EmbedDetached, + ViewNotFound as EmbedNotFound, ViewRecord as PostEmbedView, } from '../lexicon/types/app/bsky/embed/record' export { isMain as isRecordEmbed } from '../lexicon/types/app/bsky/embed/record' diff --git a/packages/bsky/src/views/util.ts b/packages/bsky/src/views/util.ts index f9e54f71..2ec393d5 100644 --- a/packages/bsky/src/views/util.ts +++ b/packages/bsky/src/views/util.ts @@ -1,16 +1,16 @@ import * as util from 'node:util' import { BlobRef } from '@atproto/lexicon' import { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post' +import { + Record as PostgateRecord, + isDisableRule as isPostgateDisableRule, +} from '../lexicon/types/app/bsky/feed/postgate' import { Record as GateRecord, isFollowingRule, isListRule, isMentionRule, } from '../lexicon/types/app/bsky/feed/threadgate' -import { - Record as PostgateRecord, - isDisableRule as isPostgateDisableRule, -} from '../lexicon/types/app/bsky/feed/postgate' import { isMention } from '../lexicon/types/app/bsky/richtext/facet' export const parseThreadGate = ( diff --git a/packages/bsky/tests/_util.ts b/packages/bsky/tests/_util.ts index 30dc53c0..954c6c69 100644 --- a/packages/bsky/tests/_util.ts +++ b/packages/bsky/tests/_util.ts @@ -1,11 +1,10 @@ +import { Server } from 'node:http' +import { AddressInfo } from 'node:net' +import { type Express } from 'express' +import { CID } from 'multiformats/cid' import { AppBskyFeedGetPostThread } from '@atproto/api' import { lexToJson } from '@atproto/lexicon' import { AtUri } from '@atproto/syntax' -import { type Express } from 'express' -import { CID } from 'multiformats/cid' -import { Server } from 'node:http' - -import { AddressInfo } from 'node:net' import { isViewRecord } from '../src/lexicon/types/app/bsky/embed/record' import { FeedViewPost, diff --git a/packages/bsky/tests/admin/admin-auth.test.ts b/packages/bsky/tests/admin/admin-auth.test.ts index 027ff49e..8379cb83 100644 --- a/packages/bsky/tests/admin/admin-auth.test.ts +++ b/packages/bsky/tests/admin/admin-auth.test.ts @@ -1,9 +1,9 @@ -import { SeedClient, usersSeed, TestNetwork } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' import { Secp256k1Keypair } from '@atproto/crypto' +import { SeedClient, TestNetwork, usersSeed } from '@atproto/dev-env' import { createServiceAuthHeaders } from '@atproto/xrpc-server' -import { RepoRef } from '../../src/lexicon/types/com/atproto/admin/defs' import { ids } from '../../src/lexicon/lexicons' +import { RepoRef } from '../../src/lexicon/types/com/atproto/admin/defs' describe('admin auth', () => { let network: TestNetwork diff --git a/packages/bsky/tests/admin/moderation.test.ts b/packages/bsky/tests/admin/moderation.test.ts index 7bb1c551..8ce65843 100644 --- a/packages/bsky/tests/admin/moderation.test.ts +++ b/packages/bsky/tests/admin/moderation.test.ts @@ -1,5 +1,5 @@ -import { ImageRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' +import { ImageRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { RepoBlobRef, RepoRef, diff --git a/packages/bsky/tests/auth.test.ts b/packages/bsky/tests/auth.test.ts index 97db9602..8698e258 100644 --- a/packages/bsky/tests/auth.test.ts +++ b/packages/bsky/tests/auth.test.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' +import { Keypair, Secp256k1Keypair } from '@atproto/crypto' import { SeedClient, TestNetwork, usersSeed } from '@atproto/dev-env' import { createServiceJwt } from '@atproto/xrpc-server' -import { Keypair, Secp256k1Keypair } from '@atproto/crypto' import { ids } from '../src/lexicon/lexicons' describe('auth', () => { diff --git a/packages/bsky/tests/blob-resolver.test.ts b/packages/bsky/tests/blob-resolver.test.ts index 71a48686..8bdf1677 100644 --- a/packages/bsky/tests/blob-resolver.test.ts +++ b/packages/bsky/tests/blob-resolver.test.ts @@ -1,8 +1,8 @@ +import { CID } from 'multiformats/cid' +import { request } from 'undici' import { cidForCbor, verifyCidForBytes } from '@atproto/common' import { randomBytes } from '@atproto/crypto' import { TestNetwork, basicSeed } from '@atproto/dev-env' -import { CID } from 'multiformats/cid' -import { request } from 'undici' describe('blob resolver', () => { let network: TestNetwork diff --git a/packages/bsky/tests/data-plane/duplicate-records.test.ts b/packages/bsky/tests/data-plane/duplicate-records.test.ts index e0998075..ee04b8f1 100644 --- a/packages/bsky/tests/data-plane/duplicate-records.test.ts +++ b/packages/bsky/tests/data-plane/duplicate-records.test.ts @@ -1,7 +1,7 @@ -import { AtUri } from '@atproto/syntax' -import { cidForCbor, TID } from '@atproto/common' -import { WriteOpAction } from '@atproto/repo' +import { TID, cidForCbor } from '@atproto/common' import { TestNetwork } from '@atproto/dev-env' +import { WriteOpAction } from '@atproto/repo' +import { AtUri } from '@atproto/syntax' import * as lex from '../../src/lexicon/lexicons' type Database = TestNetwork['bsky']['db'] diff --git a/packages/bsky/tests/data-plane/handle-invalidation.test.ts b/packages/bsky/tests/data-plane/handle-invalidation.test.ts index 8c366e23..d6be14b6 100644 --- a/packages/bsky/tests/data-plane/handle-invalidation.test.ts +++ b/packages/bsky/tests/data-plane/handle-invalidation.test.ts @@ -1,6 +1,6 @@ -import { DAY } from '@atproto/common' -import { TestNetwork, SeedClient, usersSeed } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' +import { DAY } from '@atproto/common' +import { SeedClient, TestNetwork, usersSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' describe('handle invalidation', () => { diff --git a/packages/bsky/tests/data-plane/indexing.test.ts b/packages/bsky/tests/data-plane/indexing.test.ts index b3ed9680..74b6d5cf 100644 --- a/packages/bsky/tests/data-plane/indexing.test.ts +++ b/packages/bsky/tests/data-plane/indexing.test.ts @@ -1,21 +1,21 @@ import { sql } from 'kysely' import { CID } from 'multiformats/cid' -import { cidForCbor, TID } from '@atproto/common' -import { repoPrepare } from '@atproto/pds' -import { WriteOpAction } from '@atproto/repo' -import { AtUri } from '@atproto/syntax' import { AppBskyActorProfile, - AppBskyFeedPost, AppBskyFeedLike, + AppBskyFeedPost, AppBskyFeedRepost, AppBskyGraphFollow, AtpAgent, } from '@atproto/api' -import { TestNetwork, SeedClient, usersSeed, basicSeed } from '@atproto/dev-env' -import { forSnapshot } from '../_util' -import { ids } from '../../src/lexicon/lexicons' +import { TID, cidForCbor } from '@atproto/common' +import { SeedClient, TestNetwork, basicSeed, usersSeed } from '@atproto/dev-env' +import { repoPrepare } from '@atproto/pds' +import { WriteOpAction } from '@atproto/repo' +import { AtUri } from '@atproto/syntax' import { Database } from '../../src/data-plane/server/db' +import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot } from '../_util' describe('indexing', () => { let network: TestNetwork diff --git a/packages/bsky/tests/data-plane/subscription.test.ts b/packages/bsky/tests/data-plane/subscription.test.ts index 6b52ccac..cd1ff717 100644 --- a/packages/bsky/tests/data-plane/subscription.test.ts +++ b/packages/bsky/tests/data-plane/subscription.test.ts @@ -1,9 +1,9 @@ import { AtpAgent } from '@atproto/api' import { cborDecode, cborEncode } from '@atproto/common' -import { DatabaseSchemaType } from '../../src/data-plane/server/db/database-schema' import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { PreparedWrite, sequencer } from '@atproto/pds' import { CommitData } from '@atproto/repo' +import { DatabaseSchemaType } from '../../src/data-plane/server/db/database-schema' import { ids } from '../../src/lexicon/lexicons' import { forSnapshot } from '../_util' diff --git a/packages/bsky/tests/data-plane/thread-mutes.test.ts b/packages/bsky/tests/data-plane/thread-mutes.test.ts index 5e964324..6fd839eb 100644 --- a/packages/bsky/tests/data-plane/thread-mutes.test.ts +++ b/packages/bsky/tests/data-plane/thread-mutes.test.ts @@ -1,5 +1,5 @@ -import { RecordRef, SeedClient, TestNetwork, usersSeed } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' +import { RecordRef, SeedClient, TestNetwork, usersSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' describe('thread mutes', () => { diff --git a/packages/bsky/tests/entryway-auth.test.ts b/packages/bsky/tests/entryway-auth.test.ts index 75d54248..b34ab12d 100644 --- a/packages/bsky/tests/entryway-auth.test.ts +++ b/packages/bsky/tests/entryway-auth.test.ts @@ -1,12 +1,12 @@ +import assert from 'node:assert' import * as nodeCrypto from 'node:crypto' +import * as jose from 'jose' import KeyEncoder from 'key-encoder' import * as ui8 from 'uint8arrays' -import * as jose from 'jose' -import * as crypto from '@atproto/crypto' -import { AtpAgent, AtUri } from '@atproto/api' -import { basicSeed, SeedClient, TestNetwork } from '@atproto/dev-env' -import assert from 'node:assert' +import { AtUri, AtpAgent } from '@atproto/api' import { MINUTE } from '@atproto/common' +import * as crypto from '@atproto/crypto' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' const keyEncoder = new KeyEncoder('secp256k1') diff --git a/packages/bsky/tests/feed-generation.test.ts b/packages/bsky/tests/feed-generation.test.ts index 47d144ea..aac7b69c 100644 --- a/packages/bsky/tests/feed-generation.test.ts +++ b/packages/bsky/tests/feed-generation.test.ts @@ -1,21 +1,21 @@ -import assert from 'assert' -import { XRPCError } from '@atproto/xrpc' -import { AuthRequiredError } from '@atproto/xrpc-server' -import { TID } from '@atproto/common' +import assert from 'node:assert' import { AtUri, AtpAgent } from '@atproto/api' +import { TID } from '@atproto/common' import { - TestNetwork, - TestFeedGen, - SeedClient, RecordRef, + SeedClient, + TestFeedGen, + TestNetwork, basicSeed, } from '@atproto/dev-env' -import { Handler as SkeletonHandler } from '../src/lexicon/types/app/bsky/feed/getFeedSkeleton' +import { XRPCError } from '@atproto/xrpc' +import { AuthRequiredError } from '@atproto/xrpc-server' import { ids } from '../src/lexicon/lexicons' import { FeedViewPost, SkeletonFeedPost, } from '../src/lexicon/types/app/bsky/feed/defs' +import { Handler as SkeletonHandler } from '../src/lexicon/types/app/bsky/feed/getFeedSkeleton' import { forSnapshot, paginateAll } from './_util' describe('feed generation', () => { diff --git a/packages/bsky/tests/hydration/util.test.ts b/packages/bsky/tests/hydration/util.test.ts index 541746d6..8796c934 100644 --- a/packages/bsky/tests/hydration/util.test.ts +++ b/packages/bsky/tests/hydration/util.test.ts @@ -1,7 +1,7 @@ import { HydrationMap, - mergeMaps, mergeManyMaps, + mergeMaps, mergeNestedMaps, } from '../../src/hydration/util' diff --git a/packages/bsky/tests/image/server.test.ts b/packages/bsky/tests/image/server.test.ts index c2f9b21f..57c4bb1d 100644 --- a/packages/bsky/tests/image/server.test.ts +++ b/packages/bsky/tests/image/server.test.ts @@ -1,7 +1,7 @@ +import { Readable } from 'node:stream' +import { CID } from 'multiformats/cid' import { cidForCbor } from '@atproto/common' import { TestNetwork, basicSeed } from '@atproto/dev-env' -import { CID } from 'multiformats/cid' -import { Readable } from 'node:stream' import { getInfo } from '../../src/image/sharp' import { ImageUriBuilder } from '../../src/image/uri' diff --git a/packages/bsky/tests/image/uri.test.ts b/packages/bsky/tests/image/uri.test.ts index 137e2359..49a95001 100644 --- a/packages/bsky/tests/image/uri.test.ts +++ b/packages/bsky/tests/image/uri.test.ts @@ -1,6 +1,6 @@ -import { cidForCbor } from '@atproto/common' import { CID } from 'multiformats/cid' -import { ImageUriBuilder, BadPathError } from '../../src/image/uri' +import { cidForCbor } from '@atproto/common' +import { BadPathError, ImageUriBuilder } from '../../src/image/uri' describe('image uri builder', () => { let uriBuilder: ImageUriBuilder diff --git a/packages/bsky/tests/label-hydration.test.ts b/packages/bsky/tests/label-hydration.test.ts index ad5ceb48..c9711b24 100644 --- a/packages/bsky/tests/label-hydration.test.ts +++ b/packages/bsky/tests/label-hydration.test.ts @@ -1,5 +1,5 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' describe('label hydration', () => { let network: TestNetwork diff --git a/packages/bsky/tests/postgates.test.ts b/packages/bsky/tests/postgates.test.ts index 5234fd77..f2e8227f 100644 --- a/packages/bsky/tests/postgates.test.ts +++ b/packages/bsky/tests/postgates.test.ts @@ -1,8 +1,7 @@ -import { TestNetwork, SeedClient, RecordRef } from '@atproto/dev-env' import AtpAgent, { AppBskyEmbedRecord } from '@atproto/api' - +import { SeedClient, TestNetwork } from '@atproto/dev-env' import { ids } from '../src/lexicon/lexicons' -import { postgatesSeed, Users } from './seed/postgates' +import { Users, postgatesSeed } from './seed/postgates' describe('postgates', () => { let network: TestNetwork diff --git a/packages/bsky/tests/query-labels.test.ts b/packages/bsky/tests/query-labels.test.ts index 4872143c..401bba89 100644 --- a/packages/bsky/tests/query-labels.test.ts +++ b/packages/bsky/tests/query-labels.test.ts @@ -1,5 +1,5 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' describe('label hydration', () => { let network: TestNetwork diff --git a/packages/bsky/tests/seed/feed-hidden-replies.ts b/packages/bsky/tests/seed/feed-hidden-replies.ts index ff64b599..8df4cc6d 100644 --- a/packages/bsky/tests/seed/feed-hidden-replies.ts +++ b/packages/bsky/tests/seed/feed-hidden-replies.ts @@ -1,4 +1,4 @@ -import { TestNetwork, SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' +import { SeedClient, TestNetwork, TestNetworkNoAppView } from '@atproto/dev-env' export type User = { id: string diff --git a/packages/bsky/tests/seed/known-followers.ts b/packages/bsky/tests/seed/known-followers.ts index 7d35dd45..9764bea8 100644 --- a/packages/bsky/tests/seed/known-followers.ts +++ b/packages/bsky/tests/seed/known-followers.ts @@ -1,4 +1,4 @@ -import { TestNetwork, SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' +import { SeedClient, TestNetwork, TestNetworkNoAppView } from '@atproto/dev-env' export type User = { email: string diff --git a/packages/bsky/tests/seed/postgates.ts b/packages/bsky/tests/seed/postgates.ts index 165a1a3e..35fdf825 100644 --- a/packages/bsky/tests/seed/postgates.ts +++ b/packages/bsky/tests/seed/postgates.ts @@ -1,4 +1,4 @@ -import { TestNetwork, SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' +import { SeedClient, TestNetwork, TestNetworkNoAppView } from '@atproto/dev-env' export type User = { id: string diff --git a/packages/bsky/tests/server.test.ts b/packages/bsky/tests/server.test.ts index e10e0f66..57b5f27f 100644 --- a/packages/bsky/tests/server.test.ts +++ b/packages/bsky/tests/server.test.ts @@ -1,9 +1,9 @@ -import { TestNetwork, basicSeed } from '@atproto/dev-env' -import express from 'express' import { once } from 'node:events' import { AddressInfo } from 'node:net' import { finished } from 'node:stream/promises' +import express from 'express' import { request } from 'undici' +import { TestNetwork, basicSeed } from '@atproto/dev-env' import { handler as errorHandler } from '../src/error' import { startServer } from './_util' diff --git a/packages/bsky/tests/views/account-deactivation.test.ts b/packages/bsky/tests/views/account-deactivation.test.ts index 1efebfdf..0ad577b8 100644 --- a/packages/bsky/tests/views/account-deactivation.test.ts +++ b/packages/bsky/tests/views/account-deactivation.test.ts @@ -1,5 +1,5 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' describe('bsky account deactivation', () => { diff --git a/packages/bsky/tests/views/actor-likes.test.ts b/packages/bsky/tests/views/actor-likes.test.ts index 6879bc58..cd85a7e8 100644 --- a/packages/bsky/tests/views/actor-likes.test.ts +++ b/packages/bsky/tests/views/actor-likes.test.ts @@ -1,5 +1,5 @@ import { AtUri, AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' describe('bsky actor likes feed views', () => { diff --git a/packages/bsky/tests/views/actor-search.test.ts b/packages/bsky/tests/views/actor-search.test.ts index c82a87d8..4e6d022d 100644 --- a/packages/bsky/tests/views/actor-search.test.ts +++ b/packages/bsky/tests/views/actor-search.test.ts @@ -1,8 +1,8 @@ import { AtpAgent } from '@atproto/api' import { wait } from '@atproto/common' -import { TestNetwork, SeedClient, usersBulkSeed } from '@atproto/dev-env' -import { forSnapshot, paginateAll, stripViewer } from '../_util' +import { SeedClient, TestNetwork, usersBulkSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot, paginateAll, stripViewer } from '../_util' // @NOTE skipped to help with CI failures // The search code is not used in production & we should switch it out for tests on the search proxy interface diff --git a/packages/bsky/tests/views/author-feed.test.ts b/packages/bsky/tests/views/author-feed.test.ts index 6c42ab04..2e473d48 100644 --- a/packages/bsky/tests/views/author-feed.test.ts +++ b/packages/bsky/tests/views/author-feed.test.ts @@ -1,19 +1,19 @@ -import { AtpAgent, AppBskyActorProfile, AppBskyFeedDefs } from '@atproto/api' -import { TestNetwork, SeedClient, authorFeedSeed } from '@atproto/dev-env' +import { AppBskyActorProfile, AppBskyFeedDefs, AtpAgent } from '@atproto/api' +import { SeedClient, TestNetwork, authorFeedSeed } from '@atproto/dev-env' +import { ids } from '../../src/lexicon/lexicons' +import { isView as isImageEmbed } from '../../src/lexicon/types/app/bsky/embed/images' +import { isView as isEmbedRecordWithMedia } from '../../src/lexicon/types/app/bsky/embed/recordWithMedia' +import { isView as isVideoEmbed } from '../../src/lexicon/types/app/bsky/embed/video' +import { isPostView } from '../../src/lexicon/types/app/bsky/feed/defs' +import { ReplyRef, isRecord } from '../../src/lexicon/types/app/bsky/feed/post' +import { uriToDid } from '../../src/util/uris' +import { VideoEmbed } from '../../src/views/types' import { forSnapshot, paginateAll, stripViewer, stripViewerFromPost, } from '../_util' -import { ReplyRef, isRecord } from '../../src/lexicon/types/app/bsky/feed/post' -import { isView as isEmbedRecordWithMedia } from '../../src/lexicon/types/app/bsky/embed/recordWithMedia' -import { isView as isImageEmbed } from '../../src/lexicon/types/app/bsky/embed/images' -import { isView as isVideoEmbed } from '../../src/lexicon/types/app/bsky/embed/video' -import { isPostView } from '../../src/lexicon/types/app/bsky/feed/defs' -import { uriToDid } from '../../src/util/uris' -import { ids } from '../../src/lexicon/lexicons' -import { VideoEmbed } from '../../src/views/types' describe('pds author feed views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/block-lists.test.ts b/packages/bsky/tests/views/block-lists.test.ts index df5dd3d2..10eeb66c 100644 --- a/packages/bsky/tests/views/block-lists.test.ts +++ b/packages/bsky/tests/views/block-lists.test.ts @@ -1,7 +1,7 @@ -import { AtpAgent, AtUri } from '@atproto/api' -import { TestNetwork, SeedClient, RecordRef, basicSeed } from '@atproto/dev-env' -import { forSnapshot } from '../_util' +import { AtUri, AtpAgent } from '@atproto/api' +import { RecordRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot } from '../_util' describe('pds views with blocking from block lists', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/blocks.test.ts b/packages/bsky/tests/views/blocks.test.ts index 848b8f89..a0e5a599 100644 --- a/packages/bsky/tests/views/blocks.test.ts +++ b/packages/bsky/tests/views/blocks.test.ts @@ -1,8 +1,8 @@ -import assert from 'assert' -import { TestNetwork, RecordRef, SeedClient, basicSeed } from '@atproto/dev-env' -import { AtpAgent, AtUri } from '@atproto/api' -import { assertIsThreadViewPost, forSnapshot } from '../_util' +import assert from 'node:assert' +import { AtUri, AtpAgent } from '@atproto/api' +import { RecordRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { assertIsThreadViewPost, forSnapshot } from '../_util' describe('pds views with blocking', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/feed-hidden-replies.test.ts b/packages/bsky/tests/views/feed-hidden-replies.test.ts index a75dde85..9330bb08 100644 --- a/packages/bsky/tests/views/feed-hidden-replies.test.ts +++ b/packages/bsky/tests/views/feed-hidden-replies.test.ts @@ -1,8 +1,7 @@ -import { TestNetwork, SeedClient } from '@atproto/dev-env' import AtpAgent from '@atproto/api' - +import { SeedClient, TestNetwork } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' -import { feedHiddenRepliesSeed, Users } from '../seed/feed-hidden-replies' +import { Users, feedHiddenRepliesSeed } from '../seed/feed-hidden-replies' describe('feed hidden replies', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/feed-view-post.test.ts b/packages/bsky/tests/views/feed-view-post.test.ts index 532a2c90..d9fd35da 100644 --- a/packages/bsky/tests/views/feed-view-post.test.ts +++ b/packages/bsky/tests/views/feed-view-post.test.ts @@ -1,5 +1,5 @@ -import { AtpAgent, AppBskyFeedDefs, AtUri } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' +import { AppBskyFeedDefs, AtUri, AtpAgent } from '@atproto/api' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' /** diff --git a/packages/bsky/tests/views/follows.test.ts b/packages/bsky/tests/views/follows.test.ts index 83aa3a40..d0018ed4 100644 --- a/packages/bsky/tests/views/follows.test.ts +++ b/packages/bsky/tests/views/follows.test.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, followsSeed } from '@atproto/dev-env' -import { forSnapshot, paginateAll, stripViewer } from '../_util' +import { SeedClient, TestNetwork, followsSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot, paginateAll, stripViewer } from '../_util' describe('pds follow views', () => { let agent: AtpAgent diff --git a/packages/bsky/tests/views/known-followers.test.ts b/packages/bsky/tests/views/known-followers.test.ts index dbeb128f..756876fc 100644 --- a/packages/bsky/tests/views/known-followers.test.ts +++ b/packages/bsky/tests/views/known-followers.test.ts @@ -1,8 +1,7 @@ -import { TestNetwork, SeedClient } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' - -import { knownFollowersSeed } from '../seed/known-followers' +import { SeedClient, TestNetwork } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { knownFollowersSeed } from '../seed/known-followers' describe('known followers (social proof)', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/labeler-service.test.ts b/packages/bsky/tests/views/labeler-service.test.ts index a979667a..e78517f0 100644 --- a/packages/bsky/tests/views/labeler-service.test.ts +++ b/packages/bsky/tests/views/labeler-service.test.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed, RecordRef } from '@atproto/dev-env' -import { forSnapshot, stripViewerFromLabeler } from '../_util' +import { RecordRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot, stripViewerFromLabeler } from '../_util' describe('labeler service views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/labels-needs-review.test.ts b/packages/bsky/tests/views/labels-needs-review.test.ts index c91845f2..dbd37bdb 100644 --- a/packages/bsky/tests/views/labels-needs-review.test.ts +++ b/packages/bsky/tests/views/labels-needs-review.test.ts @@ -1,7 +1,7 @@ +import assert from 'node:assert' import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' -import assert from 'assert' import { isThreadViewPost } from '../../src/lexicon/types/app/bsky/feed/defs' describe('bsky needs-review labels', () => { diff --git a/packages/bsky/tests/views/labels-takedown.test.ts b/packages/bsky/tests/views/labels-takedown.test.ts index f77e9820..98b59810 100644 --- a/packages/bsky/tests/views/labels-takedown.test.ts +++ b/packages/bsky/tests/views/labels-takedown.test.ts @@ -1,5 +1,5 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed, RecordRef } from '@atproto/dev-env' +import { RecordRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' describe('bsky takedown labels', () => { diff --git a/packages/bsky/tests/views/likes.test.ts b/packages/bsky/tests/views/likes.test.ts index a3d889ae..427f2af7 100644 --- a/packages/bsky/tests/views/likes.test.ts +++ b/packages/bsky/tests/views/likes.test.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, likesSeed } from '@atproto/dev-env' -import { constantDate, forSnapshot, paginateAll, stripViewer } from '../_util' +import { SeedClient, TestNetwork, likesSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { constantDate, forSnapshot, paginateAll, stripViewer } from '../_util' describe('pds like views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/list-feed.test.ts b/packages/bsky/tests/views/list-feed.test.ts index d0b0302d..f869119f 100644 --- a/packages/bsky/tests/views/list-feed.test.ts +++ b/packages/bsky/tests/views/list-feed.test.ts @@ -1,12 +1,12 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, RecordRef, basicSeed } from '@atproto/dev-env' +import { RecordRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' +import { ids } from '../../src/lexicon/lexicons' import { forSnapshot, paginateAll, stripViewer, stripViewerFromPost, } from '../_util' -import { ids } from '../../src/lexicon/lexicons' describe('list feed views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/lists.test.ts b/packages/bsky/tests/views/lists.test.ts index 15266746..3f104596 100644 --- a/packages/bsky/tests/views/lists.test.ts +++ b/packages/bsky/tests/views/lists.test.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' -import { forSnapshot } from '../_util' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot } from '../_util' describe('bsky actor likes feed views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/mute-lists.test.ts b/packages/bsky/tests/views/mute-lists.test.ts index c4e25828..9b2af4d9 100644 --- a/packages/bsky/tests/views/mute-lists.test.ts +++ b/packages/bsky/tests/views/mute-lists.test.ts @@ -1,7 +1,7 @@ -import { AtpAgent, AtUri } from '@atproto/api' -import { TestNetwork, SeedClient, RecordRef, basicSeed } from '@atproto/dev-env' -import { forSnapshot } from '../_util' +import { AtUri, AtpAgent } from '@atproto/api' +import { RecordRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot } from '../_util' describe('bsky views with mutes from mute lists', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/mutes.test.ts b/packages/bsky/tests/views/mutes.test.ts index 5536a115..657254db 100644 --- a/packages/bsky/tests/views/mutes.test.ts +++ b/packages/bsky/tests/views/mutes.test.ts @@ -1,12 +1,12 @@ import { AtpAgent } from '@atproto/api' import { - TestNetwork, SeedClient, + TestNetwork, basicSeed, usersBulkSeed, } from '@atproto/dev-env' -import { forSnapshot, paginateAll } from '../_util' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot, paginateAll } from '../_util' describe('mute views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/notifications.test.ts b/packages/bsky/tests/views/notifications.test.ts index ca933d30..94250ae1 100644 --- a/packages/bsky/tests/views/notifications.test.ts +++ b/packages/bsky/tests/views/notifications.test.ts @@ -1,8 +1,8 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' -import { forSnapshot, paginateAll } from '../_util' -import { Notification } from '../../src/lexicon/types/app/bsky/notification/listNotifications' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { Notification } from '../../src/lexicon/types/app/bsky/notification/listNotifications' +import { forSnapshot, paginateAll } from '../_util' describe('notification views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/posts.test.ts b/packages/bsky/tests/views/posts.test.ts index 8fbaab77..56f89832 100644 --- a/packages/bsky/tests/views/posts.test.ts +++ b/packages/bsky/tests/views/posts.test.ts @@ -1,9 +1,9 @@ import { AppBskyFeedPost, AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' -import { forSnapshot, stripViewerFromPost } from '../_util' -import { RecordEmbed, VideoEmbed } from '../../src/views/types' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { RecordWithMedia } from '../../dist/views/types' import { ids } from '../../src/lexicon/lexicons' +import { RecordEmbed, VideoEmbed } from '../../src/views/types' +import { forSnapshot, stripViewerFromPost } from '../_util' describe('pds posts views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/profile.test.ts b/packages/bsky/tests/views/profile.test.ts index 792cd04c..c74168c9 100644 --- a/packages/bsky/tests/views/profile.test.ts +++ b/packages/bsky/tests/views/profile.test.ts @@ -1,8 +1,8 @@ -import fs from 'fs/promises' +import fs from 'node:fs/promises' import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' -import { forSnapshot, stripViewer } from '../_util' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot, stripViewer } from '../_util' describe('pds profile views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/quotes.test.ts b/packages/bsky/tests/views/quotes.test.ts index 7efe4ad2..46b8c053 100644 --- a/packages/bsky/tests/views/quotes.test.ts +++ b/packages/bsky/tests/views/quotes.test.ts @@ -1,7 +1,7 @@ -import { quotesSeed, SeedClient, TestNetwork } from '@atproto/dev-env' import AtpAgent from '@atproto/api' -import { forSnapshot } from '../_util' +import { SeedClient, TestNetwork, quotesSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot } from '../_util' describe('pds quote views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/reposts.test.ts b/packages/bsky/tests/views/reposts.test.ts index ad03455e..2f8b3fb5 100644 --- a/packages/bsky/tests/views/reposts.test.ts +++ b/packages/bsky/tests/views/reposts.test.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, repostsSeed } from '@atproto/dev-env' -import { forSnapshot, paginateAll, stripViewer } from '../_util' +import { SeedClient, TestNetwork, repostsSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { forSnapshot, paginateAll, stripViewer } from '../_util' describe('pds repost views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/starter-packs.test.ts b/packages/bsky/tests/views/starter-packs.test.ts index d78e93d0..5751c948 100644 --- a/packages/bsky/tests/views/starter-packs.test.ts +++ b/packages/bsky/tests/views/starter-packs.test.ts @@ -1,9 +1,9 @@ +import assert from 'node:assert' import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, RecordRef, basicSeed } from '@atproto/dev-env' +import { RecordRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' +import { ids } from '../../src/lexicon/lexicons' import { isRecord as isProfile } from '../../src/lexicon/types/app/bsky/actor/profile' import { forSnapshot } from '../_util' -import assert from 'assert' -import { ids } from '../../src/lexicon/lexicons' describe('starter packs', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/suggested-follows.test.ts b/packages/bsky/tests/views/suggested-follows.test.ts index eb647bd2..9ea187ed 100644 --- a/packages/bsky/tests/views/suggested-follows.test.ts +++ b/packages/bsky/tests/views/suggested-follows.test.ts @@ -1,5 +1,5 @@ -import { AtpAgent, AtUri } from '@atproto/api' -import { TestNetwork, SeedClient, likesSeed } from '@atproto/dev-env' +import { AtUri, AtpAgent } from '@atproto/api' +import { SeedClient, TestNetwork, likesSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' describe('suggested follows', () => { diff --git a/packages/bsky/tests/views/suggestions.test.ts b/packages/bsky/tests/views/suggestions.test.ts index c7628fda..7e43dbab 100644 --- a/packages/bsky/tests/views/suggestions.test.ts +++ b/packages/bsky/tests/views/suggestions.test.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' -import { stripViewer } from '../_util' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../../src/lexicon/lexicons' +import { stripViewer } from '../_util' describe('pds user search views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/thread.test.ts b/packages/bsky/tests/views/thread.test.ts index 67c9f66d..4b46f06b 100644 --- a/packages/bsky/tests/views/thread.test.ts +++ b/packages/bsky/tests/views/thread.test.ts @@ -1,11 +1,11 @@ import { AppBskyFeedGetPostThread, AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' +import { ids } from '../../src/lexicon/lexicons' import { assertIsThreadViewPost, forSnapshot, stripViewerFromThread, } from '../_util' -import { ids } from '../../src/lexicon/lexicons' describe('pds thread views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/threadgating.test.ts b/packages/bsky/tests/views/threadgating.test.ts index 2a459e24..260c1b8a 100644 --- a/packages/bsky/tests/views/threadgating.test.ts +++ b/packages/bsky/tests/views/threadgating.test.ts @@ -1,12 +1,12 @@ -import assert from 'assert' +import assert from 'node:assert' import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' +import { ids } from '../../src/lexicon/lexicons' import { isNotFoundPost, isThreadViewPost, } from '../../src/lexicon/types/app/bsky/feed/defs' import { forSnapshot } from '../_util' -import { ids } from '../../src/lexicon/lexicons' describe('views with thread gating', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/timeline.test.ts b/packages/bsky/tests/views/timeline.test.ts index 53e6d2d2..46727b07 100644 --- a/packages/bsky/tests/views/timeline.test.ts +++ b/packages/bsky/tests/views/timeline.test.ts @@ -1,15 +1,15 @@ -import assert from 'assert' +import assert from 'node:assert' import { AtpAgent } from '@atproto/api' import { - TestNetwork, - SeedClient, - basicSeed, EXAMPLE_LABELER, + SeedClient, + TestNetwork, + basicSeed, } from '@atproto/dev-env' -import { forSnapshot, getOriginator, paginateAll } from '../_util' -import { FeedViewPost } from '../../src/lexicon/types/app/bsky/feed/defs' import { Database } from '../../src' import { ids } from '../../src/lexicon/lexicons' +import { FeedViewPost } from '../../src/lexicon/types/app/bsky/feed/defs' +import { forSnapshot, getOriginator, paginateAll } from '../_util' const REVERSE_CHRON = 'reverse-chronological' diff --git a/packages/bsync/bin/migration-create.ts b/packages/bsync/bin/migration-create.ts index b51c536c..8a483456 100644 --- a/packages/bsync/bin/migration-create.ts +++ b/packages/bsync/bin/migration-create.ts @@ -1,7 +1,7 @@ #!/usr/bin/env ts-node -import * as fs from 'fs/promises' -import * as path from 'path' +import * as fs from 'node:fs/promises' +import * as path from 'node:path' export async function main() { const now = new Date() diff --git a/packages/bsync/package.json b/packages/bsync/package.json index d9d48fe2..bb339cf6 100644 --- a/packages/bsync/package.json +++ b/packages/bsync/package.json @@ -24,6 +24,9 @@ "migration:create": "ts-node ./bin/migration-create.ts", "buf:gen": "buf generate proto" }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto/common": "workspace:^", "@atproto/syntax": "workspace:^", diff --git a/packages/bsync/src/config.ts b/packages/bsync/src/config.ts index d5ea4454..0627f433 100644 --- a/packages/bsync/src/config.ts +++ b/packages/bsync/src/config.ts @@ -1,5 +1,5 @@ import assert from 'node:assert' -import { envInt, envStr, envList, envBool } from '@atproto/common' +import { envBool, envInt, envList, envStr } from '@atproto/common' export const envToCfg = (env: ServerEnvironment): ServerConfig => { const serviceCfg: ServerConfig['service'] = { diff --git a/packages/bsync/src/context.ts b/packages/bsync/src/context.ts index 66a63510..28ada97d 100644 --- a/packages/bsync/src/context.ts +++ b/packages/bsync/src/context.ts @@ -1,9 +1,9 @@ +import { EventEmitter } from 'node:stream' import TypedEventEmitter from 'typed-emitter' import { ServerConfig } from './config' -import Database from './db' +import { Database } from './db' import { createMuteOpChannel } from './db/schema/mute_op' import { createNotifOpChannel } from './db/schema/notif_op' -import { EventEmitter } from 'stream' export type AppContextOptions = { db: Database @@ -40,8 +40,6 @@ export class AppContext { } } -export default AppContext - export type AppEvents = { [createMuteOpChannel]: () => void [createNotifOpChannel]: () => void diff --git a/packages/bsync/src/db/index.ts b/packages/bsync/src/db/index.ts index 6fa14f36..ec986064 100644 --- a/packages/bsync/src/db/index.ts +++ b/packages/bsync/src/db/index.ts @@ -1,23 +1,23 @@ -import assert from 'assert' +import assert from 'node:assert' +import { EventEmitter } from 'node:stream' import { Kysely, - PostgresDialect, - Migrator, KyselyPlugin, + Migrator, PluginTransformQueryArgs, PluginTransformResultArgs, - RootOperationNode, + PostgresDialect, QueryResult, + RootOperationNode, UnknownRow, } from 'kysely' -import TypedEmitter from 'typed-emitter' import { Pool as PgPool, types as pgTypes } from 'pg' -import DatabaseSchema, { DatabaseSchemaType } from './schema' -import { PgOptions } from './types' +import TypedEmitter from 'typed-emitter' import { dbLogger } from '../logger' -import { EventEmitter } from 'stream' import * as migrations from './migrations' import { DbMigrationProvider } from './migrations/provider' +import { DatabaseSchema, DatabaseSchemaType } from './schema' +import { PgOptions } from './types' export class Database { pool: PgPool diff --git a/packages/bsync/src/db/schema/index.ts b/packages/bsync/src/db/schema/index.ts index 922286fe..b82b0494 100644 --- a/packages/bsync/src/db/schema/index.ts +++ b/packages/bsync/src/db/schema/index.ts @@ -1,8 +1,8 @@ import { Kysely } from 'kysely' -import * as muteOp from './mute_op' import * as muteItem from './mute_item' -import * as notifOp from './notif_op' +import * as muteOp from './mute_op' import * as notifItem from './notif_item' +import * as notifOp from './notif_op' export type DatabaseSchemaType = muteItem.PartialDB & muteOp.PartialDB & diff --git a/packages/bsync/src/db/types.ts b/packages/bsync/src/db/types.ts index c38271ee..015dca7c 100644 --- a/packages/bsync/src/db/types.ts +++ b/packages/bsync/src/db/types.ts @@ -1,5 +1,5 @@ -import { Pool as PgPool } from 'pg' import { DynamicModule, RawBuilder, SelectQueryBuilder } from 'kysely' +import { Pool as PgPool } from 'pg' export type DbRef = RawBuilder | ReturnType<DynamicModule['ref']> diff --git a/packages/bsync/src/index.ts b/packages/bsync/src/index.ts index bf9b9442..2c21a5d7 100644 --- a/packages/bsync/src/index.ts +++ b/packages/bsync/src/index.ts @@ -1,13 +1,13 @@ -import http from 'node:http' import events from 'node:events' -import { createHttpTerminator, HttpTerminator } from 'http-terminator' +import http from 'node:http' import { connectNodeAdapter } from '@connectrpc/connect-node' -import { dbLogger, loggerMiddleware } from './logger' -import AppContext, { AppContextOptions } from './context' +import { HttpTerminator, createHttpTerminator } from 'http-terminator' import { ServerConfig } from './config' -import routes from './routes' +import { AppContext, AppContextOptions } from './context' import { createMuteOpChannel } from './db/schema/mute_op' import { createNotifOpChannel } from './db/schema/notif_op' +import { dbLogger, loggerMiddleware } from './logger' +import routes from './routes' export * from './config' export * from './client' diff --git a/packages/bsync/src/logger.ts b/packages/bsync/src/logger.ts index daf2e039..86ef378f 100644 --- a/packages/bsync/src/logger.ts +++ b/packages/bsync/src/logger.ts @@ -1,5 +1,5 @@ import { type IncomingMessage } from 'node:http' -import pinoHttp, { stdSerializers } from 'pino-http' +import { pinoHttp, stdSerializers } from 'pino-http' import { obfuscateHeaders, subsystemLogger } from '@atproto/common' export const dbLogger: ReturnType<typeof subsystemLogger> = diff --git a/packages/bsync/src/routes/add-mute-operation.ts b/packages/bsync/src/routes/add-mute-operation.ts index 7d96a8c2..94acfb0c 100644 --- a/packages/bsync/src/routes/add-mute-operation.ts +++ b/packages/bsync/src/routes/add-mute-operation.ts @@ -1,12 +1,12 @@ +import { Code, ConnectError, ServiceImpl } from '@connectrpc/connect' import { sql } from 'kysely' import { AtUri } from '@atproto/syntax' -import { Code, ConnectError, ServiceImpl } from '@connectrpc/connect' +import { AppContext } from '../context' +import { Database } from '../db' +import { createMuteOpChannel } from '../db/schema/mute_op' import { Service } from '../proto/bsync_connect' import { AddMuteOperationResponse, MuteOperation_Type } from '../proto/bsync_pb' -import AppContext from '../context' -import { createMuteOpChannel } from '../db/schema/mute_op' import { authWithApiKey } from './auth' -import Database from '../db' import { isValidAtUri, isValidDid } from './util' export default (ctx: AppContext): Partial<ServiceImpl<typeof Service>> => ({ diff --git a/packages/bsync/src/routes/add-notif-operation.ts b/packages/bsync/src/routes/add-notif-operation.ts index a412346a..77ff0b91 100644 --- a/packages/bsync/src/routes/add-notif-operation.ts +++ b/packages/bsync/src/routes/add-notif-operation.ts @@ -1,11 +1,11 @@ -import { sql } from 'kysely' import { Code, ConnectError, ServiceImpl } from '@connectrpc/connect' +import { sql } from 'kysely' +import { AppContext } from '../context' +import { Database } from '../db' +import { createNotifOpChannel } from '../db/schema/notif_op' import { Service } from '../proto/bsync_connect' import { AddNotifOperationResponse } from '../proto/bsync_pb' -import AppContext from '../context' import { authWithApiKey } from './auth' -import Database from '../db' -import { createNotifOpChannel } from '../db/schema/notif_op' import { isValidDid } from './util' export default (ctx: AppContext): Partial<ServiceImpl<typeof Service>> => ({ diff --git a/packages/bsync/src/routes/auth.ts b/packages/bsync/src/routes/auth.ts index 003bb03a..fd0339bd 100644 --- a/packages/bsync/src/routes/auth.ts +++ b/packages/bsync/src/routes/auth.ts @@ -1,5 +1,5 @@ import { Code, ConnectError, HandlerContext } from '@connectrpc/connect' -import AppContext from '../context' +import { AppContext } from '../context' const BEARER = 'Bearer ' diff --git a/packages/bsync/src/routes/index.ts b/packages/bsync/src/routes/index.ts index 5bdb654d..6e3282b1 100644 --- a/packages/bsync/src/routes/index.ts +++ b/packages/bsync/src/routes/index.ts @@ -1,10 +1,10 @@ -import { sql } from 'kysely' import { ConnectRouter } from '@connectrpc/connect' +import { sql } from 'kysely' +import { AppContext } from '../context' import { Service } from '../proto/bsync_connect' -import AppContext from '../context' import addMuteOperation from './add-mute-operation' -import scanMuteOperations from './scan-mute-operations' import addNotifOperation from './add-notif-operation' +import scanMuteOperations from './scan-mute-operations' import scanNotifOperations from './scan-notif-operations' export default (ctx: AppContext) => (router: ConnectRouter) => { diff --git a/packages/bsync/src/routes/scan-mute-operations.ts b/packages/bsync/src/routes/scan-mute-operations.ts index cf490679..8aaa5745 100644 --- a/packages/bsync/src/routes/scan-mute-operations.ts +++ b/packages/bsync/src/routes/scan-mute-operations.ts @@ -1,9 +1,9 @@ import { once } from 'node:events' import { ServiceImpl } from '@connectrpc/connect' +import { AppContext } from '../context' +import { createMuteOpChannel } from '../db/schema/mute_op' import { Service } from '../proto/bsync_connect' import { ScanMuteOperationsResponse } from '../proto/bsync_pb' -import AppContext from '../context' -import { createMuteOpChannel } from '../db/schema/mute_op' import { authWithApiKey } from './auth' import { combineSignals, validCursor } from './util' diff --git a/packages/bsync/src/routes/scan-notif-operations.ts b/packages/bsync/src/routes/scan-notif-operations.ts index 769e2260..0f843706 100644 --- a/packages/bsync/src/routes/scan-notif-operations.ts +++ b/packages/bsync/src/routes/scan-notif-operations.ts @@ -1,11 +1,11 @@ import { once } from 'node:events' import { ServiceImpl } from '@connectrpc/connect' +import { AppContext } from '../context' +import { createNotifOpChannel } from '../db/schema/notif_op' import { Service } from '../proto/bsync_connect' import { ScanNotifOperationsResponse } from '../proto/bsync_pb' -import AppContext from '../context' import { authWithApiKey } from './auth' import { combineSignals, validCursor } from './util' -import { createNotifOpChannel } from '../db/schema/notif_op' export default (ctx: AppContext): Partial<ServiceImpl<typeof Service>> => ({ async scanNotifOperations(req, handlerCtx) { diff --git a/packages/bsync/tests/mutes.test.ts b/packages/bsync/tests/mutes.test.ts index 9595015c..4c0fb483 100644 --- a/packages/bsync/tests/mutes.test.ts +++ b/packages/bsync/tests/mutes.test.ts @@ -1,6 +1,6 @@ -import { wait } from '@atproto/common' -import getPort from 'get-port' import { Code, ConnectError } from '@connectrpc/connect' +import getPort from 'get-port' +import { wait } from '@atproto/common' import { BsyncClient, BsyncService, diff --git a/packages/bsync/tests/notifications.test.ts b/packages/bsync/tests/notifications.test.ts index 5de164a7..70d4d7b8 100644 --- a/packages/bsync/tests/notifications.test.ts +++ b/packages/bsync/tests/notifications.test.ts @@ -1,6 +1,6 @@ -import { wait } from '@atproto/common' -import getPort from 'get-port' import { Code, ConnectError } from '@connectrpc/connect' +import getPort from 'get-port' +import { wait } from '@atproto/common' import { BsyncClient, BsyncService, diff --git a/packages/common-web/src/tid.ts b/packages/common-web/src/tid.ts index d8029568..2f9e1874 100644 --- a/packages/common-web/src/tid.ts +++ b/packages/common-web/src/tid.ts @@ -1,4 +1,4 @@ -import { s32encode, s32decode } from './util' +import { s32decode, s32encode } from './util' const TID_LEN = 13 @@ -108,5 +108,3 @@ export class TID { return this.compareTo(other) < 0 } } - -export default TID diff --git a/packages/common-web/tests/check.test.ts b/packages/common-web/tests/check.test.ts index d17b88bd..4fafbf0a 100644 --- a/packages/common-web/tests/check.test.ts +++ b/packages/common-web/tests/check.test.ts @@ -1,5 +1,5 @@ -import { check } from '../src/index' import { ZodError } from 'zod' +import { check } from '../src/index' describe('check', () => { describe('is', () => { diff --git a/packages/common-web/tests/tid.test.ts b/packages/common-web/tests/tid.test.ts index cc3cc7c0..22f705a1 100644 --- a/packages/common-web/tests/tid.test.ts +++ b/packages/common-web/tests/tid.test.ts @@ -1,4 +1,4 @@ -import TID from '../src/tid' +import { TID } from '../src/tid' describe('TIDs', () => { it('creates a new TID', () => { diff --git a/packages/common/package.json b/packages/common/package.json index a02a0492..127817a5 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -18,6 +18,9 @@ "test": "jest", "build": "tsc --build tsconfig.build.json" }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto/common-web": "workspace:^", "@ipld/dag-cbor": "^7.0.3", diff --git a/packages/common/src/fs.ts b/packages/common/src/fs.ts index b8bcf7be..459b4edd 100644 --- a/packages/common/src/fs.ts +++ b/packages/common/src/fs.ts @@ -1,6 +1,6 @@ +import { constants } from 'node:fs' +import fs from 'node:fs/promises' import { isErrnoException } from '@atproto/common-web' -import { constants } from 'fs' -import fs from 'fs/promises' export const fileExists = async (location: string): Promise<boolean> => { try { diff --git a/packages/common/src/ipld.ts b/packages/common/src/ipld.ts index 37681177..b2a70844 100644 --- a/packages/common/src/ipld.ts +++ b/packages/common/src/ipld.ts @@ -1,12 +1,12 @@ import { createHash } from 'node:crypto' import { Transform } from 'node:stream' -import { check, schema } from '@atproto/common-web' -import { CID } from 'multiformats/cid' +import * as cborCodec from '@ipld/dag-cbor' +import * as mf from 'multiformats' import * as Block from 'multiformats/block' +import { CID } from 'multiformats/cid' import * as rawCodec from 'multiformats/codecs/raw' import { sha256 } from 'multiformats/hashes/sha2' -import * as mf from 'multiformats' -import * as cborCodec from '@ipld/dag-cbor' +import { check, schema } from '@atproto/common-web' export const cborEncode = cborCodec.encode export const cborDecode = cborCodec.decode diff --git a/packages/common/src/logger.ts b/packages/common/src/logger.ts index 857d32ee..07c833f2 100644 --- a/packages/common/src/logger.ts +++ b/packages/common/src/logger.ts @@ -1,4 +1,4 @@ -import pino from 'pino' +import { destination, pino } from 'pino' const allSystemsEnabled = !process.env.LOG_SYSTEMS const enabledSystems = (process.env.LOG_SYSTEMS || '') @@ -17,7 +17,7 @@ const config = { } const rootLogger = process.env.LOG_DESTINATION - ? pino(config, pino.destination(process.env.LOG_DESTINATION)) + ? pino(config, destination(process.env.LOG_DESTINATION)) : pino(config) const subsystems: Record<string, pino.Logger> = {} diff --git a/packages/common/src/streams.ts b/packages/common/src/streams.ts index c5400f4a..cafa631f 100644 --- a/packages/common/src/streams.ts +++ b/packages/common/src/streams.ts @@ -1,11 +1,11 @@ import { Duplex, PassThrough, - pipeline, Readable, Stream, Transform, TransformCallback, + pipeline, } from 'node:stream' import { createBrotliDecompress, createGunzip, createInflate } from 'node:zlib' diff --git a/packages/common/tests/ipld-multi.test.ts b/packages/common/tests/ipld-multi.test.ts index 6cdeccca..b2b5e735 100644 --- a/packages/common/tests/ipld-multi.test.ts +++ b/packages/common/tests/ipld-multi.test.ts @@ -1,6 +1,6 @@ import { CID } from 'multiformats/cid' import * as ui8 from 'uint8arrays' -import { cborEncode, cborDecodeMulti } from '../src' +import { cborDecodeMulti, cborEncode } from '../src' describe('ipld decode multi', () => { it('decodes concatenated dag-cbor messages', async () => { diff --git a/packages/common/tests/ipld-vectors.ts b/packages/common/tests/ipld-vectors.ts index ca8fede0..ae601c34 100644 --- a/packages/common/tests/ipld-vectors.ts +++ b/packages/common/tests/ipld-vectors.ts @@ -275,5 +275,3 @@ export const vectors = [ cid: 'bafyreico7wgbbfe6dpfsuednrtrlh6t2yjl6xq5rf32gl3pgwhwxk77cn4', }, ] - -export default vectors diff --git a/packages/common/tests/ipld.test.ts b/packages/common/tests/ipld.test.ts index 1e72ba8f..b0988df2 100644 --- a/packages/common/tests/ipld.test.ts +++ b/packages/common/tests/ipld.test.ts @@ -1,5 +1,4 @@ import * as ui8 from 'uint8arrays' -import vectors from './ipld-vectors' import { cborDecode, cborEncode, @@ -8,6 +7,7 @@ import { ipldToJson, jsonToIpld, } from '../src' +import { vectors } from './ipld-vectors' describe('ipld', () => { for (const vector of vectors) { diff --git a/packages/common/tests/streams.test.ts b/packages/common/tests/streams.test.ts index 8c380784..21bf78ed 100644 --- a/packages/common/tests/streams.test.ts +++ b/packages/common/tests/streams.test.ts @@ -1,5 +1,5 @@ -import * as streams from '../src/streams' import { PassThrough, Readable } from 'node:stream' +import * as streams from '../src/streams' describe('streams', () => { describe('forwardStreamErrors', () => { diff --git a/packages/crypto/package.json b/packages/crypto/package.json index 3f211d38..917e570a 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -19,6 +19,9 @@ "test": "jest ", "build": "tsc --build tsconfig.build.json" }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@noble/curves": "^1.7.0", "@noble/hashes": "^1.6.1", diff --git a/packages/crypto/src/did.ts b/packages/crypto/src/did.ts index a8e4f03a..eb131bf6 100644 --- a/packages/crypto/src/did.ts +++ b/packages/crypto/src/did.ts @@ -1,7 +1,6 @@ import * as uint8arrays from 'uint8arrays' - import { BASE58_MULTIBASE_PREFIX, DID_KEY_PREFIX } from './const' -import plugins from './plugins' +import { plugins } from './plugins' import { extractMultikey, extractPrefixedBytes, hasPrefix } from './utils' export type ParsedMultikey = { diff --git a/packages/crypto/src/p256/keypair.ts b/packages/crypto/src/p256/keypair.ts index 94a84c2a..f40eb0d2 100644 --- a/packages/crypto/src/p256/keypair.ts +++ b/packages/crypto/src/p256/keypair.ts @@ -1,13 +1,12 @@ import { p256 } from '@noble/curves/p256' import { sha256 } from '@noble/hashes/sha256' -import { SupportedEncodings } from 'uint8arrays/to-string' import { fromString as ui8FromString, toString as ui8ToString, } from 'uint8arrays' - -import * as did from '../did' +import { SupportedEncodings } from 'uint8arrays/to-string' import { P256_JWT_ALG } from '../const' +import * as did from '../did' import { Keypair } from '../types' export type P256KeypairOptions = { @@ -69,5 +68,3 @@ export class P256Keypair implements Keypair { return this.privateKey } } - -export default P256Keypair diff --git a/packages/crypto/src/p256/operations.ts b/packages/crypto/src/p256/operations.ts index 36153c32..91836ea1 100644 --- a/packages/crypto/src/p256/operations.ts +++ b/packages/crypto/src/p256/operations.ts @@ -1,7 +1,6 @@ import { p256 } from '@noble/curves/p256' import { sha256 } from '@noble/hashes/sha256' import { equals as ui8equals } from 'uint8arrays' - import { P256_DID_PREFIX } from '../const' import { VerifyOptions } from '../types' import { extractMultikey, extractPrefixedBytes, hasPrefix } from '../utils' diff --git a/packages/crypto/src/p256/plugin.ts b/packages/crypto/src/p256/plugin.ts index 4fcbafc0..6e8924a6 100644 --- a/packages/crypto/src/p256/plugin.ts +++ b/packages/crypto/src/p256/plugin.ts @@ -1,8 +1,7 @@ -import { verifyDidSig } from './operations' -import { compressPubkey, decompressPubkey } from './encoding' - -import { DidKeyPlugin } from '../types' import { P256_DID_PREFIX, P256_JWT_ALG } from '../const' +import { DidKeyPlugin } from '../types' +import { compressPubkey, decompressPubkey } from './encoding' +import { verifyDidSig } from './operations' export const p256Plugin: DidKeyPlugin = { prefix: P256_DID_PREFIX, @@ -12,5 +11,3 @@ export const p256Plugin: DidKeyPlugin = { compressPubkey, decompressPubkey, } - -export default p256Plugin diff --git a/packages/crypto/src/plugins.ts b/packages/crypto/src/plugins.ts index 18b21f82..8ee842c9 100644 --- a/packages/crypto/src/plugins.ts +++ b/packages/crypto/src/plugins.ts @@ -1,6 +1,4 @@ -import p256Plugin from './p256/plugin' -import secp256k1Plugin from './secp256k1/plugin' +import { p256Plugin } from './p256/plugin' +import { secp256k1Plugin } from './secp256k1/plugin' export const plugins = [p256Plugin, secp256k1Plugin] - -export default plugins diff --git a/packages/crypto/src/secp256k1/keypair.ts b/packages/crypto/src/secp256k1/keypair.ts index e312ee8f..3c595872 100644 --- a/packages/crypto/src/secp256k1/keypair.ts +++ b/packages/crypto/src/secp256k1/keypair.ts @@ -5,7 +5,6 @@ import { toString as ui8ToString, } from 'uint8arrays' import { SupportedEncodings } from 'uint8arrays/to-string' - import { SECP256K1_JWT_ALG } from '../const' import * as did from '../did' import { Keypair } from '../types' @@ -69,5 +68,3 @@ export class Secp256k1Keypair implements Keypair { return this.privateKey } } - -export default Secp256k1Keypair diff --git a/packages/crypto/src/secp256k1/operations.ts b/packages/crypto/src/secp256k1/operations.ts index 4e8dc95d..5d2dde58 100644 --- a/packages/crypto/src/secp256k1/operations.ts +++ b/packages/crypto/src/secp256k1/operations.ts @@ -1,7 +1,6 @@ import { secp256k1 as k256 } from '@noble/curves/secp256k1' import { sha256 } from '@noble/hashes/sha256' import * as ui8 from 'uint8arrays' - import { SECP256K1_DID_PREFIX } from '../const' import { VerifyOptions } from '../types' import { extractMultikey, extractPrefixedBytes, hasPrefix } from '../utils' diff --git a/packages/crypto/src/secp256k1/plugin.ts b/packages/crypto/src/secp256k1/plugin.ts index 1e8c622b..8a4b4b77 100644 --- a/packages/crypto/src/secp256k1/plugin.ts +++ b/packages/crypto/src/secp256k1/plugin.ts @@ -1,8 +1,7 @@ -import { verifyDidSig } from './operations' -import { compressPubkey, decompressPubkey } from './encoding' - -import { DidKeyPlugin } from '../types' import { SECP256K1_DID_PREFIX, SECP256K1_JWT_ALG } from '../const' +import { DidKeyPlugin } from '../types' +import { compressPubkey, decompressPubkey } from './encoding' +import { verifyDidSig } from './operations' export const secp256k1Plugin: DidKeyPlugin = { prefix: SECP256K1_DID_PREFIX, @@ -12,5 +11,3 @@ export const secp256k1Plugin: DidKeyPlugin = { compressPubkey, decompressPubkey, } - -export default secp256k1Plugin diff --git a/packages/crypto/src/verify.ts b/packages/crypto/src/verify.ts index b0fbccbc..7daaf50e 100644 --- a/packages/crypto/src/verify.ts +++ b/packages/crypto/src/verify.ts @@ -1,6 +1,6 @@ import * as uint8arrays from 'uint8arrays' import { parseDidKey } from './did' -import plugins from './plugins' +import { plugins } from './plugins' import { VerifyOptions } from './types' export const verifySignature = ( diff --git a/packages/crypto/tests/did.test.ts b/packages/crypto/tests/did.test.ts index 6160c2f8..67e18738 100644 --- a/packages/crypto/tests/did.test.ts +++ b/packages/crypto/tests/did.test.ts @@ -1,6 +1,6 @@ +import * as uint8arrays from 'uint8arrays' import { P256Keypair, Secp256k1Keypair } from '../src' import * as did from '../src/did' -import * as uint8arrays from 'uint8arrays' describe('secp256k1 did:key', () => { it('derives the correct DID from the privatekey', async () => { diff --git a/packages/crypto/tests/key-compression.test.ts b/packages/crypto/tests/key-compression.test.ts index fe3e81cd..0a6900c0 100644 --- a/packages/crypto/tests/key-compression.test.ts +++ b/packages/crypto/tests/key-compression.test.ts @@ -1,8 +1,8 @@ -import P256Keypair from '../src/p256/keypair' -import Secp256k1Keypair from '../src/secp256k1/keypair' -import * as secpEncoding from '../src/secp256k1/encoding' -import * as p256Encoding from '../src/p256/encoding' import * as did from '../src/did' +import * as p256Encoding from '../src/p256/encoding' +import { P256Keypair } from '../src/p256/keypair' +import * as secpEncoding from '../src/secp256k1/encoding' +import { Secp256k1Keypair } from '../src/secp256k1/keypair' describe('public key compression', () => { describe('secp256k1', () => { diff --git a/packages/crypto/tests/keypairs.test.ts b/packages/crypto/tests/keypairs.test.ts index e9deca14..1a0eb75b 100644 --- a/packages/crypto/tests/keypairs.test.ts +++ b/packages/crypto/tests/keypairs.test.ts @@ -1,8 +1,8 @@ -import P256Keypair from '../src/p256/keypair' -import Secp256k1Keypair from '../src/secp256k1/keypair' -import * as p256 from '../src/p256/operations' -import * as secp from '../src/secp256k1/operations' import { randomBytes } from '../src' +import { P256Keypair } from '../src/p256/keypair' +import * as p256 from '../src/p256/operations' +import { Secp256k1Keypair } from '../src/secp256k1/keypair' +import * as secp from '../src/secp256k1/operations' describe('keypairs', () => { describe('secp256k1', () => { diff --git a/packages/crypto/tests/signatures.test.ts b/packages/crypto/tests/signatures.test.ts index a849e1c5..d7f054c7 100644 --- a/packages/crypto/tests/signatures.test.ts +++ b/packages/crypto/tests/signatures.test.ts @@ -1,20 +1,20 @@ import fs from 'node:fs' -import * as uint8arrays from 'uint8arrays' -import { secp256k1 as nobleK256 } from '@noble/curves/secp256k1' import { p256 as nobleP256 } from '@noble/curves/p256' +import { secp256k1 as nobleK256 } from '@noble/curves/secp256k1' +import * as uint8arrays from 'uint8arrays' import { cborEncode } from '@atproto/common' -import EcdsaKeypair from '../src/p256/keypair' -import Secp256k1Keypair from '../src/secp256k1/keypair' -import * as p256 from '../src/p256/operations' -import * as secp from '../src/secp256k1/operations' import { + P256_JWT_ALG, + SECP256K1_JWT_ALG, bytesToMultibase, multibaseToBytes, parseDidKey, - P256_JWT_ALG, - SECP256K1_JWT_ALG, sha256, } from '../src' +import { P256Keypair } from '../src/p256/keypair' +import * as p256 from '../src/p256/operations' +import { Secp256k1Keypair } from '../src/secp256k1/keypair' +import * as secp from '../src/secp256k1/operations' describe('signatures', () => { let vectors: TestVector[] @@ -140,7 +140,7 @@ describe('signatures', () => { // @ts-expect-error // eslint-disable-next-line @typescript-eslint/no-unused-vars async function generateTestVectors(): Promise<TestVector[]> { - const p256Key = await EcdsaKeypair.create({ exportable: true }) + const p256Key = await P256Keypair.create({ exportable: true }) const secpKey = await Secp256k1Keypair.create({ exportable: true }) const messageBytes = cborEncode({ hello: 'world' }) const messageBase64 = uint8arrays.toString(messageBytes, 'base64') diff --git a/packages/dev-env/package.json b/packages/dev-env/package.json index 8dad75d4..e279d848 100644 --- a/packages/dev-env/package.json +++ b/packages/dev-env/package.json @@ -20,6 +20,9 @@ "start": "../dev-infra/with-test-redis-and-db.sh node dist/bin.js", "dev": "../dev-infra/with-test-redis-and-db.sh node --watch dist/bin.js" }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto/api": "workspace:^", "@atproto/bsky": "workspace:^", diff --git a/packages/dev-env/src/bsky.ts b/packages/dev-env/src/bsky.ts index 1e4406b0..416ad88e 100644 --- a/packages/dev-env/src/bsky.ts +++ b/packages/dev-env/src/bsky.ts @@ -1,11 +1,11 @@ +import { Client as PlcClient } from '@did-plc/lib' import getPort from 'get-port' import * as ui8 from 'uint8arrays' -import * as bsky from '@atproto/bsky' import { AtpAgent } from '@atproto/api' +import * as bsky from '@atproto/bsky' import { Secp256k1Keypair } from '@atproto/crypto' -import { Client as PlcClient } from '@did-plc/lib' -import { BskyConfig } from './types' import { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const' +import { BskyConfig } from './types' export * from '@atproto/bsky' diff --git a/packages/dev-env/src/feed-gen.ts b/packages/dev-env/src/feed-gen.ts index cd2ffd93..33c87216 100644 --- a/packages/dev-env/src/feed-gen.ts +++ b/packages/dev-env/src/feed-gen.ts @@ -1,11 +1,11 @@ +import events from 'node:events' +import http from 'node:http' +import * as plc from '@did-plc/lib' +import express from 'express' +import getPort from 'get-port' import { Secp256k1Keypair } from '@atproto/crypto' import { SkeletonHandler, createLexiconServer } from '@atproto/pds' import { InvalidRequestError } from '@atproto/xrpc-server' -import * as plc from '@did-plc/lib' -import events from 'events' -import express from 'express' -import getPort from 'get-port' -import http from 'http' export class TestFeedGen { destroyed = false diff --git a/packages/dev-env/src/introspect.ts b/packages/dev-env/src/introspect.ts index 18e9091c..27d09d2c 100644 --- a/packages/dev-env/src/introspect.ts +++ b/packages/dev-env/src/introspect.ts @@ -1,10 +1,10 @@ -import http from 'node:http' import events from 'node:events' +import http from 'node:http' import express from 'express' -import { TestPlc } from './plc' -import { TestPds } from './pds' import { TestBsky } from './bsky' import { TestOzone } from './ozone' +import { TestPds } from './pds' +import { TestPlc } from './plc' export class IntrospectServer { constructor( diff --git a/packages/dev-env/src/mock/index.ts b/packages/dev-env/src/mock/index.ts index ba128367..f302daf4 100644 --- a/packages/dev-env/src/mock/index.ts +++ b/packages/dev-env/src/mock/index.ts @@ -1,10 +1,10 @@ -import { AtUri } from '@atproto/syntax' -import { COM_ATPROTO_MODERATION, AtpAgent } from '@atproto/api' +import { AtpAgent, COM_ATPROTO_MODERATION } from '@atproto/api' import { Database } from '@atproto/bsky' +import { AtUri } from '@atproto/syntax' import { EXAMPLE_LABELER, RecordRef, TestNetwork } from '../index' import { postTexts, replyTexts } from './data' -import labeledImgB64 from './img/labeled-img-b64' import blurHashB64 from './img/blur-hash-avatar-b64' +import labeledImgB64 from './img/labeled-img-b64' // NOTE // deterministic date generator diff --git a/packages/dev-env/src/moderator-client.ts b/packages/dev-env/src/moderator-client.ts index eb33cc0d..eb9212fb 100644 --- a/packages/dev-env/src/moderator-client.ts +++ b/packages/dev-env/src/moderator-client.ts @@ -1,10 +1,10 @@ import { AtpAgent, ToolsOzoneModerationEmitEvent as EmitModerationEvent, - ToolsOzoneModerationQueryStatuses as QueryModerationStatuses, ToolsOzoneModerationQueryEvents as QueryModerationEvents, - ToolsOzoneSettingUpsertOption, + ToolsOzoneModerationQueryStatuses as QueryModerationStatuses, ToolsOzoneSettingRemoveOptions, + ToolsOzoneSettingUpsertOption, } from '@atproto/api' import { TestOzone } from './ozone' diff --git a/packages/dev-env/src/network-no-appview.ts b/packages/dev-env/src/network-no-appview.ts index ee102b0c..da0b4c4c 100644 --- a/packages/dev-env/src/network-no-appview.ts +++ b/packages/dev-env/src/network-no-appview.ts @@ -1,10 +1,10 @@ import { SkeletonHandler } from '@atproto/pds' -import { TestServerParams } from './types' -import { TestPlc } from './plc' -import { TestPds } from './pds' -import { mockNetworkUtilities } from './util' import { TestFeedGen } from './feed-gen' +import { TestPds } from './pds' +import { TestPlc } from './plc' import { SeedClient } from './seed/client' +import { TestServerParams } from './types' +import { mockNetworkUtilities } from './util' export class TestNetworkNoAppView { feedGens: TestFeedGen[] = [] diff --git a/packages/dev-env/src/network.ts b/packages/dev-env/src/network.ts index 1ce07a19..be5e5629 100644 --- a/packages/dev-env/src/network.ts +++ b/packages/dev-env/src/network.ts @@ -1,18 +1,18 @@ -import assert from 'assert' -import * as uint8arrays from 'uint8arrays' +import assert from 'node:assert' import getPort from 'get-port' +import * as uint8arrays from 'uint8arrays' import { wait } from '@atproto/common-web' import { createServiceJwt } from '@atproto/xrpc-server' -import { TestServerParams } from './types' -import { TestPlc } from './plc' -import { TestPds } from './pds' import { TestBsky } from './bsky' -import { TestOzone } from './ozone' -import { OzoneServiceProfile } from './ozone-service-profile' -import { mockNetworkUtilities } from './util' -import { TestNetworkNoAppView } from './network-no-appview' import { EXAMPLE_LABELER } from './const' import { IntrospectServer } from './introspect' +import { TestNetworkNoAppView } from './network-no-appview' +import { TestOzone } from './ozone' +import { OzoneServiceProfile } from './ozone-service-profile' +import { TestPds } from './pds' +import { TestPlc } from './plc' +import { TestServerParams } from './types' +import { mockNetworkUtilities } from './util' const ADMIN_USERNAME = 'admin' const ADMIN_PASSWORD = 'admin-pass' diff --git a/packages/dev-env/src/ozone-service-profile.ts b/packages/dev-env/src/ozone-service-profile.ts index 9b8e10d7..10dee397 100644 --- a/packages/dev-env/src/ozone-service-profile.ts +++ b/packages/dev-env/src/ozone-service-profile.ts @@ -1,6 +1,6 @@ -import { TestPds } from './pds' import { AtpAgent } from '@atproto/api' import { Secp256k1Keypair } from '@atproto/crypto' +import { TestPds } from './pds' export class OzoneServiceProfile { did?: string diff --git a/packages/dev-env/src/ozone.ts b/packages/dev-env/src/ozone.ts index fabe73f5..4fb7617a 100644 --- a/packages/dev-env/src/ozone.ts +++ b/packages/dev-env/src/ozone.ts @@ -1,14 +1,14 @@ +import * as plc from '@did-plc/lib' import getPort from 'get-port' import * as ui8 from 'uint8arrays' -import * as plc from '@did-plc/lib' -import * as ozone from '@atproto/ozone' import { AtpAgent } from '@atproto/api' -import { createServiceJwt } from '@atproto/xrpc-server' import { Keypair, Secp256k1Keypair } from '@atproto/crypto' -import { DidAndKey, OzoneConfig } from './types' +import * as ozone from '@atproto/ozone' +import { createServiceJwt } from '@atproto/xrpc-server' import { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const' -import { createDidAndKey } from './util' import { ModeratorClient } from './moderator-client' +import { DidAndKey, OzoneConfig } from './types' +import { createDidAndKey } from './util' export class TestOzone { constructor( diff --git a/packages/dev-env/src/pds.ts b/packages/dev-env/src/pds.ts index fefc5643..d721a879 100644 --- a/packages/dev-env/src/pds.ts +++ b/packages/dev-env/src/pds.ts @@ -1,14 +1,14 @@ -import path from 'node:path' -import os from 'node:os' import fs from 'node:fs/promises' +import os from 'node:os' +import path from 'node:path' import getPort from 'get-port' import * as ui8 from 'uint8arrays' +import { AtpAgent } from '@atproto/api' +import { Secp256k1Keypair, randomStr } from '@atproto/crypto' import * as pds from '@atproto/pds' import { createSecretKeyObject } from '@atproto/pds' -import { Secp256k1Keypair, randomStr } from '@atproto/crypto' -import { AtpAgent } from '@atproto/api' -import { PdsConfig } from './types' import { ADMIN_PASSWORD, EXAMPLE_LABELER, JWT_SECRET } from './const' +import { PdsConfig } from './types' export class TestPds { constructor( diff --git a/packages/dev-env/src/plc.ts b/packages/dev-env/src/plc.ts index 95273727..b7205f55 100644 --- a/packages/dev-env/src/plc.ts +++ b/packages/dev-env/src/plc.ts @@ -1,6 +1,6 @@ -import getPort from 'get-port' import { Client as PlcClient } from '@did-plc/lib' import * as plc from '@did-plc/server' +import getPort from 'get-port' import { PlcConfig } from './types' export class TestPlc { diff --git a/packages/dev-env/src/seed/author-feed.ts b/packages/dev-env/src/seed/author-feed.ts index e532412a..64d26d41 100644 --- a/packages/dev-env/src/seed/author-feed.ts +++ b/packages/dev-env/src/seed/author-feed.ts @@ -1,5 +1,5 @@ -import { SeedClient } from './client' import basicSeed from './basic' +import { SeedClient } from './client' export default async (sc: SeedClient) => { await basicSeed(sc) diff --git a/packages/dev-env/src/seed/basic.ts b/packages/dev-env/src/seed/basic.ts index b27ee93c..5df78e7a 100644 --- a/packages/dev-env/src/seed/basic.ts +++ b/packages/dev-env/src/seed/basic.ts @@ -1,9 +1,9 @@ -import usersSeed from './users' import { TestBsky } from '../bsky' +import { EXAMPLE_LABELER } from '../const' import { TestNetwork } from '../network' import { TestNetworkNoAppView } from '../network-no-appview' import { SeedClient } from './client' -import { EXAMPLE_LABELER } from '../const' +import usersSeed from './users' export default async ( sc: SeedClient<TestNetwork | TestNetworkNoAppView>, diff --git a/packages/dev-env/src/seed/client.ts b/packages/dev-env/src/seed/client.ts index 329788ca..61babc4d 100644 --- a/packages/dev-env/src/seed/client.ts +++ b/packages/dev-env/src/seed/client.ts @@ -1,18 +1,17 @@ -import fs from 'fs/promises' +import fs from 'node:fs/promises' import path from 'node:path' - import { CID } from 'multiformats/cid' import { - ComAtprotoModerationCreateReport, - AppBskyFeedPost, - AppBskyRichtextFacet, AppBskyFeedLike, + AppBskyFeedPost, AppBskyGraphFollow, AppBskyGraphList, + AppBskyRichtextFacet, AtpAgent, + ComAtprotoModerationCreateReport, } from '@atproto/api' -import { AtUri } from '@atproto/syntax' import { BlobRef } from '@atproto/lexicon' +import { AtUri } from '@atproto/syntax' import { TestNetworkNoAppView } from '../network-no-appview' // Makes it simple to create data via the XRPC client, diff --git a/packages/dev-env/src/seed/likes.ts b/packages/dev-env/src/seed/likes.ts index 195da59e..1747fb2f 100644 --- a/packages/dev-env/src/seed/likes.ts +++ b/packages/dev-env/src/seed/likes.ts @@ -1,5 +1,5 @@ -import { SeedClient } from './client' import basicSeed from './basic' +import { SeedClient } from './client' export default async (sc: SeedClient) => { await basicSeed(sc) diff --git a/packages/dev-env/src/seed/quotes.ts b/packages/dev-env/src/seed/quotes.ts index 444960f7..addd2ae5 100644 --- a/packages/dev-env/src/seed/quotes.ts +++ b/packages/dev-env/src/seed/quotes.ts @@ -1,5 +1,5 @@ +import { default as basicSeed } from './basic' import { SeedClient } from './client' -import { basicSeed } from './index' export default async (sc: SeedClient) => { await basicSeed(sc) diff --git a/packages/dev-env/src/seed/reposts.ts b/packages/dev-env/src/seed/reposts.ts index a7c724d1..8de9b8ec 100644 --- a/packages/dev-env/src/seed/reposts.ts +++ b/packages/dev-env/src/seed/reposts.ts @@ -1,5 +1,5 @@ -import { SeedClient } from './client' import basicSeed from './basic' +import { SeedClient } from './client' export default async (sc: SeedClient) => { await basicSeed(sc) diff --git a/packages/dev-env/src/types.ts b/packages/dev-env/src/types.ts index e02b97b2..d698180f 100644 --- a/packages/dev-env/src/types.ts +++ b/packages/dev-env/src/types.ts @@ -1,8 +1,8 @@ -import * as pds from '@atproto/pds' import * as bsky from '@atproto/bsky' import * as bsync from '@atproto/bsync' -import * as ozone from '@atproto/ozone' import { ExportableKeypair, Keypair } from '@atproto/crypto' +import * as ozone from '@atproto/ozone' +import * as pds from '@atproto/pds' export type IntrospectConfig = { port?: number diff --git a/packages/dev-env/src/util.ts b/packages/dev-env/src/util.ts index b0540100..4246bac3 100644 --- a/packages/dev-env/src/util.ts +++ b/packages/dev-env/src/util.ts @@ -1,9 +1,9 @@ -import { request } from 'undici' import * as plc from '@did-plc/lib' -import { IdResolver } from '@atproto/identity' +import { request } from 'undici' import { Secp256k1Keypair } from '@atproto/crypto' -import { TestPds } from './pds' +import { IdResolver } from '@atproto/identity' import { TestBsky } from './bsky' +import { TestPds } from './pds' import { DidAndKey } from './types' export const mockNetworkUtilities = (pds: TestPds, bsky?: TestBsky) => { diff --git a/packages/did/src/atproto.ts b/packages/did/src/atproto.ts index 56b317cc..edd5172f 100644 --- a/packages/did/src/atproto.ts +++ b/packages/did/src/atproto.ts @@ -1,12 +1,11 @@ import { z } from 'zod' - import { InvalidDidError } from './did-error.js' import { Did } from './did.js' import { - assertDidPlc, - assertDidWeb, DID_PLC_PREFIX, DID_WEB_PREFIX, + assertDidPlc, + assertDidWeb, isDidPlc, } from './methods.js' diff --git a/packages/did/src/did-document.ts b/packages/did/src/did-document.ts index fcd4f7b5..ac4a1f6b 100644 --- a/packages/did/src/did-document.ts +++ b/packages/did/src/did-document.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { Did, didSchema } from './did.js' /** diff --git a/packages/identity/package.json b/packages/identity/package.json index 3e4eb3af..cfd1ed0f 100644 --- a/packages/identity/package.json +++ b/packages/identity/package.json @@ -21,6 +21,9 @@ "test:log": "cat test.log | pino-pretty", "build": "tsc --build tsconfig.build.json" }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto/common-web": "workspace:^", "@atproto/crypto": "workspace:^" diff --git a/packages/identity/src/did/atproto-data.ts b/packages/identity/src/did/atproto-data.ts index c0cd9829..74639c60 100644 --- a/packages/identity/src/did/atproto-data.ts +++ b/packages/identity/src/did/atproto-data.ts @@ -1,20 +1,20 @@ -import * as crypto from '@atproto/crypto' -import { DidDocument, AtprotoData } from '../types' import { getDid, - getHandle, - getPdsEndpoint, getFeedGenEndpoint, + getHandle, getNotifEndpoint, + getPdsEndpoint, getSigningKey, } from '@atproto/common-web' +import * as crypto from '@atproto/crypto' +import { AtprotoData, DidDocument } from '../types' export { getDid, - getHandle, - getPdsEndpoint as getPds, getFeedGenEndpoint as getFeedGen, + getHandle, getNotifEndpoint as getNotif, + getPdsEndpoint as getPds, } export const getKey = (doc: DidDocument): string | undefined => { diff --git a/packages/identity/src/did/base-resolver.ts b/packages/identity/src/did/base-resolver.ts index 825dddac..16336ea6 100644 --- a/packages/identity/src/did/base-resolver.ts +++ b/packages/identity/src/did/base-resolver.ts @@ -1,14 +1,14 @@ -import * as crypto from '@atproto/crypto' import { check } from '@atproto/common-web' +import * as crypto from '@atproto/crypto' +import { DidNotFoundError, PoorlyFormattedDidDocumentError } from '../errors' import { - DidCache, AtprotoData, + CacheResult, + DidCache, DidDocument, didDocument, - CacheResult, } from '../types' import * as atprotoData from './atproto-data' -import { DidNotFoundError, PoorlyFormattedDidDocumentError } from '../errors' export abstract class BaseResolver { constructor(public cache?: DidCache) {} @@ -98,5 +98,3 @@ export abstract class BaseResolver { return crypto.verifySignature(signingKey, data, sig) } } - -export default BaseResolver diff --git a/packages/identity/src/did/did-resolver.ts b/packages/identity/src/did/did-resolver.ts index 98d73995..1dfcb0bf 100644 --- a/packages/identity/src/did/did-resolver.ts +++ b/packages/identity/src/did/did-resolver.ts @@ -1,8 +1,8 @@ -import { DidWebResolver } from './web-resolver' -import { DidPlcResolver } from './plc-resolver' -import { DidResolverOpts } from '../types' -import BaseResolver from './base-resolver' import { PoorlyFormattedDidError, UnsupportedDidMethodError } from '../errors' +import { DidResolverOpts } from '../types' +import { BaseResolver } from './base-resolver' +import { DidPlcResolver } from './plc-resolver' +import { DidWebResolver } from './web-resolver' export class DidResolver extends BaseResolver { methods: Record<string, BaseResolver> @@ -29,5 +29,3 @@ export class DidResolver extends BaseResolver { return method.resolveNoCheck(did) } } - -export default DidResolver diff --git a/packages/identity/src/did/memory-cache.ts b/packages/identity/src/did/memory-cache.ts index 42f01527..bfc9ea91 100644 --- a/packages/identity/src/did/memory-cache.ts +++ b/packages/identity/src/did/memory-cache.ts @@ -1,5 +1,5 @@ import { DAY, HOUR } from '@atproto/common-web' -import { DidCache, CacheResult, DidDocument } from '../types' +import { CacheResult, DidCache, DidDocument } from '../types' type CacheVal = { doc: DidDocument diff --git a/packages/identity/src/did/plc-resolver.ts b/packages/identity/src/did/plc-resolver.ts index de82f72e..fe7a2832 100644 --- a/packages/identity/src/did/plc-resolver.ts +++ b/packages/identity/src/did/plc-resolver.ts @@ -1,5 +1,5 @@ import { DidCache } from '../types' -import BaseResolver from './base-resolver' +import { BaseResolver } from './base-resolver' import { timed } from './util' export class DidPlcResolver extends BaseResolver { diff --git a/packages/identity/src/did/web-resolver.ts b/packages/identity/src/did/web-resolver.ts index e09b3a57..611e48d1 100644 --- a/packages/identity/src/did/web-resolver.ts +++ b/packages/identity/src/did/web-resolver.ts @@ -1,6 +1,6 @@ import { PoorlyFormattedDidError, UnsupportedDidWebPathError } from '../errors' import { DidCache } from '../types' -import BaseResolver from './base-resolver' +import { BaseResolver } from './base-resolver' import { timed } from './util' export const DOC_PATH = '/.well-known/did.json' diff --git a/packages/identity/src/handle/index.ts b/packages/identity/src/handle/index.ts index 4048f963..1e7d1329 100644 --- a/packages/identity/src/handle/index.ts +++ b/packages/identity/src/handle/index.ts @@ -1,4 +1,4 @@ -import dns from 'dns/promises' +import dns from 'node:dns/promises' import { HandleResolverOpts } from '../types' const SUBDOMAIN = '_atproto' diff --git a/packages/identity/src/id-resolver.ts b/packages/identity/src/id-resolver.ts index ccf42ca9..fbac1beb 100644 --- a/packages/identity/src/id-resolver.ts +++ b/packages/identity/src/id-resolver.ts @@ -1,5 +1,5 @@ +import { DidResolver } from './did/did-resolver' import { HandleResolver } from './handle' -import DidResolver from './did/did-resolver' import { IdentityResolverOpts } from './types' export class IdResolver { diff --git a/packages/identity/tests/did-cache.test.ts b/packages/identity/tests/did-cache.test.ts index f69f21ec..28d0f05a 100644 --- a/packages/identity/tests/did-cache.test.ts +++ b/packages/identity/tests/did-cache.test.ts @@ -1,10 +1,10 @@ -import getPort from 'get-port' import * as plc from '@did-plc/lib' import { Database as DidPlcDb, PlcServer } from '@did-plc/server' -import { MemoryCache } from '../src/did/memory-cache' -import { DidResolver } from '../src' -import { Secp256k1Keypair } from '@atproto/crypto' +import getPort from 'get-port' import { wait } from '@atproto/common-web' +import { Secp256k1Keypair } from '@atproto/crypto' +import { DidResolver } from '../src' +import { MemoryCache } from '../src/did/memory-cache' describe('did cache', () => { let close: () => Promise<void> diff --git a/packages/identity/tests/did-resolver.test.ts b/packages/identity/tests/did-resolver.test.ts index 89b85c2f..b7d140fc 100644 --- a/packages/identity/tests/did-resolver.test.ts +++ b/packages/identity/tests/did-resolver.test.ts @@ -1,10 +1,10 @@ -import getPort from 'get-port' -import { Secp256k1Keypair } from '@atproto/crypto' import * as plc from '@did-plc/lib' import { Database as DidPlcDb, PlcServer } from '@did-plc/server' -import { DidResolver, DidDocument } from '../src' +import getPort from 'get-port' +import { Secp256k1Keypair } from '@atproto/crypto' +import { DidDocument, DidResolver } from '../src' +import { DidWebDb } from './web/db' import { DidWebServer } from './web/server' -import DidWebDb from './web/db' describe('did resolver', () => { let close: () => Promise<void> diff --git a/packages/identity/tests/handle-resolver.test.ts b/packages/identity/tests/handle-resolver.test.ts index 4b8b9355..c5f76b51 100644 --- a/packages/identity/tests/handle-resolver.test.ts +++ b/packages/identity/tests/handle-resolver.test.ts @@ -1,6 +1,6 @@ import { HandleResolver } from '../src' -jest.mock('dns/promises', () => { +jest.mock('node:dns/promises', () => { return { resolveTxt: (handle: string) => { if (handle === '_atproto.simple.test') { diff --git a/packages/identity/tests/web/db.ts b/packages/identity/tests/web/db.ts index 737a7be6..7f703dc8 100644 --- a/packages/identity/tests/web/db.ts +++ b/packages/identity/tests/web/db.ts @@ -61,5 +61,3 @@ export class DidWebDb { await this.store.del(didPath) } } - -export default DidWebDb diff --git a/packages/identity/tests/web/server.ts b/packages/identity/tests/web/server.ts index b070d073..117729a6 100644 --- a/packages/identity/tests/web/server.ts +++ b/packages/identity/tests/web/server.ts @@ -1,8 +1,8 @@ -import express from 'express' +import http from 'node:http' import cors from 'cors' -import http from 'http' -import DidWebDb from './db' +import express from 'express' import { DidDocument } from '../../src' +import { DidWebDb } from './db' const DOC_PATH = '/.well-known/did.json' diff --git a/packages/internal/did-resolver/src/did-cache-memory.ts b/packages/internal/did-resolver/src/did-cache-memory.ts index 1c05bb97..c572e8b1 100644 --- a/packages/internal/did-resolver/src/did-cache-memory.ts +++ b/packages/internal/did-resolver/src/did-cache-memory.ts @@ -3,7 +3,6 @@ import { SimpleStoreMemory, SimpleStoreMemoryOptions, } from '@atproto-labs/simple-store-memory' - import { DidCache } from './did-cache.js' const DEFAULT_TTL = 3600 * 1000 // 1 hour diff --git a/packages/internal/did-resolver/src/did-cache.ts b/packages/internal/did-resolver/src/did-cache.ts index 762e9c5b..cfad1385 100644 --- a/packages/internal/did-resolver/src/did-cache.ts +++ b/packages/internal/did-resolver/src/did-cache.ts @@ -1,11 +1,10 @@ -import { CachedGetter, SimpleStore } from '@atproto-labs/simple-store' import { Did, DidDocument } from '@atproto/did' - +import { CachedGetter, SimpleStore } from '@atproto-labs/simple-store' import { DidCacheMemory } from './did-cache-memory.js' import { DidMethod, ResolveDidOptions } from './did-method.js' import { DidResolver, ResolvedDocument } from './did-resolver.js' -export type { DidMethod, ResolvedDocument, ResolveDidOptions } +export type { DidMethod, ResolveDidOptions, ResolvedDocument } export type DidCache = SimpleStore<Did, DidDocument> diff --git a/packages/internal/did-resolver/src/did-resolver-base.ts b/packages/internal/did-resolver/src/did-resolver-base.ts index 5c31347e..4ac98ec9 100644 --- a/packages/internal/did-resolver/src/did-resolver-base.ts +++ b/packages/internal/did-resolver/src/did-resolver-base.ts @@ -1,11 +1,10 @@ -import { FetchError, FetchResponseError } from '@atproto-labs/fetch' -import { Did, DidError, extractDidMethod } from '@atproto/did' import { ZodError } from 'zod' - +import { Did, DidError, extractDidMethod } from '@atproto/did' +import { FetchError, FetchResponseError } from '@atproto-labs/fetch' import { DidMethod, DidMethods, ResolveDidOptions } from './did-method.js' import { DidResolver, ResolvedDocument } from './did-resolver.js' -export type { DidMethod, ResolvedDocument, ResolveDidOptions } +export type { DidMethod, ResolveDidOptions, ResolvedDocument } export class DidResolverBase<M extends string = string> implements DidResolver<M> diff --git a/packages/internal/did-resolver/src/did-resolver.ts b/packages/internal/did-resolver/src/did-resolver.ts index 67f8a0ea..cad33493 100644 --- a/packages/internal/did-resolver/src/did-resolver.ts +++ b/packages/internal/did-resolver/src/did-resolver.ts @@ -1,5 +1,4 @@ import { Did, DidDocument } from '@atproto/did' - import { ResolveDidOptions } from './did-method.js' export type ResolvedDocument<D extends Did, M extends string = string> = diff --git a/packages/internal/did-resolver/src/methods/plc.ts b/packages/internal/did-resolver/src/methods/plc.ts index 5d930ecd..a64c9bc2 100644 --- a/packages/internal/did-resolver/src/methods/plc.ts +++ b/packages/internal/did-resolver/src/methods/plc.ts @@ -1,3 +1,4 @@ +import { Did, assertDidPlc, didDocumentValidator } from '@atproto/did' import { Fetch, bindFetch, @@ -6,8 +7,6 @@ import { fetchOkProcessor, } from '@atproto-labs/fetch' import { pipe } from '@atproto-labs/pipe' -import { Did, assertDidPlc, didDocumentValidator } from '@atproto/did' - import { DidMethod, ResolveDidOptions } from '../did-method.js' const fetchSuccessHandler = pipe( diff --git a/packages/internal/did-resolver/src/methods/web.ts b/packages/internal/did-resolver/src/methods/web.ts index b366cde9..4e00c4b6 100644 --- a/packages/internal/did-resolver/src/methods/web.ts +++ b/packages/internal/did-resolver/src/methods/web.ts @@ -1,13 +1,12 @@ +import { Did, DidError, didDocumentValidator, didWebToUrl } from '@atproto/did' import { - bindFetch, Fetch, + bindFetch, fetchJsonProcessor, fetchJsonZodProcessor, fetchOkProcessor, } from '@atproto-labs/fetch' import { pipe } from '@atproto-labs/pipe' -import { Did, didDocumentValidator, DidError, didWebToUrl } from '@atproto/did' - import { DidMethod, ResolveDidOptions } from '../did-method.js' const fetchSuccessHandler = pipe( diff --git a/packages/internal/fetch-node/package.json b/packages/internal/fetch-node/package.json index b24a7aa8..5b612258 100644 --- a/packages/internal/fetch-node/package.json +++ b/packages/internal/fetch-node/package.json @@ -23,6 +23,9 @@ "default": "./dist/index.js" } }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto-labs/fetch": "workspace:*", "@atproto-labs/pipe": "workspace:*", diff --git a/packages/internal/fetch-node/src/safe.ts b/packages/internal/fetch-node/src/safe.ts index c5eea633..906c3898 100644 --- a/packages/internal/fetch-node/src/safe.ts +++ b/packages/internal/fetch-node/src/safe.ts @@ -1,7 +1,7 @@ import { - asRequest, DEFAULT_FORBIDDEN_DOMAIN_NAMES, Fetch, + asRequest, fetchMaxSizeProcessor, forbiddenDomainNameRequestTransform, protocolCheckRequestTransform, @@ -11,7 +11,6 @@ import { toRequestTransformer, } from '@atproto-labs/fetch' import { pipe } from '@atproto-labs/pipe' - import { unicastFetchWrap } from './unicast.js' export type SafeFetchWrapOptions = NonNullable< diff --git a/packages/internal/fetch-node/src/unicast.ts b/packages/internal/fetch-node/src/unicast.ts index aae1f9ae..84378dab 100644 --- a/packages/internal/fetch-node/src/unicast.ts +++ b/packages/internal/fetch-node/src/unicast.ts @@ -1,17 +1,15 @@ import dns, { LookupAddress } from 'node:dns' import { LookupFunction } from 'node:net' - -import { - asRequest, - extractUrl, - Fetch, - FetchContext, - FetchRequestError, -} from '@atproto-labs/fetch' import ipaddr from 'ipaddr.js' import { parse as pslParse } from 'psl' import { Agent, Client } from 'undici' - +import { + Fetch, + FetchContext, + FetchRequestError, + asRequest, + extractUrl, +} from '@atproto-labs/fetch' import { isUnicastIp } from './util.js' const { IPv4, IPv6 } = ipaddr diff --git a/packages/internal/fetch/src/fetch-response.ts b/packages/internal/fetch/src/fetch-response.ts index c4830e1c..09e903bf 100644 --- a/packages/internal/fetch/src/fetch-response.ts +++ b/packages/internal/fetch/src/fetch-response.ts @@ -1,8 +1,5 @@ +import type { ParseParams, TypeOf, ZodTypeAny } from 'zod' import { Transformer, pipe } from '@atproto-labs/pipe' - -// optional dependency for typing purposes -import type { ZodTypeAny, ParseParams, TypeOf } from 'zod' - import { FetchError } from './fetch-error.js' import { TransformedResponse } from './transformed-response.js' import { diff --git a/packages/internal/handle-resolver-node/package.json b/packages/internal/handle-resolver-node/package.json index 95436279..ba667bae 100644 --- a/packages/internal/handle-resolver-node/package.json +++ b/packages/internal/handle-resolver-node/package.json @@ -25,6 +25,9 @@ "default": "./dist/index.js" } }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto-labs/fetch-node": "workspace:*", "@atproto-labs/handle-resolver": "workspace:*", diff --git a/packages/internal/handle-resolver-node/src/atproto-handle-resolver-node.ts b/packages/internal/handle-resolver-node/src/atproto-handle-resolver-node.ts index 626dca43..ffe46c23 100644 --- a/packages/internal/handle-resolver-node/src/atproto-handle-resolver-node.ts +++ b/packages/internal/handle-resolver-node/src/atproto-handle-resolver-node.ts @@ -3,7 +3,6 @@ import { AtprotoHandleResolver, HandleResolver, } from '@atproto-labs/handle-resolver' - import { nodeResolveTxtDefault, nodeResolveTxtFactory, diff --git a/packages/internal/handle-resolver-node/src/node-resolve-txt-factory.ts b/packages/internal/handle-resolver-node/src/node-resolve-txt-factory.ts index 2429ea13..169cf910 100644 --- a/packages/internal/handle-resolver-node/src/node-resolve-txt-factory.ts +++ b/packages/internal/handle-resolver-node/src/node-resolve-txt-factory.ts @@ -1,6 +1,5 @@ import { Resolver, lookup, resolveTxt } from 'node:dns/promises' import { isIP } from 'node:net' - import { ResolveTxt } from '@atproto-labs/handle-resolver' export const nodeResolveTxtDefault: ResolveTxt = (hostname) => diff --git a/packages/internal/handle-resolver/src/app-view-handle-resolver.ts b/packages/internal/handle-resolver/src/app-view-handle-resolver.ts index 507d962b..1152d682 100644 --- a/packages/internal/handle-resolver/src/app-view-handle-resolver.ts +++ b/packages/internal/handle-resolver/src/app-view-handle-resolver.ts @@ -1,5 +1,4 @@ -import z from 'zod' - +import { z } from 'zod' import { HandleResolver, ResolveHandleOptions, diff --git a/packages/internal/handle-resolver/src/atproto-doh-handle-resolver.ts b/packages/internal/handle-resolver/src/atproto-doh-handle-resolver.ts index 3df7913b..65980db3 100644 --- a/packages/internal/handle-resolver/src/atproto-doh-handle-resolver.ts +++ b/packages/internal/handle-resolver/src/atproto-doh-handle-resolver.ts @@ -2,8 +2,8 @@ import { AtprotoHandleResolver, AtprotoHandleResolverOptions, } from './atproto-handle-resolver.js' -import { HandleResolver } from './types.js' import { ResolveTxt } from './internal-resolvers/dns-handle-resolver.js' +import { HandleResolver } from './types.js' export type AtprotoDohHandleResolverOptions = Omit< AtprotoHandleResolverOptions, diff --git a/packages/internal/handle-resolver/src/cached-handle-resolver.ts b/packages/internal/handle-resolver/src/cached-handle-resolver.ts index 37463263..7d9471b0 100644 --- a/packages/internal/handle-resolver/src/cached-handle-resolver.ts +++ b/packages/internal/handle-resolver/src/cached-handle-resolver.ts @@ -2,8 +2,8 @@ import { CachedGetter, SimpleStore } from '@atproto-labs/simple-store' import { SimpleStoreMemory } from '@atproto-labs/simple-store-memory' import { HandleResolver, - ResolvedHandle, ResolveHandleOptions, + ResolvedHandle, } from './types.js' export type HandleCache = SimpleStore<string, ResolvedHandle> diff --git a/packages/internal/identity-resolver/src/identity-resolver.ts b/packages/internal/identity-resolver/src/identity-resolver.ts index a0c4d8fa..efbdc4f3 100644 --- a/packages/internal/identity-resolver/src/identity-resolver.ts +++ b/packages/internal/identity-resolver/src/identity-resolver.ts @@ -1,3 +1,4 @@ +import { normalizeAndEnsureValidHandle } from '@atproto/syntax' import { Did, DidDocument, @@ -8,11 +9,10 @@ import { import { AtprotoIdentityDidMethods, HandleResolver, - isResolvedHandle, - ResolvedHandle, ResolveHandleOptions, + ResolvedHandle, + isResolvedHandle, } from '@atproto-labs/handle-resolver' -import { normalizeAndEnsureValidHandle } from '@atproto/syntax' export type ResolvedIdentity = { did: NonNullable<ResolvedHandle> diff --git a/packages/internal/rollup-plugin-bundle-manifest/package.json b/packages/internal/rollup-plugin-bundle-manifest/package.json index 8578f041..c935b2c5 100644 --- a/packages/internal/rollup-plugin-bundle-manifest/package.json +++ b/packages/internal/rollup-plugin-bundle-manifest/package.json @@ -23,6 +23,12 @@ "default": "./dist/index.js" } }, + "engines": { + "node": ">=18.7.0" + }, + "files": [ + "dist" + ], "dependencies": { "mime": "^3.0.0" }, diff --git a/packages/internal/rollup-plugin-bundle-manifest/src/index.ts b/packages/internal/rollup-plugin-bundle-manifest/src/index.ts index 83c4b026..dae08397 100644 --- a/packages/internal/rollup-plugin-bundle-manifest/src/index.ts +++ b/packages/internal/rollup-plugin-bundle-manifest/src/index.ts @@ -1,6 +1,5 @@ import { createHash } from 'node:crypto' import { extname } from 'node:path' - import mime from 'mime' import { Plugin } from 'rollup' diff --git a/packages/internal/simple-store-memory/src/index.ts b/packages/internal/simple-store-memory/src/index.ts index b2150c96..c1ae5a5c 100644 --- a/packages/internal/simple-store-memory/src/index.ts +++ b/packages/internal/simple-store-memory/src/index.ts @@ -1,6 +1,5 @@ -import { SimpleStore, Key, Value } from '@atproto-labs/simple-store' import { LRUCache } from 'lru-cache' - +import { Key, SimpleStore, Value } from '@atproto-labs/simple-store' import { roughSizeOfObject } from './util.js' export type SimpleStoreMemoryOptions<K extends Key, V extends Value> = { diff --git a/packages/internal/simple-store/src/cached-getter.ts b/packages/internal/simple-store/src/cached-getter.ts index 8c2b2b20..45d43247 100644 --- a/packages/internal/simple-store/src/cached-getter.ts +++ b/packages/internal/simple-store/src/cached-getter.ts @@ -1,4 +1,4 @@ -import { Awaitable, SimpleStore, Key, Value } from './simple-store.js' +import { Awaitable, Key, SimpleStore, Value } from './simple-store.js' export type GetCachedOptions = { signal?: AbortSignal diff --git a/packages/lex-cli/package.json b/packages/lex-cli/package.json index 1e291106..e1c3843a 100644 --- a/packages/lex-cli/package.json +++ b/packages/lex-cli/package.json @@ -21,6 +21,9 @@ "scripts": { "build": "tsc --build tsconfig.build.json" }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto/lexicon": "workspace:^", "@atproto/syntax": "workspace:^", diff --git a/packages/lex-cli/src/codegen/client.ts b/packages/lex-cli/src/codegen/client.ts index eee06071..1ec1d6fa 100644 --- a/packages/lex-cli/src/codegen/client.ts +++ b/packages/lex-cli/src/codegen/client.ts @@ -4,26 +4,26 @@ import { SourceFile, VariableDeclarationKind, } from 'ts-morph' -import { Lexicons, LexiconDoc, LexRecord } from '@atproto/lexicon' +import { LexRecord, LexiconDoc, Lexicons } from '@atproto/lexicon' import { NSID } from '@atproto/syntax' -import { gen, utilTs, lexiconsTs } from './common' import { GeneratedAPI } from '../types' +import { gen, lexiconsTs, utilTs } from './common' import { genImports, - genUserType, + genObjHelpers, genObject, - genXrpcParams, + genUserType, genXrpcInput, genXrpcOutput, - genObjHelpers, + genXrpcParams, } from './lex-gen' import { - lexiconsToDefTree, DefTreeNode, + lexiconsToDefTree, schemasToNsidTokens, toCamelCase, - toTitleCase, toScreamingSnakeCase, + toTitleCase, } from './util' const ATP_METHODS = { diff --git a/packages/lex-cli/src/codegen/common.ts b/packages/lex-cli/src/codegen/common.ts index caff2caf..4ebaf748 100644 --- a/packages/lex-cli/src/codegen/common.ts +++ b/packages/lex-cli/src/codegen/common.ts @@ -1,6 +1,6 @@ +import { format } from 'prettier' import { Project, SourceFile, VariableDeclarationKind } from 'ts-morph' import { LexiconDoc } from '@atproto/lexicon' -import prettier from 'prettier' import { GeneratedFile } from '../types' const PRETTIER_OPTS = { @@ -122,7 +122,7 @@ export async function gen( const src = project.getFileSystem().readFileSync(path) return { path: path, - content: `${banner()}${await prettier.format(src, PRETTIER_OPTS)}`, + content: `${banner()}${await format(src, PRETTIER_OPTS)}`, } } diff --git a/packages/lex-cli/src/codegen/lex-gen.ts b/packages/lex-cli/src/codegen/lex-gen.ts index a50eae9c..ebc04fed 100644 --- a/packages/lex-cli/src/codegen/lex-gen.ts +++ b/packages/lex-cli/src/codegen/lex-gen.ts @@ -1,18 +1,18 @@ +import { relative as getRelativePath } from 'node:path' import { SourceFile, VariableDeclarationKind } from 'ts-morph' -import { relative as getRelativePath } from 'path' import { - Lexicons, - LexUserType, - LexObject, LexArray, - LexPrimitive, LexBlob, - LexToken, - LexCidLink, LexBytes, + LexCidLink, LexIpldType, + LexObject, + LexPrimitive, + LexToken, + LexUserType, + Lexicons, } from '@atproto/lexicon' -import { toCamelCase, toTitleCase, toScreamingSnakeCase } from './util' +import { toCamelCase, toScreamingSnakeCase, toTitleCase } from './util' interface Commentable<T> { addJsDoc: ({ description }: { description: string }) => T diff --git a/packages/lex-cli/src/codegen/server.ts b/packages/lex-cli/src/codegen/server.ts index 6b741b94..110e8a0b 100644 --- a/packages/lex-cli/src/codegen/server.ts +++ b/packages/lex-cli/src/codegen/server.ts @@ -4,26 +4,26 @@ import { SourceFile, VariableDeclarationKind, } from 'ts-morph' -import { Lexicons, LexiconDoc } from '@atproto/lexicon' +import { LexiconDoc, Lexicons } from '@atproto/lexicon' import { NSID } from '@atproto/syntax' -import { gen, lexiconsTs, utilTs } from './common' import { GeneratedAPI } from '../types' +import { gen, lexiconsTs, utilTs } from './common' import { genImports, - genUserType, + genObjHelpers, genObject, - genXrpcParams, + genUserType, genXrpcInput, genXrpcOutput, - genObjHelpers, + genXrpcParams, } from './lex-gen' import { - lexiconsToDefTree, DefTreeNode, + lexiconsToDefTree, schemasToNsidTokens, toCamelCase, - toTitleCase, toScreamingSnakeCase, + toTitleCase, } from './util' export async function genServerApi( diff --git a/packages/lex-cli/src/codegen/util.ts b/packages/lex-cli/src/codegen/util.ts index c3b7a732..26cc1675 100644 --- a/packages/lex-cli/src/codegen/util.ts +++ b/packages/lex-cli/src/codegen/util.ts @@ -1,4 +1,4 @@ -import { LexiconDoc, LexUserType } from '@atproto/lexicon' +import { LexUserType, LexiconDoc } from '@atproto/lexicon' import { NSID } from '@atproto/syntax' export interface DefTreeNodeUserType { diff --git a/packages/lex-cli/src/index.ts b/packages/lex-cli/src/index.ts index 574a84e8..5bb344e5 100644 --- a/packages/lex-cli/src/index.ts +++ b/packages/lex-cli/src/index.ts @@ -1,18 +1,18 @@ #!/usr/bin/env node -import path from 'path' +import path from 'node:path' import { Command } from 'commander' import yesno from 'yesno' -import { - readAllLexicons, - genTsObj, - genFileDiff, - printFileDiff, - applyFileDiff, -} from './util' -import * as mdGen from './mdgen' import { genClientApi } from './codegen/client' import { genServerApi } from './codegen/server' +import * as mdGen from './mdgen' +import { + applyFileDiff, + genFileDiff, + genTsObj, + printFileDiff, + readAllLexicons, +} from './util' const program = new Command() program.name('lex').description('Lexicon CLI').version('0.0.0') diff --git a/packages/lex-cli/src/mdgen/index.ts b/packages/lex-cli/src/mdgen/index.ts index ada79595..d3b2bc8e 100644 --- a/packages/lex-cli/src/mdgen/index.ts +++ b/packages/lex-cli/src/mdgen/index.ts @@ -1,4 +1,4 @@ -import fs from 'fs' +import fs from 'node:fs' import { LexiconDoc } from '@atproto/lexicon' const INSERT_START = [ diff --git a/packages/lex-cli/src/util.ts b/packages/lex-cli/src/util.ts index b3fc5668..54ecad7e 100644 --- a/packages/lex-cli/src/util.ts +++ b/packages/lex-cli/src/util.ts @@ -1,9 +1,9 @@ -import fs from 'fs' -import { join } from 'path' -import { parseLexiconDoc, LexiconDoc } from '@atproto/lexicon' -import { ZodError, ZodFormattedError } from 'zod' +import fs from 'node:fs' +import { join } from 'node:path' import chalk from 'chalk' -import { GeneratedAPI, FileDiff } from './types' +import { ZodError, ZodFormattedError } from 'zod' +import { LexiconDoc, parseLexiconDoc } from '@atproto/lexicon' +import { FileDiff, GeneratedAPI } from './types' export function readAllLexicons(paths: string[]): LexiconDoc[] { const docs: LexiconDoc[] = [] diff --git a/packages/lexicon/src/blob-refs.ts b/packages/lexicon/src/blob-refs.ts index 3b444b81..bda146f9 100644 --- a/packages/lexicon/src/blob-refs.ts +++ b/packages/lexicon/src/blob-refs.ts @@ -1,6 +1,6 @@ -import { check, ipldToJson, schema } from '@atproto/common-web' import { CID } from 'multiformats/cid' import { z } from 'zod' +import { check, ipldToJson, schema } from '@atproto/common-web' export const typedJsonBlobRef = z .object({ diff --git a/packages/lexicon/src/lexicons.ts b/packages/lexicon/src/lexicons.ts index 382c8e89..cdd12b88 100644 --- a/packages/lexicon/src/lexicons.ts +++ b/packages/lexicon/src/lexicons.ts @@ -1,22 +1,22 @@ import { - LexiconDoc, + InvalidLexiconError, LexRecord, LexUserType, LexiconDefNotFoundError, - InvalidLexiconError, - ValidationResult, + LexiconDoc, ValidationError, - isObj, + ValidationResult, hasProp, + isObj, } from './types' +import { toLexUri } from './util' import { assertValidRecord, - assertValidXrpcParams, assertValidXrpcInput, - assertValidXrpcOutput, assertValidXrpcMessage, + assertValidXrpcOutput, + assertValidXrpcParams, } from './validation' -import { toLexUri } from './util' import * as ComplexValidators from './validators/complex' /** diff --git a/packages/lexicon/src/serialize.ts b/packages/lexicon/src/serialize.ts index 89c83171..31ee0668 100644 --- a/packages/lexicon/src/serialize.ts +++ b/packages/lexicon/src/serialize.ts @@ -1,11 +1,11 @@ +import { CID } from 'multiformats/cid' import { - check, IpldValue, + JsonValue, + check, ipldToJson, jsonToIpld, - JsonValue, } from '@atproto/common-web' -import { CID } from 'multiformats/cid' import { BlobRef, jsonBlobRef } from './blob-refs' export type LexValue = diff --git a/packages/lexicon/src/validation.ts b/packages/lexicon/src/validation.ts index 715c37e5..dc55f093 100644 --- a/packages/lexicon/src/validation.ts +++ b/packages/lexicon/src/validation.ts @@ -7,7 +7,6 @@ import { LexXrpcQuery, LexXrpcSubscription, } from './types' - import { object, validateOneOf } from './validators/complex' import { params } from './validators/xrpc' diff --git a/packages/lexicon/src/validators/blob.ts b/packages/lexicon/src/validators/blob.ts index 34aa64ac..e0684c05 100644 --- a/packages/lexicon/src/validators/blob.ts +++ b/packages/lexicon/src/validators/blob.ts @@ -1,6 +1,6 @@ import { BlobRef } from '../blob-refs' import { Lexicons } from '../lexicons' -import { LexUserType, ValidationResult, ValidationError } from '../types' +import { LexUserType, ValidationError, ValidationResult } from '../types' export function blob( lexicons: Lexicons, diff --git a/packages/lexicon/src/validators/complex.ts b/packages/lexicon/src/validators/complex.ts index 8e54eba6..6f066071 100644 --- a/packages/lexicon/src/validators/complex.ts +++ b/packages/lexicon/src/validators/complex.ts @@ -9,9 +9,8 @@ import { isDiscriminatedObject, } from '../types' import { toConcreteTypes, toLexUri } from '../util' - import { blob } from './blob' -import { boolean, integer, string, bytes, cidLink, unknown } from './primitives' +import { boolean, bytes, cidLink, integer, string, unknown } from './primitives' export function validate( lexicons: Lexicons, diff --git a/packages/lexicon/src/validators/formats.ts b/packages/lexicon/src/validators/formats.ts index 42dd2ee1..36a037eb 100644 --- a/packages/lexicon/src/validators/formats.ts +++ b/packages/lexicon/src/validators/formats.ts @@ -1,15 +1,15 @@ import { isValidISODateString } from 'iso-datestring-validator' import { CID } from 'multiformats/cid' -import { ValidationResult, ValidationError } from '../types' +import { validateLanguage } from '@atproto/common-web' import { + ensureValidAtUri, ensureValidDid, ensureValidHandle, ensureValidNsid, - ensureValidAtUri, - ensureValidTid, ensureValidRecordKey, + ensureValidTid, } from '@atproto/syntax' -import { validateLanguage } from '@atproto/common-web' +import { ValidationError, ValidationResult } from '../types' export function datetime(path: string, value: string): ValidationResult { try { diff --git a/packages/lexicon/src/validators/primitives.ts b/packages/lexicon/src/validators/primitives.ts index 81728279..919173fe 100644 --- a/packages/lexicon/src/validators/primitives.ts +++ b/packages/lexicon/src/validators/primitives.ts @@ -1,16 +1,16 @@ -import { utf8Len, graphemeLen } from '@atproto/common-web' import { CID } from 'multiformats/cid' +import { graphemeLen, utf8Len } from '@atproto/common-web' import { Lexicons } from '../lexicons' -import * as formats from './formats' import { - LexUserType, LexBoolean, + LexBytes, LexInteger, LexString, - ValidationResult, + LexUserType, ValidationError, - LexBytes, + ValidationResult, } from '../types' +import * as formats from './formats' export function validate( lexicons: Lexicons, diff --git a/packages/lexicon/src/validators/xrpc.ts b/packages/lexicon/src/validators/xrpc.ts index ef43c52a..9384e489 100644 --- a/packages/lexicon/src/validators/xrpc.ts +++ b/packages/lexicon/src/validators/xrpc.ts @@ -1,8 +1,7 @@ import { Lexicons } from '../lexicons' -import { LexXrpcParameters, ValidationResult, ValidationError } from '../types' - -import * as PrimitiveValidators from './primitives' +import { LexXrpcParameters, ValidationError, ValidationResult } from '../types' import { array } from './complex' +import * as PrimitiveValidators from './primitives' export function params( lexicons: Lexicons, diff --git a/packages/oauth/jwk-jose/src/jose-key.ts b/packages/oauth/jwk-jose/src/jose-key.ts index e6068731..d19c0773 100644 --- a/packages/oauth/jwk-jose/src/jose-key.ts +++ b/packages/oauth/jwk-jose/src/jose-key.ts @@ -1,3 +1,17 @@ +import { + type GenerateKeyPairOptions, + type GenerateKeyPairResult, + type JWK, + type JWTVerifyOptions, + type KeyLike, + SignJWT, + errors, + exportJWK, + generateKeyPair, + importJWK, + importPKCS8, + jwtVerify, +} from 'jose' import { Jwk, JwkError, @@ -14,21 +28,6 @@ import { jwtHeaderSchema, jwtPayloadSchema, } from '@atproto/jwk' -import { - SignJWT, - errors, - exportJWK, - generateKeyPair, - importJWK, - importPKCS8, - jwtVerify, - type GenerateKeyPairOptions, - type GenerateKeyPairResult, - type JWK, - type JWTVerifyOptions, - type KeyLike, -} from 'jose' - import { either } from './util' const { JOSEError } = errors diff --git a/packages/oauth/jwk-webcrypto/src/webcrypto-key.ts b/packages/oauth/jwk-webcrypto/src/webcrypto-key.ts index 74dd24b3..ee8a72ed 100644 --- a/packages/oauth/jwk-webcrypto/src/webcrypto-key.ts +++ b/packages/oauth/jwk-webcrypto/src/webcrypto-key.ts @@ -1,7 +1,6 @@ +import { z } from 'zod' import { JwkError, jwkSchema } from '@atproto/jwk' import { GenerateKeyPairOptions, JoseKey } from '@atproto/jwk-jose' -import z from 'zod' - import { fromSubtleAlgorithm, isCryptoKeyPair } from './util.js' // Webcrypto keys are bound to a single algorithm diff --git a/packages/oauth/jwk/src/jwks.ts b/packages/oauth/jwk/src/jwks.ts index 25d5af45..cdc998e2 100644 --- a/packages/oauth/jwk/src/jwks.ts +++ b/packages/oauth/jwk/src/jwks.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { jwkPubSchema, jwkSchema } from './jwk.js' export const jwksSchema = z.object({ diff --git a/packages/oauth/jwk/src/jwt.ts b/packages/oauth/jwk/src/jwt.ts index 69bab7a2..75a84557 100644 --- a/packages/oauth/jwk/src/jwt.ts +++ b/packages/oauth/jwk/src/jwt.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { jwkPubSchema } from './jwk.js' import { jwtCharsRefinement, segmentedStringRefinementFactory } from './util.js' diff --git a/packages/oauth/oauth-client-browser-example/rollup.config.js b/packages/oauth/oauth-client-browser-example/rollup.config.js index 91e0f741..73f561c3 100644 --- a/packages/oauth/oauth-client-browser-example/rollup.config.js +++ b/packages/oauth/oauth-client-browser-example/rollup.config.js @@ -1,10 +1,5 @@ /* eslint-env node */ -const { defineConfig } = require('rollup') - -const { - default: manifest, -} = require('@atproto-labs/rollup-plugin-bundle-manifest') const { default: commonjs } = require('@rollup/plugin-commonjs') const { default: html, makeHtmlAttributes } = require('@rollup/plugin-html') const { default: json } = require('@rollup/plugin-json') @@ -12,6 +7,10 @@ const { default: nodeResolve } = require('@rollup/plugin-node-resolve') const { default: replace } = require('@rollup/plugin-replace') const { default: terser } = require('@rollup/plugin-terser') const { default: typescript } = require('@rollup/plugin-typescript') +const { defineConfig } = require('rollup') +const { + default: manifest, +} = require('@atproto-labs/rollup-plugin-bundle-manifest') const postcss = ((m) => m.default || m)(require('rollup-plugin-postcss')) const serve = ((m) => m.default || m)(require('rollup-plugin-serve')) diff --git a/packages/oauth/oauth-client-browser-example/src/auth/credential/use-credential-auth.ts b/packages/oauth/oauth-client-browser-example/src/auth/credential/use-credential-auth.ts index aa6ccd45..c65923c9 100644 --- a/packages/oauth/oauth-client-browser-example/src/auth/credential/use-credential-auth.ts +++ b/packages/oauth/oauth-client-browser-example/src/auth/credential/use-credential-auth.ts @@ -1,5 +1,5 @@ -import { AtpSessionData, AtpAgent } from '@atproto/api' import { useCallback, useMemo, useState } from 'react' +import { AtpAgent, AtpSessionData } from '@atproto/api' type Session = AtpSessionData & { service: string } diff --git a/packages/oauth/oauth-client-browser-example/src/auth/oauth/use-oauth.ts b/packages/oauth/oauth-client-browser-example/src/auth/oauth/use-oauth.ts index c13b3998..9bd414f9 100644 --- a/packages/oauth/oauth-client-browser-example/src/auth/oauth/use-oauth.ts +++ b/packages/oauth/oauth-client-browser-example/src/auth/oauth/use-oauth.ts @@ -1,7 +1,6 @@ 'use client' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' - import { Agent } from '@atproto/api' import { BrowserOAuthClient, diff --git a/packages/oauth/oauth-client-browser/src/browser-oauth-client.ts b/packages/oauth/oauth-client-browser/src/browser-oauth-client.ts index f7bafb9b..adbe7f47 100644 --- a/packages/oauth/oauth-client-browser/src/browser-oauth-client.ts +++ b/packages/oauth/oauth-client-browser/src/browser-oauth-client.ts @@ -9,20 +9,19 @@ import { SessionEventMap, } from '@atproto/oauth-client' import { + OAuthClientMetadataInput, + OAuthResponseMode, assertOAuthDiscoverableClientId, atprotoLoopbackClientMetadata, isOAuthClientIdLoopback, - OAuthClientMetadataInput, - OAuthResponseMode, } from '@atproto/oauth-types' - import { BrowserOAuthDatabase } from './browser-oauth-database.js' import { BrowserRuntimeImplementation } from './browser-runtime-implementation.js' import { LoginContinuedInParentWindowError } from './errors.js' import { - buildLoopbackClientId, Simplify, TypedBroadcastChannel, + buildLoopbackClientId, } from './util.js' export type BrowserOAuthClientOptions = Simplify< diff --git a/packages/oauth/oauth-client-browser/src/browser-oauth-database.ts b/packages/oauth/oauth-client-browser/src/browser-oauth-database.ts index b641649e..6486cfe4 100644 --- a/packages/oauth/oauth-client-browser/src/browser-oauth-database.ts +++ b/packages/oauth/oauth-client-browser/src/browser-oauth-database.ts @@ -1,5 +1,3 @@ -import { ResolvedHandle } from '@atproto-labs/handle-resolver' -import { SimpleStore, Value } from '@atproto-labs/simple-store' import { DidDocument } from '@atproto/did' import { Key } from '@atproto/jwk' import { WebcryptoKey } from '@atproto/jwk-webcrypto' @@ -8,7 +6,8 @@ import { OAuthAuthorizationServerMetadata, OAuthProtectedResourceMetadata, } from '@atproto/oauth-types' - +import { ResolvedHandle } from '@atproto-labs/handle-resolver' +import { SimpleStore, Value } from '@atproto-labs/simple-store' import { DB, DBObjectStore } from './indexed-db/index.js' import { TupleUnion } from './util.js' diff --git a/packages/oauth/oauth-client-browser/src/indexed-db-store.ts b/packages/oauth/oauth-client-browser/src/indexed-db-store.ts index 53980b81..447a9355 100644 --- a/packages/oauth/oauth-client-browser/src/indexed-db-store.ts +++ b/packages/oauth/oauth-client-browser/src/indexed-db-store.ts @@ -1,4 +1,4 @@ -import { SimpleStore, Key, Value } from '@atproto-labs/simple-store' +import { Key, SimpleStore, Value } from '@atproto-labs/simple-store' import { DB, DBObjectStore } from './indexed-db/index.js' const storeName = 'store' diff --git a/packages/oauth/oauth-client-browser/src/indexed-db/db.ts b/packages/oauth/oauth-client-browser/src/indexed-db/db.ts index 03ffe61d..c37075ef 100644 --- a/packages/oauth/oauth-client-browser/src/indexed-db/db.ts +++ b/packages/oauth/oauth-client-browser/src/indexed-db/db.ts @@ -1,5 +1,5 @@ -import { DatabaseSchema } from './schema.js' import { DBTransaction } from './db-transaction.js' +import { DatabaseSchema } from './schema.js' export class DB<Schema extends DatabaseSchema> implements Disposable { static async open<Schema extends DatabaseSchema = DatabaseSchema>( diff --git a/packages/oauth/oauth-client-node/package.json b/packages/oauth/oauth-client-node/package.json index eb5de30c..ceed5b92 100644 --- a/packages/oauth/oauth-client-node/package.json +++ b/packages/oauth/oauth-client-node/package.json @@ -24,6 +24,9 @@ "default": "./dist/index.js" } }, + "engines": { + "node": ">=18.7.0" + }, "files": [ "dist" ], diff --git a/packages/oauth/oauth-client-node/src/node-dpop-store.ts b/packages/oauth/oauth-client-node/src/node-dpop-store.ts index 61e9a992..e68ebed9 100644 --- a/packages/oauth/oauth-client-node/src/node-dpop-store.ts +++ b/packages/oauth/oauth-client-node/src/node-dpop-store.ts @@ -1,7 +1,7 @@ -import { SimpleStore } from '@atproto-labs/simple-store' import { Jwk, Key } from '@atproto/jwk' import { JoseKey } from '@atproto/jwk-jose' import { InternalStateData, Session } from '@atproto/oauth-client' +import { SimpleStore } from '@atproto-labs/simple-store' type ToDpopJwkValue<V extends { dpopKey: Key }> = Omit<V, 'dpopKey'> & { dpopJwk: Jwk diff --git a/packages/oauth/oauth-client-node/src/node-oauth-client.ts b/packages/oauth/oauth-client-node/src/node-oauth-client.ts index 8a90d7ce..551acac2 100644 --- a/packages/oauth/oauth-client-node/src/node-oauth-client.ts +++ b/packages/oauth/oauth-client-node/src/node-oauth-client.ts @@ -1,9 +1,4 @@ import { createHash, randomBytes } from 'node:crypto' - -import { - AtprotoHandleResolverNode, - AtprotoHandleResolverNodeOptions, -} from '@atproto-labs/handle-resolver-node' import { JoseKey } from '@atproto/jwk-jose' import { OAuthClient, @@ -12,7 +7,10 @@ import { RuntimeLock, } from '@atproto/oauth-client' import { OAuthResponseMode } from '@atproto/oauth-types' - +import { + AtprotoHandleResolverNode, + AtprotoHandleResolverNodeOptions, +} from '@atproto-labs/handle-resolver-node' import { NodeSavedSessionStore, NodeSavedStateStore, diff --git a/packages/oauth/oauth-client/src/atproto-token-response.ts b/packages/oauth/oauth-client/src/atproto-token-response.ts index 08c0c56e..af833a16 100644 --- a/packages/oauth/oauth-client/src/atproto-token-response.ts +++ b/packages/oauth/oauth-client/src/atproto-token-response.ts @@ -1,8 +1,7 @@ +import { TypeOf, z } from 'zod' import { atprotoDidSchema } from '@atproto/did' import { oauthTokenResponseSchema } from '@atproto/oauth-types' -import { z, TypeOf } from 'zod' - -import { includesSpaceSeparatedValue, SpaceSeparatedValue } from './util' +import { SpaceSeparatedValue, includesSpaceSeparatedValue } from './util' export type AtprotoScope = SpaceSeparatedValue<'atproto'> export const isAtprotoScope = (input: string): input is AtprotoScope => diff --git a/packages/oauth/oauth-client/src/fetch-dpop.ts b/packages/oauth/oauth-client/src/fetch-dpop.ts index 5b500072..9805312a 100644 --- a/packages/oauth/oauth-client/src/fetch-dpop.ts +++ b/packages/oauth/oauth-client/src/fetch-dpop.ts @@ -1,7 +1,7 @@ +import { base64url } from 'multiformats/bases/base64' +import { Key } from '@atproto/jwk' import { Fetch, FetchContext, cancelBody, peekJson } from '@atproto-labs/fetch' import { SimpleStore } from '@atproto-labs/simple-store' -import { Key } from '@atproto/jwk' -import { base64url } from 'multiformats/bases/base64' // "undefined" in non https environments or environments without crypto const subtle = globalThis.crypto?.subtle as SubtleCrypto | undefined diff --git a/packages/oauth/oauth-client/src/oauth-authorization-server-metadata-resolver.ts b/packages/oauth/oauth-client/src/oauth-authorization-server-metadata-resolver.ts index 58fadb31..c12f130b 100644 --- a/packages/oauth/oauth-client/src/oauth-authorization-server-metadata-resolver.ts +++ b/packages/oauth/oauth-client/src/oauth-authorization-server-metadata-resolver.ts @@ -1,19 +1,19 @@ import { - bindFetch, - cancelBody, + OAuthAuthorizationServerMetadata, + oauthAuthorizationServerMetadataValidator, + oauthIssuerIdentifierSchema, +} from '@atproto/oauth-types' +import { Fetch, FetchResponseError, + bindFetch, + cancelBody, } from '@atproto-labs/fetch' import { CachedGetter, GetCachedOptions, SimpleStore, } from '@atproto-labs/simple-store' -import { - OAuthAuthorizationServerMetadata, - oauthAuthorizationServerMetadataValidator, - oauthIssuerIdentifierSchema, -} from '@atproto/oauth-types' import { contentMime } from './util.js' export type { GetCachedOptions, OAuthAuthorizationServerMetadata } diff --git a/packages/oauth/oauth-client/src/oauth-client.ts b/packages/oauth/oauth-client/src/oauth-client.ts index 6d500674..34af0608 100644 --- a/packages/oauth/oauth-client/src/oauth-client.ts +++ b/packages/oauth/oauth-client/src/oauth-client.ts @@ -1,11 +1,20 @@ +import { Key, Keyset } from '@atproto/jwk' +import { + OAuthAuthorizationRequestParameters, + OAuthClientIdDiscoverable, + OAuthClientMetadata, + OAuthClientMetadataInput, + OAuthResponseMode, + oauthClientMetadataSchema, +} from '@atproto/oauth-types' import { - assertAtprotoDid, AtprotoDid, DidCache, DidResolverCached, DidResolverCommon, // eslint-disable-next-line @typescript-eslint/no-unused-vars type DidResolverCommonOptions, + assertAtprotoDid, } from '@atproto-labs/did-resolver' import { Fetch } from '@atproto-labs/fetch' import { @@ -16,16 +25,6 @@ import { } from '@atproto-labs/handle-resolver' import { IdentityResolver } from '@atproto-labs/identity-resolver' import { SimpleStoreMemory } from '@atproto-labs/simple-store-memory' -import { Key, Keyset } from '@atproto/jwk' -import { - OAuthAuthorizationRequestParameters, - OAuthClientIdDiscoverable, - OAuthClientMetadata, - OAuthClientMetadataInput, - oauthClientMetadataSchema, - OAuthResponseMode, -} from '@atproto/oauth-types' - import { FALLBACK_ALG } from './constants.js' import { TokenRevokedError } from './errors/token-revoked-error.js' import { diff --git a/packages/oauth/oauth-client/src/oauth-protected-resource-metadata-resolver.ts b/packages/oauth/oauth-client/src/oauth-protected-resource-metadata-resolver.ts index 25663994..db0e1d55 100644 --- a/packages/oauth/oauth-client/src/oauth-protected-resource-metadata-resolver.ts +++ b/packages/oauth/oauth-client/src/oauth-protected-resource-metadata-resolver.ts @@ -1,3 +1,7 @@ +import { + OAuthProtectedResourceMetadata, + oauthProtectedResourceMetadataSchema, +} from '@atproto/oauth-types' import { Fetch, FetchResponseError, @@ -9,10 +13,6 @@ import { GetCachedOptions, SimpleStore, } from '@atproto-labs/simple-store' -import { - OAuthProtectedResourceMetadata, - oauthProtectedResourceMetadataSchema, -} from '@atproto/oauth-types' import { contentMime } from './util.js' export type { GetCachedOptions, OAuthProtectedResourceMetadata } diff --git a/packages/oauth/oauth-client/src/oauth-resolver.ts b/packages/oauth/oauth-client/src/oauth-resolver.ts index fdd73d83..33fadd78 100644 --- a/packages/oauth/oauth-client/src/oauth-resolver.ts +++ b/packages/oauth/oauth-client/src/oauth-resolver.ts @@ -1,13 +1,12 @@ -import { - IdentityResolver, - ResolvedIdentity, - ResolveIdentityOptions, -} from '@atproto-labs/identity-resolver' import { OAuthAuthorizationServerMetadata, oauthIssuerIdentifierSchema, } from '@atproto/oauth-types' - +import { + IdentityResolver, + ResolveIdentityOptions, + ResolvedIdentity, +} from '@atproto-labs/identity-resolver' import { GetCachedOptions, OAuthAuthorizationServerMetadataResolver, diff --git a/packages/oauth/oauth-client/src/oauth-response-error.ts b/packages/oauth/oauth-client/src/oauth-response-error.ts index b49c2f5c..5c08a0f4 100644 --- a/packages/oauth/oauth-client/src/oauth-response-error.ts +++ b/packages/oauth/oauth-client/src/oauth-response-error.ts @@ -1,4 +1,4 @@ -import { Json, ifString, ifObject } from '@atproto-labs/fetch' +import { Json, ifObject, ifString } from '@atproto-labs/fetch' export class OAuthResponseError extends Error { readonly error?: string diff --git a/packages/oauth/oauth-client/src/oauth-server-agent.ts b/packages/oauth/oauth-client/src/oauth-server-agent.ts index 48fdebf3..990a058b 100644 --- a/packages/oauth/oauth-client/src/oauth-server-agent.ts +++ b/packages/oauth/oauth-client/src/oauth-server-agent.ts @@ -1,5 +1,3 @@ -import { Fetch, Json, bindFetch, fetchJsonProcessor } from '@atproto-labs/fetch' -import { SimpleStore } from '@atproto-labs/simple-store' import { AtprotoDid } from '@atproto/did' import { Key, Keyset } from '@atproto/jwk' import { @@ -12,7 +10,8 @@ import { OAuthTokenRequest, oauthParResponseSchema, } from '@atproto/oauth-types' - +import { Fetch, Json, bindFetch, fetchJsonProcessor } from '@atproto-labs/fetch' +import { SimpleStore } from '@atproto-labs/simple-store' import { AtprotoScope, AtprotoTokenResponse, diff --git a/packages/oauth/oauth-client/src/oauth-server-factory.ts b/packages/oauth/oauth-client/src/oauth-server-factory.ts index a4e1164e..ee5ade7c 100644 --- a/packages/oauth/oauth-client/src/oauth-server-factory.ts +++ b/packages/oauth/oauth-client/src/oauth-server-factory.ts @@ -1,7 +1,6 @@ -import { Fetch } from '@atproto-labs/fetch' import { Key, Keyset } from '@atproto/jwk' import { OAuthAuthorizationServerMetadata } from '@atproto/oauth-types' - +import { Fetch } from '@atproto-labs/fetch' import { GetCachedOptions } from './oauth-authorization-server-metadata-resolver.js' import { OAuthResolver } from './oauth-resolver.js' import { DpopNonceCache, OAuthServerAgent } from './oauth-server-agent.js' diff --git a/packages/oauth/oauth-client/src/oauth-session.ts b/packages/oauth/oauth-client/src/oauth-session.ts index 43bc8e63..feb4df32 100644 --- a/packages/oauth/oauth-client/src/oauth-session.ts +++ b/packages/oauth/oauth-client/src/oauth-session.ts @@ -1,7 +1,6 @@ -import { bindFetch, Fetch } from '@atproto-labs/fetch' import { AtprotoDid } from '@atproto/did' import { OAuthAuthorizationServerMetadata } from '@atproto/oauth-types' - +import { Fetch, bindFetch } from '@atproto-labs/fetch' import { AtprotoScope } from './atproto-token-response.js' import { TokenInvalidError } from './errors/token-invalid-error.js' import { TokenRevokedError } from './errors/token-revoked-error.js' diff --git a/packages/oauth/oauth-client/src/runtime.ts b/packages/oauth/oauth-client/src/runtime.ts index 497546b2..7205f4e2 100644 --- a/packages/oauth/oauth-client/src/runtime.ts +++ b/packages/oauth/oauth-client/src/runtime.ts @@ -1,6 +1,5 @@ -import { Key } from '@atproto/jwk' import { base64url } from 'multiformats/bases/base64' - +import { Key } from '@atproto/jwk' import { requestLocalLock } from './lock.js' import { RuntimeImplementation, RuntimeLock } from './runtime-implementation.js' diff --git a/packages/oauth/oauth-client/src/session-getter.ts b/packages/oauth/oauth-client/src/session-getter.ts index c33d1392..f1454603 100644 --- a/packages/oauth/oauth-client/src/session-getter.ts +++ b/packages/oauth/oauth-client/src/session-getter.ts @@ -1,11 +1,10 @@ +import { AtprotoDid } from '@atproto/did' +import { Key } from '@atproto/jwk' import { CachedGetter, GetCachedOptions, SimpleStore, } from '@atproto-labs/simple-store' -import { AtprotoDid } from '@atproto/did' -import { Key } from '@atproto/jwk' - import { TokenInvalidError } from './errors/token-invalid-error.js' import { TokenRefreshError } from './errors/token-refresh-error.js' import { TokenRevokedError } from './errors/token-revoked-error.js' @@ -13,7 +12,7 @@ import { OAuthResponseError } from './oauth-response-error.js' import { TokenSet } from './oauth-server-agent.js' import { OAuthServerFactory } from './oauth-server-factory.js' import { Runtime } from './runtime.js' -import { combineSignals, CustomEventTarget, timeoutSignal } from './util.js' +import { CustomEventTarget, combineSignals, timeoutSignal } from './util.js' export type Session = { dpopKey: Key diff --git a/packages/oauth/oauth-client/src/state-store.ts b/packages/oauth/oauth-client/src/state-store.ts index f49c36df..0cafecfd 100644 --- a/packages/oauth/oauth-client/src/state-store.ts +++ b/packages/oauth/oauth-client/src/state-store.ts @@ -1,5 +1,5 @@ -import { SimpleStore } from '@atproto-labs/simple-store' import { Key } from '@atproto/jwk' +import { SimpleStore } from '@atproto-labs/simple-store' export type InternalStateData = { iss: string diff --git a/packages/oauth/oauth-client/src/types.ts b/packages/oauth/oauth-client/src/types.ts index 81b9ed8e..53f0560d 100644 --- a/packages/oauth/oauth-client/src/types.ts +++ b/packages/oauth/oauth-client/src/types.ts @@ -1,11 +1,10 @@ +import { TypeOf, z } from 'zod' import { - oauthClientIdLoopbackSchema, OAuthAuthorizationRequestParameters, oauthClientIdDiscoverableSchema, + oauthClientIdLoopbackSchema, oauthClientMetadataSchema, } from '@atproto/oauth-types' -import { TypeOf, z } from 'zod' - import { Simplify } from './util.js' // Note: These types are not prefixed with `OAuth` because they are not specific diff --git a/packages/oauth/oauth-client/src/validate-client-metadata.ts b/packages/oauth/oauth-client/src/validate-client-metadata.ts index eb38c425..1c370186 100644 --- a/packages/oauth/oauth-client/src/validate-client-metadata.ts +++ b/packages/oauth/oauth-client/src/validate-client-metadata.ts @@ -4,7 +4,6 @@ import { assertOAuthDiscoverableClientId, assertOAuthLoopbackClientId, } from '@atproto/oauth-types' - import { ClientMetadata, clientMetadataSchema } from './types.js' const TOKEN_ENDPOINT_AUTH_METHOD = `token_endpoint_auth_method` diff --git a/packages/oauth/oauth-provider/package.json b/packages/oauth/oauth-provider/package.json index 21fb54b8..66cc156f 100644 --- a/packages/oauth/oauth-provider/package.json +++ b/packages/oauth/oauth-provider/package.json @@ -27,6 +27,9 @@ "default": "./dist/index.js" } }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto-labs/fetch": "workspace:*", "@atproto-labs/fetch-node": "workspace:*", diff --git a/packages/oauth/oauth-provider/rollup.config.js b/packages/oauth/oauth-provider/rollup.config.js index 54a754a6..7ff599c3 100644 --- a/packages/oauth/oauth-provider/rollup.config.js +++ b/packages/oauth/oauth-provider/rollup.config.js @@ -1,15 +1,14 @@ /* eslint-env node */ -const { defineConfig } = require('rollup') - -const { - default: manifest, -} = require('@atproto-labs/rollup-plugin-bundle-manifest') const { default: commonjs } = require('@rollup/plugin-commonjs') const { default: nodeResolve } = require('@rollup/plugin-node-resolve') const { default: replace } = require('@rollup/plugin-replace') const { default: terser } = require('@rollup/plugin-terser') const { default: typescript } = require('@rollup/plugin-typescript') +const { defineConfig } = require('rollup') +const { + default: manifest, +} = require('@atproto-labs/rollup-plugin-bundle-manifest') const postcss = ((m) => m.default || m)(require('rollup-plugin-postcss')) module.exports = defineConfig((commandLineArguments) => { diff --git a/packages/oauth/oauth-provider/src/account/account-store.ts b/packages/oauth/oauth-provider/src/account/account-store.ts index 9966190d..ad49f8d9 100644 --- a/packages/oauth/oauth-provider/src/account/account-store.ts +++ b/packages/oauth/oauth-provider/src/account/account-store.ts @@ -1,5 +1,4 @@ -import z from 'zod' - +import { z } from 'zod' import { ClientId } from '../client/client-id.js' import { DeviceId } from '../device/device-id.js' import { Awaitable } from '../lib/util/type.js' diff --git a/packages/oauth/oauth-provider/src/account/account.ts b/packages/oauth/oauth-provider/src/account/account.ts index 7a850f79..505da96d 100644 --- a/packages/oauth/oauth-provider/src/account/account.ts +++ b/packages/oauth/oauth-provider/src/account/account.ts @@ -1,5 +1,5 @@ -import { Sub } from '../oidc/sub.js' import { Simplify } from '../lib/util/type.js' +import { Sub } from '../oidc/sub.js' export type Account = Simplify<{ sub: Sub // Account id diff --git a/packages/oauth/oauth-provider/src/assets/app/hooks/use-api.ts b/packages/oauth/oauth-provider/src/assets/app/hooks/use-api.ts index 5a70541e..f943a16b 100644 --- a/packages/oauth/oauth-provider/src/assets/app/hooks/use-api.ts +++ b/packages/oauth/oauth-provider/src/assets/app/hooks/use-api.ts @@ -1,5 +1,4 @@ import { useCallback, useMemo, useState } from 'react' - import { Account, AuthorizeData, Session } from '../backend-data' import { Api } from '../lib/api' import { upsert } from '../lib/util' @@ -76,7 +75,7 @@ export function useApi( ) const doSignUp = useCallback( - (data: SignUpData) => { + (_data: SignUpData) => { // throw new Error('Not implemented') }, diff --git a/packages/oauth/oauth-provider/src/assets/app/lib/api.ts b/packages/oauth/oauth-provider/src/assets/app/lib/api.ts index ecf95d71..1237e9a2 100644 --- a/packages/oauth/oauth-provider/src/assets/app/lib/api.ts +++ b/packages/oauth/oauth-provider/src/assets/app/lib/api.ts @@ -1,5 +1,4 @@ import { FetchResponseError, Json } from '@atproto-labs/fetch' - import { Account, Session } from '../backend-data' export class Api { diff --git a/packages/oauth/oauth-provider/src/assets/assets-middleware.ts b/packages/oauth/oauth-provider/src/assets/assets-middleware.ts index 81985842..af2e046d 100644 --- a/packages/oauth/oauth-provider/src/assets/assets-middleware.ts +++ b/packages/oauth/oauth-provider/src/assets/assets-middleware.ts @@ -4,7 +4,6 @@ import { validateFetchSite, writeStream, } from '../lib/http/index.js' - import { ASSETS_URL_PREFIX, getAsset } from './index.js' export function authorizeAssetsMiddleware(): Middleware { diff --git a/packages/oauth/oauth-provider/src/assets/index.ts b/packages/oauth/oauth-provider/src/assets/index.ts index c7cf4d60..e6eff66b 100644 --- a/packages/oauth/oauth-provider/src/assets/index.ts +++ b/packages/oauth/oauth-provider/src/assets/index.ts @@ -1,5 +1,3 @@ -import type { ManifestItem } from '@atproto-labs/rollup-plugin-bundle-manifest' - // If this library is used as a regular dependency (e.g. from node_modules), the // assets will simply be referenced from the node_modules directory. However, if // this library is bundled (e.g. via rollup), the assets need to be copied to @@ -17,8 +15,9 @@ import type { ManifestItem } from '@atproto-labs/rollup-plugin-bundle-manifest' import { createReadStream } from 'node:fs' import { join, posix } from 'node:path' import { Readable } from 'node:stream' - +import type { ManifestItem } from '@atproto-labs/rollup-plugin-bundle-manifest' // @ts-expect-error: This file is generated at build time +// eslint-disable-next-line import/no-unresolved import appBundleManifestJson from './app/bundle-manifest.json' import { Asset } from './asset' diff --git a/packages/oauth/oauth-provider/src/client/client-auth.ts b/packages/oauth/oauth-provider/src/client/client-auth.ts index 9577a8d7..b60e1537 100644 --- a/packages/oauth/oauth-provider/src/client/client-auth.ts +++ b/packages/oauth/oauth-provider/src/client/client-auth.ts @@ -1,6 +1,5 @@ -import { CLIENT_ASSERTION_TYPE_JWT_BEARER } from '@atproto/oauth-types' import { KeyLike, calculateJwkThumbprint, errors, exportJWK } from 'jose' - +import { CLIENT_ASSERTION_TYPE_JWT_BEARER } from '@atproto/oauth-types' import { InvalidClientError } from '../errors/invalid-client-error.js' const { JOSEError } = errors diff --git a/packages/oauth/oauth-provider/src/client/client-manager.ts b/packages/oauth/oauth-provider/src/client/client-manager.ts index 772e0f67..67744864 100644 --- a/packages/oauth/oauth-provider/src/client/client-manager.ts +++ b/packages/oauth/oauth-provider/src/client/client-manager.ts @@ -1,6 +1,18 @@ +import { Jwks, Keyset, jwksSchema } from '@atproto/jwk' +import { + OAuthAuthorizationServerMetadata, + OAuthClientIdDiscoverable, + OAuthClientIdLoopback, + OAuthClientMetadata, + OAuthClientMetadataInput, + isLoopbackHost, + isOAuthClientIdDiscoverable, + isOAuthClientIdLoopback, + oauthClientMetadataSchema, +} from '@atproto/oauth-types' import { - bindFetch, Fetch, + bindFetch, fetchJsonProcessor, fetchJsonZodProcessor, fetchOkProcessor, @@ -11,19 +23,6 @@ import { GetCachedOptions, SimpleStore, } from '@atproto-labs/simple-store' -import { Jwks, jwksSchema, Keyset } from '@atproto/jwk' -import { - isLoopbackHost, - isOAuthClientIdDiscoverable, - isOAuthClientIdLoopback, - OAuthAuthorizationServerMetadata, - OAuthClientIdDiscoverable, - OAuthClientIdLoopback, - OAuthClientMetadata, - OAuthClientMetadataInput, - oauthClientMetadataSchema, -} from '@atproto/oauth-types' - import { InvalidClientMetadataError } from '../errors/invalid-client-metadata-error.js' import { InvalidRedirectUriError } from '../errors/invalid-redirect-uri-error.js' import { callAsync } from '../lib/util/function.js' diff --git a/packages/oauth/oauth-provider/src/client/client-store.ts b/packages/oauth/oauth-provider/src/client/client-store.ts index fdf05d7d..b02abe79 100644 --- a/packages/oauth/oauth-provider/src/client/client-store.ts +++ b/packages/oauth/oauth-provider/src/client/client-store.ts @@ -1,5 +1,4 @@ import { OAuthClientMetadata } from '@atproto/oauth-types' - import { Awaitable } from '../lib/util/type.js' import { ClientId } from './client-id.js' diff --git a/packages/oauth/oauth-provider/src/client/client-utils.ts b/packages/oauth/oauth-provider/src/client/client-utils.ts index 7a17e0b2..6331a99a 100644 --- a/packages/oauth/oauth-provider/src/client/client-utils.ts +++ b/packages/oauth/oauth-provider/src/client/client-utils.ts @@ -2,7 +2,6 @@ import { OAuthClientIdDiscoverable, parseOAuthDiscoverableClientId, } from '@atproto/oauth-types' - import { InvalidClientIdError } from '../errors/invalid-client-id-error.js' import { InvalidRedirectUriError } from '../errors/invalid-redirect-uri-error.js' import { isInternetHost } from '../lib/util/hostname.js' diff --git a/packages/oauth/oauth-provider/src/client/client.ts b/packages/oauth/oauth-provider/src/client/client.ts index 4dd881c2..458de158 100644 --- a/packages/oauth/oauth-provider/src/client/client.ts +++ b/packages/oauth/oauth-provider/src/client/client.ts @@ -1,3 +1,17 @@ +import { + type JWTPayload, + type JWTVerifyGetKey, + type JWTVerifyOptions, + type JWTVerifyResult, + type KeyLike, + type ResolvedKey, + UnsecuredJWT, + type UnsecuredResult, + createLocalJWKSet, + createRemoteJWKSet, + errors, + jwtVerify, +} from 'jose' import { Jwks } from '@atproto/jwk' import { CLIENT_ASSERTION_TYPE_JWT_BEARER, @@ -6,21 +20,6 @@ import { OAuthClientMetadata, OAuthRedirectUri, } from '@atproto/oauth-types' -import { - UnsecuredJWT, - createLocalJWKSet, - createRemoteJWKSet, - errors, - jwtVerify, - type JWTPayload, - type JWTVerifyGetKey, - type JWTVerifyOptions, - type JWTVerifyResult, - type KeyLike, - type ResolvedKey, - type UnsecuredResult, -} from 'jose' - import { CLIENT_ASSERTION_MAX_AGE, JAR_MAX_AGE } from '../constants.js' import { InvalidAuthorizationDetailsError } from '../errors/invalid-authorization-details-error.js' import { InvalidClientError } from '../errors/invalid-client-error.js' diff --git a/packages/oauth/oauth-provider/src/device/device-data.ts b/packages/oauth/oauth-provider/src/device/device-data.ts index 864211f7..c9ef01ab 100644 --- a/packages/oauth/oauth-provider/src/device/device-data.ts +++ b/packages/oauth/oauth-provider/src/device/device-data.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { deviceDetailsSchema } from './device-details.js' import { sessionIdSchema } from './session-id.js' diff --git a/packages/oauth/oauth-provider/src/device/device-details.ts b/packages/oauth/oauth-provider/src/device/device-details.ts index 86737361..21ae8dd5 100644 --- a/packages/oauth/oauth-provider/src/device/device-details.ts +++ b/packages/oauth/oauth-provider/src/device/device-details.ts @@ -1,5 +1,4 @@ import { IncomingMessage } from 'node:http' - import { z } from 'zod' export const deviceDetailsSchema = z.object({ diff --git a/packages/oauth/oauth-provider/src/device/device-id.ts b/packages/oauth/oauth-provider/src/device/device-id.ts index ced0c1a4..a2d6de8c 100644 --- a/packages/oauth/oauth-provider/src/device/device-id.ts +++ b/packages/oauth/oauth-provider/src/device/device-id.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { DEVICE_ID_BYTES_LENGTH, DEVICE_ID_PREFIX } from '../constants.js' import { randomHexId } from '../lib/util/crypto.js' diff --git a/packages/oauth/oauth-provider/src/device/device-manager.ts b/packages/oauth/oauth-provider/src/device/device-manager.ts index 62431b44..5a2c540f 100644 --- a/packages/oauth/oauth-provider/src/device/device-manager.ts +++ b/packages/oauth/oauth-provider/src/device/device-manager.ts @@ -1,12 +1,9 @@ import { IncomingMessage, ServerResponse } from 'node:http' - import { serialize as serializeCookie } from 'cookie' import type Keygrip from 'keygrip' import { z } from 'zod' - -import { appendHeader, parseHttpCookies } from '../lib/http/index.js' - import { SESSION_FIXATION_MAX_AGE } from '../constants.js' +import { appendHeader, parseHttpCookies } from '../lib/http/index.js' import { DeviceData } from './device-data.js' import { extractDeviceDetails } from './device-details.js' import { DeviceId, deviceIdSchema, generateDeviceId } from './device-id.js' diff --git a/packages/oauth/oauth-provider/src/device/session-id.ts b/packages/oauth/oauth-provider/src/device/session-id.ts index e063ebdb..5bf3fc59 100644 --- a/packages/oauth/oauth-provider/src/device/session-id.ts +++ b/packages/oauth/oauth-provider/src/device/session-id.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { SESSION_ID_BYTES_LENGTH, SESSION_ID_PREFIX } from '../constants.js' import { randomHexId } from '../lib/util/crypto.js' diff --git a/packages/oauth/oauth-provider/src/dpop/dpop-manager.ts b/packages/oauth/oauth-provider/src/dpop/dpop-manager.ts index d41813d7..d8b5dad9 100644 --- a/packages/oauth/oauth-provider/src/dpop/dpop-manager.ts +++ b/packages/oauth/oauth-provider/src/dpop/dpop-manager.ts @@ -1,7 +1,5 @@ import { createHash } from 'node:crypto' - import { EmbeddedJWK, calculateJwkThumbprint, errors, jwtVerify } from 'jose' - import { DPOP_NONCE_MAX_AGE } from '../constants.js' import { InvalidDpopProofError } from '../errors/invalid-dpop-proof-error.js' import { UseDpopNonceError } from '../errors/use-dpop-nonce-error.js' diff --git a/packages/oauth/oauth-provider/src/dpop/dpop-nonce.ts b/packages/oauth/oauth-provider/src/dpop/dpop-nonce.ts index 4a74e8af..a1fc7b89 100644 --- a/packages/oauth/oauth-provider/src/dpop/dpop-nonce.ts +++ b/packages/oauth/oauth-provider/src/dpop/dpop-nonce.ts @@ -1,5 +1,4 @@ import { createHmac, randomBytes } from 'node:crypto' - import { DPOP_NONCE_MAX_AGE } from '../constants.js' function numTo64bits(num: number) { diff --git a/packages/oauth/oauth-provider/src/errors/invalid-client-metadata-error.ts b/packages/oauth/oauth-provider/src/errors/invalid-client-metadata-error.ts index 68c04650..6c1297a9 100644 --- a/packages/oauth/oauth-provider/src/errors/invalid-client-metadata-error.ts +++ b/packages/oauth/oauth-provider/src/errors/invalid-client-metadata-error.ts @@ -1,5 +1,5 @@ -import { FetchError } from '@atproto-labs/fetch' import { ZodError } from 'zod' +import { FetchError } from '@atproto-labs/fetch' import { OAuthError } from './oauth-error.js' /** diff --git a/packages/oauth/oauth-provider/src/errors/invalid-token-error.ts b/packages/oauth/oauth-provider/src/errors/invalid-token-error.ts index c8771aaa..b8c5c4a0 100644 --- a/packages/oauth/oauth-provider/src/errors/invalid-token-error.ts +++ b/packages/oauth/oauth-provider/src/errors/invalid-token-error.ts @@ -1,7 +1,6 @@ -import { JwtVerifyError } from '@atproto/jwk' import { errors } from 'jose' import { ZodError } from 'zod' - +import { JwtVerifyError } from '@atproto/jwk' import { OAuthError } from './oauth-error.js' import { WWWAuthenticateError } from './www-authenticate-error.js' diff --git a/packages/oauth/oauth-provider/src/errors/www-authenticate-error.ts b/packages/oauth/oauth-provider/src/errors/www-authenticate-error.ts index c781d621..12367b96 100644 --- a/packages/oauth/oauth-provider/src/errors/www-authenticate-error.ts +++ b/packages/oauth/oauth-provider/src/errors/www-authenticate-error.ts @@ -1,5 +1,4 @@ import { VERIFY_ALGOS } from '../lib/util/crypto.js' - import { OAuthError } from './oauth-error.js' export type WWWAuthenticateParams = Record<string, string | undefined> diff --git a/packages/oauth/oauth-provider/src/lib/http/accept.ts b/packages/oauth/oauth-provider/src/lib/http/accept.ts index 47792e8a..b51641ec 100644 --- a/packages/oauth/oauth-provider/src/lib/http/accept.ts +++ b/packages/oauth/oauth-provider/src/lib/http/accept.ts @@ -1,5 +1,4 @@ import { mediaType } from '@hapi/accept' - import { SubCtx, subCtx } from './context.js' import { IncomingMessage, diff --git a/packages/oauth/oauth-provider/src/lib/http/middleware.ts b/packages/oauth/oauth-provider/src/lib/http/middleware.ts index a959be9f..b052f0ef 100644 --- a/packages/oauth/oauth-provider/src/lib/http/middleware.ts +++ b/packages/oauth/oauth-provider/src/lib/http/middleware.ts @@ -1,6 +1,6 @@ import type { IncomingMessage, ServerResponse } from 'node:http' import { writeJson } from './response.js' -import { Middleware, Handler, NextFunction } from './types.js' +import { Handler, Middleware, NextFunction } from './types.js' export function combineMiddlewares<M extends Middleware<any, any, any>>( middlewares: Iterable<null | undefined | M>, diff --git a/packages/oauth/oauth-provider/src/lib/http/request.ts b/packages/oauth/oauth-provider/src/lib/http/request.ts index ad1bcd27..e9b0ef4e 100644 --- a/packages/oauth/oauth-provider/src/lib/http/request.ts +++ b/packages/oauth/oauth-provider/src/lib/http/request.ts @@ -1,10 +1,9 @@ +import { randomBytes } from 'node:crypto' import { parse as parseCookie, serialize as serializeCookie } from 'cookie' -import { randomBytes } from 'crypto' import createHttpError from 'http-errors' - import { appendHeader } from './response.js' import { IncomingMessage, ServerResponse } from './types.js' -import { urlMatch, UrlReference } from './url.js' +import { UrlReference, urlMatch } from './url.js' export function validateHeaderValue( req: IncomingMessage, diff --git a/packages/oauth/oauth-provider/src/lib/http/response.ts b/packages/oauth/oauth-provider/src/lib/http/response.ts index 48b12c4b..ba66df01 100644 --- a/packages/oauth/oauth-provider/src/lib/http/response.ts +++ b/packages/oauth/oauth-provider/src/lib/http/response.ts @@ -1,5 +1,4 @@ import { Readable, pipeline } from 'node:stream' - import { Handler, ServerResponse } from './types.js' export function appendHeader( diff --git a/packages/oauth/oauth-provider/src/lib/http/stream.ts b/packages/oauth/oauth-provider/src/lib/http/stream.ts index 1d74991b..cd995531 100644 --- a/packages/oauth/oauth-provider/src/lib/http/stream.ts +++ b/packages/oauth/oauth-provider/src/lib/http/stream.ts @@ -1,13 +1,12 @@ -import { decodeStream, streamToNodeBuffer } from '@atproto/common' -import createHttpError from 'http-errors' import { IncomingMessage } from 'node:http' import { Readable } from 'node:stream' - +import createHttpError from 'http-errors' +import { decodeStream, streamToNodeBuffer } from '@atproto/common' import { KnownNames, KnownParser, - parseContentType, ParserResult, + parseContentType, parsers, } from './parser.js' diff --git a/packages/oauth/oauth-provider/src/lib/util/authorization-header.ts b/packages/oauth/oauth-provider/src/lib/util/authorization-header.ts index b0f2037c..3376be36 100644 --- a/packages/oauth/oauth-provider/src/lib/util/authorization-header.ts +++ b/packages/oauth/oauth-provider/src/lib/util/authorization-header.ts @@ -1,9 +1,8 @@ +import { z } from 'zod' import { oauthAccessTokenSchema, oauthTokenTypeSchema, } from '@atproto/oauth-types' -import { z } from 'zod' - import { InvalidRequestError } from '../../errors/invalid-request-error.js' import { WWWAuthenticateError } from '../../errors/www-authenticate-error.js' diff --git a/packages/oauth/oauth-provider/src/lib/util/hostname.ts b/packages/oauth/oauth-provider/src/lib/util/hostname.ts index 75e3756c..70f84138 100644 --- a/packages/oauth/oauth-provider/src/lib/util/hostname.ts +++ b/packages/oauth/oauth-provider/src/lib/util/hostname.ts @@ -1,4 +1,4 @@ -import { parse, ParsedDomain } from 'psl' +import { ParsedDomain, parse } from 'psl' export function isInternetUrl(url: URL): boolean { return parseUrlPublicSuffix(url) !== null diff --git a/packages/oauth/oauth-provider/src/metadata/build-metadata.ts b/packages/oauth/oauth-provider/src/metadata/build-metadata.ts index dece6e45..9a9172fd 100644 --- a/packages/oauth/oauth-provider/src/metadata/build-metadata.ts +++ b/packages/oauth/oauth-provider/src/metadata/build-metadata.ts @@ -3,7 +3,6 @@ import { OAuthAuthorizationServerMetadata, oauthAuthorizationServerMetadataSchema, } from '@atproto/oauth-types' - import { Client } from '../client/client.js' import { VERIFY_ALGOS } from '../lib/util/crypto.js' diff --git a/packages/oauth/oauth-provider/src/oauth-hooks.ts b/packages/oauth/oauth-provider/src/oauth-hooks.ts index b580ca28..75e0f0bf 100644 --- a/packages/oauth/oauth-provider/src/oauth-hooks.ts +++ b/packages/oauth/oauth-provider/src/oauth-hooks.ts @@ -5,7 +5,6 @@ import { OAuthClientMetadata, OAuthTokenResponse, } from '@atproto/oauth-types' - import { Account } from './account/account.js' import { ClientAuth } from './client/client-auth.js' import { ClientId } from './client/client-id.js' diff --git a/packages/oauth/oauth-provider/src/oauth-provider.ts b/packages/oauth/oauth-provider/src/oauth-provider.ts index cbc80454..e2987a3a 100644 --- a/packages/oauth/oauth-provider/src/oauth-provider.ts +++ b/packages/oauth/oauth-provider/src/oauth-provider.ts @@ -1,6 +1,7 @@ -import { safeFetchWrap } from '@atproto-labs/fetch-node' -import { SimpleStore } from '@atproto-labs/simple-store' -import { SimpleStoreMemory } from '@atproto-labs/simple-store-memory' +import { mediaType } from '@hapi/accept' +import createHttpError from 'http-errors' +import type { Redis, RedisOptions } from 'ioredis' +import { ZodError, z } from 'zod' import { Jwks, Keyset } from '@atproto/jwk' import { CLIENT_ASSERTION_TYPE_JWT_BEARER, @@ -29,11 +30,9 @@ import { oauthTokenIdentificationSchema, oauthTokenRequestSchema, } from '@atproto/oauth-types' -import { mediaType } from '@hapi/accept' -import createHttpError from 'http-errors' -import type { Redis, RedisOptions } from 'ioredis' -import z, { ZodError } from 'zod' - +import { safeFetchWrap } from '@atproto-labs/fetch-node' +import { SimpleStore } from '@atproto-labs/simple-store' +import { SimpleStoreMemory } from '@atproto-labs/simple-store-memory' import { AccessTokenType } from './access-token/access-token-type.js' import { AccountManager } from './account/account-manager.js' import { @@ -125,10 +124,10 @@ export type OAuthProviderStore = Partial< > export { - Keyset, type CustomMetadata, type Customization, type Handler, + Keyset, type OAuthAuthorizationServerMetadata, } diff --git a/packages/oauth/oauth-provider/src/oauth-verifier.ts b/packages/oauth/oauth-provider/src/oauth-verifier.ts index 2b152e02..4c1b60b2 100644 --- a/packages/oauth/oauth-provider/src/oauth-verifier.ts +++ b/packages/oauth/oauth-provider/src/oauth-verifier.ts @@ -1,3 +1,4 @@ +import type { Redis, RedisOptions } from 'ioredis' import { Key, Keyset, isSignedJwt } from '@atproto/jwk' import { OAuthAccessToken, @@ -5,8 +6,6 @@ import { OAuthTokenType, oauthIssuerIdentifierSchema, } from '@atproto/oauth-types' -import type { Redis, RedisOptions } from 'ioredis' - import { AccessTokenType } from './access-token/access-token-type.js' import { DpopManager, DpopManagerOptions } from './dpop/dpop-manager.js' import { DpopNonce } from './dpop/dpop-nonce.js' diff --git a/packages/oauth/oauth-provider/src/output/build-authorize-data.ts b/packages/oauth/oauth-provider/src/output/build-authorize-data.ts index 5bc4b8c0..d86bf80b 100644 --- a/packages/oauth/oauth-provider/src/output/build-authorize-data.ts +++ b/packages/oauth/oauth-provider/src/output/build-authorize-data.ts @@ -2,7 +2,6 @@ import { OAuthAuthorizationRequestParameters, OAuthClientMetadata, } from '@atproto/oauth-types' - import { DeviceAccountInfo } from '../account/account-store.js' import { Account } from '../account/account.js' import { Client } from '../client/client.js' diff --git a/packages/oauth/oauth-provider/src/output/build-error-payload.ts b/packages/oauth/oauth-provider/src/output/build-error-payload.ts index c0c69a98..e569a50d 100644 --- a/packages/oauth/oauth-provider/src/output/build-error-payload.ts +++ b/packages/oauth/oauth-provider/src/output/build-error-payload.ts @@ -1,7 +1,6 @@ -import { JwtVerifyError } from '@atproto/jwk' import { errors } from 'jose' import { ZodError } from 'zod' - +import { JwtVerifyError } from '@atproto/jwk' import { OAuthError } from '../errors/oauth-error.js' const { JOSEError } = errors diff --git a/packages/oauth/oauth-provider/src/output/output-manager.ts b/packages/oauth/oauth-provider/src/output/output-manager.ts index d151dec3..22a6c141 100644 --- a/packages/oauth/oauth-provider/src/output/output-manager.ts +++ b/packages/oauth/oauth-provider/src/output/output-manager.ts @@ -1,17 +1,16 @@ import { ServerResponse } from 'node:http' - import { Asset } from '../assets/asset.js' import { getAsset } from '../assets/index.js' -import { cssCode, Html, html } from '../lib/html/index.js' +import { Html, cssCode, html } from '../lib/html/index.js' import { AuthorizationResultAuthorize, buildAuthorizeData, } from './build-authorize-data.js' import { buildErrorPayload, buildErrorStatus } from './build-error-payload.js' import { + Customization, buildCustomizationCss, buildCustomizationData, - Customization, } from './customization.js' import { declareBackendData, sendWebPage } from './send-web-page.js' diff --git a/packages/oauth/oauth-provider/src/output/send-authorize-redirect.ts b/packages/oauth/oauth-provider/src/output/send-authorize-redirect.ts index f5215b32..3220ebff 100644 --- a/packages/oauth/oauth-provider/src/output/send-authorize-redirect.ts +++ b/packages/oauth/oauth-provider/src/output/send-authorize-redirect.ts @@ -1,9 +1,8 @@ +import { ServerResponse } from 'node:http' import { OAuthAuthorizationRequestParameters, OAuthTokenType, } from '@atproto/oauth-types' -import { ServerResponse } from 'node:http' - import { InvalidRequestError } from '../errors/invalid-request-error.js' import { html, js } from '../lib/html/index.js' import { Code } from '../request/code.js' diff --git a/packages/oauth/oauth-provider/src/output/send-web-page.ts b/packages/oauth/oauth-provider/src/output/send-web-page.ts index 35b5bae8..9c3eb1eb 100644 --- a/packages/oauth/oauth-provider/src/output/send-web-page.ts +++ b/packages/oauth/oauth-provider/src/output/send-web-page.ts @@ -1,14 +1,13 @@ import { createHash } from 'node:crypto' import { ServerResponse } from 'node:http' - import { AssetRef, - buildDocument, BuildDocumentOptions, Html, + buildDocument, js, } from '../lib/html/index.js' -import { writeHtml, WriteResponseOptions } from '../lib/http/response.js' +import { WriteResponseOptions, writeHtml } from '../lib/http/response.js' export function declareBackendData(name: string, data: unknown) { // The script tag is removed after the data is assigned to the global variable diff --git a/packages/oauth/oauth-provider/src/replay/replay-manager.ts b/packages/oauth/oauth-provider/src/replay/replay-manager.ts index 3d8f71cb..80472b9c 100644 --- a/packages/oauth/oauth-provider/src/replay/replay-manager.ts +++ b/packages/oauth/oauth-provider/src/replay/replay-manager.ts @@ -1,8 +1,8 @@ import { ClientId } from '../client/client-id.js' import { CLIENT_ASSERTION_MAX_AGE, - DPOP_NONCE_MAX_AGE, CODE_CHALLENGE_REPLAY_TIMEFRAME, + DPOP_NONCE_MAX_AGE, JAR_MAX_AGE, } from '../constants.js' import { ReplayStore } from './replay-store.js' diff --git a/packages/oauth/oauth-provider/src/replay/replay-store-redis.ts b/packages/oauth/oauth-provider/src/replay/replay-store-redis.ts index 445e2886..c36ea787 100644 --- a/packages/oauth/oauth-provider/src/replay/replay-store-redis.ts +++ b/packages/oauth/oauth-provider/src/replay/replay-store-redis.ts @@ -1,5 +1,4 @@ import type { Redis } from 'ioredis' - import { CreateRedisOptions, createRedis } from '../lib/redis.js' import type { ReplayStore } from './replay-store.js' diff --git a/packages/oauth/oauth-provider/src/request/code.ts b/packages/oauth/oauth-provider/src/request/code.ts index 9e81c6f4..5ce9c00d 100644 --- a/packages/oauth/oauth-provider/src/request/code.ts +++ b/packages/oauth/oauth-provider/src/request/code.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { CODE_BYTES_LENGTH, CODE_PREFIX } from '../constants.js' import { randomHexId } from '../lib/util/crypto.js' diff --git a/packages/oauth/oauth-provider/src/request/request-data.ts b/packages/oauth/oauth-provider/src/request/request-data.ts index 3021fe40..a76bf65c 100644 --- a/packages/oauth/oauth-provider/src/request/request-data.ts +++ b/packages/oauth/oauth-provider/src/request/request-data.ts @@ -1,5 +1,4 @@ import { OAuthAuthorizationRequestParameters } from '@atproto/oauth-types' - import { ClientAuth } from '../client/client-auth.js' import { ClientId } from '../client/client-id.js' import { DeviceId } from '../device/device-id.js' diff --git a/packages/oauth/oauth-provider/src/request/request-id.ts b/packages/oauth/oauth-provider/src/request/request-id.ts index e0376aeb..87126bb4 100644 --- a/packages/oauth/oauth-provider/src/request/request-id.ts +++ b/packages/oauth/oauth-provider/src/request/request-id.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { REQUEST_ID_BYTES_LENGTH, REQUEST_ID_PREFIX } from '../constants.js' import { randomHexId } from '../lib/util/crypto.js' diff --git a/packages/oauth/oauth-provider/src/request/request-info.ts b/packages/oauth/oauth-provider/src/request/request-info.ts index de68880d..327ea317 100644 --- a/packages/oauth/oauth-provider/src/request/request-info.ts +++ b/packages/oauth/oauth-provider/src/request/request-info.ts @@ -1,6 +1,6 @@ import { OAuthAuthorizationRequestParameters } from '@atproto/oauth-types' -import { ClientId } from '../client/client-id.js' import { ClientAuth } from '../client/client-auth.js' +import { ClientId } from '../client/client-id.js' import { RequestId } from './request-id.js' import { RequestUri } from './request-uri.js' diff --git a/packages/oauth/oauth-provider/src/request/request-manager.ts b/packages/oauth/oauth-provider/src/request/request-manager.ts index 3635bf3b..58c7d911 100644 --- a/packages/oauth/oauth-provider/src/request/request-manager.ts +++ b/packages/oauth/oauth-provider/src/request/request-manager.ts @@ -3,7 +3,6 @@ import { OAuthAuthorizationRequestParameters, OAuthAuthorizationServerMetadata, } from '@atproto/oauth-types' - import { Account } from '../account/account.js' import { ClientAuth } from '../client/client-auth.js' import { ClientId } from '../client/client-id.js' @@ -20,22 +19,22 @@ import { InvalidAuthorizationDetailsError } from '../errors/invalid-authorizatio import { InvalidGrantError } from '../errors/invalid-grant-error.js' import { InvalidParametersError } from '../errors/invalid-parameters-error.js' import { InvalidRequestError } from '../errors/invalid-request-error.js' +import { InvalidScopeError } from '../errors/invalid-scope-error.js' import { OAuthHooks } from '../oauth-hooks.js' import { Signer } from '../signer/signer.js' import { Code, generateCode } from './code.js' import { - isRequestDataAuthorized, RequestDataAuthorized, + isRequestDataAuthorized, } from './request-data.js' import { generateRequestId } from './request-id.js' import { RequestInfo } from './request-info.js' import { RequestStore, UpdateRequestData } from './request-store.js' import { + RequestUri, decodeRequestUri, encodeRequestUri, - RequestUri, } from './request-uri.js' -import { InvalidScopeError } from '../errors/invalid-scope-error.js' export class RequestManager { constructor( diff --git a/packages/oauth/oauth-provider/src/request/request-store-memory.ts b/packages/oauth/oauth-provider/src/request/request-store-memory.ts index 243f42f2..c60c36fe 100644 --- a/packages/oauth/oauth-provider/src/request/request-store-memory.ts +++ b/packages/oauth/oauth-provider/src/request/request-store-memory.ts @@ -1,6 +1,6 @@ import { Code } from './code.js' -import { RequestId } from './request-id.js' import { RequestData } from './request-data.js' +import { RequestId } from './request-id.js' import { RequestStore } from './request-store.js' export class RequestStoreMemory implements RequestStore { diff --git a/packages/oauth/oauth-provider/src/request/request-store-redis.ts b/packages/oauth/oauth-provider/src/request/request-store-redis.ts index 35159312..0e460e3f 100644 --- a/packages/oauth/oauth-provider/src/request/request-store-redis.ts +++ b/packages/oauth/oauth-provider/src/request/request-store-redis.ts @@ -1,12 +1,11 @@ import type { Redis } from 'ioredis' - import { CreateRedisOptions, createRedis } from '../lib/redis.js' import { Code } from './code.js' import { RequestData } from './request-data.js' import { RequestId, requestIdSchema } from './request-id.js' import { RequestStore } from './request-store.js' -export type { Redis, CreateRedisOptions } +export type { CreateRedisOptions, Redis } export type ReplayStoreRedisOptions = { redis: CreateRedisOptions diff --git a/packages/oauth/oauth-provider/src/request/request-uri.ts b/packages/oauth/oauth-provider/src/request/request-uri.ts index af2a5c41..33007f7e 100644 --- a/packages/oauth/oauth-provider/src/request/request-uri.ts +++ b/packages/oauth/oauth-provider/src/request/request-uri.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { RequestId, requestIdSchema } from './request-id.js' export const REQUEST_URI_PREFIX = 'urn:ietf:params:oauth:request_uri:' diff --git a/packages/oauth/oauth-provider/src/signer/signed-token-payload.ts b/packages/oauth/oauth-provider/src/signer/signed-token-payload.ts index 1b366b7a..0d74706b 100644 --- a/packages/oauth/oauth-provider/src/signer/signed-token-payload.ts +++ b/packages/oauth/oauth-provider/src/signer/signed-token-payload.ts @@ -1,6 +1,5 @@ +import { z } from 'zod' import { jwtPayloadSchema } from '@atproto/jwk' -import z from 'zod' - import { clientIdSchema } from '../client/client-id.js' import { Simplify } from '../lib/util/type.js' import { subSchema } from '../oidc/sub.js' diff --git a/packages/oauth/oauth-provider/src/signer/signer.ts b/packages/oauth/oauth-provider/src/signer/signer.ts index ce864807..9a959ff7 100644 --- a/packages/oauth/oauth-provider/src/signer/signer.ts +++ b/packages/oauth/oauth-provider/src/signer/signer.ts @@ -7,10 +7,9 @@ import { VerifyOptions, } from '@atproto/jwk' import { - OAuthAuthorizationRequestParameters, OAuthAuthorizationDetails, + OAuthAuthorizationRequestParameters, } from '@atproto/oauth-types' - import { Client } from '../client/client.js' import { dateToEpoch } from '../lib/util/date.js' import { TokenId } from '../token/token-id.js' diff --git a/packages/oauth/oauth-provider/src/token/refresh-token.ts b/packages/oauth/oauth-provider/src/token/refresh-token.ts index 87720484..27e4568a 100644 --- a/packages/oauth/oauth-provider/src/token/refresh-token.ts +++ b/packages/oauth/oauth-provider/src/token/refresh-token.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { REFRESH_TOKEN_BYTES_LENGTH, REFRESH_TOKEN_PREFIX, diff --git a/packages/oauth/oauth-provider/src/token/token-claims.ts b/packages/oauth/oauth-provider/src/token/token-claims.ts index 5aba6ba4..4cf6ceac 100644 --- a/packages/oauth/oauth-provider/src/token/token-claims.ts +++ b/packages/oauth/oauth-provider/src/token/token-claims.ts @@ -1,6 +1,5 @@ +import { z } from 'zod' import { jwtPayloadSchema } from '@atproto/jwk' -import z from 'zod' - import { clientIdSchema } from '../client/client-id.js' import { Simplify } from '../lib/util/type.js' import { subSchema } from '../oidc/sub.js' diff --git a/packages/oauth/oauth-provider/src/token/token-data.ts b/packages/oauth/oauth-provider/src/token/token-data.ts index 19703e71..5839b2c6 100644 --- a/packages/oauth/oauth-provider/src/token/token-data.ts +++ b/packages/oauth/oauth-provider/src/token/token-data.ts @@ -2,7 +2,6 @@ import { OAuthAuthorizationDetails, OAuthAuthorizationRequestParameters, } from '@atproto/oauth-types' - import { ClientAuth } from '../client/client-auth.js' import { ClientId } from '../client/client-id.js' import { DeviceId } from '../device/device-id.js' diff --git a/packages/oauth/oauth-provider/src/token/token-id.ts b/packages/oauth/oauth-provider/src/token/token-id.ts index 321158a8..641e0663 100644 --- a/packages/oauth/oauth-provider/src/token/token-id.ts +++ b/packages/oauth/oauth-provider/src/token/token-id.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { TOKEN_ID_BYTES_LENGTH, TOKEN_ID_PREFIX } from '../constants.js' import { randomHexId } from '../lib/util/crypto.js' diff --git a/packages/oauth/oauth-provider/src/token/token-manager.ts b/packages/oauth/oauth-provider/src/token/token-manager.ts index 81d8b4bc..31946248 100644 --- a/packages/oauth/oauth-provider/src/token/token-manager.ts +++ b/packages/oauth/oauth-provider/src/token/token-manager.ts @@ -1,3 +1,4 @@ +import { createHash } from 'node:crypto' import { isSignedJwt } from '@atproto/jwk' import { CLIENT_ASSERTION_TYPE_JWT_BEARER, @@ -10,8 +11,6 @@ import { OAuthTokenResponse, OAuthTokenType, } from '@atproto/oauth-types' -import { createHash } from 'node:crypto' - import { AccessTokenType } from '../access-token/access-token-type.js' import { DeviceAccountInfo } from '../account/account-store.js' import { Account } from '../account/account.js' diff --git a/packages/oauth/oauth-provider/src/token/verify-token-claims.ts b/packages/oauth/oauth-provider/src/token/verify-token-claims.ts index caf51196..b0602190 100644 --- a/packages/oauth/oauth-provider/src/token/verify-token-claims.ts +++ b/packages/oauth/oauth-provider/src/token/verify-token-claims.ts @@ -1,5 +1,4 @@ import { OAuthAccessToken, OAuthTokenType } from '@atproto/oauth-types' - import { InvalidDpopKeyBindingError } from '../errors/invalid-dpop-key-binding-error.js' import { InvalidDpopProofError } from '../errors/invalid-dpop-proof-error.js' import { asArray } from '../lib/util/cast.js' diff --git a/packages/oauth/oauth-types/src/oauth-authorization-request-jar.ts b/packages/oauth/oauth-types/src/oauth-authorization-request-jar.ts index faea76ab..a1467c13 100644 --- a/packages/oauth/oauth-types/src/oauth-authorization-request-jar.ts +++ b/packages/oauth/oauth-types/src/oauth-authorization-request-jar.ts @@ -1,5 +1,5 @@ -import { signedJwtSchema, unsignedJwtSchema } from '@atproto/jwk' import { z } from 'zod' +import { signedJwtSchema, unsignedJwtSchema } from '@atproto/jwk' export const oauthAuthorizationRequestJarSchema = z.object({ /** diff --git a/packages/oauth/oauth-types/src/oauth-authorization-request-par.ts b/packages/oauth/oauth-types/src/oauth-authorization-request-par.ts index aa0394a2..e0435b51 100644 --- a/packages/oauth/oauth-types/src/oauth-authorization-request-par.ts +++ b/packages/oauth/oauth-types/src/oauth-authorization-request-par.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { oauthAuthorizationRequestJarSchema } from './oauth-authorization-request-jar.js' import { oauthAuthorizationRequestParametersSchema } from './oauth-authorization-request-parameters.js' diff --git a/packages/oauth/oauth-types/src/oauth-authorization-request-parameters.ts b/packages/oauth/oauth-types/src/oauth-authorization-request-parameters.ts index 965a2278..13e4bf71 100644 --- a/packages/oauth/oauth-types/src/oauth-authorization-request-parameters.ts +++ b/packages/oauth/oauth-types/src/oauth-authorization-request-parameters.ts @@ -1,6 +1,5 @@ -import { signedJwtSchema } from '@atproto/jwk' import { z } from 'zod' - +import { signedJwtSchema } from '@atproto/jwk' import { oauthAuthorizationDetailsSchema } from './oauth-authorization-details.js' import { oauthClientIdSchema } from './oauth-client-id.js' import { oauthCodeChallengeMethodSchema } from './oauth-code-challenge-method.js' diff --git a/packages/oauth/oauth-types/src/oauth-authorization-request-query.ts b/packages/oauth/oauth-types/src/oauth-authorization-request-query.ts index e61bde60..fd94dfb3 100644 --- a/packages/oauth/oauth-types/src/oauth-authorization-request-query.ts +++ b/packages/oauth/oauth-types/src/oauth-authorization-request-query.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { oauthAuthorizationRequestJarSchema } from './oauth-authorization-request-jar.js' import { oauthAuthorizationRequestParametersSchema } from './oauth-authorization-request-parameters.js' import { oauthAuthorizationRequestUriSchema } from './oauth-authorization-request-uri.js' diff --git a/packages/oauth/oauth-types/src/oauth-authorization-request-uri.ts b/packages/oauth/oauth-types/src/oauth-authorization-request-uri.ts index 21010fcf..162a6a90 100644 --- a/packages/oauth/oauth-types/src/oauth-authorization-request-uri.ts +++ b/packages/oauth/oauth-types/src/oauth-authorization-request-uri.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { oauthRequestUriSchema } from './oauth-request-uri.js' export const oauthAuthorizationRequestUriSchema = z.object({ diff --git a/packages/oauth/oauth-types/src/oauth-authorization-server-metadata.ts b/packages/oauth/oauth-types/src/oauth-authorization-server-metadata.ts index dfec6c3a..a9298f6a 100644 --- a/packages/oauth/oauth-types/src/oauth-authorization-server-metadata.ts +++ b/packages/oauth/oauth-types/src/oauth-authorization-server-metadata.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { oauthCodeChallengeMethodSchema } from './oauth-code-challenge-method.js' import { oauthIssuerIdentifierSchema } from './oauth-issuer-identifier.js' import { webUriSchema } from './uri.js' diff --git a/packages/oauth/oauth-types/src/oauth-client-credentials.ts b/packages/oauth/oauth-types/src/oauth-client-credentials.ts index a1488e92..b1a56011 100644 --- a/packages/oauth/oauth-types/src/oauth-client-credentials.ts +++ b/packages/oauth/oauth-types/src/oauth-client-credentials.ts @@ -1,8 +1,7 @@ import { z } from 'zod' import { signedJwtSchema } from '@atproto/jwk' - -import { oauthClientIdSchema } from './oauth-client-id.js' import { CLIENT_ASSERTION_TYPE_JWT_BEARER } from './constants.js' +import { oauthClientIdSchema } from './oauth-client-id.js' export const oauthClientCredentialsJwtBearerSchema = z.object({ client_id: oauthClientIdSchema, diff --git a/packages/oauth/oauth-types/src/oauth-client-id-loopback.ts b/packages/oauth/oauth-types/src/oauth-client-id-loopback.ts index 8226c1be..0aee1572 100644 --- a/packages/oauth/oauth-types/src/oauth-client-id-loopback.ts +++ b/packages/oauth/oauth-types/src/oauth-client-id-loopback.ts @@ -2,8 +2,8 @@ import { TypeOf, ZodIssueCode } from 'zod' import { oauthClientIdSchema } from './oauth-client-id.js' import { OAuthLoopbackRedirectURI, - oauthLoopbackRedirectURISchema, OAuthRedirectUri, + oauthLoopbackRedirectURISchema, } from './oauth-redirect-uri.js' import { OAuthScope, oauthScopeSchema } from './oauth-scope.js' diff --git a/packages/oauth/oauth-types/src/oauth-client-metadata.ts b/packages/oauth/oauth-types/src/oauth-client-metadata.ts index 1b005dba..e535aa17 100644 --- a/packages/oauth/oauth-types/src/oauth-client-metadata.ts +++ b/packages/oauth/oauth-types/src/oauth-client-metadata.ts @@ -1,6 +1,5 @@ -import { jwksPubSchema } from '@atproto/jwk' import { z } from 'zod' - +import { jwksPubSchema } from '@atproto/jwk' import { oauthClientIdSchema } from './oauth-client-id.js' import { oauthEndpointAuthMethod } from './oauth-endpoint-auth-method.js' import { oauthGrantTypeSchema } from './oauth-grant-type.js' diff --git a/packages/oauth/oauth-types/src/oauth-protected-resource-metadata.ts b/packages/oauth/oauth-types/src/oauth-protected-resource-metadata.ts index b61ec794..e44efa5c 100644 --- a/packages/oauth/oauth-types/src/oauth-protected-resource-metadata.ts +++ b/packages/oauth/oauth-types/src/oauth-protected-resource-metadata.ts @@ -1,5 +1,4 @@ import { z } from 'zod' - import { oauthIssuerIdentifierSchema } from './oauth-issuer-identifier.js' import { webUriSchema } from './uri.js' diff --git a/packages/oauth/oauth-types/src/oauth-redirect-uri.ts b/packages/oauth/oauth-types/src/oauth-redirect-uri.ts index aaf37cf8..25786a7c 100644 --- a/packages/oauth/oauth-types/src/oauth-redirect-uri.ts +++ b/packages/oauth/oauth-types/src/oauth-redirect-uri.ts @@ -1,7 +1,7 @@ -import { TypeOf, z, ZodIssueCode } from 'zod' +import { TypeOf, ZodIssueCode, z } from 'zod' import { - httpsUriSchema, LoopbackUri, + httpsUriSchema, loopbackUriSchema, privateUseUriSchema, } from './uri.js' diff --git a/packages/oauth/oauth-types/src/oauth-token-response.ts b/packages/oauth/oauth-types/src/oauth-token-response.ts index c2c828cb..1e055d45 100644 --- a/packages/oauth/oauth-types/src/oauth-token-response.ts +++ b/packages/oauth/oauth-types/src/oauth-token-response.ts @@ -1,6 +1,5 @@ -import { signedJwtSchema } from '@atproto/jwk' import { z } from 'zod' - +import { signedJwtSchema } from '@atproto/jwk' import { oauthAuthorizationDetailsSchema } from './oauth-authorization-details.js' import { oauthTokenTypeSchema } from './oauth-token-type.js' diff --git a/packages/oauth/oauth-types/src/uri.ts b/packages/oauth/oauth-types/src/uri.ts index d60918bf..f613a419 100644 --- a/packages/oauth/oauth-types/src/uri.ts +++ b/packages/oauth/oauth-types/src/uri.ts @@ -1,6 +1,19 @@ -import { TypeOf, z, ZodIssueCode } from 'zod' +import { TypeOf, ZodIssueCode, z } from 'zod' import { isHostnameIP, isLoopbackHost } from './util.js' +const canParseUrl = + // eslint-disable-next-line n/no-unsupported-features/node-builtins + URL.canParse ?? + // URL.canParse is not available in Node.js < 18.7.0 + ((urlStr: string): boolean => { + try { + new URL(urlStr) + return true + } catch { + return false + } + }) + /** * Valid, but potentially dangerous URL (`data:`, `file:`, `javascript:`, etc.). * @@ -10,7 +23,7 @@ export const dangerousUriSchema = z .string() .refine( (data): data is `${string}:${string}` => - data.includes(':') && URL.canParse(data), + data.includes(':') && canParseUrl(data), { message: 'Invalid URL', }, diff --git a/packages/ozone/bin/migration-create.ts b/packages/ozone/bin/migration-create.ts index b51c536c..8a483456 100644 --- a/packages/ozone/bin/migration-create.ts +++ b/packages/ozone/bin/migration-create.ts @@ -1,7 +1,7 @@ #!/usr/bin/env ts-node -import * as fs from 'fs/promises' -import * as path from 'path' +import * as fs from 'node:fs/promises' +import * as path from 'node:path' export async function main() { const now = new Date() diff --git a/packages/ozone/package.json b/packages/ozone/package.json index 45ee74b3..196e69ae 100644 --- a/packages/ozone/package.json +++ b/packages/ozone/package.json @@ -25,6 +25,9 @@ "test:updateSnapshot": "jest --updateSnapshot", "migration:create": "ts-node ./bin/migration-create.ts" }, + "engines": { + "node": ">=18.7.0" + }, "dependencies": { "@atproto/api": "workspace:^", "@atproto/common": "workspace:^", diff --git a/packages/ozone/src/api/chat/getActorMetadata.ts b/packages/ozone/src/api/chat/getActorMetadata.ts index 6bb7d86d..dbf75617 100644 --- a/packages/ozone/src/api/chat/getActorMetadata.ts +++ b/packages/ozone/src/api/chat/getActorMetadata.ts @@ -1,6 +1,6 @@ -import { Server } from '../../lexicon' -import AppContext from '../../context' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' +import { Server } from '../../lexicon' import { ids } from '../../lexicon/lexicons' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/chat/getMessageContext.ts b/packages/ozone/src/api/chat/getMessageContext.ts index d19e8ebf..a0e70855 100644 --- a/packages/ozone/src/api/chat/getMessageContext.ts +++ b/packages/ozone/src/api/chat/getMessageContext.ts @@ -1,6 +1,6 @@ -import { Server } from '../../lexicon' -import AppContext from '../../context' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' +import { Server } from '../../lexicon' import { ids } from '../../lexicon/lexicons' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/chat/index.ts b/packages/ozone/src/api/chat/index.ts index 8c8bcc0a..6520f631 100644 --- a/packages/ozone/src/api/chat/index.ts +++ b/packages/ozone/src/api/chat/index.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' import getActorMetadata from './getActorMetadata' import getMessageContext from './getMessageContext' diff --git a/packages/ozone/src/api/communication/createTemplate.ts b/packages/ozone/src/api/communication/createTemplate.ts index 4eb4be4c..e84dbdce 100644 --- a/packages/ozone/src/api/communication/createTemplate.ts +++ b/packages/ozone/src/api/communication/createTemplate.ts @@ -1,7 +1,7 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../lexicon' -import AppContext from '../../context' import { isDuplicateTemplateNameError } from '../../communication-service/util' +import { AppContext } from '../../context' +import { Server } from '../../lexicon' export default function (server: Server, ctx: AppContext) { server.tools.ozone.communication.createTemplate({ diff --git a/packages/ozone/src/api/communication/deleteTemplate.ts b/packages/ozone/src/api/communication/deleteTemplate.ts index 79a05c9a..960ddf4c 100644 --- a/packages/ozone/src/api/communication/deleteTemplate.ts +++ b/packages/ozone/src/api/communication/deleteTemplate.ts @@ -1,6 +1,6 @@ import { AuthRequiredError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.communication.deleteTemplate({ diff --git a/packages/ozone/src/api/communication/listTemplates.ts b/packages/ozone/src/api/communication/listTemplates.ts index cb4cebdd..22566be4 100644 --- a/packages/ozone/src/api/communication/listTemplates.ts +++ b/packages/ozone/src/api/communication/listTemplates.ts @@ -1,6 +1,6 @@ import { AuthRequiredError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.communication.listTemplates({ diff --git a/packages/ozone/src/api/communication/updateTemplate.ts b/packages/ozone/src/api/communication/updateTemplate.ts index f1c1877a..29557c49 100644 --- a/packages/ozone/src/api/communication/updateTemplate.ts +++ b/packages/ozone/src/api/communication/updateTemplate.ts @@ -1,7 +1,7 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../lexicon' -import AppContext from '../../context' import { isDuplicateTemplateNameError } from '../../communication-service/util' +import { AppContext } from '../../context' +import { Server } from '../../lexicon' export default function (server: Server, ctx: AppContext) { server.tools.ozone.communication.updateTemplate({ diff --git a/packages/ozone/src/api/health.ts b/packages/ozone/src/api/health.ts index e2294a07..f58dfcf5 100644 --- a/packages/ozone/src/api/health.ts +++ b/packages/ozone/src/api/health.ts @@ -1,9 +1,9 @@ -import express from 'express' +import { Router } from 'express' import { sql } from 'kysely' -import AppContext from '../context' +import { AppContext } from '../context' -export const createRouter = (ctx: AppContext): express.Router => { - const router = express.Router() +export const createRouter = (ctx: AppContext): Router => { + const router = Router() router.get('/robots.txt', function (req, res) { res.type('text/plain') diff --git a/packages/ozone/src/api/index.ts b/packages/ozone/src/api/index.ts index a649f426..3ca6e6bf 100644 --- a/packages/ozone/src/api/index.ts +++ b/packages/ozone/src/api/index.ts @@ -1,38 +1,38 @@ +import { AppContext } from '../context' import { Server } from '../lexicon' -import AppContext from '../context' -import createReport from './report/createReport' +import chat from './chat' +import createTemplate from './communication/createTemplate' +import deleteTemplate from './communication/deleteTemplate' +import listTemplates from './communication/listTemplates' +import updateTemplate from './communication/updateTemplate' +import fetchLabels from './label/fetchLabels' +import queryLabels from './label/queryLabels' +import subscribeLabels from './label/subscribeLabels' import emitEvent from './moderation/emitEvent' -import searchRepos from './moderation/searchRepos' +import getEvent from './moderation/getEvent' import adminGetRecord from './moderation/getRecord' import adminGetRecords from './moderation/getRecords' import getRepo from './moderation/getRepo' -import queryStatuses from './moderation/queryStatuses' +import getRepos from './moderation/getRepos' import queryEvents from './moderation/queryEvents' -import getEvent from './moderation/getEvent' -import queryLabels from './label/queryLabels' -import subscribeLabels from './label/subscribeLabels' -import fetchLabels from './label/fetchLabels' -import createTemplate from './communication/createTemplate' -import updateTemplate from './communication/updateTemplate' -import deleteTemplate from './communication/deleteTemplate' -import listTemplates from './communication/listTemplates' -import addMember from './team/addMember' -import updateMember from './team/updateMember' -import deleteMember from './team/deleteMember' -import listMembers from './team/listMembers' -import getConfig from './server/getConfig' -import chat from './chat' +import queryStatuses from './moderation/queryStatuses' +import searchRepos from './moderation/searchRepos' import proxied from './proxied' +import createReport from './report/createReport' +import getConfig from './server/getConfig' import setAddValues from './set/addValues' +import deleteSet from './set/deleteSet' +import setDeleteValues from './set/deleteValues' import setGetValues from './set/getValues' import querySets from './set/querySets' import upsertSet from './set/upsertSet' -import setDeleteValues from './set/deleteValues' -import deleteSet from './set/deleteSet' -import getRepos from './moderation/getRepos' import listOptions from './setting/listOptions' import removeOptions from './setting/removeOptions' import upsertOption from './setting/upsertOption' +import addMember from './team/addMember' +import deleteMember from './team/deleteMember' +import listMembers from './team/listMembers' +import updateMember from './team/updateMember' export * as health from './health' diff --git a/packages/ozone/src/api/label/fetchLabels.ts b/packages/ozone/src/api/label/fetchLabels.ts index b9a6fa55..47b1f3ea 100644 --- a/packages/ozone/src/api/label/fetchLabels.ts +++ b/packages/ozone/src/api/label/fetchLabels.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.temp.fetchLabels({ diff --git a/packages/ozone/src/api/label/queryLabels.ts b/packages/ozone/src/api/label/queryLabels.ts index 38d83020..4420fc21 100644 --- a/packages/ozone/src/api/label/queryLabels.ts +++ b/packages/ozone/src/api/label/queryLabels.ts @@ -1,7 +1,7 @@ -import { Server } from '../../lexicon' -import AppContext from '../../context' -import { InvalidRequestError } from '@atproto/xrpc-server' import { sql } from 'kysely' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' +import { Server } from '../../lexicon' export default function (server: Server, ctx: AppContext) { server.com.atproto.label.queryLabels(async ({ params }) => { diff --git a/packages/ozone/src/api/label/subscribeLabels.ts b/packages/ozone/src/api/label/subscribeLabels.ts index 3ff196e3..5d8f0d22 100644 --- a/packages/ozone/src/api/label/subscribeLabels.ts +++ b/packages/ozone/src/api/label/subscribeLabels.ts @@ -1,7 +1,7 @@ -import { Server } from '../../lexicon' -import AppContext from '../../context' -import Outbox from '../../sequencer/outbox' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' +import { Server } from '../../lexicon' +import { Outbox } from '../../sequencer/outbox' export default function (server: Server, ctx: AppContext) { server.com.atproto.label.subscribeLabels(async function* ({ diff --git a/packages/ozone/src/api/moderation/emitEvent.ts b/packages/ozone/src/api/moderation/emitEvent.ts index 47b421ad..85a5fe3d 100644 --- a/packages/ozone/src/api/moderation/emitEvent.ts +++ b/packages/ozone/src/api/moderation/emitEvent.ts @@ -1,7 +1,9 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AdminTokenOutput, ModeratorOutput } from '../../auth-verifier' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' import { + ModEventTag, isModEventAcknowledge, isModEventDivert, isModEventEmail, @@ -12,17 +14,15 @@ import { isModEventTag, isModEventTakedown, isModEventUnmuteReporter, - ModEventTag, } from '../../lexicon/types/tools/ozone/moderation/defs' import { HandlerInput } from '../../lexicon/types/tools/ozone/moderation/emitEvent' import { subjectFromInput } from '../../mod-service/subject' -import { TagService } from '../../tag-service' -import { retryHttp } from '../../util' -import { ModeratorOutput, AdminTokenOutput } from '../../auth-verifier' -import { SettingService } from '../../setting/service' import { ProtectedTagSettingKey } from '../../setting/constants' +import { SettingService } from '../../setting/service' import { ProtectedTagSetting } from '../../setting/types' +import { TagService } from '../../tag-service' import { getTagForReport } from '../../tag-service/util' +import { retryHttp } from '../../util' const handleModerationEvent = async ({ ctx, diff --git a/packages/ozone/src/api/moderation/getEvent.ts b/packages/ozone/src/api/moderation/getEvent.ts index 30a00953..70b8ecbd 100644 --- a/packages/ozone/src/api/moderation/getEvent.ts +++ b/packages/ozone/src/api/moderation/getEvent.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.moderation.getEvent({ diff --git a/packages/ozone/src/api/moderation/getRecord.ts b/packages/ozone/src/api/moderation/getRecord.ts index ffdb9110..a2cec3a0 100644 --- a/packages/ozone/src/api/moderation/getRecord.ts +++ b/packages/ozone/src/api/moderation/getRecord.ts @@ -1,8 +1,8 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../lexicon' -import AppContext from '../../context' -import { addAccountInfoToRepoView, getPdsAccountInfos } from '../util' import { AtUri } from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' +import { Server } from '../../lexicon' +import { addAccountInfoToRepoView, getPdsAccountInfos } from '../util' export default function (server: Server, ctx: AppContext) { server.tools.ozone.moderation.getRecord({ diff --git a/packages/ozone/src/api/moderation/getRecords.ts b/packages/ozone/src/api/moderation/getRecords.ts index 1596b5c9..5f9d4b2c 100644 --- a/packages/ozone/src/api/moderation/getRecords.ts +++ b/packages/ozone/src/api/moderation/getRecords.ts @@ -1,7 +1,7 @@ -import { Server } from '../../lexicon' -import AppContext from '../../context' -import { addAccountInfoToRepoView, getPdsAccountInfos } from '../util' import { AtUri } from '@atproto/syntax' +import { AppContext } from '../../context' +import { Server } from '../../lexicon' +import { addAccountInfoToRepoView, getPdsAccountInfos } from '../util' export default function (server: Server, ctx: AppContext) { server.tools.ozone.moderation.getRecords({ diff --git a/packages/ozone/src/api/moderation/getRepo.ts b/packages/ozone/src/api/moderation/getRepo.ts index 8899eaa5..87d73be3 100644 --- a/packages/ozone/src/api/moderation/getRepo.ts +++ b/packages/ozone/src/api/moderation/getRepo.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' import { addAccountInfoToRepoViewDetail, getPdsAccountInfos } from '../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/moderation/getRepos.ts b/packages/ozone/src/api/moderation/getRepos.ts index fb810e62..eb1fe948 100644 --- a/packages/ozone/src/api/moderation/getRepos.ts +++ b/packages/ozone/src/api/moderation/getRepos.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' import { addAccountInfoToRepoViewDetail, getPdsAccountInfos } from '../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/moderation/queryEvents.ts b/packages/ozone/src/api/moderation/queryEvents.ts index 9f8f58f3..387bcfe5 100644 --- a/packages/ozone/src/api/moderation/queryEvents.ts +++ b/packages/ozone/src/api/moderation/queryEvents.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' import { getEventType } from '../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/moderation/queryStatuses.ts b/packages/ozone/src/api/moderation/queryStatuses.ts index a2f77560..9053aa96 100644 --- a/packages/ozone/src/api/moderation/queryStatuses.ts +++ b/packages/ozone/src/api/moderation/queryStatuses.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.moderation.queryStatuses({ diff --git a/packages/ozone/src/api/moderation/searchRepos.ts b/packages/ozone/src/api/moderation/searchRepos.ts index 50a6062d..62636a4d 100644 --- a/packages/ozone/src/api/moderation/searchRepos.ts +++ b/packages/ozone/src/api/moderation/searchRepos.ts @@ -1,6 +1,6 @@ -import { Server } from '../../lexicon' -import AppContext from '../../context' import { mapDefined } from '@atproto/common' +import { AppContext } from '../../context' +import { Server } from '../../lexicon' import { ids } from '../../lexicon/lexicons' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/proxied.ts b/packages/ozone/src/api/proxied.ts index fdfe9135..83c120b1 100644 --- a/packages/ozone/src/api/proxied.ts +++ b/packages/ozone/src/api/proxied.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../context' import { Server } from '../lexicon' -import AppContext from '../context' import { ids } from '../lexicon/lexicons' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/report/createReport.ts b/packages/ozone/src/api/report/createReport.ts index ae40cf0b..c4a3e17d 100644 --- a/packages/ozone/src/api/report/createReport.ts +++ b/packages/ozone/src/api/report/createReport.ts @@ -1,15 +1,15 @@ +import { ForbiddenError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' -import { getReasonType } from '../util' -import { subjectFromInput } from '../../mod-service/subject' import { REASONAPPEAL, ReasonType, } from '../../lexicon/types/com/atproto/moderation/defs' -import { ForbiddenError } from '@atproto/xrpc-server' -import { TagService } from '../../tag-service' import { ModerationService } from '../../mod-service' +import { subjectFromInput } from '../../mod-service/subject' +import { TagService } from '../../tag-service' import { getTagForReport } from '../../tag-service/util' +import { getReasonType } from '../util' export default function (server: Server, ctx: AppContext) { server.com.atproto.moderation.createReport({ diff --git a/packages/ozone/src/api/server/getConfig.ts b/packages/ozone/src/api/server/getConfig.ts index fd825f2f..12b1b7d1 100644 --- a/packages/ozone/src/api/server/getConfig.ts +++ b/packages/ozone/src/api/server/getConfig.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../context' import { Server, TOOLS_OZONE_TEAM } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.server.getConfig({ diff --git a/packages/ozone/src/api/set/addValues.ts b/packages/ozone/src/api/set/addValues.ts index 92f65804..1d71ec60 100644 --- a/packages/ozone/src/api/set/addValues.ts +++ b/packages/ozone/src/api/set/addValues.ts @@ -1,6 +1,6 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.set.addValues({ diff --git a/packages/ozone/src/api/set/deleteSet.ts b/packages/ozone/src/api/set/deleteSet.ts index e6de898f..8382ab13 100644 --- a/packages/ozone/src/api/set/deleteSet.ts +++ b/packages/ozone/src/api/set/deleteSet.ts @@ -1,6 +1,6 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.set.deleteSet({ diff --git a/packages/ozone/src/api/set/deleteValues.ts b/packages/ozone/src/api/set/deleteValues.ts index d76eac05..3c40cb48 100644 --- a/packages/ozone/src/api/set/deleteValues.ts +++ b/packages/ozone/src/api/set/deleteValues.ts @@ -1,6 +1,6 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.set.deleteValues({ diff --git a/packages/ozone/src/api/set/getValues.ts b/packages/ozone/src/api/set/getValues.ts index 4ca1878f..13f096d4 100644 --- a/packages/ozone/src/api/set/getValues.ts +++ b/packages/ozone/src/api/set/getValues.ts @@ -1,6 +1,6 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.set.getValues({ diff --git a/packages/ozone/src/api/set/querySets.ts b/packages/ozone/src/api/set/querySets.ts index 303cea20..f2f44de6 100644 --- a/packages/ozone/src/api/set/querySets.ts +++ b/packages/ozone/src/api/set/querySets.ts @@ -1,6 +1,6 @@ import { AuthRequiredError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.set.querySets({ diff --git a/packages/ozone/src/api/set/upsertSet.ts b/packages/ozone/src/api/set/upsertSet.ts index 572736f0..e57a06fa 100644 --- a/packages/ozone/src/api/set/upsertSet.ts +++ b/packages/ozone/src/api/set/upsertSet.ts @@ -1,6 +1,6 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.set.upsertSet({ diff --git a/packages/ozone/src/api/setting/listOptions.ts b/packages/ozone/src/api/setting/listOptions.ts index fbaaa0c0..0f14636a 100644 --- a/packages/ozone/src/api/setting/listOptions.ts +++ b/packages/ozone/src/api/setting/listOptions.ts @@ -1,6 +1,6 @@ import { AuthRequiredError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.setting.listOptions({ diff --git a/packages/ozone/src/api/setting/removeOptions.ts b/packages/ozone/src/api/setting/removeOptions.ts index 65b15590..df42c6af 100644 --- a/packages/ozone/src/api/setting/removeOptions.ts +++ b/packages/ozone/src/api/setting/removeOptions.ts @@ -1,7 +1,7 @@ import { AuthRequiredError } from '@atproto/xrpc-server' -import { Server } from '../../lexicon' -import AppContext from '../../context' +import { AppContext } from '../../context' import { Member } from '../../db/schema/member' +import { Server } from '../../lexicon' export default function (server: Server, ctx: AppContext) { server.tools.ozone.setting.removeOptions({ diff --git a/packages/ozone/src/api/setting/upsertOption.ts b/packages/ozone/src/api/setting/upsertOption.ts index 408e9b32..1e43740a 100644 --- a/packages/ozone/src/api/setting/upsertOption.ts +++ b/packages/ozone/src/api/setting/upsertOption.ts @@ -1,11 +1,11 @@ -import { AuthRequiredError } from '@atproto/xrpc-server' -import { Server } from '../../lexicon' -import AppContext from '../../context' -import { AdminTokenOutput, ModeratorOutput } from '../../auth-verifier' -import { SettingService } from '../../setting/service' -import { Member } from '../../db/schema/member' -import { ToolsOzoneTeamDefs } from '@atproto/api' import assert from 'node:assert' +import { ToolsOzoneTeamDefs } from '@atproto/api' +import { AuthRequiredError } from '@atproto/xrpc-server' +import { AdminTokenOutput, ModeratorOutput } from '../../auth-verifier' +import { AppContext } from '../../context' +import { Member } from '../../db/schema/member' +import { Server } from '../../lexicon' +import { SettingService } from '../../setting/service' import { settingValidators } from '../../setting/validators' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/team/addMember.ts b/packages/ozone/src/api/team/addMember.ts index aebe3e90..1a5e6f7e 100644 --- a/packages/ozone/src/api/team/addMember.ts +++ b/packages/ozone/src/api/team/addMember.ts @@ -1,6 +1,6 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' import { getMemberRole } from '../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/team/deleteMember.ts b/packages/ozone/src/api/team/deleteMember.ts index 9976ee88..1064b2a5 100644 --- a/packages/ozone/src/api/team/deleteMember.ts +++ b/packages/ozone/src/api/team/deleteMember.ts @@ -1,6 +1,6 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.team.deleteMember({ diff --git a/packages/ozone/src/api/team/listMembers.ts b/packages/ozone/src/api/team/listMembers.ts index 4c183a54..5cc6f6b9 100644 --- a/packages/ozone/src/api/team/listMembers.ts +++ b/packages/ozone/src/api/team/listMembers.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' export default function (server: Server, ctx: AppContext) { server.tools.ozone.team.listMembers({ diff --git a/packages/ozone/src/api/team/updateMember.ts b/packages/ozone/src/api/team/updateMember.ts index 846b418f..e5a499af 100644 --- a/packages/ozone/src/api/team/updateMember.ts +++ b/packages/ozone/src/api/team/updateMember.ts @@ -1,6 +1,6 @@ import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../context' import { Server } from '../../lexicon' -import AppContext from '../../context' import { getMemberRole } from '../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/ozone/src/api/util.ts b/packages/ozone/src/api/util.ts index 30cd23d1..11aba4ad 100644 --- a/packages/ozone/src/api/util.ts +++ b/packages/ozone/src/api/util.ts @@ -1,32 +1,32 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../context' +import { Member } from '../db/schema/member' +import { ModerationEvent } from '../db/schema/moderation_event' +import { ids } from '../lexicon/lexicons' +import { AccountView } from '../lexicon/types/com/atproto/admin/defs' import { InputSchema as ReportInput } from '../lexicon/types/com/atproto/moderation/createReport' import { - REASONOTHER, - REASONSPAM, + REASONAPPEAL, REASONMISLEADING, + REASONOTHER, REASONRUDE, REASONSEXUAL, + REASONSPAM, REASONVIOLATION, - REASONAPPEAL, } from '../lexicon/types/com/atproto/moderation/defs' -import { AccountView } from '../lexicon/types/com/atproto/admin/defs' import { - RepoView, - RepoViewDetail, REVIEWCLOSED, REVIEWESCALATED, REVIEWOPEN, + RepoView, + RepoViewDetail, } from '../lexicon/types/tools/ozone/moderation/defs' -import { ModerationEvent } from '../db/schema/moderation_event' -import { ModerationSubjectStatusRow } from '../mod-service/types' -import AppContext from '../context' -import { Member } from '../db/schema/member' import { ROLEADMIN, ROLEMODERATOR, ROLETRIAGE, } from '../lexicon/types/tools/ozone/team/defs' -import { ids } from '../lexicon/lexicons' +import { ModerationSubjectStatusRow } from '../mod-service/types' export const getPdsAccountInfos = async ( ctx: AppContext, diff --git a/packages/ozone/src/api/well-known.ts b/packages/ozone/src/api/well-known.ts index 17ee9ad3..b3b9c94d 100644 --- a/packages/ozone/src/api/well-known.ts +++ b/packages/ozone/src/api/well-known.ts @@ -1,8 +1,8 @@ -import express from 'express' -import AppContext from '../context' +import { Router } from 'express' +import { AppContext } from '../context' -export const createRouter = (ctx: AppContext): express.Router => { - const router = express.Router() +export const createRouter = (ctx: AppContext): Router => { + const router = Router() router.get('/.well-known/did.json', (_req, res) => { const hostname = diff --git a/packages/ozone/src/communication-service/template.ts b/packages/ozone/src/communication-service/template.ts index f7ffd6c0..7cf9b273 100644 --- a/packages/ozone/src/communication-service/template.ts +++ b/packages/ozone/src/communication-service/template.ts @@ -1,5 +1,5 @@ -import Database from '../db' import { Selectable } from 'kysely' +import { Database } from '../db' import { CommunicationTemplate } from '../db/schema/communication_template' import { TemplateView } from '../lexicon/types/tools/ozone/communication/defs' diff --git a/packages/ozone/src/config/config.ts b/packages/ozone/src/config/config.ts index 808163c1..1ce9b017 100644 --- a/packages/ozone/src/config/config.ts +++ b/packages/ozone/src/config/config.ts @@ -1,6 +1,6 @@ import assert from 'node:assert' -import { OzoneEnvironment } from './env' import { DAY, HOUR } from '@atproto/common' +import { OzoneEnvironment } from './env' // off-config but still from env: // logging: LOG_LEVEL, LOG_SYSTEMS, LOG_ENABLED, LOG_DESTINATION diff --git a/packages/ozone/src/config/secrets.ts b/packages/ozone/src/config/secrets.ts index 659e4506..70910477 100644 --- a/packages/ozone/src/config/secrets.ts +++ b/packages/ozone/src/config/secrets.ts @@ -1,4 +1,4 @@ -import assert from 'assert' +import assert from 'node:assert' import { OzoneEnvironment } from './env' export const envToSecrets = (env: OzoneEnvironment): OzoneSecrets => { diff --git a/packages/ozone/src/context.ts b/packages/ozone/src/context.ts index 71b8c5b8..8cdf09a4 100644 --- a/packages/ozone/src/context.ts +++ b/packages/ozone/src/context.ts @@ -1,33 +1,33 @@ -import express from 'express' +import assert from 'node:assert' import * as plc from '@did-plc/lib' -import { DidCache, IdResolver, MemoryCache } from '@atproto/identity' +import express from 'express' import { AtpAgent } from '@atproto/api' import { Keypair, Secp256k1Keypair } from '@atproto/crypto' +import { DidCache, IdResolver, MemoryCache } from '@atproto/identity' import { createServiceAuthHeaders } from '@atproto/xrpc-server' -import { Database } from './db' -import { OzoneConfig, OzoneSecrets } from './config' -import { ModerationService, ModerationServiceCreator } from './mod-service' +import { AuthVerifier } from './auth-verifier' import { BackgroundQueue } from './background' -import assert from 'assert' -import { EventPusher } from './daemon' -import Sequencer from './sequencer/sequencer' import { CommunicationTemplateService, CommunicationTemplateServiceCreator, } from './communication-service/template' +import { OzoneConfig, OzoneSecrets } from './config' +import { EventPusher } from './daemon' import { BlobDiverter } from './daemon/blob-diverter' -import { AuthVerifier } from './auth-verifier' +import { Database } from './db' import { ImageInvalidator } from './image-invalidator' -import { TeamService, TeamServiceCreator } from './team' -import { - defaultLabelerHeader, - getSigningKeyId, - LABELER_HEADER_NAME, - ParsedLabelers, - parseLabelerHeader, -} from './util' +import { ModerationService, ModerationServiceCreator } from './mod-service' +import { Sequencer } from './sequencer/sequencer' import { SetService, SetServiceCreator } from './set/service' import { SettingService, SettingServiceCreator } from './setting/service' +import { TeamService, TeamServiceCreator } from './team' +import { + LABELER_HEADER_NAME, + ParsedLabelers, + defaultLabelerHeader, + getSigningKeyId, + parseLabelerHeader, +} from './util' export type AppContextOptions = { db: Database @@ -289,4 +289,3 @@ export class AppContext { return parsed } } -export default AppContext diff --git a/packages/ozone/src/daemon/blob-diverter.ts b/packages/ozone/src/daemon/blob-diverter.ts index 42357dba..87d1d14c 100644 --- a/packages/ozone/src/daemon/blob-diverter.ts +++ b/packages/ozone/src/daemon/blob-diverter.ts @@ -1,18 +1,17 @@ +import { Readable } from 'node:stream' +import { finished, pipeline } from 'node:stream/promises' +import { CID } from 'multiformats/cid' +import * as undici from 'undici' import { - createDecoders, - getPdsEndpoint, VerifyCidTransform, allFulfilled, + createDecoders, + getPdsEndpoint, } from '@atproto/common' import { IdResolver } from '@atproto/identity' import { ResponseType, XRPCError } from '@atproto/xrpc' -import { CID } from 'multiformats/cid' -import { Readable } from 'node:stream' -import { finished, pipeline } from 'node:stream/promises' -import * as undici from 'undici' - import { BlobDivertConfig } from '../config' -import Database from '../db' +import { Database } from '../db' import { retryHttp } from '../util' export class BlobDiverter { diff --git a/packages/ozone/src/daemon/context.ts b/packages/ozone/src/daemon/context.ts index 722ffa46..86e5fad8 100644 --- a/packages/ozone/src/daemon/context.ts +++ b/packages/ozone/src/daemon/context.ts @@ -1,16 +1,16 @@ -import { Keypair, Secp256k1Keypair } from '@atproto/crypto' -import { createServiceAuthHeaders } from '@atproto/xrpc-server' -import { IdResolver } from '@atproto/identity' import { AtpAgent } from '@atproto/api' +import { allFulfilled } from '@atproto/common' +import { Keypair, Secp256k1Keypair } from '@atproto/crypto' +import { IdResolver } from '@atproto/identity' +import { createServiceAuthHeaders } from '@atproto/xrpc-server' +import { BackgroundQueue } from '../background' import { OzoneConfig, OzoneSecrets } from '../config' import { Database } from '../db' +import { ModerationService } from '../mod-service' +import { getSigningKeyId } from '../util' import { EventPusher } from './event-pusher' import { EventReverser } from './event-reverser' -import { ModerationService } from '../mod-service' -import { BackgroundQueue } from '../background' -import { getSigningKeyId } from '../util' import { MaterializedViewRefresher } from './materialized-view-refresher' -import { allFulfilled } from '@atproto/common' export type DaemonContextOptions = { db: Database @@ -136,5 +136,3 @@ export class DaemonContext { } } } - -export default DaemonContext diff --git a/packages/ozone/src/daemon/event-pusher.ts b/packages/ozone/src/daemon/event-pusher.ts index c423eef9..17508692 100644 --- a/packages/ozone/src/daemon/event-pusher.ts +++ b/packages/ozone/src/daemon/event-pusher.ts @@ -1,14 +1,14 @@ import assert from 'node:assert' +import { Insertable, Selectable } from 'kysely' import { AtpAgent } from '@atproto/api' import { SECOND } from '@atproto/common' -import Database from '../db' -import { RepoPushEventType } from '../db/schema/repo_push_event' -import { retryHttp } from '../util' -import { dbLogger } from '../logger' -import { InputSchema } from '../lexicon/types/com/atproto/admin/updateSubjectStatus' +import { Database } from '../db' import { BlobPushEvent } from '../db/schema/blob_push_event' -import { Insertable, Selectable } from 'kysely' +import { RepoPushEventType } from '../db/schema/repo_push_event' import { ids } from '../lexicon/lexicons' +import { InputSchema } from '../lexicon/types/com/atproto/admin/updateSubjectStatus' +import { dbLogger } from '../logger' +import { retryHttp } from '../util' type EventSubject = InputSchema['subject'] diff --git a/packages/ozone/src/daemon/event-reverser.ts b/packages/ozone/src/daemon/event-reverser.ts index 3146843a..e913b632 100644 --- a/packages/ozone/src/daemon/event-reverser.ts +++ b/packages/ozone/src/daemon/event-reverser.ts @@ -1,7 +1,7 @@ import { MINUTE } from '@atproto/common' +import { Database } from '../db' import { dbLogger } from '../logger' import { ModerationServiceCreator, ReversalSubject } from '../mod-service' -import Database from '../db' export class EventReverser { destroyed = false diff --git a/packages/ozone/src/daemon/index.ts b/packages/ozone/src/daemon/index.ts index e29305ba..86e038ee 100644 --- a/packages/ozone/src/daemon/index.ts +++ b/packages/ozone/src/daemon/index.ts @@ -1,6 +1,6 @@ import { OzoneConfig, OzoneSecrets } from '../config' -import DaemonContext from './context' import { AppContextOptions } from '../context' +import { DaemonContext } from './context' export { EventPusher } from './event-pusher' export { BlobDiverter } from './blob-diverter' diff --git a/packages/ozone/src/daemon/materialized-view-refresher.ts b/packages/ozone/src/daemon/materialized-view-refresher.ts index 22c84cd8..a4ef689b 100644 --- a/packages/ozone/src/daemon/materialized-view-refresher.ts +++ b/packages/ozone/src/daemon/materialized-view-refresher.ts @@ -1,5 +1,5 @@ -import { MINUTE } from '@atproto/common' import { sql } from 'kysely' +import { MINUTE } from '@atproto/common' import { BackgroundQueue, PeriodicBackgroundTask } from '../background' export class MaterializedViewRefresher extends PeriodicBackgroundTask { diff --git a/packages/ozone/src/db/index.ts b/packages/ozone/src/db/index.ts index b5b66542..780a6393 100644 --- a/packages/ozone/src/db/index.ts +++ b/packages/ozone/src/db/index.ts @@ -1,23 +1,23 @@ -import assert from 'assert' +import assert from 'node:assert' +import { EventEmitter } from 'node:stream' import { Kysely, - PostgresDialect, - Migrator, KyselyPlugin, + Migrator, PluginTransformQueryArgs, PluginTransformResultArgs, - RootOperationNode, + PostgresDialect, QueryResult, + RootOperationNode, UnknownRow, } from 'kysely' -import TypedEmitter from 'typed-emitter' import { Pool as PgPool, types as pgTypes } from 'pg' -import DatabaseSchema, { DatabaseSchemaType } from './schema' -import { PgOptions } from './types' +import TypedEmitter from 'typed-emitter' import { dbLogger } from '../logger' -import { EventEmitter } from 'stream' import * as migrations from './migrations' import { CtxMigrationProvider } from './migrations/provider' +import { DatabaseSchema, DatabaseSchemaType } from './schema' +import { PgOptions } from './types' export class Database { pool: PgPool diff --git a/packages/ozone/src/db/migrations/20241220T144630860Z-stats-materialized-views.ts b/packages/ozone/src/db/migrations/20241220T144630860Z-stats-materialized-views.ts index b961e61a..9f31fa32 100644 --- a/packages/ozone/src/db/migrations/20241220T144630860Z-stats-materialized-views.ts +++ b/packages/ozone/src/db/migrations/20241220T144630860Z-stats-materialized-views.ts @@ -1,12 +1,10 @@ import { Kysely, sql } from 'kysely' - import { REASONAPPEAL } from '../../lexicon/types/com/atproto/moderation/defs' -import { DatabaseSchemaType } from '../schema' - import { REVIEWESCALATED, REVIEWOPEN, } from '../../lexicon/types/tools/ozone/moderation/defs' +import { DatabaseSchemaType } from '../schema' import * as modEvent from '../schema/moderation_event' import * as modStatus from '../schema/moderation_subject_status' import * as recordEventsStats from '../schema/record_events_stats' diff --git a/packages/ozone/src/db/pagination.ts b/packages/ozone/src/db/pagination.ts index 9149a42f..cba67db3 100644 --- a/packages/ozone/src/db/pagination.ts +++ b/packages/ozone/src/db/pagination.ts @@ -1,4 +1,4 @@ -import { sql, DynamicModule } from 'kysely' +import { DynamicModule, sql } from 'kysely' import { InvalidRequestError } from '@atproto/xrpc-server' import { AnyQb, DbRef } from './types' diff --git a/packages/ozone/src/db/schema/index.ts b/packages/ozone/src/db/schema/index.ts index 36a1b3ae..d1364c68 100644 --- a/packages/ozone/src/db/schema/index.ts +++ b/packages/ozone/src/db/schema/index.ts @@ -1,20 +1,19 @@ import { Kysely } from 'kysely' -import * as modEvent from './moderation_event' -import * as modSubjectStatus from './moderation_subject_status' -import * as repoPushEvent from './repo_push_event' -import * as recordPushEvent from './record_push_event' -import * as blobPushEvent from './blob_push_event' -import * as label from './label' -import * as signingKey from './signing_key' -import * as communicationTemplate from './communication_template' -import * as set from './ozone_set' -import * as member from './member' -import * as setting from './setting' - -import * as recordEventsStats from './record_events_stats' import * as accountEventsStats from './account_events_stats' import * as accountRecordEventsStats from './account_record_events_stats' import * as accountRecordStatusStats from './account_record_status_stats' +import * as blobPushEvent from './blob_push_event' +import * as communicationTemplate from './communication_template' +import * as label from './label' +import * as member from './member' +import * as modEvent from './moderation_event' +import * as modSubjectStatus from './moderation_subject_status' +import * as set from './ozone_set' +import * as recordEventsStats from './record_events_stats' +import * as recordPushEvent from './record_push_event' +import * as repoPushEvent from './repo_push_event' +import * as setting from './setting' +import * as signingKey from './signing_key' export type DatabaseSchemaType = modEvent.PartialDB & modSubjectStatus.PartialDB & diff --git a/packages/ozone/src/db/schema/moderation_subject_status.ts b/packages/ozone/src/db/schema/moderation_subject_status.ts index a4d7ad1a..5869d863 100644 --- a/packages/ozone/src/db/schema/moderation_subject_status.ts +++ b/packages/ozone/src/db/schema/moderation_subject_status.ts @@ -1,9 +1,9 @@ import { Generated } from 'kysely' import { REVIEWCLOSED, - REVIEWOPEN, REVIEWESCALATED, REVIEWNONE, + REVIEWOPEN, } from '../../lexicon/types/tools/ozone/moderation/defs' export const subjectStatusTableName = 'moderation_subject_status' diff --git a/packages/ozone/src/db/types.ts b/packages/ozone/src/db/types.ts index b7a2b9bb..cc75dc63 100644 --- a/packages/ozone/src/db/types.ts +++ b/packages/ozone/src/db/types.ts @@ -1,5 +1,5 @@ -import { Pool as PgPool } from 'pg' import { DynamicModule, RawBuilder, SelectQueryBuilder, sql } from 'kysely' +import { Pool as PgPool } from 'pg' export type DbRef = RawBuilder | ReturnType<DynamicModule['ref']> diff --git a/packages/ozone/src/error.ts b/packages/ozone/src/error.ts index a4de90f5..65fbf17b 100644 --- a/packages/ozone/src/error.ts +++ b/packages/ozone/src/error.ts @@ -1,5 +1,5 @@ -import { XRPCError } from '@atproto/xrpc-server' import { ErrorRequestHandler } from 'express' +import { XRPCError } from '@atproto/xrpc-server' import { httpLogger as log } from './logger' export const handler: ErrorRequestHandler = (err, _req, res, next) => { diff --git a/packages/ozone/src/index.ts b/packages/ozone/src/index.ts index 743f181b..65871838 100644 --- a/packages/ozone/src/index.ts +++ b/packages/ozone/src/index.ts @@ -1,23 +1,23 @@ -import express from 'express' -import http from 'http' -import { AddressInfo } from 'net' -import events from 'events' -import { createHttpTerminator, HttpTerminator } from 'http-terminator' -import cors from 'cors' +import events from 'node:events' +import http from 'node:http' +import { AddressInfo } from 'node:net' import compression from 'compression' +import cors from 'cors' +import express from 'express' +import { HttpTerminator, createHttpTerminator } from 'http-terminator' import { DAY, SECOND } from '@atproto/common' import API, { health, wellKnown } from './api' -import * as error from './error' -import { dbLogger, loggerMiddleware } from './logger' import { OzoneConfig, OzoneSecrets } from './config' -import { createServer } from './lexicon' -import AppContext, { AppContextOptions } from './context' +import { AppContext, AppContextOptions } from './context' import { Member } from './db/schema/member' +import * as error from './error' +import { createServer } from './lexicon' +import { dbLogger, loggerMiddleware } from './logger' export * from './config' export { type ImageInvalidator } from './image-invalidator' export { Database } from './db' -export { OzoneDaemon, EventPusher, EventReverser } from './daemon' +export { EventPusher, EventReverser, OzoneDaemon } from './daemon' export { AppContext } from './context' export { httpLogger } from './logger' diff --git a/packages/ozone/src/logger.ts b/packages/ozone/src/logger.ts index 7451551a..41b1a095 100644 --- a/packages/ozone/src/logger.ts +++ b/packages/ozone/src/logger.ts @@ -1,5 +1,5 @@ import { type IncomingMessage } from 'node:http' -import pinoHttp, { stdSerializers } from 'pino-http' +import { pinoHttp, stdSerializers } from 'pino-http' import { obfuscateHeaders, subsystemLogger } from '@atproto/common' export const dbLogger: ReturnType<typeof subsystemLogger> = diff --git a/packages/ozone/src/mod-service/index.ts b/packages/ozone/src/mod-service/index.ts index b298f28a..044e65e5 100644 --- a/packages/ozone/src/mod-service/index.ts +++ b/packages/ozone/src/mod-service/index.ts @@ -1,36 +1,56 @@ import net from 'node:net' import { Insertable, sql } from 'kysely' import { CID } from 'multiformats/cid' -import { AtUri, INVALID_HANDLE } from '@atproto/syntax' -import { InvalidRequestError } from '@atproto/xrpc-server' +import { AtpAgent } from '@atproto/api' import { addHoursToDate, chunkArray } from '@atproto/common' import { Keypair } from '@atproto/crypto' import { IdResolver } from '@atproto/identity' -import { AtpAgent } from '@atproto/api' +import { AtUri, INVALID_HANDLE } from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { getReviewState } from '../api/util' +import { BackgroundQueue } from '../background' +import { OzoneConfig } from '../config' +import { EventPusher } from '../daemon' import { Database } from '../db' -import { AuthHeaders, ModerationViews } from './views' +import { StatusKeyset, TimeIdKeyset, paginate } from '../db/pagination' +import { BlobPushEvent } from '../db/schema/blob_push_event' +import { LabelChannel } from '../db/schema/label' +import { ModerationEvent } from '../db/schema/moderation_event' +import { jsonb } from '../db/types' +import { ImageInvalidator } from '../image-invalidator' +import { ids } from '../lexicon/lexicons' +import { RepoBlobRef, RepoRef } from '../lexicon/types/com/atproto/admin/defs' +import { Label } from '../lexicon/types/com/atproto/label/defs' import { Main as StrongRef } from '../lexicon/types/com/atproto/repo/strongRef' import { + REVIEWESCALATED, + REVIEWOPEN, + isAccountEvent, + isIdentityEvent, + isModEventAcknowledge, isModEventComment, + isModEventEmail, isModEventLabel, isModEventMute, isModEventReport, - isModEventTakedown, - isModEventEmail, isModEventTag, - isAccountEvent, - isIdentityEvent, + isModEventTakedown, isRecordEvent, - REVIEWESCALATED, - REVIEWOPEN, - isModEventAcknowledge, } from '../lexicon/types/tools/ozone/moderation/defs' -import { RepoRef, RepoBlobRef } from '../lexicon/types/com/atproto/admin/defs' +import { QueryParams as QueryStatusParams } from '../lexicon/types/tools/ozone/moderation/queryStatuses' +import { httpLogger as log } from '../logger' +import { LABELER_HEADER_NAME, ParsedLabelers } from '../util' import { adjustModerationSubjectStatus, getStatusIdentifierFromSubject, moderationSubjectStatusQueryBuilder, } from './status' +import { + ModSubject, + RecordSubject, + RepoSubject, + subjectFromStatusRow, +} from './subject' import { ModEventType, ModerationEventRow, @@ -38,28 +58,8 @@ import { ModerationSubjectStatusRowWithHandle, ReversibleModerationEvent, } from './types' -import { ModerationEvent } from '../db/schema/moderation_event' -import { StatusKeyset, TimeIdKeyset, paginate } from '../db/pagination' -import { Label } from '../lexicon/types/com/atproto/label/defs' -import { QueryParams as QueryStatusParams } from '../lexicon/types/tools/ozone/moderation/queryStatuses' -import { - ModSubject, - RecordSubject, - RepoSubject, - subjectFromStatusRow, -} from './subject' -import { jsonb } from '../db/types' -import { LabelChannel } from '../db/schema/label' -import { BlobPushEvent } from '../db/schema/blob_push_event' -import { BackgroundQueue } from '../background' -import { EventPusher } from '../daemon' import { formatLabel, formatLabelRow, signLabel } from './util' -import { ImageInvalidator } from '../image-invalidator' -import { httpLogger as log } from '../logger' -import { OzoneConfig } from '../config' -import { LABELER_HEADER_NAME, ParsedLabelers } from '../util' -import { ids } from '../lexicon/lexicons' -import { getReviewState } from '../api/util' +import { AuthHeaders, ModerationViews } from './views' export type ModerationServiceCreator = (db: Database) => ModerationService diff --git a/packages/ozone/src/mod-service/status.ts b/packages/ozone/src/mod-service/status.ts index 76f2fb08..2886a546 100644 --- a/packages/ozone/src/mod-service/status.ts +++ b/packages/ozone/src/mod-service/status.ts @@ -3,7 +3,7 @@ import { HOUR } from '@atproto/common' import { AtUri } from '@atproto/syntax' import { Database } from '../db' -import DatabaseSchema from '../db/schema' +import { DatabaseSchema } from '../db/schema' import { jsonb } from '../db/types' import { REASONAPPEAL } from '../lexicon/types/com/atproto/moderation/defs' import { diff --git a/packages/ozone/src/mod-service/subject.ts b/packages/ozone/src/mod-service/subject.ts index 51c762a5..5a46a567 100644 --- a/packages/ozone/src/mod-service/subject.ts +++ b/packages/ozone/src/mod-service/subject.ts @@ -1,11 +1,11 @@ import { AtUri } from '@atproto/syntax' -import { InputSchema as ReportInput } from '../lexicon/types/com/atproto/moderation/createReport' -import { InputSchema as ActionInput } from '../lexicon/types/tools/ozone/moderation/emitEvent' import { InvalidRequestError } from '@atproto/xrpc-server' -import { ModerationEventRow, ModerationSubjectStatusRow } from './types' -import { RepoRef } from '../lexicon/types/com/atproto/admin/defs' -import { Main as StrongRef } from '../lexicon/types/com/atproto/repo/strongRef' import { MessageRef } from '../lexicon/types/chat/bsky/convo/defs' +import { RepoRef } from '../lexicon/types/com/atproto/admin/defs' +import { InputSchema as ReportInput } from '../lexicon/types/com/atproto/moderation/createReport' +import { Main as StrongRef } from '../lexicon/types/com/atproto/repo/strongRef' +import { InputSchema as ActionInput } from '../lexicon/types/tools/ozone/moderation/emitEvent' +import { ModerationEventRow, ModerationSubjectStatusRow } from './types' type SubjectInput = ReportInput['subject'] | ActionInput['subject'] diff --git a/packages/ozone/src/mod-service/types.ts b/packages/ozone/src/mod-service/types.ts index 42d6c711..76123bc7 100644 --- a/packages/ozone/src/mod-service/types.ts +++ b/packages/ozone/src/mod-service/types.ts @@ -1,7 +1,7 @@ -import { Selectable } from 'kysely' +import { type Selectable } from 'kysely' +import { ToolsOzoneModerationDefs } from '@atproto/api' import { ModerationEvent } from '../db/schema/moderation_event' import { ModerationSubjectStatus } from '../db/schema/moderation_subject_status' -import { ToolsOzoneModerationDefs } from '@atproto/api' import { ModSubject } from './subject' export type ModerationEventRow = Selectable<ModerationEvent> diff --git a/packages/ozone/src/mod-service/views.ts b/packages/ozone/src/mod-service/views.ts index b4183f0a..5c28d5bf 100644 --- a/packages/ozone/src/mod-service/views.ts +++ b/packages/ozone/src/mod-service/views.ts @@ -1,35 +1,34 @@ import { sql } from 'kysely' -import { AtUri, INVALID_HANDLE, normalizeDatetimeAlways } from '@atproto/syntax' -import { AtpAgent, AppBskyFeedDefs } from '@atproto/api' +import { AppBskyFeedDefs, AtpAgent } from '@atproto/api' import { dedupeStrs } from '@atproto/common' -import { BlobRef } from '@atproto/lexicon' import { Keypair } from '@atproto/crypto' +import { BlobRef } from '@atproto/lexicon' +import { AtUri, INVALID_HANDLE, normalizeDatetimeAlways } from '@atproto/syntax' import { Database } from '../db' +import { LabelRow } from '../db/schema/label' +import { ids } from '../lexicon/lexicons' +import { AccountView } from '../lexicon/types/com/atproto/admin/defs' +import { Label, isSelfLabels } from '../lexicon/types/com/atproto/label/defs' +import { OutputSchema as ReportOutput } from '../lexicon/types/com/atproto/moderation/createReport' +import { REASONOTHER } from '../lexicon/types/com/atproto/moderation/defs' import { + BlobView, ModEventView, - RepoView, + ModEventViewDetail, RecordView, RecordViewDetail, - BlobView, + RepoView, SubjectStatusView, - ModEventViewDetail, } from '../lexicon/types/tools/ozone/moderation/defs' -import { AccountView } from '../lexicon/types/com/atproto/admin/defs' -import { OutputSchema as ReportOutput } from '../lexicon/types/com/atproto/moderation/createReport' -import { Label, isSelfLabels } from '../lexicon/types/com/atproto/label/defs' +import { dbLogger, httpLogger } from '../logger' +import { ParsedLabelers } from '../util' +import { moderationSubjectStatusQueryBuilder } from './status' +import { subjectFromEventRow, subjectFromStatusRow } from './subject' import { ModerationEventRowWithHandle, ModerationSubjectStatusRowWithHandle, } from './types' -import { REASONOTHER } from '../lexicon/types/com/atproto/moderation/defs' -import { subjectFromEventRow, subjectFromStatusRow } from './subject' import { formatLabel, signLabel } from './util' -import { LabelRow } from '../db/schema/label' -import { dbLogger } from '../logger' -import { httpLogger } from '../logger' -import { ParsedLabelers } from '../util' -import { ids } from '../lexicon/lexicons' -import { moderationSubjectStatusQueryBuilder } from './status' export type AuthHeaders = { headers: { diff --git a/packages/ozone/src/sequencer/outbox.ts b/packages/ozone/src/sequencer/outbox.ts index c7069fee..2f87c992 100644 --- a/packages/ozone/src/sequencer/outbox.ts +++ b/packages/ozone/src/sequencer/outbox.ts @@ -1,6 +1,6 @@ import { AsyncBuffer, AsyncBufferFullError } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' -import { Sequencer, LabelsEvt } from './sequencer' +import { LabelsEvt, Sequencer } from './sequencer' export type OutboxOpts = { maxBufferSize: number @@ -121,5 +121,3 @@ export class Outbox { } } } - -export default Outbox diff --git a/packages/ozone/src/sequencer/sequencer.ts b/packages/ozone/src/sequencer/sequencer.ts index aa430acd..88514b27 100644 --- a/packages/ozone/src/sequencer/sequencer.ts +++ b/packages/ozone/src/sequencer/sequencer.ts @@ -1,11 +1,11 @@ -import EventEmitter from 'events' -import TypedEmitter from 'typed-emitter' +import EventEmitter from 'node:events' import { Selectable } from 'kysely' import { PoolClient } from 'pg' -import { seqLogger as log } from '../logger' -import Database from '../db' +import TypedEmitter from 'typed-emitter' +import { Database } from '../db' +import { Label as LabelTable, LabelChannel } from '../db/schema/label' import { Labels as LabelsEvt } from '../lexicon/types/com/atproto/label/subscribeLabels' -import { LabelChannel, Label as LabelTable } from '../db/schema/label' +import { seqLogger as log } from '../logger' import { ModerationService } from '../mod-service' export type { Labels as LabelsEvt } from '../lexicon/types/com/atproto/label/subscribeLabels' @@ -143,5 +143,3 @@ type SequencerEvents = { } export type SequencerEmitter = TypedEmitter<SequencerEvents> - -export default Sequencer diff --git a/packages/ozone/src/set/service.ts b/packages/ozone/src/set/service.ts index 6d58a477..16ac274c 100644 --- a/packages/ozone/src/set/service.ts +++ b/packages/ozone/src/set/service.ts @@ -1,8 +1,8 @@ -import Database from '../db' import { Selectable } from 'kysely' +import { Database } from '../db' +import { TimeIdKeyset, paginate } from '../db/pagination' import { SetDetail } from '../db/schema/ozone_set' import { SetView } from '../lexicon/types/tools/ozone/set/defs' -import { paginate, TimeIdKeyset } from '../db/pagination' export type SetServiceCreator = (db: Database) => SetService diff --git a/packages/ozone/src/setting/service.ts b/packages/ozone/src/setting/service.ts index 353d6144..ec8b2994 100644 --- a/packages/ozone/src/setting/service.ts +++ b/packages/ozone/src/setting/service.ts @@ -1,10 +1,10 @@ -import Database from '../db' -import { Selectable } from 'kysely' -import { Option } from '../lexicon/types/tools/ozone/setting/defs' -import { Setting, SettingScope } from '../db/schema/setting' -import { Member } from '../db/schema/member' import assert from 'node:assert' +import { Selectable } from 'kysely' import { InvalidRequestError } from '@atproto/xrpc-server' +import { Database } from '../db' +import { Member } from '../db/schema/member' +import { Setting, SettingScope } from '../db/schema/setting' +import { Option } from '../lexicon/types/tools/ozone/setting/defs' export type SettingServiceCreator = (db: Database) => SettingService diff --git a/packages/ozone/src/setting/validators.ts b/packages/ozone/src/setting/validators.ts index 124728ec..0c2a78d3 100644 --- a/packages/ozone/src/setting/validators.ts +++ b/packages/ozone/src/setting/validators.ts @@ -1,7 +1,7 @@ import { Selectable } from 'kysely' +import { InvalidRequestError } from '@atproto/xrpc-server' import { Setting } from '../db/schema/setting' import { PolicyListSettingKey, ProtectedTagSettingKey } from './constants' -import { InvalidRequestError } from '@atproto/xrpc-server' export const settingValidators = new Map< string, diff --git a/packages/ozone/src/tag-service/embed-tagger.ts b/packages/ozone/src/tag-service/embed-tagger.ts index 11c4e07a..5f8161f2 100644 --- a/packages/ozone/src/tag-service/embed-tagger.ts +++ b/packages/ozone/src/tag-service/embed-tagger.ts @@ -1,13 +1,13 @@ import { + AppBskyEmbedExternal, AppBskyEmbedImages, AppBskyEmbedRecordWithMedia, - AppBskyFeedPost, AppBskyEmbedVideo, - AppBskyEmbedExternal, + AppBskyFeedPost, } from '@atproto/api' +import { ids } from '../lexicon/lexicons' import { langLogger as log } from '../logger' import { ContentTagger } from './content-tagger' -import { ids } from '../lexicon/lexicons' export class EmbedTagger extends ContentTagger { tagPrefix = 'embed:' diff --git a/packages/ozone/src/tag-service/index.ts b/packages/ozone/src/tag-service/index.ts index 90dc8352..11d33d5f 100644 --- a/packages/ozone/src/tag-service/index.ts +++ b/packages/ozone/src/tag-service/index.ts @@ -1,10 +1,10 @@ +import { langLogger as log } from '../logger' import { ModerationService } from '../mod-service' import { ModSubject } from '../mod-service/subject' -import { langLogger as log } from '../logger' -import { ContentTagger } from './content-tagger' -import { LanguageTagger } from './language-tagger' -import { EmbedTagger } from './embed-tagger' import { ModerationSubjectStatusRow } from '../mod-service/types' +import { ContentTagger } from './content-tagger' +import { EmbedTagger } from './embed-tagger' +import { LanguageTagger } from './language-tagger' export class TagService { private taggers: ContentTagger[] diff --git a/packages/ozone/src/tag-service/language-tagger.ts b/packages/ozone/src/tag-service/language-tagger.ts index e11ea3ec..9d461d3f 100644 --- a/packages/ozone/src/tag-service/language-tagger.ts +++ b/packages/ozone/src/tag-service/language-tagger.ts @@ -4,10 +4,9 @@ import { AppBskyFeedPost, AppBskyGraphList, } from '@atproto/api' - import { langLogger as log } from '../logger' -import { code3ToCode2 } from './language-data' import { ContentTagger } from './content-tagger' +import { code3ToCode2 } from './language-data' export class LanguageTagger extends ContentTagger { tagPrefix = 'lang:' diff --git a/packages/ozone/src/team/index.ts b/packages/ozone/src/team/index.ts index 9629d165..1a220b48 100644 --- a/packages/ozone/src/team/index.ts +++ b/packages/ozone/src/team/index.ts @@ -1,13 +1,13 @@ -import Database from '../db' import { Selectable } from 'kysely' -import { Member } from '../db/schema/member' -import { Member as TeamMember } from '../lexicon/types/tools/ozone/team/defs' -import { ProfileViewDetailed } from '../lexicon/types/app/bsky/actor/defs' -import { InvalidRequestError } from '@atproto/xrpc-server' import { chunkArray } from '@atproto/common' -import AppContext from '../context' -import { httpLogger } from '../logger' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../context' +import { Database } from '../db' +import { Member } from '../db/schema/member' import { ids } from '../lexicon/lexicons' +import { ProfileViewDetailed } from '../lexicon/types/app/bsky/actor/defs' +import { Member as TeamMember } from '../lexicon/types/tools/ozone/team/defs' +import { httpLogger } from '../logger' export type TeamServiceCreator = (db: Database) => TeamService diff --git a/packages/ozone/src/util.ts b/packages/ozone/src/util.ts index 3a87eaa9..76e59c8f 100644 --- a/packages/ozone/src/util.ts +++ b/packages/ozone/src/util.ts @@ -1,8 +1,8 @@ import assert from 'node:assert' +import { parseList } from 'structured-headers' import { createRetryable } from '@atproto/common' import { ResponseType, XRPCError } from '@atproto/xrpc' -import { parseList } from 'structured-headers' -import Database from './db' +import { Database } from './db' export const getSigningKeyId = async ( db: Database, diff --git a/packages/ozone/tests/3p-labeler.test.ts b/packages/ozone/tests/3p-labeler.test.ts index dc3167ee..6a0b921f 100644 --- a/packages/ozone/tests/3p-labeler.test.ts +++ b/packages/ozone/tests/3p-labeler.test.ts @@ -1,15 +1,15 @@ -import { - SeedClient, - TestNetwork, - basicSeed, - TestOzone, - ModeratorClient, - createOzoneDid, -} from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' import { Secp256k1Keypair } from '@atproto/crypto' -import { LABELER_HEADER_NAME } from '../src/util' +import { + ModeratorClient, + SeedClient, + TestNetwork, + TestOzone, + basicSeed, + createOzoneDid, +} from '@atproto/dev-env' import { ids } from '../src/lexicon/lexicons' +import { LABELER_HEADER_NAME } from '../src/util' describe('labels from 3p labelers', () => { let network: TestNetwork diff --git a/packages/ozone/tests/_util.ts b/packages/ozone/tests/_util.ts index be1b855c..144d2694 100644 --- a/packages/ozone/tests/_util.ts +++ b/packages/ozone/tests/_util.ts @@ -1,16 +1,16 @@ -import { type Express } from 'express' import { Server } from 'node:http' import { AddressInfo } from 'node:net' -import { AtUri } from '@atproto/syntax' -import { lexToJson } from '@atproto/lexicon' +import { type Express } from 'express' import { CID } from 'multiformats/cid' +import { lexToJson } from '@atproto/lexicon' +import { AtUri } from '@atproto/syntax' +import { isViewRecord } from '../src/lexicon/types/app/bsky/embed/record' import { FeedViewPost, PostView, isPostView, isThreadViewPost, } from '../src/lexicon/types/app/bsky/feed/defs' -import { isViewRecord } from '../src/lexicon/types/app/bsky/embed/record' // Swap out identifiers and dates with stable // values for the purpose of snapshot testing diff --git a/packages/ozone/tests/ack-all-subjects-of-account.test.ts b/packages/ozone/tests/ack-all-subjects-of-account.test.ts index d4dfefc5..5aa13e8a 100644 --- a/packages/ozone/tests/ack-all-subjects-of-account.test.ts +++ b/packages/ozone/tests/ack-all-subjects-of-account.test.ts @@ -1,10 +1,12 @@ +import { ComAtprotoRepoStrongRef } from '@atproto/api' import { - TestNetwork, + ModeratorClient, RecordRef, SeedClient, + TestNetwork, basicSeed, - ModeratorClient, } from '@atproto/dev-env' +import { isRepoRef } from '../src/lexicon/types/com/atproto/admin/defs' import { REASONAPPEAL, REASONOTHER, @@ -16,8 +18,6 @@ import { REVIEWOPEN, SubjectStatusView, } from '../src/lexicon/types/tools/ozone/moderation/defs' -import { isRepoRef } from '../src/lexicon/types/com/atproto/admin/defs' -import { ComAtprotoRepoStrongRef } from '@atproto/api' describe('acknowledge all subjects of account', () => { let network: TestNetwork diff --git a/packages/ozone/tests/blob-divert.test.ts b/packages/ozone/tests/blob-divert.test.ts index 117c59d8..4637f3bc 100644 --- a/packages/ozone/tests/blob-divert.test.ts +++ b/packages/ozone/tests/blob-divert.test.ts @@ -1,3 +1,4 @@ +import assert from 'node:assert' import { ModeratorClient, SeedClient, @@ -5,7 +6,6 @@ import { basicSeed, } from '@atproto/dev-env' import { ResponseType, XRPCError } from '@atproto/xrpc' -import assert from 'node:assert' import { forSnapshot } from './_util' describe('blob divert', () => { diff --git a/packages/ozone/tests/communication-templates.test.ts b/packages/ozone/tests/communication-templates.test.ts index 39fe1225..e507b879 100644 --- a/packages/ozone/tests/communication-templates.test.ts +++ b/packages/ozone/tests/communication-templates.test.ts @@ -1,5 +1,5 @@ -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../src/lexicon/lexicons' describe('communication-templates', () => { diff --git a/packages/ozone/tests/content-tagger.test.ts b/packages/ozone/tests/content-tagger.test.ts index 9b5d375a..44029b46 100644 --- a/packages/ozone/tests/content-tagger.test.ts +++ b/packages/ozone/tests/content-tagger.test.ts @@ -4,8 +4,8 @@ import { TestNetwork, basicSeed, } from '@atproto/dev-env' -import { REASONSPAM } from '../src/lexicon/types/com/atproto/moderation/defs' import { REASONMISLEADING } from '../dist/lexicon/types/com/atproto/moderation/defs' +import { REASONSPAM } from '../src/lexicon/types/com/atproto/moderation/defs' describe('moderation subject content tagging', () => { let network: TestNetwork diff --git a/packages/ozone/tests/get-config.test.ts b/packages/ozone/tests/get-config.test.ts index 51648e2d..899c0aa9 100644 --- a/packages/ozone/tests/get-config.test.ts +++ b/packages/ozone/tests/get-config.test.ts @@ -1,5 +1,5 @@ -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { TOOLS_OZONE_TEAM } from '../src/lexicon' import { ids } from '../src/lexicon/lexicons' diff --git a/packages/ozone/tests/get-lists.test.ts b/packages/ozone/tests/get-lists.test.ts index c717c82a..68a9a0ba 100644 --- a/packages/ozone/tests/get-lists.test.ts +++ b/packages/ozone/tests/get-lists.test.ts @@ -1,14 +1,14 @@ +import { AtpAgent, BSKY_LABELER_DID } from '@atproto/api' import { + ModeratorClient, + RecordRef, SeedClient, TestNetwork, TestOzone, basicSeed, - ModeratorClient, - RecordRef, } from '@atproto/dev-env' -import { AtpAgent, BSKY_LABELER_DID } from '@atproto/api' -import { TAKEDOWN_LABEL } from '../src/mod-service' import { ids } from '../src/lexicon/lexicons' +import { TAKEDOWN_LABEL } from '../src/mod-service' describe('admin get lists', () => { let network: TestNetwork diff --git a/packages/ozone/tests/get-profiles.test.ts b/packages/ozone/tests/get-profiles.test.ts index f9c1d911..4dd12e15 100644 --- a/packages/ozone/tests/get-profiles.test.ts +++ b/packages/ozone/tests/get-profiles.test.ts @@ -1,10 +1,9 @@ import { - TestNetwork, - SeedClient, - basicSeed, ModeratorClient, + SeedClient, + TestNetwork, + basicSeed, } from '@atproto/dev-env' -import { ids } from '../src/lexicon/lexicons' describe('get profiles through ozone', () => { let network: TestNetwork diff --git a/packages/ozone/tests/get-record.test.ts b/packages/ozone/tests/get-record.test.ts index 0e289b55..9d7b2352 100644 --- a/packages/ozone/tests/get-record.test.ts +++ b/packages/ozone/tests/get-record.test.ts @@ -1,18 +1,18 @@ +import { AtpAgent } from '@atproto/api' import { + ModeratorClient, SeedClient, TestNetwork, - basicSeed, TestOzone, - ModeratorClient, + basicSeed, } from '@atproto/dev-env' -import { AtpAgent } from '@atproto/api' import { AtUri } from '@atproto/syntax' +import { ids } from '../src/lexicon/lexicons' import { REASONOTHER, REASONSPAM, } from '../src/lexicon/types/com/atproto/moderation/defs' import { forSnapshot } from './_util' -import { ids } from '../src/lexicon/lexicons' describe('admin get record view', () => { let network: TestNetwork diff --git a/packages/ozone/tests/get-records.test.ts b/packages/ozone/tests/get-records.test.ts index 3b3e63e1..e15493e2 100644 --- a/packages/ozone/tests/get-records.test.ts +++ b/packages/ozone/tests/get-records.test.ts @@ -1,17 +1,17 @@ +import { AtpAgent } from '@atproto/api' import { + ModeratorClient, SeedClient, TestNetwork, - basicSeed, TestOzone, - ModeratorClient, + basicSeed, } from '@atproto/dev-env' -import { AtpAgent } from '@atproto/api' +import { ids } from '../src/lexicon/lexicons' import { REASONOTHER, REASONSPAM, } from '../src/lexicon/types/com/atproto/moderation/defs' import { forSnapshot } from './_util' -import { ids } from '../src/lexicon/lexicons' describe('admin get records view', () => { let network: TestNetwork diff --git a/packages/ozone/tests/get-repo.test.ts b/packages/ozone/tests/get-repo.test.ts index 6ededcbe..ab5293dd 100644 --- a/packages/ozone/tests/get-repo.test.ts +++ b/packages/ozone/tests/get-repo.test.ts @@ -1,17 +1,17 @@ +import { AtpAgent } from '@atproto/api' import { + ModeratorClient, SeedClient, TestNetwork, TestOzone, basicSeed, - ModeratorClient, } from '@atproto/dev-env' -import { AtpAgent } from '@atproto/api' +import { ids } from '../src/lexicon/lexicons' import { REASONOTHER, REASONSPAM, } from '../src/lexicon/types/com/atproto/moderation/defs' import { forSnapshot } from './_util' -import { ids } from '../src/lexicon/lexicons' describe('admin get repo view', () => { let network: TestNetwork diff --git a/packages/ozone/tests/get-repos.test.ts b/packages/ozone/tests/get-repos.test.ts index a56c7b54..1f9d8ef1 100644 --- a/packages/ozone/tests/get-repos.test.ts +++ b/packages/ozone/tests/get-repos.test.ts @@ -1,17 +1,17 @@ +import { AtpAgent } from '@atproto/api' import { + ModeratorClient, SeedClient, TestNetwork, TestOzone, basicSeed, - ModeratorClient, } from '@atproto/dev-env' -import { AtpAgent } from '@atproto/api' +import { ids } from '../src/lexicon/lexicons' import { REASONOTHER, REASONSPAM, } from '../src/lexicon/types/com/atproto/moderation/defs' import { forSnapshot } from './_util' -import { ids } from '../src/lexicon/lexicons' describe('admin get multiple repos', () => { let network: TestNetwork diff --git a/packages/ozone/tests/get-starter-pack.test.ts b/packages/ozone/tests/get-starter-pack.test.ts index b506f21e..1649d308 100644 --- a/packages/ozone/tests/get-starter-pack.test.ts +++ b/packages/ozone/tests/get-starter-pack.test.ts @@ -1,14 +1,14 @@ +import { AtpAgent } from '@atproto/api' import { + RecordRef, SeedClient, TestNetwork, - basicSeed, TestOzone, - RecordRef, + basicSeed, } from '@atproto/dev-env' -import { AtpAgent } from '@atproto/api' -import { forSnapshot } from './_util' -import { TAKEDOWN_LABEL } from '../src/mod-service' import { ids } from '../src/lexicon/lexicons' +import { TAKEDOWN_LABEL } from '../src/mod-service' +import { forSnapshot } from './_util' describe('admin get starter pack view', () => { let network: TestNetwork diff --git a/packages/ozone/tests/moderation-appeals.test.ts b/packages/ozone/tests/moderation-appeals.test.ts index 0c95ead7..e1b87315 100644 --- a/packages/ozone/tests/moderation-appeals.test.ts +++ b/packages/ozone/tests/moderation-appeals.test.ts @@ -1,13 +1,13 @@ -import { - TestNetwork, - SeedClient, - basicSeed, - ModeratorClient, -} from '@atproto/dev-env' import { ComAtprotoModerationDefs, ToolsOzoneModerationDefs, } from '@atproto/api' +import { + ModeratorClient, + SeedClient, + TestNetwork, + basicSeed, +} from '@atproto/dev-env' import { REASONMISLEADING, REASONSPAM, diff --git a/packages/ozone/tests/moderation-events.test.ts b/packages/ozone/tests/moderation-events.test.ts index 9758f7c0..af671e4e 100644 --- a/packages/ozone/tests/moderation-events.test.ts +++ b/packages/ozone/tests/moderation-events.test.ts @@ -1,18 +1,18 @@ import assert from 'node:assert' import EventEmitter, { once } from 'node:events' -import { - TestNetwork, - SeedClient, - basicSeed, - ModeratorClient, -} from '@atproto/dev-env' import { ToolsOzoneModerationDefs } from '@atproto/api' -import { forSnapshot } from './_util' +import { + ModeratorClient, + SeedClient, + TestNetwork, + basicSeed, +} from '@atproto/dev-env' import { REASONAPPEAL, REASONMISLEADING, REASONSPAM, } from '../src/lexicon/types/com/atproto/moderation/defs' +import { forSnapshot } from './_util' describe('moderation-events', () => { let network: TestNetwork diff --git a/packages/ozone/tests/moderation-status-tags.test.ts b/packages/ozone/tests/moderation-status-tags.test.ts index 51ebc318..532a87a7 100644 --- a/packages/ozone/tests/moderation-status-tags.test.ts +++ b/packages/ozone/tests/moderation-status-tags.test.ts @@ -1,8 +1,8 @@ import { - TestNetwork, - SeedClient, - basicSeed, ModeratorClient, + SeedClient, + TestNetwork, + basicSeed, } from '@atproto/dev-env' import { REASONSPAM } from '../src/lexicon/types/com/atproto/moderation/defs' diff --git a/packages/ozone/tests/moderation-statuses.test.ts b/packages/ozone/tests/moderation-statuses.test.ts index dfe3cd9a..b50f6860 100644 --- a/packages/ozone/tests/moderation-statuses.test.ts +++ b/packages/ozone/tests/moderation-statuses.test.ts @@ -1,23 +1,23 @@ import assert from 'node:assert' -import { - TestNetwork, - SeedClient, - basicSeed, - ModeratorClient, -} from '@atproto/dev-env' import { ToolsOzoneModerationDefs, ToolsOzoneModerationQueryStatuses, } from '@atproto/api' -import { forSnapshot } from './_util' +import { + ModeratorClient, + SeedClient, + TestNetwork, + basicSeed, +} from '@atproto/dev-env' import { REASONMISLEADING, REASONSPAM, } from '../src/lexicon/types/com/atproto/moderation/defs' import { - REVIEWOPEN, REVIEWNONE, + REVIEWOPEN, } from '../src/lexicon/types/tools/ozone/moderation/defs' +import { forSnapshot } from './_util' describe('moderation-statuses', () => { let network: TestNetwork diff --git a/packages/ozone/tests/moderation.test.ts b/packages/ozone/tests/moderation.test.ts index 9b9bfb17..e029017e 100644 --- a/packages/ozone/tests/moderation.test.ts +++ b/packages/ozone/tests/moderation.test.ts @@ -1,15 +1,18 @@ +import { AtpAgent, ToolsOzoneModerationEmitEvent } from '@atproto/api' +import { HOUR } from '@atproto/common' import { - TestNetwork, - TestOzone, ImageRef, + ModeratorClient, RecordRef, SeedClient, + TestNetwork, + TestOzone, basicSeed, - ModeratorClient, } from '@atproto/dev-env' -import { AtpAgent, ToolsOzoneModerationEmitEvent } from '@atproto/api' import { AtUri } from '@atproto/syntax' -import { forSnapshot } from './_util' +import { EventReverser } from '../src' +import { ImageInvalidator } from '../src/image-invalidator' +import { ids } from '../src/lexicon/lexicons' import { REASONMISLEADING, REASONOTHER, @@ -20,11 +23,8 @@ import { REVIEWCLOSED, REVIEWESCALATED, } from '../src/lexicon/types/tools/ozone/moderation/defs' -import { EventReverser } from '../src' -import { ImageInvalidator } from '../src/image-invalidator' import { TAKEDOWN_LABEL } from '../src/mod-service' -import { ids } from '../src/lexicon/lexicons' -import { HOUR } from '@atproto/common' +import { forSnapshot } from './_util' describe('moderation', () => { let network: TestNetwork diff --git a/packages/ozone/tests/protected-tags.test.ts b/packages/ozone/tests/protected-tags.test.ts index 84778e89..dfdb3279 100644 --- a/packages/ozone/tests/protected-tags.test.ts +++ b/packages/ozone/tests/protected-tags.test.ts @@ -1,14 +1,14 @@ import { - TestNetwork, - SeedClient, - basicSeed, ModeratorClient, + SeedClient, + TestNetwork, + basicSeed, } from '@atproto/dev-env' -import { ProtectedTagSettingKey } from '../src/setting/constants' import { ROLEADMIN, ROLEMODERATOR, } from '../dist/lexicon/types/tools/ozone/team/defs' +import { ProtectedTagSettingKey } from '../src/setting/constants' describe('protected-tags', () => { let network: TestNetwork diff --git a/packages/ozone/tests/query-labels.test.ts b/packages/ozone/tests/query-labels.test.ts index 66157fb9..6f0505c6 100644 --- a/packages/ozone/tests/query-labels.test.ts +++ b/packages/ozone/tests/query-labels.test.ts @@ -1,15 +1,15 @@ import { AtpAgent } from '@atproto/api' +import { cborEncode } from '@atproto/common' +import { Secp256k1Keypair, verifySignature } from '@atproto/crypto' import { EXAMPLE_LABELER, TestNetwork } from '@atproto/dev-env' import { DisconnectError, Subscription } from '@atproto/xrpc-server' import { ids, lexicons } from '../src/lexicon/lexicons' import { Label } from '../src/lexicon/types/com/atproto/label/defs' -import { Secp256k1Keypair, verifySignature } from '@atproto/crypto' -import { cborEncode } from '@atproto/common' -import { ModerationService } from '../src/mod-service' import { OutputSchema as LabelMessage, isLabels, } from '../src/lexicon/types/com/atproto/label/subscribeLabels' +import { ModerationService } from '../src/mod-service' import { getSigningKeyId } from '../src/util' describe('ozone query labels', () => { diff --git a/packages/ozone/tests/record-and-account-events.test.ts b/packages/ozone/tests/record-and-account-events.test.ts index 1c8d8b5d..669031bb 100644 --- a/packages/ozone/tests/record-and-account-events.test.ts +++ b/packages/ozone/tests/record-and-account-events.test.ts @@ -1,15 +1,16 @@ -import { - TestNetwork, - SeedClient, - basicSeed, - ModeratorClient, -} from '@atproto/dev-env' import { ComAtprotoModerationDefs, ToolsOzoneModerationDefs, + ToolsOzoneModerationEmitEvent as EmitModerationEvent, } from '@atproto/api' +import { + ModeratorClient, + SeedClient, + TestNetwork, + basicSeed, +} from '@atproto/dev-env' import { REVIEWOPEN } from '../src/lexicon/types/tools/ozone/moderation/defs' -import { ToolsOzoneModerationEmitEvent as EmitModerationEvent } from '@atproto/api' + describe('record and account events on moderation subjects', () => { let network: TestNetwork let sc: SeedClient diff --git a/packages/ozone/tests/repo-search.test.ts b/packages/ozone/tests/repo-search.test.ts index 26aa3e45..08afbe97 100644 --- a/packages/ozone/tests/repo-search.test.ts +++ b/packages/ozone/tests/repo-search.test.ts @@ -1,12 +1,12 @@ +import { AtpAgent } from '@atproto/api' import { ModeratorClient, SeedClient, TestNetwork, usersBulkSeed, } from '@atproto/dev-env' -import { AtpAgent } from '@atproto/api' -import { paginateAll } from './_util' import { ids } from '../src/lexicon/lexicons' +import { paginateAll } from './_util' describe('admin repo search view', () => { let network: TestNetwork diff --git a/packages/ozone/tests/report-muting.test.ts b/packages/ozone/tests/report-muting.test.ts index 1cf195ce..4cf15e70 100644 --- a/packages/ozone/tests/report-muting.test.ts +++ b/packages/ozone/tests/report-muting.test.ts @@ -1,13 +1,13 @@ -import { - TestNetwork, - SeedClient, - basicSeed, - ModeratorClient, -} from '@atproto/dev-env' import { ComAtprotoModerationDefs, ToolsOzoneModerationDefs, } from '@atproto/api' +import { + ModeratorClient, + SeedClient, + TestNetwork, + basicSeed, +} from '@atproto/dev-env' import { REVIEWNONE, REVIEWOPEN, diff --git a/packages/ozone/tests/sequencer.test.ts b/packages/ozone/tests/sequencer.test.ts index 840e78ff..8153217e 100644 --- a/packages/ozone/tests/sequencer.test.ts +++ b/packages/ozone/tests/sequencer.test.ts @@ -1,9 +1,9 @@ -import { EXAMPLE_LABELER, TestNetwork } from '@atproto/dev-env' import { readFromGenerator, wait } from '@atproto/common' -import { LabelsEvt, Sequencer } from '../src/sequencer' -import Outbox from '../src/sequencer/outbox' import { randomStr } from '@atproto/crypto' +import { EXAMPLE_LABELER, TestNetwork } from '@atproto/dev-env' import { Label } from '../src/lexicon/types/com/atproto/label/defs' +import { LabelsEvt, Sequencer } from '../src/sequencer' +import { Outbox } from '../src/sequencer/outbox' describe('sequencer', () => { let network: TestNetwork diff --git a/packages/ozone/tests/server.test.ts b/packages/ozone/tests/server.test.ts index 7899b5ff..8b407055 100644 --- a/packages/ozone/tests/server.test.ts +++ b/packages/ozone/tests/server.test.ts @@ -1,5 +1,5 @@ -import { TestNetwork, TestOzone } from '@atproto/dev-env' import express from 'express' +import { TestNetwork, TestOzone } from '@atproto/dev-env' import { handler as errorHandler } from '../src/error' import { startServer } from './_util' diff --git a/packages/ozone/tests/sets.test.ts b/packages/ozone/tests/sets.test.ts index 90bf8103..0bc7b8a4 100644 --- a/packages/ozone/tests/sets.test.ts +++ b/packages/ozone/tests/sets.test.ts @@ -1,10 +1,10 @@ -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import AtpAgent, { ToolsOzoneSetDefs, ToolsOzoneSetQuerySets, } from '@atproto/api' -import { forSnapshot } from './_util' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { ids } from '../src/lexicon/lexicons' +import { forSnapshot } from './_util' describe('ozone-sets', () => { let network: TestNetwork diff --git a/packages/ozone/tests/settings.test.ts b/packages/ozone/tests/settings.test.ts index 41afd23a..2446d049 100644 --- a/packages/ozone/tests/settings.test.ts +++ b/packages/ozone/tests/settings.test.ts @@ -1,10 +1,10 @@ -import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import AtpAgent, { ToolsOzoneSettingListOptions, ToolsOzoneSettingUpsertOption, } from '@atproto/api' -import { ids } from '../src/lexicon/lexicons' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { SettingScope } from '../dist/db/schema/setting' +import { ids } from '../src/lexicon/lexicons' import { forSnapshot } from './_util' describe('ozone-settings', () => { diff --git a/packages/ozone/tests/takedown.test.ts b/packages/ozone/tests/takedown.test.ts index 8cb7ed57..fa5c4f2d 100644 --- a/packages/ozone/tests/takedown.test.ts +++ b/packages/ozone/tests/takedown.test.ts @@ -1,18 +1,13 @@ import { - TestNetwork, - TestOzone, - SeedClient, - basicSeed, ModeratorClient, + SeedClient, + TestNetwork, + basicSeed, } from '@atproto/dev-env' -import { AtpAgent } from '@atproto/api' describe('moderation', () => { let network: TestNetwork - let ozone: TestOzone - let agent: AtpAgent - let bskyAgent: AtpAgent - let pdsAgent: AtpAgent + let sc: SeedClient let modClient: ModeratorClient @@ -25,10 +20,6 @@ describe('moderation', () => { network = await TestNetwork.create({ dbPostgresSchema: 'ozone_takedown', }) - ozone = network.ozone - agent = network.ozone.getClient() - bskyAgent = network.bsky.getClient() - pdsAgent = network.pds.getClient() sc = network.getSeedClient() modClient = network.ozone.getModClient() await basicSeed(sc) diff --git a/packages/ozone/tests/team.test.ts b/packages/ozone/tests/team.test.ts index 4a348712..d7532d69 100644 --- a/packages/ozone/tests/team.test.ts +++ b/packages/ozone/tests/team.test.ts @@ -1,5 +1,5 @@ -import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import { forSnapshot } from './_util' describe('team management', () => { diff --git a/packages/pds/bin/migration-create.ts b/packages/pds/bin/migration-create.ts index b51c536c..8a483456 100644 --- a/packages/pds/bin/migration-create.ts +++ b/packages/pds/bin/migration-create.ts @@ -1,7 +1,7 @@ #!/usr/bin/env ts-node -import * as fs from 'fs/promises' -import * as path from 'path' +import * as fs from 'node:fs/promises' +import * as path from 'node:path' export async function main() { const now = new Date() diff --git a/packages/pds/package.json b/packages/pds/package.json index 06668d2e..3939e453 100644 --- a/packages/pds/package.json +++ b/packages/pds/package.json @@ -16,6 +16,9 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "bin": "dist/bin.js", + "engines": { + "node": ">=18.7.0" + }, "scripts": { "prepare": "[ \"$npm_config_production\" = true ] || puppeteer browsers install chrome", "codegen": "lex gen-server --yes ./src/lexicon ../../lexicons/com/atproto/*/* ../../lexicons/app/bsky/*/* ../../lexicons/chat/bsky/*/* ../../lexicons/tools/ozone/*/*", diff --git a/packages/pds/src/account-manager/db/index.ts b/packages/pds/src/account-manager/db/index.ts index 30c22b16..95440c41 100644 --- a/packages/pds/src/account-manager/db/index.ts +++ b/packages/pds/src/account-manager/db/index.ts @@ -1,6 +1,6 @@ import { Database, Migrator } from '../../db' -import { DatabaseSchema } from './schema' import migrations from './migrations' +import { DatabaseSchema } from './schema' export * from './schema' diff --git a/packages/pds/src/account-manager/db/schema/authorization-request.ts b/packages/pds/src/account-manager/db/schema/authorization-request.ts index aa7f4339..bace24cf 100644 --- a/packages/pds/src/account-manager/db/schema/authorization-request.ts +++ b/packages/pds/src/account-manager/db/schema/authorization-request.ts @@ -1,10 +1,10 @@ +import { Selectable } from 'kysely' import { Code, DeviceId, OAuthClientId, RequestId, } from '@atproto/oauth-provider' -import { Selectable } from 'kysely' import { DateISO, JsonObject } from '../../../db' export interface AuthorizationRequest { diff --git a/packages/pds/src/account-manager/db/schema/device.ts b/packages/pds/src/account-manager/db/schema/device.ts index 23b98acb..8ea95823 100644 --- a/packages/pds/src/account-manager/db/schema/device.ts +++ b/packages/pds/src/account-manager/db/schema/device.ts @@ -1,5 +1,5 @@ -import { DeviceId, SessionId } from '@atproto/oauth-provider' import { Selectable } from 'kysely' +import { DeviceId, SessionId } from '@atproto/oauth-provider' import { DateISO } from '../../../db' export interface Device { diff --git a/packages/pds/src/account-manager/db/schema/index.ts b/packages/pds/src/account-manager/db/schema/index.ts index d4872f9f..183ee769 100644 --- a/packages/pds/src/account-manager/db/schema/index.ts +++ b/packages/pds/src/account-manager/db/schema/index.ts @@ -1,15 +1,15 @@ -import * as actor from './actor' import * as account from './account' +import * as actor from './actor' +import * as appPassword from './app-password' +import * as oauthRequest from './authorization-request' import * as device from './device' import * as deviceAccount from './device-account' -import * as oauthRequest from './authorization-request' +import * as emailToken from './email-token' +import * as inviteCode from './invite-code' +import * as refreshToken from './refresh-token' +import * as repoRoot from './repo-root' import * as token from './token' import * as usedRefreshToken from './used-refresh-token' -import * as repoRoot from './repo-root' -import * as refreshToken from './refresh-token' -import * as appPassword from './app-password' -import * as inviteCode from './invite-code' -import * as emailToken from './email-token' export type DatabaseSchema = actor.PartialDB & account.PartialDB & diff --git a/packages/pds/src/account-manager/db/schema/token.ts b/packages/pds/src/account-manager/db/schema/token.ts index 7abba13b..fe362683 100644 --- a/packages/pds/src/account-manager/db/schema/token.ts +++ b/packages/pds/src/account-manager/db/schema/token.ts @@ -1,3 +1,4 @@ +import { Generated, Selectable } from 'kysely' import { Code, DeviceId, @@ -6,8 +7,6 @@ import { Sub, TokenId, } from '@atproto/oauth-provider' -import { Generated, Selectable } from 'kysely' - import { DateISO, JsonArray, JsonObject } from '../../../db/cast' export interface Token { diff --git a/packages/pds/src/account-manager/db/schema/used-refresh-token.ts b/packages/pds/src/account-manager/db/schema/used-refresh-token.ts index a424bfcd..30a21117 100644 --- a/packages/pds/src/account-manager/db/schema/used-refresh-token.ts +++ b/packages/pds/src/account-manager/db/schema/used-refresh-token.ts @@ -1,5 +1,5 @@ -import { RefreshToken } from '@atproto/oauth-provider' import { Selectable } from 'kysely' +import { RefreshToken } from '@atproto/oauth-provider' export interface UsedRefreshToken { tokenId: number diff --git a/packages/pds/src/account-manager/helpers/account.ts b/packages/pds/src/account-manager/helpers/account.ts index 307d65e1..9dcab8ec 100644 --- a/packages/pds/src/account-manager/helpers/account.ts +++ b/packages/pds/src/account-manager/helpers/account.ts @@ -1,7 +1,7 @@ -import { isErrUniqueViolation, notSoftDeletedClause } from '../../db' -import { AccountDb, ActorEntry } from '../db' -import { StatusAttr } from '../../lexicon/types/com/atproto/admin/defs' import { DAY } from '@atproto/common' +import { isErrUniqueViolation, notSoftDeletedClause } from '../../db' +import { StatusAttr } from '../../lexicon/types/com/atproto/admin/defs' +import { AccountDb, ActorEntry } from '../db' export class UserAlreadyExistsError extends Error {} diff --git a/packages/pds/src/account-manager/helpers/authorization-request.ts b/packages/pds/src/account-manager/helpers/authorization-request.ts index a80540d5..596b6dfe 100644 --- a/packages/pds/src/account-manager/helpers/authorization-request.ts +++ b/packages/pds/src/account-manager/helpers/authorization-request.ts @@ -1,3 +1,4 @@ +import { Insertable, Selectable } from 'kysely' import { Code, FoundRequestResult, @@ -5,9 +6,8 @@ import { RequestId, UpdateRequestData, } from '@atproto/oauth-provider' -import { AccountDb, AuthorizationRequest } from '../db' import { fromDateISO, fromJsonObject, toDateISO, toJsonObject } from '../../db' -import { Insertable, Selectable } from 'kysely' +import { AccountDb, AuthorizationRequest } from '../db' export const rowToRequestData = ( row: Selectable<AuthorizationRequest>, diff --git a/packages/pds/src/account-manager/helpers/device-account.ts b/packages/pds/src/account-manager/helpers/device-account.ts index 2b22c6b2..2c8a5a21 100644 --- a/packages/pds/src/account-manager/helpers/device-account.ts +++ b/packages/pds/src/account-manager/helpers/device-account.ts @@ -1,11 +1,10 @@ +import { Insertable, Selectable } from 'kysely' import { Account, DeviceAccountInfo, DeviceId, OAuthClientId, } from '@atproto/oauth-provider' -import { Insertable, Selectable } from 'kysely' - import { fromDateISO, fromJsonArray, toDateISO, toJsonArray } from '../../db' import { AccountDb } from '../db' import { DeviceAccount } from '../db/schema/device-account' diff --git a/packages/pds/src/account-manager/helpers/device.ts b/packages/pds/src/account-manager/helpers/device.ts index 08c59c06..1447e926 100644 --- a/packages/pds/src/account-manager/helpers/device.ts +++ b/packages/pds/src/account-manager/helpers/device.ts @@ -1,7 +1,7 @@ -import { DeviceId, DeviceData } from '@atproto/oauth-provider' -import { AccountDb, Device } from '../db' -import { fromDateISO, toDateISO } from '../../db' import { Selectable } from 'kysely' +import { DeviceData, DeviceId } from '@atproto/oauth-provider' +import { fromDateISO, toDateISO } from '../../db' +import { AccountDb, Device } from '../db' export const rowToDeviceData = (row: Selectable<Device>): DeviceData => ({ sessionId: row.sessionId, diff --git a/packages/pds/src/account-manager/helpers/email-token.ts b/packages/pds/src/account-manager/helpers/email-token.ts index 7d3690ad..f7a7a83f 100644 --- a/packages/pds/src/account-manager/helpers/email-token.ts +++ b/packages/pds/src/account-manager/helpers/email-token.ts @@ -1,5 +1,5 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import { MINUTE, lessThanAgoMs } from '@atproto/common' +import { InvalidRequestError } from '@atproto/xrpc-server' import { getRandomToken } from '../../api/com/atproto/server/util' import { AccountDb, EmailTokenPurpose } from '../db' diff --git a/packages/pds/src/account-manager/helpers/invite.ts b/packages/pds/src/account-manager/helpers/invite.ts index b9cad8bd..de4e6292 100644 --- a/packages/pds/src/account-manager/helpers/invite.ts +++ b/packages/pds/src/account-manager/helpers/invite.ts @@ -1,7 +1,7 @@ import { chunkArray } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' -import { AccountDb, InviteCode } from '../db' import { countAll } from '../../db' +import { AccountDb, InviteCode } from '../db' export const createInviteCodes = async ( db: AccountDb, diff --git a/packages/pds/src/account-manager/helpers/password.ts b/packages/pds/src/account-manager/helpers/password.ts index 7f750901..768e017a 100644 --- a/packages/pds/src/account-manager/helpers/password.ts +++ b/packages/pds/src/account-manager/helpers/password.ts @@ -1,8 +1,8 @@ import { randomStr } from '@atproto/crypto' import { InvalidRequestError } from '@atproto/xrpc-server' -import * as scrypt from './scrypt' -import { AccountDb } from '../db' import { AppPassword } from '../../lexicon/types/com/atproto/server/createAppPassword' +import { AccountDb } from '../db' +import * as scrypt from './scrypt' export type AppPassDescript = { name: string diff --git a/packages/pds/src/account-manager/helpers/scrypt.ts b/packages/pds/src/account-manager/helpers/scrypt.ts index f0b61e3f..bbbecbe2 100644 --- a/packages/pds/src/account-manager/helpers/scrypt.ts +++ b/packages/pds/src/account-manager/helpers/scrypt.ts @@ -1,6 +1,6 @@ -import crypto from 'crypto' -import { sha256 } from '@atproto/crypto' +import crypto from 'node:crypto' import * as ui8 from 'uint8arrays' +import { sha256 } from '@atproto/crypto' export const genSaltAndHash = (password: string): Promise<string> => { const salt = crypto.randomBytes(16).toString('hex') diff --git a/packages/pds/src/account-manager/helpers/token.ts b/packages/pds/src/account-manager/helpers/token.ts index 30da1f18..80063ec0 100644 --- a/packages/pds/src/account-manager/helpers/token.ts +++ b/packages/pds/src/account-manager/helpers/token.ts @@ -1,3 +1,4 @@ +import { Selectable } from 'kysely' import { Code, NewTokenData, @@ -7,7 +8,6 @@ import { TokenId, TokenInfo, } from '@atproto/oauth-provider' -import { Selectable } from 'kysely' import { fromDateISO, fromJsonArray, diff --git a/packages/pds/src/account-manager/index.ts b/packages/pds/src/account-manager/index.ts index 848aaab0..12d744c4 100644 --- a/packages/pds/src/account-manager/index.ts +++ b/packages/pds/src/account-manager/index.ts @@ -1,3 +1,6 @@ +import { KeyObject } from 'node:crypto' +import { Selectable } from 'kysely' +import { CID } from 'multiformats/cid' import { HOUR, wait } from '@atproto/common' import { Account, @@ -21,10 +24,6 @@ import { UpdateRequestData, } from '@atproto/oauth-provider' import { AuthRequiredError } from '@atproto/xrpc-server' -import { Selectable } from 'kysely' -import { CID } from 'multiformats/cid' -import { KeyObject } from 'node:crypto' - import { ActorStore } from '../actor-store/actor-store' import { AuthScope } from '../auth-verifier' import { BackgroundQueue } from '../background' diff --git a/packages/pds/src/actor-store/actor-store-reader.ts b/packages/pds/src/actor-store/actor-store-reader.ts index ad5abab7..7d4769c9 100644 --- a/packages/pds/src/actor-store/actor-store-reader.ts +++ b/packages/pds/src/actor-store/actor-store-reader.ts @@ -1,10 +1,10 @@ import { Keypair } from '@atproto/crypto' import { ActorStoreResources } from './actor-store-resources' +import { ActorStoreTransactor } from './actor-store-transactor' import { ActorDb } from './db' import { PreferenceReader } from './preference/reader' import { RecordReader } from './record/reader' import { RepoReader } from './repo/reader' -import { ActorStoreTransactor } from './actor-store-transactor' export class ActorStoreReader { public readonly repo: RepoReader diff --git a/packages/pds/src/actor-store/actor-store.ts b/packages/pds/src/actor-store/actor-store.ts index 414c5245..78f02549 100644 --- a/packages/pds/src/actor-store/actor-store.ts +++ b/packages/pds/src/actor-store/actor-store.ts @@ -1,3 +1,6 @@ +import assert from 'node:assert' +import fs, { mkdir } from 'node:fs/promises' +import path from 'node:path' import { chunkArray, fileExists, @@ -7,12 +10,9 @@ import { import * as crypto from '@atproto/crypto' import { ExportableKeypair, Keypair } from '@atproto/crypto' import { InvalidRequestError } from '@atproto/xrpc-server' -import assert from 'node:assert' -import fs, { mkdir } from 'node:fs/promises' -import path from 'node:path' import { ActorStoreConfig } from '../config' import { retrySqlite } from '../db' -import DiskBlobStore from '../disk-blobstore' +import { DiskBlobStore } from '../disk-blobstore' import { ActorStoreReader } from './actor-store-reader' import { ActorStoreResources } from './actor-store-resources' import { ActorStoreTransactor } from './actor-store-transactor' diff --git a/packages/pds/src/actor-store/blob/reader.ts b/packages/pds/src/actor-store/blob/reader.ts index 6ab87d1a..232f5add 100644 --- a/packages/pds/src/actor-store/blob/reader.ts +++ b/packages/pds/src/actor-store/blob/reader.ts @@ -1,7 +1,7 @@ +import stream from 'node:stream' +import { CID } from 'multiformats/cid' import { BlobNotFoundError, BlobStore } from '@atproto/repo' import { InvalidRequestError } from '@atproto/xrpc-server' -import { CID } from 'multiformats/cid' -import stream from 'stream' import { countAll, countDistinct, notSoftDeletedClause } from '../../db/util' import { StatusAttr } from '../../lexicon/types/com/atproto/admin/defs' import { ActorDb } from '../db' diff --git a/packages/pds/src/actor-store/blob/transactor.ts b/packages/pds/src/actor-store/blob/transactor.ts index 08674e17..c8101463 100644 --- a/packages/pds/src/actor-store/blob/transactor.ts +++ b/packages/pds/src/actor-store/blob/transactor.ts @@ -1,24 +1,24 @@ -import stream from 'stream' -import crypto from 'crypto' -import { CID } from 'multiformats/cid' +import crypto from 'node:crypto' +import stream from 'node:stream' import bytes from 'bytes' import { fromStream as fileTypeFromStream } from 'file-type' +import { CID } from 'multiformats/cid' +import { cloneStream, sha256RawToCid, streamSize } from '@atproto/common' +import { BlobRef } from '@atproto/lexicon' import { BlobNotFoundError, BlobStore, WriteOpAction } from '@atproto/repo' import { AtUri } from '@atproto/syntax' -import { cloneStream, sha256RawToCid, streamSize } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' -import { BlobRef } from '@atproto/lexicon' -import { ActorDb, Blob as BlobTable } from '../db' +import { BackgroundQueue } from '../../background' +import * as img from '../../image' +import { StatusAttr } from '../../lexicon/types/com/atproto/admin/defs' import { PreparedBlobRef, - PreparedWrite, PreparedDelete, PreparedUpdate, + PreparedWrite, } from '../../repo/types' -import * as img from '../../image' -import { BackgroundQueue } from '../../background' +import { ActorDb, Blob as BlobTable } from '../db' import { BlobReader } from './reader' -import { StatusAttr } from '../../lexicon/types/com/atproto/admin/defs' export type BlobMetadata = { tempKey: string diff --git a/packages/pds/src/actor-store/db/index.ts b/packages/pds/src/actor-store/db/index.ts index 0f12b949..f5cda5d5 100644 --- a/packages/pds/src/actor-store/db/index.ts +++ b/packages/pds/src/actor-store/db/index.ts @@ -1,6 +1,6 @@ -import { DatabaseSchema } from './schema' import { Database, Migrator } from '../../db' import migrations from './migrations' +import { DatabaseSchema } from './schema' export * from './schema' export type ActorDb = Database<DatabaseSchema> diff --git a/packages/pds/src/actor-store/db/schema/index.ts b/packages/pds/src/actor-store/db/schema/index.ts index 4d0199b5..7be3c0d0 100644 --- a/packages/pds/src/actor-store/db/schema/index.ts +++ b/packages/pds/src/actor-store/db/schema/index.ts @@ -1,10 +1,10 @@ import * as accountPref from './account-pref' -import * as repoRoot from './repo-root' -import * as record from './record' import * as backlink from './backlink' -import * as repoBlock from './repo-block' import * as blob from './blob' +import * as record from './record' import * as recordBlob from './record-blob' +import * as repoBlock from './repo-block' +import * as repoRoot from './repo-root' export type DatabaseSchema = accountPref.PartialDB & repoRoot.PartialDB & diff --git a/packages/pds/src/actor-store/migrate.ts b/packages/pds/src/actor-store/migrate.ts index a54fabfe..201092ce 100644 --- a/packages/pds/src/actor-store/migrate.ts +++ b/packages/pds/src/actor-store/migrate.ts @@ -1,6 +1,6 @@ import { sql } from 'kysely' -import AppContext from '../context' import PQueue from 'p-queue' +import { AppContext } from '../context' export const forEachActorStore = async ( ctx: AppContext, diff --git a/packages/pds/src/actor-store/preference/transactor.ts b/packages/pds/src/actor-store/preference/transactor.ts index 152082df..d61a8c06 100644 --- a/packages/pds/src/actor-store/preference/transactor.ts +++ b/packages/pds/src/actor-store/preference/transactor.ts @@ -1,10 +1,10 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AuthScope } from '../../auth-verifier' import { - PreferenceReader, AccountPreference, + PreferenceReader, prefMatchNamespace, } from './reader' -import { AuthScope } from '../../auth-verifier' import { prefInScope } from './util' export class PreferenceTransactor extends PreferenceReader { diff --git a/packages/pds/src/actor-store/record/reader.ts b/packages/pds/src/actor-store/record/reader.ts index 10cd139a..c9b36c31 100644 --- a/packages/pds/src/actor-store/record/reader.ts +++ b/packages/pds/src/actor-store/record/reader.ts @@ -1,8 +1,8 @@ +import { CID } from 'multiformats/cid' import { RepoRecord } from '@atproto/lexicon' -import { cborToLexRecord, CidSet, formatDataKey } from '@atproto/repo' +import { CidSet, cborToLexRecord, formatDataKey } from '@atproto/repo' import * as syntax from '@atproto/syntax' import { AtUri, ensureValidAtUri } from '@atproto/syntax' -import { CID } from 'multiformats/cid' import { countAll, notSoftDeletedClause } from '../../db/util' import { ids } from '../../lexicon/lexicons' import { Record as ProfileRecord } from '../../lexicon/types/app/bsky/actor/profile' diff --git a/packages/pds/src/actor-store/record/transactor.ts b/packages/pds/src/actor-store/record/transactor.ts index 9145c86e..7914dbc4 100644 --- a/packages/pds/src/actor-store/record/transactor.ts +++ b/packages/pds/src/actor-store/record/transactor.ts @@ -1,11 +1,11 @@ import { CID } from 'multiformats/cid' -import { AtUri } from '@atproto/syntax' +import { RepoRecord } from '@atproto/lexicon' import { BlobStore, WriteOpAction } from '@atproto/repo' +import { AtUri } from '@atproto/syntax' +import { StatusAttr } from '../../lexicon/types/com/atproto/admin/defs' import { dbLogger as log } from '../../logger' import { ActorDb, Backlink } from '../db' import { RecordReader, getBacklinks } from './reader' -import { StatusAttr } from '../../lexicon/types/com/atproto/admin/defs' -import { RepoRecord } from '@atproto/lexicon' export class RecordTransactor extends RecordReader { constructor( diff --git a/packages/pds/src/actor-store/repo/reader.ts b/packages/pds/src/actor-store/repo/reader.ts index 5429615e..6a327a62 100644 --- a/packages/pds/src/actor-store/repo/reader.ts +++ b/packages/pds/src/actor-store/repo/reader.ts @@ -1,6 +1,4 @@ import { BlobStore } from '@atproto/repo' -import { CID } from 'multiformats/cid' - import { BlobReader } from '../blob/reader' import { ActorDb } from '../db' import { RecordReader } from '../record/reader' diff --git a/packages/pds/src/actor-store/repo/sql-repo-reader.ts b/packages/pds/src/actor-store/repo/sql-repo-reader.ts index 241a8512..7b51d675 100644 --- a/packages/pds/src/actor-store/repo/sql-repo-reader.ts +++ b/packages/pds/src/actor-store/repo/sql-repo-reader.ts @@ -1,14 +1,14 @@ +import { sql } from 'kysely' +import { CID } from 'multiformats/cid' +import { chunkArray, wait } from '@atproto/common' import { BlockMap, CidSet, ReadableBlockstore, writeCarStream, } from '@atproto/repo' -import { chunkArray, wait } from '@atproto/common' -import { CID } from 'multiformats/cid' -import { ActorDb } from '../db' -import { sql } from 'kysely' import { countAll } from '../../db' +import { ActorDb } from '../db' export class SqlRepoReader extends ReadableBlockstore { cache: BlockMap = new BlockMap() diff --git a/packages/pds/src/actor-store/repo/sql-repo-transactor.ts b/packages/pds/src/actor-store/repo/sql-repo-transactor.ts index effc182a..89cd44cd 100644 --- a/packages/pds/src/actor-store/repo/sql-repo-transactor.ts +++ b/packages/pds/src/actor-store/repo/sql-repo-transactor.ts @@ -1,6 +1,6 @@ -import { CommitData, RepoStorage, BlockMap } from '@atproto/repo' -import { chunkArray } from '@atproto/common' import { CID } from 'multiformats/cid' +import { chunkArray } from '@atproto/common' +import { BlockMap, CommitData, RepoStorage } from '@atproto/repo' import { ActorDb, RepoBlock } from '../db' import { SqlRepoReader } from './sql-repo-reader' diff --git a/packages/pds/src/actor-store/repo/transactor.ts b/packages/pds/src/actor-store/repo/transactor.ts index a9477543..b64eaca6 100644 --- a/packages/pds/src/actor-store/repo/transactor.ts +++ b/packages/pds/src/actor-store/repo/transactor.ts @@ -1,9 +1,10 @@ import { CID } from 'multiformats/cid' import * as crypto from '@atproto/crypto' import { BlobStore, CommitData, Repo, WriteOpAction } from '@atproto/repo' -import { InvalidRequestError } from '@atproto/xrpc-server' import { AtUri } from '@atproto/syntax' -import { SqlRepoTransactor } from './sql-repo-transactor' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { BackgroundQueue } from '../../background' +import { createWriteToOp, writeToOp } from '../../repo' import { BadCommitSwapError, BadRecordSwapError, @@ -11,11 +12,10 @@ import { PreparedWrite, } from '../../repo/types' import { BlobTransactor } from '../blob/transactor' -import { createWriteToOp, writeToOp } from '../../repo' -import { BackgroundQueue } from '../../background' import { ActorDb } from '../db' import { RecordTransactor } from '../record/transactor' import { RepoReader } from './reader' +import { SqlRepoTransactor } from './sql-repo-transactor' export class RepoTransactor extends RepoReader { blob: BlobTransactor diff --git a/packages/pds/src/api/app/bsky/actor/getPreferences.ts b/packages/pds/src/api/app/bsky/actor/getPreferences.ts index 4a4e7a69..3a5b20c1 100644 --- a/packages/pds/src/api/app/bsky/actor/getPreferences.ts +++ b/packages/pds/src/api/app/bsky/actor/getPreferences.ts @@ -1,6 +1,6 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' export default function (server: Server, ctx: AppContext) { if (!ctx.bskyAppView) return diff --git a/packages/pds/src/api/app/bsky/actor/getProfile.ts b/packages/pds/src/api/app/bsky/actor/getProfile.ts index fda6ad6f..354b2d70 100644 --- a/packages/pds/src/api/app/bsky/actor/getProfile.ts +++ b/packages/pds/src/api/app/bsky/actor/getProfile.ts @@ -1,9 +1,9 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { OutputSchema } from '../../../../lexicon/types/app/bsky/actor/getProfile' import { - LocalViewer, LocalRecords, + LocalViewer, pipethroughReadAfterWrite, } from '../../../../read-after-write' diff --git a/packages/pds/src/api/app/bsky/actor/getProfiles.ts b/packages/pds/src/api/app/bsky/actor/getProfiles.ts index 104635bf..576d376e 100644 --- a/packages/pds/src/api/app/bsky/actor/getProfiles.ts +++ b/packages/pds/src/api/app/bsky/actor/getProfiles.ts @@ -1,10 +1,10 @@ -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { OutputSchema } from '../../../../lexicon/types/app/bsky/actor/getProfiles' import { + LocalRecords, LocalViewer, pipethroughReadAfterWrite, - LocalRecords, } from '../../../../read-after-write' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/app/bsky/actor/index.ts b/packages/pds/src/api/app/bsky/actor/index.ts index a8a6fe31..a9f8cc4a 100644 --- a/packages/pds/src/api/app/bsky/actor/index.ts +++ b/packages/pds/src/api/app/bsky/actor/index.ts @@ -1,6 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' - import getPreferences from './getPreferences' import getProfile from './getProfile' import getProfiles from './getProfiles' diff --git a/packages/pds/src/api/app/bsky/actor/putPreferences.ts b/packages/pds/src/api/app/bsky/actor/putPreferences.ts index ea559282..4813c133 100644 --- a/packages/pds/src/api/app/bsky/actor/putPreferences.ts +++ b/packages/pds/src/api/app/bsky/actor/putPreferences.ts @@ -1,7 +1,7 @@ import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { AccountPreference } from '../../../../actor-store/preference/reader' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' export default function (server: Server, ctx: AppContext) { if (!ctx.bskyAppView) return diff --git a/packages/pds/src/api/app/bsky/feed/getActorLikes.ts b/packages/pds/src/api/app/bsky/feed/getActorLikes.ts index 02547bc2..f5133c92 100644 --- a/packages/pds/src/api/app/bsky/feed/getActorLikes.ts +++ b/packages/pds/src/api/app/bsky/feed/getActorLikes.ts @@ -1,10 +1,10 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { OutputSchema } from '../../../../lexicon/types/app/bsky/feed/getAuthorFeed' import { + LocalRecords, LocalViewer, pipethroughReadAfterWrite, - LocalRecords, } from '../../../../read-after-write' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/app/bsky/feed/getAuthorFeed.ts b/packages/pds/src/api/app/bsky/feed/getAuthorFeed.ts index 942ff8dc..7256eeb1 100644 --- a/packages/pds/src/api/app/bsky/feed/getAuthorFeed.ts +++ b/packages/pds/src/api/app/bsky/feed/getAuthorFeed.ts @@ -1,11 +1,11 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { OutputSchema } from '../../../../lexicon/types/app/bsky/feed/getAuthorFeed' import { isReasonRepost } from '../../../../lexicon/types/app/bsky/feed/defs' +import { OutputSchema } from '../../../../lexicon/types/app/bsky/feed/getAuthorFeed' import { + LocalRecords, LocalViewer, pipethroughReadAfterWrite, - LocalRecords, } from '../../../../read-after-write' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/app/bsky/feed/getFeed.ts b/packages/pds/src/api/app/bsky/feed/getFeed.ts index e4634a7e..eb7cd9ab 100644 --- a/packages/pds/src/api/app/bsky/feed/getFeed.ts +++ b/packages/pds/src/api/app/bsky/feed/getFeed.ts @@ -1,9 +1,9 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { pipethrough } from '../../../../pipethrough' -import { ids } from '../../../../lexicon/lexicons' -import { AtUri } from '@atproto/syntax' import { InvalidRequestError } from '@atproto/oauth-provider' +import { AtUri } from '@atproto/syntax' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' +import { ids } from '../../../../lexicon/lexicons' +import { pipethrough } from '../../../../pipethrough' export default function (server: Server, ctx: AppContext) { const { bskyAppView } = ctx diff --git a/packages/pds/src/api/app/bsky/feed/getPostThread.ts b/packages/pds/src/api/app/bsky/feed/getPostThread.ts index 9518a4c4..07da7194 100644 --- a/packages/pds/src/api/app/bsky/feed/getPostThread.ts +++ b/packages/pds/src/api/app/bsky/feed/getPostThread.ts @@ -1,28 +1,27 @@ import assert from 'node:assert' import { AtUri } from '@atproto/syntax' import { XRPCError } from '@atproto/xrpc' - +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' +import { ids } from '../../../../lexicon/lexicons' import { ThreadViewPost, isThreadViewPost, } from '../../../../lexicon/types/app/bsky/feed/defs' -import { Record as PostRecord } from '../../../../lexicon/types/app/bsky/feed/post' import { OutputSchema, QueryParams, } from '../../../../lexicon/types/app/bsky/feed/getPostThread' +import { Record as PostRecord } from '../../../../lexicon/types/app/bsky/feed/post' import { + LocalRecords, LocalViewer, + RecordDescript, + formatMungedResponse, getLocalLag, getRepoRev, - LocalRecords, - RecordDescript, pipethroughReadAfterWrite, - formatMungedResponse, } from '../../../../read-after-write' -import { ids } from '../../../../lexicon/lexicons' export default function (server: Server, ctx: AppContext) { if (!ctx.bskyAppView) return diff --git a/packages/pds/src/api/app/bsky/feed/getTimeline.ts b/packages/pds/src/api/app/bsky/feed/getTimeline.ts index ce32d102..f92eb86d 100644 --- a/packages/pds/src/api/app/bsky/feed/getTimeline.ts +++ b/packages/pds/src/api/app/bsky/feed/getTimeline.ts @@ -1,10 +1,10 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { OutputSchema } from '../../../../lexicon/types/app/bsky/feed/getTimeline' import { + LocalRecords, LocalViewer, pipethroughReadAfterWrite, - LocalRecords, } from '../../../../read-after-write' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/app/bsky/feed/index.ts b/packages/pds/src/api/app/bsky/feed/index.ts index 91bf8b13..85e0bdd6 100644 --- a/packages/pds/src/api/app/bsky/feed/index.ts +++ b/packages/pds/src/api/app/bsky/feed/index.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import getActorLikes from './getActorLikes' import getAuthorFeed from './getAuthorFeed' import getFeed from './getFeed' diff --git a/packages/pds/src/api/app/bsky/index.ts b/packages/pds/src/api/app/bsky/index.ts index 48019f2c..71a04c8c 100644 --- a/packages/pds/src/api/app/bsky/index.ts +++ b/packages/pds/src/api/app/bsky/index.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../context' import { Server } from '../../../lexicon' -import AppContext from '../../../context' import actor from './actor' import feed from './feed' import notification from './notification' diff --git a/packages/pds/src/api/app/bsky/notification/index.ts b/packages/pds/src/api/app/bsky/notification/index.ts index 2c14eb6d..c0912078 100644 --- a/packages/pds/src/api/app/bsky/notification/index.ts +++ b/packages/pds/src/api/app/bsky/notification/index.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import registerPush from './registerPush' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/app/bsky/notification/registerPush.ts b/packages/pds/src/api/app/bsky/notification/registerPush.ts index 22880297..f62de2d7 100644 --- a/packages/pds/src/api/app/bsky/notification/registerPush.ts +++ b/packages/pds/src/api/app/bsky/notification/registerPush.ts @@ -1,11 +1,11 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' +import { AtpAgent } from '@atproto/api' import { getNotif } from '@atproto/identity' import { InvalidRequestError } from '@atproto/xrpc-server' -import { AtpAgent } from '@atproto/api' -import { getDidDoc } from '../util/resolver' import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' +import { getDidDoc } from '../util/resolver' export default function (server: Server, ctx: AppContext) { const { bskyAppView } = ctx diff --git a/packages/pds/src/api/app/bsky/util/resolver.ts b/packages/pds/src/api/app/bsky/util/resolver.ts index eac4f916..ce128784 100644 --- a/packages/pds/src/api/app/bsky/util/resolver.ts +++ b/packages/pds/src/api/app/bsky/util/resolver.ts @@ -1,6 +1,6 @@ import { DidDocument, PoorlyFormattedDidDocumentError } from '@atproto/identity' -import AppContext from '../../../../context' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' // provides http-friendly errors during did resolution export const getDidDoc = async (ctx: AppContext, did: string) => { diff --git a/packages/pds/src/api/com/atproto/admin/deleteAccount.ts b/packages/pds/src/api/com/atproto/admin/deleteAccount.ts index cb18078d..33251eab 100644 --- a/packages/pds/src/api/com/atproto/admin/deleteAccount.ts +++ b/packages/pds/src/api/com/atproto/admin/deleteAccount.ts @@ -1,6 +1,6 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { AccountStatus } from '../../../../account-manager' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.deleteAccount({ diff --git a/packages/pds/src/api/com/atproto/admin/disableAccountInvites.ts b/packages/pds/src/api/com/atproto/admin/disableAccountInvites.ts index f22cb5a6..812db023 100644 --- a/packages/pds/src/api/com/atproto/admin/disableAccountInvites.ts +++ b/packages/pds/src/api/com/atproto/admin/disableAccountInvites.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.disableAccountInvites({ diff --git a/packages/pds/src/api/com/atproto/admin/disableInviteCodes.ts b/packages/pds/src/api/com/atproto/admin/disableInviteCodes.ts index 5be08545..04e72c73 100644 --- a/packages/pds/src/api/com/atproto/admin/disableInviteCodes.ts +++ b/packages/pds/src/api/com/atproto/admin/disableInviteCodes.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.disableInviteCodes({ diff --git a/packages/pds/src/api/com/atproto/admin/enableAccountInvites.ts b/packages/pds/src/api/com/atproto/admin/enableAccountInvites.ts index d65bd781..6df9820c 100644 --- a/packages/pds/src/api/com/atproto/admin/enableAccountInvites.ts +++ b/packages/pds/src/api/com/atproto/admin/enableAccountInvites.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.enableAccountInvites({ diff --git a/packages/pds/src/api/com/atproto/admin/getAccountInfo.ts b/packages/pds/src/api/com/atproto/admin/getAccountInfo.ts index f5561955..ba505108 100644 --- a/packages/pds/src/api/com/atproto/admin/getAccountInfo.ts +++ b/packages/pds/src/api/com/atproto/admin/getAccountInfo.ts @@ -1,7 +1,6 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { InvalidRequestError } from '@atproto/xrpc-server' -import { INVALID_HANDLE } from '@atproto/syntax' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' import { formatAccountInfo } from './util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/admin/getAccountInfos.ts b/packages/pds/src/api/com/atproto/admin/getAccountInfos.ts index 9531d7e6..5aebdfb4 100644 --- a/packages/pds/src/api/com/atproto/admin/getAccountInfos.ts +++ b/packages/pds/src/api/com/atproto/admin/getAccountInfos.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { formatAccountInfo } from './util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/admin/getInviteCodes.ts b/packages/pds/src/api/com/atproto/admin/getInviteCodes.ts index 0cfe5f5a..2169563e 100644 --- a/packages/pds/src/api/com/atproto/admin/getInviteCodes.ts +++ b/packages/pds/src/api/com/atproto/admin/getInviteCodes.ts @@ -1,13 +1,13 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { InvalidRequestError } from '@atproto/xrpc-server' +import { selectInviteCodesQb } from '../../../../account-manager/helpers/invite' +import { AppContext } from '../../../../context' import { - LabeledResult, Cursor, GenericKeyset, + LabeledResult, paginate, } from '../../../../db/pagination' -import { selectInviteCodesQb } from '../../../../account-manager/helpers/invite' +import { Server } from '../../../../lexicon' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.getInviteCodes({ diff --git a/packages/pds/src/api/com/atproto/admin/getSubjectStatus.ts b/packages/pds/src/api/com/atproto/admin/getSubjectStatus.ts index 46f8e1ef..388ee401 100644 --- a/packages/pds/src/api/com/atproto/admin/getSubjectStatus.ts +++ b/packages/pds/src/api/com/atproto/admin/getSubjectStatus.ts @@ -1,8 +1,8 @@ import { CID } from 'multiformats/cid' import { AtUri } from '@atproto/syntax' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { OutputSchema } from '../../../../lexicon/types/com/atproto/admin/getSubjectStatus' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/admin/index.ts b/packages/pds/src/api/com/atproto/admin/index.ts index 8f4d9abb..8e13ad7a 100644 --- a/packages/pds/src/api/com/atproto/admin/index.ts +++ b/packages/pds/src/api/com/atproto/admin/index.ts @@ -1,18 +1,18 @@ -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import updateSubjectStatus from './updateSubjectStatus' -import getSubjectStatus from './getSubjectStatus' -import getAccountInfo from './getAccountInfo' -import enableAccountInvites from './enableAccountInvites' +import deleteAccount from './deleteAccount' import disableAccountInvites from './disableAccountInvites' import disableInviteCodes from './disableInviteCodes' -import getInviteCodes from './getInviteCodes' -import updateAccountHandle from './updateAccountHandle' -import updateAccountEmail from './updateAccountEmail' -import updateAccountPassword from './updateAccountPassword' -import sendEmail from './sendEmail' -import deleteAccount from './deleteAccount' +import enableAccountInvites from './enableAccountInvites' +import getAccountInfo from './getAccountInfo' import getAccountInfos from './getAccountInfos' +import getInviteCodes from './getInviteCodes' +import getSubjectStatus from './getSubjectStatus' +import sendEmail from './sendEmail' +import updateAccountEmail from './updateAccountEmail' +import updateAccountHandle from './updateAccountHandle' +import updateAccountPassword from './updateAccountPassword' +import updateSubjectStatus from './updateSubjectStatus' export default function (server: Server, ctx: AppContext) { updateSubjectStatus(server, ctx) diff --git a/packages/pds/src/api/com/atproto/admin/sendEmail.ts b/packages/pds/src/api/com/atproto/admin/sendEmail.ts index 491cf1b7..74a73417 100644 --- a/packages/pds/src/api/com/atproto/admin/sendEmail.ts +++ b/packages/pds/src/api/com/atproto/admin/sendEmail.ts @@ -1,9 +1,9 @@ import assert from 'node:assert' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { resultPassthru } from '../../../proxy' import { ids } from '../../../../lexicon/lexicons' +import { resultPassthru } from '../../../proxy' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.sendEmail({ diff --git a/packages/pds/src/api/com/atproto/admin/updateAccountEmail.ts b/packages/pds/src/api/com/atproto/admin/updateAccountEmail.ts index 421cc307..d4c5c085 100644 --- a/packages/pds/src/api/com/atproto/admin/updateAccountEmail.ts +++ b/packages/pds/src/api/com/atproto/admin/updateAccountEmail.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { authPassthru } from './util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/admin/updateAccountHandle.ts b/packages/pds/src/api/com/atproto/admin/updateAccountHandle.ts index 7604e178..4b8beea2 100644 --- a/packages/pds/src/api/com/atproto/admin/updateAccountHandle.ts +++ b/packages/pds/src/api/com/atproto/admin/updateAccountHandle.ts @@ -1,7 +1,7 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { normalizeAndValidateHandle } from '../../../../handle' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { httpLogger } from '../../../../logger' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/admin/updateAccountPassword.ts b/packages/pds/src/api/com/atproto/admin/updateAccountPassword.ts index 0c7a0f8c..bd025bb9 100644 --- a/packages/pds/src/api/com/atproto/admin/updateAccountPassword.ts +++ b/packages/pds/src/api/com/atproto/admin/updateAccountPassword.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { authPassthru } from './util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/admin/updateSubjectStatus.ts b/packages/pds/src/api/com/atproto/admin/updateSubjectStatus.ts index 26af65fd..2adb541c 100644 --- a/packages/pds/src/api/com/atproto/admin/updateSubjectStatus.ts +++ b/packages/pds/src/api/com/atproto/admin/updateSubjectStatus.ts @@ -1,13 +1,13 @@ import { CID } from 'multiformats/cid' import { AtUri } from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { - isRepoRef, isRepoBlobRef, + isRepoRef, } from '../../../../lexicon/types/com/atproto/admin/defs' import { isMain as isStrongRef } from '../../../../lexicon/types/com/atproto/repo/strongRef' -import { InvalidRequestError } from '@atproto/xrpc-server' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.updateSubjectStatus({ diff --git a/packages/pds/src/api/com/atproto/admin/util.ts b/packages/pds/src/api/com/atproto/admin/util.ts index 5e7fb0a5..b1367830 100644 --- a/packages/pds/src/api/com/atproto/admin/util.ts +++ b/packages/pds/src/api/com/atproto/admin/util.ts @@ -1,6 +1,6 @@ import express from 'express' -import { ActorAccount } from '../../../../account-manager/helpers/account' import { INVALID_HANDLE } from '@atproto/syntax' +import { ActorAccount } from '../../../../account-manager/helpers/account' import { CodeDetail } from '../../../../account-manager/helpers/invite' // Output designed to passed as second arg to AtpAgent methods. diff --git a/packages/pds/src/api/com/atproto/identity/getRecommendedDidCredentials.ts b/packages/pds/src/api/com/atproto/identity/getRecommendedDidCredentials.ts index 9bb65a49..b81c1881 100644 --- a/packages/pds/src/api/com/atproto/identity/getRecommendedDidCredentials.ts +++ b/packages/pds/src/api/com/atproto/identity/getRecommendedDidCredentials.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.identity.getRecommendedDidCredentials({ diff --git a/packages/pds/src/api/com/atproto/identity/index.ts b/packages/pds/src/api/com/atproto/identity/index.ts index 0a1d72a9..d44d8e7d 100644 --- a/packages/pds/src/api/com/atproto/identity/index.ts +++ b/packages/pds/src/api/com/atproto/identity/index.ts @@ -1,11 +1,11 @@ -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import resolveHandle from './resolveHandle' -import updateHandle from './updateHandle' import getRecommendedDidCredentials from './getRecommendedDidCredentials' import requestPlcOperationSignature from './requestPlcOperationSignature' +import resolveHandle from './resolveHandle' import signPlcOperation from './signPlcOperation' import submitPlcOperation from './submitPlcOperation' +import updateHandle from './updateHandle' export default function (server: Server, ctx: AppContext) { resolveHandle(server, ctx) diff --git a/packages/pds/src/api/com/atproto/identity/requestPlcOperationSignature.ts b/packages/pds/src/api/com/atproto/identity/requestPlcOperationSignature.ts index 93be620f..044d81eb 100644 --- a/packages/pds/src/api/com/atproto/identity/requestPlcOperationSignature.ts +++ b/packages/pds/src/api/com/atproto/identity/requestPlcOperationSignature.ts @@ -1,11 +1,9 @@ import assert from 'node:assert' - import { InvalidRequestError } from '@atproto/xrpc-server' - -import AppContext from '../../../../context' +import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' -import { AuthScope } from '../../../../auth-verifier' export default function (server: Server, ctx: AppContext) { server.com.atproto.identity.requestPlcOperationSignature({ diff --git a/packages/pds/src/api/com/atproto/identity/resolveHandle.ts b/packages/pds/src/api/com/atproto/identity/resolveHandle.ts index f18529d0..d0639ef4 100644 --- a/packages/pds/src/api/com/atproto/identity/resolveHandle.ts +++ b/packages/pds/src/api/com/atproto/identity/resolveHandle.ts @@ -1,7 +1,7 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import * as ident from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.identity.resolveHandle(async ({ params }) => { diff --git a/packages/pds/src/api/com/atproto/identity/signPlcOperation.ts b/packages/pds/src/api/com/atproto/identity/signPlcOperation.ts index 3b1f646c..01f9b613 100644 --- a/packages/pds/src/api/com/atproto/identity/signPlcOperation.ts +++ b/packages/pds/src/api/com/atproto/identity/signPlcOperation.ts @@ -1,10 +1,8 @@ import assert from 'node:assert' - +import * as plc from '@did-plc/lib' import { check } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' -import * as plc from '@did-plc/lib' - -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' import { resultPassthru } from '../../../proxy' diff --git a/packages/pds/src/api/com/atproto/identity/submitPlcOperation.ts b/packages/pds/src/api/com/atproto/identity/submitPlcOperation.ts index 5a1983ae..5b8075f0 100644 --- a/packages/pds/src/api/com/atproto/identity/submitPlcOperation.ts +++ b/packages/pds/src/api/com/atproto/identity/submitPlcOperation.ts @@ -1,8 +1,8 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import * as plc from '@did-plc/lib' import { check } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' import { httpLogger as log } from '../../../../logger' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/identity/updateHandle.ts b/packages/pds/src/api/com/atproto/identity/updateHandle.ts index df0ad86a..7af0a092 100644 --- a/packages/pds/src/api/com/atproto/identity/updateHandle.ts +++ b/packages/pds/src/api/com/atproto/identity/updateHandle.ts @@ -1,11 +1,11 @@ import assert from 'node:assert' -import { InvalidRequestError } from '@atproto/xrpc-server' import { DAY, MINUTE } from '@atproto/common' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { normalizeAndValidateHandle } from '../../../../handle' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { httpLogger } from '../../../../logger' import { ids } from '../../../../lexicon/lexicons' +import { httpLogger } from '../../../../logger' export default function (server: Server, ctx: AppContext) { server.com.atproto.identity.updateHandle({ diff --git a/packages/pds/src/api/com/atproto/index.ts b/packages/pds/src/api/com/atproto/index.ts index c7d4f217..079b1b4e 100644 --- a/packages/pds/src/api/com/atproto/index.ts +++ b/packages/pds/src/api/com/atproto/index.ts @@ -1,4 +1,4 @@ -import AppContext from '../../../context' +import { AppContext } from '../../../context' import { Server } from '../../../lexicon' import admin from './admin' import identity from './identity' diff --git a/packages/pds/src/api/com/atproto/moderation/createReport.ts b/packages/pds/src/api/com/atproto/moderation/createReport.ts index fce5dc3b..467d96c6 100644 --- a/packages/pds/src/api/com/atproto/moderation/createReport.ts +++ b/packages/pds/src/api/com/atproto/moderation/createReport.ts @@ -1,9 +1,9 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { parseProxyInfo } from '../../../../pipethrough' -import { ids } from '../../../../lexicon/lexicons' import { AtpAgent } from '@atproto/api' import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' +import { ids } from '../../../../lexicon/lexicons' +import { parseProxyInfo } from '../../../../pipethrough' export default function (server: Server, ctx: AppContext) { server.com.atproto.moderation.createReport({ diff --git a/packages/pds/src/api/com/atproto/moderation/index.ts b/packages/pds/src/api/com/atproto/moderation/index.ts index d3f181f3..34b0d7ff 100644 --- a/packages/pds/src/api/com/atproto/moderation/index.ts +++ b/packages/pds/src/api/com/atproto/moderation/index.ts @@ -1,4 +1,4 @@ -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import createReport from './createReport' diff --git a/packages/pds/src/api/com/atproto/repo/applyWrites.ts b/packages/pds/src/api/com/atproto/repo/applyWrites.ts index 7fa537c3..1b4d8ebd 100644 --- a/packages/pds/src/api/com/atproto/repo/applyWrites.ts +++ b/packages/pds/src/api/com/atproto/repo/applyWrites.ts @@ -1,23 +1,25 @@ import { CID } from 'multiformats/cid' -import { InvalidRequestError, AuthRequiredError } from '@atproto/xrpc-server' import { WriteOpAction } from '@atproto/repo' -import { prepareCreate, prepareDelete, prepareUpdate } from '../../../../repo' +import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { - HandlerInput, - isCreate, - isUpdate, - isDelete, CreateResult, - UpdateResult, DeleteResult, + HandlerInput, + UpdateResult, + isCreate, + isDelete, + isUpdate, } from '../../../../lexicon/types/com/atproto/repo/applyWrites' import { BadCommitSwapError, InvalidRecordError, PreparedWrite, + prepareCreate, + prepareDelete, + prepareUpdate, } from '../../../../repo' -import AppContext from '../../../../context' const ratelimitPoints = ({ input }: { input: HandlerInput }) => { let points = 0 diff --git a/packages/pds/src/api/com/atproto/repo/createRecord.ts b/packages/pds/src/api/com/atproto/repo/createRecord.ts index 38d90d74..ee93555a 100644 --- a/packages/pds/src/api/com/atproto/repo/createRecord.ts +++ b/packages/pds/src/api/com/atproto/repo/createRecord.ts @@ -1,14 +1,15 @@ import { CID } from 'multiformats/cid' -import { InvalidRequestError, AuthRequiredError } from '@atproto/xrpc-server' import { InvalidRecordKeyError } from '@atproto/syntax' -import { prepareCreate, prepareDelete } from '../../../../repo' +import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { BadCommitSwapError, InvalidRecordError, PreparedCreate, + prepareCreate, + prepareDelete, } from '../../../../repo' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.repo.createRecord({ diff --git a/packages/pds/src/api/com/atproto/repo/deleteRecord.ts b/packages/pds/src/api/com/atproto/repo/deleteRecord.ts index bef27a5e..b39bc8c0 100644 --- a/packages/pds/src/api/com/atproto/repo/deleteRecord.ts +++ b/packages/pds/src/api/com/atproto/repo/deleteRecord.ts @@ -1,9 +1,12 @@ -import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' -import { prepareDelete } from '../../../../repo' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { BadCommitSwapError, BadRecordSwapError } from '../../../../repo' import { CID } from 'multiformats/cid' +import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' +import { + BadCommitSwapError, + BadRecordSwapError, + prepareDelete, +} from '../../../../repo' export default function (server: Server, ctx: AppContext) { server.com.atproto.repo.deleteRecord({ diff --git a/packages/pds/src/api/com/atproto/repo/describeRepo.ts b/packages/pds/src/api/com/atproto/repo/describeRepo.ts index 6bc54e87..2843630f 100644 --- a/packages/pds/src/api/com/atproto/repo/describeRepo.ts +++ b/packages/pds/src/api/com/atproto/repo/describeRepo.ts @@ -1,8 +1,8 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import * as id from '@atproto/identity' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { INVALID_HANDLE } from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' import { assertRepoAvailability } from '../sync/util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/repo/getRecord.ts b/packages/pds/src/api/com/atproto/repo/getRecord.ts index ec2bae67..970a5a86 100644 --- a/packages/pds/src/api/com/atproto/repo/getRecord.ts +++ b/packages/pds/src/api/com/atproto/repo/getRecord.ts @@ -1,7 +1,7 @@ import { AtUri } from '@atproto/syntax' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' import { pipethrough } from '../../../../pipethrough' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/repo/importRepo.ts b/packages/pds/src/api/com/atproto/repo/importRepo.ts index e0a5608d..06490842 100644 --- a/packages/pds/src/api/com/atproto/repo/importRepo.ts +++ b/packages/pds/src/api/com/atproto/repo/importRepo.ts @@ -1,18 +1,18 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { ActorStoreTransactor } from '../../../../actor-store/actor-store-transactor' +import { CID } from 'multiformats/cid' +import PQueue from 'p-queue' import { TID } from '@atproto/common' +import { BlobRef, LexValue, RepoRecord } from '@atproto/lexicon' import { WriteOpAction, getAndParseRecord, readCarStream, verifyDiff, } from '@atproto/repo' -import { InvalidRequestError } from '@atproto/xrpc-server' -import { CID } from 'multiformats/cid' -import PQueue from 'p-queue' import { AtUri } from '@atproto/syntax' -import { BlobRef, LexValue, RepoRecord } from '@atproto/lexicon' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { ActorStoreTransactor } from '../../../../actor-store/actor-store-transactor' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' export default function (server: Server, ctx: AppContext) { server.com.atproto.repo.importRepo({ diff --git a/packages/pds/src/api/com/atproto/repo/index.ts b/packages/pds/src/api/com/atproto/repo/index.ts index 5c754064..ccf3f043 100644 --- a/packages/pds/src/api/com/atproto/repo/index.ts +++ b/packages/pds/src/api/com/atproto/repo/index.ts @@ -1,15 +1,15 @@ -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import applyWrites from './applyWrites' import createRecord from './createRecord' import deleteRecord from './deleteRecord' import describeRepo from './describeRepo' import getRecord from './getRecord' +import importRepo from './importRepo' +import listMissingBlobs from './listMissingBlobs' import listRecords from './listRecords' import putRecord from './putRecord' import uploadBlob from './uploadBlob' -import listMissingBlobs from './listMissingBlobs' -import importRepo from './importRepo' export default function (server: Server, ctx: AppContext) { applyWrites(server, ctx) diff --git a/packages/pds/src/api/com/atproto/repo/listMissingBlobs.ts b/packages/pds/src/api/com/atproto/repo/listMissingBlobs.ts index f888045b..8ae46114 100644 --- a/packages/pds/src/api/com/atproto/repo/listMissingBlobs.ts +++ b/packages/pds/src/api/com/atproto/repo/listMissingBlobs.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.repo.listMissingBlobs({ diff --git a/packages/pds/src/api/com/atproto/repo/listRecords.ts b/packages/pds/src/api/com/atproto/repo/listRecords.ts index e8440835..673049b8 100644 --- a/packages/pds/src/api/com/atproto/repo/listRecords.ts +++ b/packages/pds/src/api/com/atproto/repo/listRecords.ts @@ -1,7 +1,7 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import { AtUri } from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.repo.listRecords(async ({ params }) => { diff --git a/packages/pds/src/api/com/atproto/repo/putRecord.ts b/packages/pds/src/api/com/atproto/repo/putRecord.ts index 5cc00dd1..d6d8f601 100644 --- a/packages/pds/src/api/com/atproto/repo/putRecord.ts +++ b/packages/pds/src/api/com/atproto/repo/putRecord.ts @@ -1,10 +1,10 @@ +import { CID } from 'multiformats/cid' import { BlobRef } from '@atproto/lexicon' import { CommitData } from '@atproto/repo' import { AtUri } from '@atproto/syntax' import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' -import { CID } from 'multiformats/cid' import { ActorStoreTransactor } from '../../../../actor-store/actor-store-transactor' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' import { Record as ProfileRecord } from '../../../../lexicon/types/app/bsky/actor/profile' @@ -12,9 +12,9 @@ import { BadCommitSwapError, BadRecordSwapError, InvalidRecordError, - prepareCreate, PreparedCreate, PreparedUpdate, + prepareCreate, prepareUpdate, } from '../../../../repo' diff --git a/packages/pds/src/api/com/atproto/repo/uploadBlob.ts b/packages/pds/src/api/com/atproto/repo/uploadBlob.ts index e512d9a6..6ba803b1 100644 --- a/packages/pds/src/api/com/atproto/repo/uploadBlob.ts +++ b/packages/pds/src/api/com/atproto/repo/uploadBlob.ts @@ -1,8 +1,8 @@ import { DAY } from '@atproto/common' import { UpstreamTimeoutError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { BlobMetadata } from '../../../../actor-store/blob/transactor' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' export default function (server: Server, ctx: AppContext) { server.com.atproto.repo.uploadBlob({ diff --git a/packages/pds/src/api/com/atproto/server/activateAccount.ts b/packages/pds/src/api/com/atproto/server/activateAccount.ts index 5326a593..cf5eba7b 100644 --- a/packages/pds/src/api/com/atproto/server/activateAccount.ts +++ b/packages/pds/src/api/com/atproto/server/activateAccount.ts @@ -1,11 +1,10 @@ import { CidSet } from '@atproto/repo' import { INVALID_HANDLE } from '@atproto/syntax' import { InvalidRequestError } from '@atproto/xrpc-server' - -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import { assertValidDidDocumentForService } from './util' import { authPassthru } from '../../../proxy' +import { assertValidDidDocumentForService } from './util' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.activateAccount({ diff --git a/packages/pds/src/api/com/atproto/server/checkAccountStatus.ts b/packages/pds/src/api/com/atproto/server/checkAccountStatus.ts index 3c972c19..95da820a 100644 --- a/packages/pds/src/api/com/atproto/server/checkAccountStatus.ts +++ b/packages/pds/src/api/com/atproto/server/checkAccountStatus.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { isValidDidDocForService } from './util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/server/confirmEmail.ts b/packages/pds/src/api/com/atproto/server/confirmEmail.ts index d01891e2..fd8d1ff7 100644 --- a/packages/pds/src/api/com/atproto/server/confirmEmail.ts +++ b/packages/pds/src/api/com/atproto/server/confirmEmail.ts @@ -1,8 +1,6 @@ import assert from 'node:assert' - import { InvalidRequestError } from '@atproto/xrpc-server' - -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' diff --git a/packages/pds/src/api/com/atproto/server/createAccount.ts b/packages/pds/src/api/com/atproto/server/createAccount.ts index f82f7234..090b847b 100644 --- a/packages/pds/src/api/com/atproto/server/createAccount.ts +++ b/packages/pds/src/api/com/atproto/server/createAccount.ts @@ -1,20 +1,19 @@ -import { DidDocument, MINUTE, check } from '@atproto/common' -import { AtprotoData, ensureAtpDocument } from '@atproto/identity' -import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' -import { ExportableKeypair, Keypair, Secp256k1Keypair } from '@atproto/crypto' import * as plc from '@did-plc/lib' import { isEmailValid } from '@hapi/address' import { isDisposableEmail } from 'disposable-email-domains-js' - +import { DidDocument, MINUTE, check } from '@atproto/common' +import { ExportableKeypair, Keypair, Secp256k1Keypair } from '@atproto/crypto' +import { AtprotoData, ensureAtpDocument } from '@atproto/identity' +import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { AccountStatus } from '../../../../account-manager' +import { AppContext } from '../../../../context' import { baseNormalizeAndValidate, normalizeAndValidateHandle, } from '../../../../handle' import { Server } from '../../../../lexicon' import { InputSchema as CreateAccountInput } from '../../../../lexicon/types/com/atproto/server/createAccount' -import AppContext from '../../../../context' import { safeResolveDidDoc } from './util' -import { AccountStatus } from '../../../../account-manager' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.createAccount({ diff --git a/packages/pds/src/api/com/atproto/server/createAppPassword.ts b/packages/pds/src/api/com/atproto/server/createAppPassword.ts index 3dcd1c6e..a1039e26 100644 --- a/packages/pds/src/api/com/atproto/server/createAppPassword.ts +++ b/packages/pds/src/api/com/atproto/server/createAppPassword.ts @@ -1,6 +1,5 @@ import assert from 'node:assert' - -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' import { resultPassthru } from '../../../proxy' diff --git a/packages/pds/src/api/com/atproto/server/createInviteCode.ts b/packages/pds/src/api/com/atproto/server/createInviteCode.ts index 49fe2f6c..25e00004 100644 --- a/packages/pds/src/api/com/atproto/server/createInviteCode.ts +++ b/packages/pds/src/api/com/atproto/server/createInviteCode.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { genInvCode } from './util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/server/createInviteCodes.ts b/packages/pds/src/api/com/atproto/server/createInviteCodes.ts index 8f15d55d..6bff2618 100644 --- a/packages/pds/src/api/com/atproto/server/createInviteCodes.ts +++ b/packages/pds/src/api/com/atproto/server/createInviteCodes.ts @@ -1,8 +1,8 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { genInvCodes } from './util' import { AccountCodes } from '../../../../lexicon/types/com/atproto/server/createInviteCodes' +import { genInvCodes } from './util' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.createInviteCodes({ diff --git a/packages/pds/src/api/com/atproto/server/createSession.ts b/packages/pds/src/api/com/atproto/server/createSession.ts index 3b15cde4..36c269a3 100644 --- a/packages/pds/src/api/com/atproto/server/createSession.ts +++ b/packages/pds/src/api/com/atproto/server/createSession.ts @@ -1,9 +1,8 @@ import { DAY, MINUTE } from '@atproto/common' import { INVALID_HANDLE } from '@atproto/syntax' import { AuthRequiredError } from '@atproto/xrpc-server' - import { formatAccountStatus } from '../../../../account-manager' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { authPassthru, resultPassthru } from '../../../proxy' import { didDocForSession } from './util' diff --git a/packages/pds/src/api/com/atproto/server/deactivateAccount.ts b/packages/pds/src/api/com/atproto/server/deactivateAccount.ts index 42b39b7c..ff21d6e7 100644 --- a/packages/pds/src/api/com/atproto/server/deactivateAccount.ts +++ b/packages/pds/src/api/com/atproto/server/deactivateAccount.ts @@ -1,5 +1,5 @@ import { AuthScope } from '../../../../auth-verifier' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { authPassthru } from '../../../proxy' diff --git a/packages/pds/src/api/com/atproto/server/deleteAccount.ts b/packages/pds/src/api/com/atproto/server/deleteAccount.ts index 3d896ccf..6d7b8222 100644 --- a/packages/pds/src/api/com/atproto/server/deleteAccount.ts +++ b/packages/pds/src/api/com/atproto/server/deleteAccount.ts @@ -1,9 +1,9 @@ import { MINUTE } from '@atproto/common' import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { authPassthru } from '../../../proxy' import { AccountStatus } from '../../../../account-manager' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' +import { authPassthru } from '../../../proxy' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.deleteAccount({ diff --git a/packages/pds/src/api/com/atproto/server/deleteSession.ts b/packages/pds/src/api/com/atproto/server/deleteSession.ts index 06626ac1..de1811a0 100644 --- a/packages/pds/src/api/com/atproto/server/deleteSession.ts +++ b/packages/pds/src/api/com/atproto/server/deleteSession.ts @@ -1,4 +1,4 @@ -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { authPassthru } from '../../../proxy' diff --git a/packages/pds/src/api/com/atproto/server/describeServer.ts b/packages/pds/src/api/com/atproto/server/describeServer.ts index 7c895d24..9991381f 100644 --- a/packages/pds/src/api/com/atproto/server/describeServer.ts +++ b/packages/pds/src/api/com/atproto/server/describeServer.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.describeServer(() => { diff --git a/packages/pds/src/api/com/atproto/server/getAccountInviteCodes.ts b/packages/pds/src/api/com/atproto/server/getAccountInviteCodes.ts index 655921e9..a1b38115 100644 --- a/packages/pds/src/api/com/atproto/server/getAccountInviteCodes.ts +++ b/packages/pds/src/api/com/atproto/server/getAccountInviteCodes.ts @@ -1,13 +1,11 @@ import assert from 'node:assert' - import { InvalidRequestError } from '@atproto/xrpc-server' - import { CodeDetail } from '../../../../account-manager/helpers/invite' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' +import { ids } from '../../../../lexicon/lexicons' import { resultPassthru } from '../../../proxy' import { genInvCodes } from './util' -import { ids } from '../../../../lexicon/lexicons' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.getAccountInviteCodes({ diff --git a/packages/pds/src/api/com/atproto/server/getServiceAuth.ts b/packages/pds/src/api/com/atproto/server/getServiceAuth.ts index 5f85ba57..0dfeb594 100644 --- a/packages/pds/src/api/com/atproto/server/getServiceAuth.ts +++ b/packages/pds/src/api/com/atproto/server/getServiceAuth.ts @@ -1,10 +1,10 @@ -import { InvalidRequestError, createServiceJwt } from '@atproto/xrpc-server' import { HOUR, MINUTE } from '@atproto/common' -import AppContext from '../../../../context' -import { Server } from '../../../../lexicon' -import { PRIVILEGED_METHODS, PROTECTED_METHODS } from '../../../../pipethrough' +import { InvalidRequestError, createServiceJwt } from '@atproto/xrpc-server' import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' +import { PRIVILEGED_METHODS, PROTECTED_METHODS } from '../../../../pipethrough' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.getServiceAuth({ diff --git a/packages/pds/src/api/com/atproto/server/getSession.ts b/packages/pds/src/api/com/atproto/server/getSession.ts index 00ec8681..c210cd72 100644 --- a/packages/pds/src/api/com/atproto/server/getSession.ts +++ b/packages/pds/src/api/com/atproto/server/getSession.ts @@ -1,12 +1,11 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import { INVALID_HANDLE } from '@atproto/syntax' - +import { InvalidRequestError } from '@atproto/xrpc-server' import { formatAccountStatus } from '../../../../account-manager' -import AppContext from '../../../../context' +import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { authPassthru, resultPassthru } from '../../../proxy' import { didDocForSession } from './util' -import { AuthScope } from '../../../../auth-verifier' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.getSession({ diff --git a/packages/pds/src/api/com/atproto/server/index.ts b/packages/pds/src/api/com/atproto/server/index.ts index 7208f106..8aba753f 100644 --- a/packages/pds/src/api/com/atproto/server/index.ts +++ b/packages/pds/src/api/com/atproto/server/index.ts @@ -1,39 +1,30 @@ -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' - -import describeServer from './describeServer' - +import activateAccount from './activateAccount' +import checkAccountStatus from './checkAccountStatus' +import confirmEmail from './confirmEmail' import createAccount from './createAccount' +import createAppPassword from './createAppPassword' import createInviteCode from './createInviteCode' import createInviteCodes from './createInviteCodes' -import getAccountInviteCodes from './getAccountInviteCodes' -import reserveSigningKey from './reserveSigningKey' - -import requestDelete from './requestAccountDelete' -import deleteAccount from './deleteAccount' - -import requestPasswordReset from './requestPasswordReset' -import resetPassword from './resetPassword' - -import requestEmailConfirmation from './requestEmailConfirmation' -import confirmEmail from './confirmEmail' - -import requestEmailUpdate from './requestEmailUpdate' -import updateEmail from './updateEmail' - import createSession from './createSession' -import deleteSession from './deleteSession' -import getSession from './getSession' -import refreshSession from './refreshSession' - -import createAppPassword from './createAppPassword' -import listAppPasswords from './listAppPasswords' -import revokeAppPassword from './revokeAppPassword' - -import getServiceAuth from './getServiceAuth' -import checkAccountStatus from './checkAccountStatus' -import activateAccount from './activateAccount' import deactivateAccount from './deactivateAccount' +import deleteAccount from './deleteAccount' +import deleteSession from './deleteSession' +import describeServer from './describeServer' +import getAccountInviteCodes from './getAccountInviteCodes' +import getServiceAuth from './getServiceAuth' +import getSession from './getSession' +import listAppPasswords from './listAppPasswords' +import refreshSession from './refreshSession' +import requestDelete from './requestAccountDelete' +import requestEmailConfirmation from './requestEmailConfirmation' +import requestEmailUpdate from './requestEmailUpdate' +import requestPasswordReset from './requestPasswordReset' +import reserveSigningKey from './reserveSigningKey' +import resetPassword from './resetPassword' +import revokeAppPassword from './revokeAppPassword' +import updateEmail from './updateEmail' export default function (server: Server, ctx: AppContext) { describeServer(server, ctx) diff --git a/packages/pds/src/api/com/atproto/server/listAppPasswords.ts b/packages/pds/src/api/com/atproto/server/listAppPasswords.ts index 7414e345..abb78c74 100644 --- a/packages/pds/src/api/com/atproto/server/listAppPasswords.ts +++ b/packages/pds/src/api/com/atproto/server/listAppPasswords.ts @@ -1,6 +1,5 @@ import assert from 'node:assert' - -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' import { resultPassthru } from '../../../proxy' diff --git a/packages/pds/src/api/com/atproto/server/refreshSession.ts b/packages/pds/src/api/com/atproto/server/refreshSession.ts index f3be56b9..d653c3a6 100644 --- a/packages/pds/src/api/com/atproto/server/refreshSession.ts +++ b/packages/pds/src/api/com/atproto/server/refreshSession.ts @@ -1,12 +1,11 @@ import { INVALID_HANDLE } from '@atproto/syntax' import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' - import { formatAccountStatus } from '../../../../account-manager' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { softDeleted } from '../../../../db/util' import { Server } from '../../../../lexicon' -import { didDocForSession } from './util' import { authPassthru, resultPassthru } from '../../../proxy' +import { didDocForSession } from './util' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.refreshSession({ diff --git a/packages/pds/src/api/com/atproto/server/requestAccountDelete.ts b/packages/pds/src/api/com/atproto/server/requestAccountDelete.ts index 3068ff45..35ec2ae5 100644 --- a/packages/pds/src/api/com/atproto/server/requestAccountDelete.ts +++ b/packages/pds/src/api/com/atproto/server/requestAccountDelete.ts @@ -1,9 +1,7 @@ import assert from 'node:assert' - import { DAY, HOUR } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' - -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' diff --git a/packages/pds/src/api/com/atproto/server/requestEmailConfirmation.ts b/packages/pds/src/api/com/atproto/server/requestEmailConfirmation.ts index 6e1724f4..411a2653 100644 --- a/packages/pds/src/api/com/atproto/server/requestEmailConfirmation.ts +++ b/packages/pds/src/api/com/atproto/server/requestEmailConfirmation.ts @@ -1,9 +1,7 @@ import assert from 'node:assert' - import { DAY, HOUR } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' - -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' diff --git a/packages/pds/src/api/com/atproto/server/requestEmailUpdate.ts b/packages/pds/src/api/com/atproto/server/requestEmailUpdate.ts index fa7b0f22..a7b9bcfe 100644 --- a/packages/pds/src/api/com/atproto/server/requestEmailUpdate.ts +++ b/packages/pds/src/api/com/atproto/server/requestEmailUpdate.ts @@ -1,12 +1,10 @@ import assert from 'node:assert' - import { DAY, HOUR } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' - -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import { resultPassthru } from '../../../proxy' import { ids } from '../../../../lexicon/lexicons' +import { resultPassthru } from '../../../proxy' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.requestEmailUpdate({ diff --git a/packages/pds/src/api/com/atproto/server/requestPasswordReset.ts b/packages/pds/src/api/com/atproto/server/requestPasswordReset.ts index 1ad117ad..15f0bcd7 100644 --- a/packages/pds/src/api/com/atproto/server/requestPasswordReset.ts +++ b/packages/pds/src/api/com/atproto/server/requestPasswordReset.ts @@ -1,6 +1,6 @@ import { DAY, HOUR } from '@atproto/common' import { InvalidRequestError } from '@atproto/xrpc-server' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { authPassthru } from '../../../proxy' diff --git a/packages/pds/src/api/com/atproto/server/reserveSigningKey.ts b/packages/pds/src/api/com/atproto/server/reserveSigningKey.ts index 177bf4af..9326e76f 100644 --- a/packages/pds/src/api/com/atproto/server/reserveSigningKey.ts +++ b/packages/pds/src/api/com/atproto/server/reserveSigningKey.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.com.atproto.server.reserveSigningKey({ diff --git a/packages/pds/src/api/com/atproto/server/resetPassword.ts b/packages/pds/src/api/com/atproto/server/resetPassword.ts index 6194680e..dc6ef8cb 100644 --- a/packages/pds/src/api/com/atproto/server/resetPassword.ts +++ b/packages/pds/src/api/com/atproto/server/resetPassword.ts @@ -1,6 +1,6 @@ -import AppContext from '../../../../context' -import { Server } from '../../../../lexicon' import { MINUTE } from '@atproto/common' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' import { authPassthru } from '../../../proxy' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/server/revokeAppPassword.ts b/packages/pds/src/api/com/atproto/server/revokeAppPassword.ts index 2d1c9f2e..c4bca296 100644 --- a/packages/pds/src/api/com/atproto/server/revokeAppPassword.ts +++ b/packages/pds/src/api/com/atproto/server/revokeAppPassword.ts @@ -1,6 +1,5 @@ import assert from 'node:assert' - -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' diff --git a/packages/pds/src/api/com/atproto/server/updateEmail.ts b/packages/pds/src/api/com/atproto/server/updateEmail.ts index 838089f1..b7e2ab2c 100644 --- a/packages/pds/src/api/com/atproto/server/updateEmail.ts +++ b/packages/pds/src/api/com/atproto/server/updateEmail.ts @@ -1,11 +1,9 @@ import assert from 'node:assert' - -import { InvalidRequestError } from '@atproto/xrpc-server' import { isEmailValid } from '@hapi/address' import { isDisposableEmail } from 'disposable-email-domains-js' - +import { InvalidRequestError } from '@atproto/xrpc-server' import { UserAlreadyExistsError } from '../../../../account-manager/helpers/account' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' diff --git a/packages/pds/src/api/com/atproto/server/util.ts b/packages/pds/src/api/com/atproto/server/util.ts index e6f52b8d..9aeb435e 100644 --- a/packages/pds/src/api/com/atproto/server/util.ts +++ b/packages/pds/src/api/com/atproto/server/util.ts @@ -1,10 +1,10 @@ +import { getPdsEndpoint, getSigningDidKey } from '@atproto/common' import * as crypto from '@atproto/crypto' import { DidDocument } from '@atproto/identity' -import { ServerConfig } from '../../../../config' -import AppContext from '../../../../context' -import { httpLogger } from '../../../../logger' import { InvalidRequestError } from '@atproto/xrpc-server' -import { getPdsEndpoint, getSigningDidKey } from '@atproto/common' +import { ServerConfig } from '../../../../config' +import { AppContext } from '../../../../context' +import { httpLogger } from '../../../../logger' // generate an invite code preceded by the hostname // with '.'s replaced by '-'s so it is not mistakable for a link diff --git a/packages/pds/src/api/com/atproto/sync/deprecated/getCheckout.ts b/packages/pds/src/api/com/atproto/sync/deprecated/getCheckout.ts index 0abc3585..5a6a7ac8 100644 --- a/packages/pds/src/api/com/atproto/sync/deprecated/getCheckout.ts +++ b/packages/pds/src/api/com/atproto/sync/deprecated/getCheckout.ts @@ -1,5 +1,5 @@ +import { AppContext } from '../../../../../context' import { Server } from '../../../../../lexicon' -import AppContext from '../../../../../context' import { getCarStream } from '../getRepo' import { assertRepoAvailability } from '../util' diff --git a/packages/pds/src/api/com/atproto/sync/deprecated/getHead.ts b/packages/pds/src/api/com/atproto/sync/deprecated/getHead.ts index 9c74e333..f5aa2a96 100644 --- a/packages/pds/src/api/com/atproto/sync/deprecated/getHead.ts +++ b/packages/pds/src/api/com/atproto/sync/deprecated/getHead.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../../context' import { Server } from '../../../../../lexicon' -import AppContext from '../../../../../context' import { assertRepoAvailability } from '../util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/sync/getBlob.ts b/packages/pds/src/api/com/atproto/sync/getBlob.ts index 81256560..e45d6885 100644 --- a/packages/pds/src/api/com/atproto/sync/getBlob.ts +++ b/packages/pds/src/api/com/atproto/sync/getBlob.ts @@ -1,10 +1,10 @@ import { CID } from 'multiformats/cid' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { InvalidRequestError } from '@atproto/xrpc-server' import { BlobNotFoundError } from '@atproto/repo' -import { assertRepoAvailability } from './util' +import { InvalidRequestError } from '@atproto/xrpc-server' import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' +import { assertRepoAvailability } from './util' export default function (server: Server, ctx: AppContext) { server.com.atproto.sync.getBlob({ diff --git a/packages/pds/src/api/com/atproto/sync/getBlocks.ts b/packages/pds/src/api/com/atproto/sync/getBlocks.ts index dfd10b61..de6e5fae 100644 --- a/packages/pds/src/api/com/atproto/sync/getBlocks.ts +++ b/packages/pds/src/api/com/atproto/sync/getBlocks.ts @@ -1,9 +1,9 @@ import { CID } from 'multiformats/cid' -import { InvalidRequestError } from '@atproto/xrpc-server' import { byteIterableToStream } from '@atproto/common' import { blocksToCarStream } from '@atproto/repo' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { assertRepoAvailability } from './util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/sync/getLatestCommit.ts b/packages/pds/src/api/com/atproto/sync/getLatestCommit.ts index 65043612..cedf408b 100644 --- a/packages/pds/src/api/com/atproto/sync/getLatestCommit.ts +++ b/packages/pds/src/api/com/atproto/sync/getLatestCommit.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { assertRepoAvailability } from './util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/sync/getRecord.ts b/packages/pds/src/api/com/atproto/sync/getRecord.ts index 9cc4adfe..3952ea3f 100644 --- a/packages/pds/src/api/com/atproto/sync/getRecord.ts +++ b/packages/pds/src/api/com/atproto/sync/getRecord.ts @@ -1,11 +1,11 @@ -import stream from 'stream' +import stream from 'node:stream' import { CID } from 'multiformats/cid' +import { byteIterableToStream } from '@atproto/common' import * as repo from '@atproto/repo' import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { byteIterableToStream } from '@atproto/common' import { SqlRepoReader } from '../../../../actor-store/repo/sql-repo-reader' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' import { assertRepoAvailability } from './util' export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/sync/getRepo.ts b/packages/pds/src/api/com/atproto/sync/getRepo.ts index 3282220f..b20714f2 100644 --- a/packages/pds/src/api/com/atproto/sync/getRepo.ts +++ b/packages/pds/src/api/com/atproto/sync/getRepo.ts @@ -1,13 +1,13 @@ -import stream from 'stream' +import stream from 'node:stream' import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' import { RepoRootNotFoundError, SqlRepoReader, } from '../../../../actor-store/repo/sql-repo-reader' -import { assertRepoAvailability } from './util' import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' +import { assertRepoAvailability } from './util' export default function (server: Server, ctx: AppContext) { server.com.atproto.sync.getRepo({ diff --git a/packages/pds/src/api/com/atproto/sync/getRepoStatus.ts b/packages/pds/src/api/com/atproto/sync/getRepoStatus.ts index d4bb30c7..725e2895 100644 --- a/packages/pds/src/api/com/atproto/sync/getRepoStatus.ts +++ b/packages/pds/src/api/com/atproto/sync/getRepoStatus.ts @@ -1,7 +1,7 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { assertRepoAvailability } from './util' import { formatAccountStatus } from '../../../../account-manager' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' +import { assertRepoAvailability } from './util' export default function (server: Server, ctx: AppContext) { server.com.atproto.sync.getRepoStatus({ diff --git a/packages/pds/src/api/com/atproto/sync/index.ts b/packages/pds/src/api/com/atproto/sync/index.ts index 128a2a94..2bb032cf 100644 --- a/packages/pds/src/api/com/atproto/sync/index.ts +++ b/packages/pds/src/api/com/atproto/sync/index.ts @@ -1,16 +1,16 @@ +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' +import getCheckout from './deprecated/getCheckout' +import getHead from './deprecated/getHead' import getBlob from './getBlob' import getBlocks from './getBlocks' import getLatestCommit from './getLatestCommit' -import getRepoStatus from './getRepoStatus' import getRecord from './getRecord' import getRepo from './getRepo' -import subscribeRepos from './subscribeRepos' +import getRepoStatus from './getRepoStatus' import listBlobs from './listBlobs' import listRepos from './listRepos' -import getCheckout from './deprecated/getCheckout' -import getHead from './deprecated/getHead' +import subscribeRepos from './subscribeRepos' export default function (server: Server, ctx: AppContext) { getBlob(server, ctx) diff --git a/packages/pds/src/api/com/atproto/sync/listBlobs.ts b/packages/pds/src/api/com/atproto/sync/listBlobs.ts index 97d04644..af87b8c6 100644 --- a/packages/pds/src/api/com/atproto/sync/listBlobs.ts +++ b/packages/pds/src/api/com/atproto/sync/listBlobs.ts @@ -1,7 +1,7 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { assertRepoAvailability } from './util' import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' +import { assertRepoAvailability } from './util' export default function (server: Server, ctx: AppContext) { server.com.atproto.sync.listBlobs({ diff --git a/packages/pds/src/api/com/atproto/sync/listRepos.ts b/packages/pds/src/api/com/atproto/sync/listRepos.ts index 38f676e4..a3a3a765 100644 --- a/packages/pds/src/api/com/atproto/sync/listRepos.ts +++ b/packages/pds/src/api/com/atproto/sync/listRepos.ts @@ -1,8 +1,8 @@ import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { Cursor, GenericKeyset, paginate } from '../../../../db/pagination' import { formatAccountStatus } from '../../../../account-manager' +import { AppContext } from '../../../../context' +import { Cursor, GenericKeyset, paginate } from '../../../../db/pagination' +import { Server } from '../../../../lexicon' export default function (server: Server, ctx: AppContext) { server.com.atproto.sync.listRepos(async ({ params }) => { diff --git a/packages/pds/src/api/com/atproto/sync/subscribeRepos.ts b/packages/pds/src/api/com/atproto/sync/subscribeRepos.ts index 15d7d9dd..cfa5e75e 100644 --- a/packages/pds/src/api/com/atproto/sync/subscribeRepos.ts +++ b/packages/pds/src/api/com/atproto/sync/subscribeRepos.ts @@ -1,8 +1,8 @@ import { InvalidRequestError } from '@atproto/xrpc-server' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import Outbox from '../../../../sequencer/outbox' import { httpLogger } from '../../../../logger' +import { Outbox } from '../../../../sequencer/outbox' export default function (server: Server, ctx: AppContext) { server.com.atproto.sync.subscribeRepos(async function* ({ params, signal }) { diff --git a/packages/pds/src/api/com/atproto/sync/util.ts b/packages/pds/src/api/com/atproto/sync/util.ts index 626d3699..da670fed 100644 --- a/packages/pds/src/api/com/atproto/sync/util.ts +++ b/packages/pds/src/api/com/atproto/sync/util.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' import { ActorAccount } from '../../../../account-manager/helpers/account' -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' export const assertRepoAvailability = async ( ctx: AppContext, diff --git a/packages/pds/src/api/com/atproto/temp/checkSignupQueue.ts b/packages/pds/src/api/com/atproto/temp/checkSignupQueue.ts index 9f9dc32f..d7384a38 100644 --- a/packages/pds/src/api/com/atproto/temp/checkSignupQueue.ts +++ b/packages/pds/src/api/com/atproto/temp/checkSignupQueue.ts @@ -1,7 +1,7 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { authPassthru, resultPassthru } from '../../../proxy' import { AuthScope } from '../../../../auth-verifier' +import { AppContext } from '../../../../context' +import { Server } from '../../../../lexicon' +import { authPassthru, resultPassthru } from '../../../proxy' // THIS IS A TEMPORARY UNSPECCED ROUTE export default function (server: Server, ctx: AppContext) { diff --git a/packages/pds/src/api/com/atproto/temp/index.ts b/packages/pds/src/api/com/atproto/temp/index.ts index a39aef98..43620a3b 100644 --- a/packages/pds/src/api/com/atproto/temp/index.ts +++ b/packages/pds/src/api/com/atproto/temp/index.ts @@ -1,4 +1,4 @@ -import AppContext from '../../../../context' +import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import checkSignupQueue from './checkSignupQueue' diff --git a/packages/pds/src/api/index.ts b/packages/pds/src/api/index.ts index f0d08cd5..395eca76 100644 --- a/packages/pds/src/api/index.ts +++ b/packages/pds/src/api/index.ts @@ -1,7 +1,7 @@ +import { AppContext } from '../context' import { Server } from '../lexicon' -import comAtproto from './com/atproto' import appBsky from './app/bsky' -import AppContext from '../context' +import comAtproto from './com/atproto' export default function (server: Server, ctx: AppContext) { comAtproto(server, ctx) diff --git a/packages/pds/src/api/proxy.ts b/packages/pds/src/api/proxy.ts index fc51115e..1813eff0 100644 --- a/packages/pds/src/api/proxy.ts +++ b/packages/pds/src/api/proxy.ts @@ -1,6 +1,6 @@ +import { IncomingMessage } from 'node:http' import { Headers } from '@atproto/xrpc' import { InvalidRequestError } from '@atproto/xrpc-server' -import { IncomingMessage } from 'node:http' export const resultPassthru = <T>(result: { headers: Headers; data: T }) => { // @TODO pass through any headers that we always want to forward along diff --git a/packages/pds/src/auth-routes.ts b/packages/pds/src/auth-routes.ts index 059c61b1..d952f336 100644 --- a/packages/pds/src/auth-routes.ts +++ b/packages/pds/src/auth-routes.ts @@ -1,7 +1,6 @@ -import { oauthProtectedResourceMetadataSchema } from '@atproto/oauth-provider' import { Router } from 'express' - -import AppContext from './context' +import { oauthProtectedResourceMetadataSchema } from '@atproto/oauth-provider' +import { AppContext } from './context' export const createRouter = ({ authProvider, cfg }: AppContext): Router => { const router = Router() diff --git a/packages/pds/src/auth-verifier.ts b/packages/pds/src/auth-verifier.ts index 53c93c8a..7db67142 100644 --- a/packages/pds/src/auth-verifier.ts +++ b/packages/pds/src/auth-verifier.ts @@ -1,6 +1,7 @@ import { KeyObject, createPublicKey, createSecretKey } from 'node:crypto' import { IncomingMessage, ServerResponse } from 'node:http' - +import * as jose from 'jose' +import KeyEncoder from 'key-encoder' import { getVerificationMaterial } from '@atproto/common' import { IdResolver, getDidKeyFromMultibase } from '@atproto/identity' import { @@ -18,8 +19,6 @@ import { parseReqNsid, verifyJwt as verifyServiceJwt, } from '@atproto/xrpc-server' -import * as jose from 'jose' -import KeyEncoder from 'key-encoder' import { AccountManager } from './account-manager' import { softDeleted } from './db' diff --git a/packages/pds/src/basic-routes.ts b/packages/pds/src/basic-routes.ts index 429674e9..3b9454c0 100644 --- a/packages/pds/src/basic-routes.ts +++ b/packages/pds/src/basic-routes.ts @@ -1,9 +1,9 @@ -import express from 'express' +import { Router } from 'express' import { sql } from 'kysely' -import AppContext from './context' +import { AppContext } from './context' -export const createRouter = (ctx: AppContext): express.Router => { - const router = express.Router() +export const createRouter = (ctx: AppContext): Router => { + const router = Router() router.get('/', function (req, res) { res.type('text/plain') diff --git a/packages/pds/src/config/config.ts b/packages/pds/src/config/config.ts index 263d9875..0c5f5d9e 100644 --- a/packages/pds/src/config/config.ts +++ b/packages/pds/src/config/config.ts @@ -1,5 +1,5 @@ -import path from 'node:path' import assert from 'node:assert' +import path from 'node:path' import { DAY, HOUR, SECOND } from '@atproto/common' import { Customization } from '@atproto/oauth-provider' import { ServerEnvironment } from './env' diff --git a/packages/pds/src/config/env.ts b/packages/pds/src/config/env.ts index 1d26d4c0..22d2a393 100644 --- a/packages/pds/src/config/env.ts +++ b/packages/pds/src/config/env.ts @@ -1,4 +1,4 @@ -import { envInt, envStr, envBool, envList } from '@atproto/common' +import { envBool, envInt, envList, envStr } from '@atproto/common' export const readEnv = (): ServerEnvironment => { return { diff --git a/packages/pds/src/context.ts b/packages/pds/src/context.ts index 7b434017..3ed0b84a 100644 --- a/packages/pds/src/context.ts +++ b/packages/pds/src/context.ts @@ -1,19 +1,12 @@ import assert from 'node:assert' -import * as undici from 'undici' -import * as nodemailer from 'nodemailer' -import { Redis } from 'ioredis' import * as plc from '@did-plc/lib' -import { - Fetch, - isUnicastIp, - loggedFetch, - safeFetchWrap, - unicastLookup, -} from '@atproto-labs/fetch-node' -import * as crypto from '@atproto/crypto' -import { IdResolver } from '@atproto/identity' +import { Redis } from 'ioredis' +import * as nodemailer from 'nodemailer' +import * as undici from 'undici' import { AtpAgent } from '@atproto/api' import { KmsKeypair, S3BlobStore } from '@atproto/aws' +import * as crypto from '@atproto/crypto' +import { IdResolver } from '@atproto/identity' import { JoseKey, OAuthVerifier } from '@atproto/oauth-provider' import { BlobStore } from '@atproto/repo' import { @@ -23,28 +16,34 @@ import { createServiceAuthHeaders, createServiceJwt, } from '@atproto/xrpc-server' - -import { ServerConfig, ServerSecrets } from './config' -import { PdsOAuthProvider } from './oauth/provider' +import { + Fetch, + isUnicastIp, + loggedFetch, + safeFetchWrap, + unicastLookup, +} from '@atproto-labs/fetch-node' +import { AccountManager } from './account-manager' +import { ActorStore } from './actor-store/actor-store' import { AuthVerifier, createPublicKeyObject, createSecretKeyObject, } from './auth-verifier' +import { BackgroundQueue } from './background' +import { BskyAppView } from './bsky-app-view' +import { ServerConfig, ServerSecrets } from './config' +import { Crawlers } from './crawlers' +import { DidSqliteCache } from './did-cache' +import { DiskBlobStore } from './disk-blobstore' +import { ImageUrlBuilder } from './image/image-url-builder' import { fetchLogger } from './logger' import { ServerMailer } from './mailer' import { ModerationMailer } from './mailer/moderation' -import { AccountManager } from './account-manager' -import { Sequencer } from './sequencer' -import { BackgroundQueue } from './background' -import { DidSqliteCache } from './did-cache' -import { Crawlers } from './crawlers' -import { DiskBlobStore } from './disk-blobstore' -import { getRedisClient } from './redis' -import { ActorStore } from './actor-store/actor-store' +import { PdsOAuthProvider } from './oauth/provider' import { LocalViewer, LocalViewerCreator } from './read-after-write/viewer' -import { BskyAppView } from './bsky-app-view' -import { ImageUrlBuilder } from './image/image-url-builder' +import { getRedisClient } from './redis' +import { Sequencer } from './sequencer' export type AppContextOptions = { actorStore: ActorStore @@ -416,5 +415,3 @@ export class AppContext { }) } } - -export default AppContext diff --git a/packages/pds/src/crawlers.ts b/packages/pds/src/crawlers.ts index 5ca20b10..1cea6895 100644 --- a/packages/pds/src/crawlers.ts +++ b/packages/pds/src/crawlers.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' -import { crawlerLogger as log } from './logger' import { MINUTE } from '@atproto/common' import { BackgroundQueue } from './background' +import { crawlerLogger as log } from './logger' const NOTIFY_THRESHOLD = 20 * MINUTE diff --git a/packages/pds/src/db/db.ts b/packages/pds/src/db/db.ts index f0a2c670..469b820e 100644 --- a/packages/pds/src/db/db.ts +++ b/packages/pds/src/db/db.ts @@ -1,16 +1,16 @@ -import assert from 'assert' +import assert from 'node:assert' +import SqliteDB from 'better-sqlite3' import { - sql, Kysely, - SqliteDialect, KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs, - RootOperationNode, QueryResult, + RootOperationNode, + SqliteDialect, UnknownRow, + sql, } from 'kysely' -import SqliteDB from 'better-sqlite3' import { dbLogger } from '../logger' import { retrySqlite } from './util' diff --git a/packages/pds/src/db/migrator.ts b/packages/pds/src/db/migrator.ts index 844a80c2..d7557211 100644 --- a/packages/pds/src/db/migrator.ts +++ b/packages/pds/src/db/migrator.ts @@ -1,4 +1,4 @@ -import { Kysely, Migrator as KyselyMigrator, Migration } from 'kysely' +import { Kysely, Migration, Migrator as KyselyMigrator } from 'kysely' export class Migrator<T> extends KyselyMigrator { constructor( diff --git a/packages/pds/src/db/tables/moderation.ts b/packages/pds/src/db/tables/moderation.ts index e8707d4c..bc67eda3 100644 --- a/packages/pds/src/db/tables/moderation.ts +++ b/packages/pds/src/db/tables/moderation.ts @@ -1,10 +1,10 @@ import { Generated } from 'kysely' import { - REASONOTHER, - REASONSPAM, REASONMISLEADING, + REASONOTHER, REASONRUDE, REASONSEXUAL, + REASONSPAM, REASONVIOLATION, } from '../../lexicon/types/com/atproto/moderation/defs' diff --git a/packages/pds/src/db/util.ts b/packages/pds/src/db/util.ts index 519921c7..79d7e05f 100644 --- a/packages/pds/src/db/util.ts +++ b/packages/pds/src/db/util.ts @@ -1,4 +1,3 @@ -import { retry } from '@atproto/common' import { DummyDriver, DynamicModule, @@ -6,11 +5,12 @@ import { RawBuilder, ReferenceExpression, SelectQueryBuilder, - sql, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler, + sql, } from 'kysely' +import { retry } from '@atproto/common' // Applies to repo_root or record table export const notSoftDeletedClause = (alias: DbRef) => { diff --git a/packages/pds/src/did-cache/db/index.ts b/packages/pds/src/did-cache/db/index.ts index 25031c63..8b656c05 100644 --- a/packages/pds/src/did-cache/db/index.ts +++ b/packages/pds/src/did-cache/db/index.ts @@ -1,6 +1,6 @@ import { Database, Migrator } from '../../db' -import { DidCacheSchema } from './schema' import migrations from './migrations' +import { DidCacheSchema } from './schema' export * from './schema' diff --git a/packages/pds/src/did-cache/index.ts b/packages/pds/src/did-cache/index.ts index 52628309..254ea92c 100644 --- a/packages/pds/src/did-cache/index.ts +++ b/packages/pds/src/did-cache/index.ts @@ -2,7 +2,7 @@ import PQueue from 'p-queue' import { CacheResult, DidCache, DidDocument } from '@atproto/identity' import { excluded } from '../db/util' import { didCacheLogger } from '../logger' -import { DidCacheDb, getMigrator, getDb } from './db' +import { DidCacheDb, getDb, getMigrator } from './db' export class DidSqliteCache implements DidCache { db: DidCacheDb diff --git a/packages/pds/src/disk-blobstore.ts b/packages/pds/src/disk-blobstore.ts index c5578d5d..c3374703 100644 --- a/packages/pds/src/disk-blobstore.ts +++ b/packages/pds/src/disk-blobstore.ts @@ -1,12 +1,12 @@ -import fs from 'fs/promises' -import fsSync from 'fs' -import stream from 'stream' -import path from 'path' +import fsSync from 'node:fs' +import fs from 'node:fs/promises' +import path from 'node:path' +import stream from 'node:stream' import { CID } from 'multiformats/cid' -import { BlobNotFoundError, BlobStore } from '@atproto/repo' +import { fileExists, isErrnoException, rmIfExists } from '@atproto/common' import { randomStr } from '@atproto/crypto' +import { BlobNotFoundError, BlobStore } from '@atproto/repo' import { httpLogger as log } from './logger' -import { isErrnoException, fileExists, rmIfExists } from '@atproto/common' export class DiskBlobStore implements BlobStore { constructor( @@ -153,5 +153,3 @@ const translateErr = (err: unknown): BlobNotFoundError | unknown => { } return err } - -export default DiskBlobStore diff --git a/packages/pds/src/error.ts b/packages/pds/src/error.ts index b1033b26..3b34abf2 100644 --- a/packages/pds/src/error.ts +++ b/packages/pds/src/error.ts @@ -1,7 +1,7 @@ -import { XRPCError } from '@atproto/xrpc-server' import { ErrorRequestHandler } from 'express' -import { httpLogger as log } from './logger' import { OAuthError } from '@atproto/oauth-provider' +import { XRPCError } from '@atproto/xrpc-server' +import { httpLogger as log } from './logger' export const handler: ErrorRequestHandler = (err, _req, res, next) => { log.error(err, 'unexpected internal server error') diff --git a/packages/pds/src/handle/index.ts b/packages/pds/src/handle/index.ts index 7f9859c8..0be31a5f 100644 --- a/packages/pds/src/handle/index.ts +++ b/packages/pds/src/handle/index.ts @@ -1,8 +1,8 @@ import * as ident from '@atproto/syntax' import { InvalidRequestError } from '@atproto/xrpc-server' -import { reservedSubdomains } from './reserved' +import { AppContext } from '../context' import { hasExplicitSlur } from './explicit-slurs' -import AppContext from '../context' +import { reservedSubdomains } from './reserved' export const normalizeAndValidateHandle = async (opts: { ctx: AppContext diff --git a/packages/pds/src/image/index.ts b/packages/pds/src/image/index.ts index 4f70321f..fdc603ec 100644 --- a/packages/pds/src/image/index.ts +++ b/packages/pds/src/image/index.ts @@ -1,5 +1,5 @@ -import { Readable } from 'stream' -import { pipeline } from 'stream/promises' +import { Readable } from 'node:stream' +import { pipeline } from 'node:stream/promises' import sharp from 'sharp' import { errHasMsg } from '@atproto/common' diff --git a/packages/pds/src/index.ts b/packages/pds/src/index.ts index 1508fe9b..6cef35eb 100644 --- a/packages/pds/src/index.ts +++ b/packages/pds/src/index.ts @@ -4,27 +4,29 @@ // leave at top of file before importing Routes import 'express-async-errors' -import express from 'express' -import cors from 'cors' -import http from 'http' -import events from 'events' -import { Options as XrpcServerOptions } from '@atproto/xrpc-server' -import { DAY, HOUR, MINUTE, SECOND } from '@atproto/common' -import { XRPCError, ResponseType } from '@atproto/xrpc-server' +import events from 'node:events' +import http from 'node:http' import { PlcClientError } from '@did-plc/lib' - +import cors from 'cors' +import express from 'express' +import { HttpTerminator, createHttpTerminator } from 'http-terminator' +import { DAY, HOUR, MINUTE, SECOND } from '@atproto/common' +import { + Options as XrpcServerOptions, + ResponseType, + XRPCError, +} from '@atproto/xrpc-server' import API from './api' import * as authRoutes from './auth-routes' import * as basicRoutes from './basic-routes' -import * as wellKnown from './well-known' -import * as error from './error' -import { loggerMiddleware } from './logger' import { ServerConfig, ServerSecrets } from './config' +import { AppContext, AppContextOptions } from './context' +import * as error from './error' import { createServer } from './lexicon' -import { createHttpTerminator, HttpTerminator } from 'http-terminator' -import AppContext, { AppContextOptions } from './context' -import compression from './util/compression' +import { loggerMiddleware } from './logger' import { proxyHandler } from './pipethrough' +import compression from './util/compression' +import * as wellKnown from './well-known' export * from './config' export { Database } from './db' diff --git a/packages/pds/src/logger.ts b/packages/pds/src/logger.ts index a2b691b5..4e0e68bd 100644 --- a/packages/pds/src/logger.ts +++ b/packages/pds/src/logger.ts @@ -1,6 +1,6 @@ import { type IncomingMessage } from 'node:http' import { stdSerializers } from 'pino' -import pinoHttp from 'pino-http' +import { pinoHttp } from 'pino-http' import { obfuscateHeaders, subsystemLogger } from '@atproto/common' export const dbLogger = subsystemLogger('pds:db') diff --git a/packages/pds/src/mailer/index.ts b/packages/pds/src/mailer/index.ts index f5b92586..8ae5780e 100644 --- a/packages/pds/src/mailer/index.ts +++ b/packages/pds/src/mailer/index.ts @@ -1,10 +1,9 @@ import { Transporter } from 'nodemailer' -import { htmlToText } from 'nodemailer-html-to-text' import Mail from 'nodemailer/lib/mailer' import SMTPTransport from 'nodemailer/lib/smtp-transport' +import { htmlToText } from 'nodemailer-html-to-text' import { ServerConfig } from '../config' import { mailerLogger } from '../logger' - import * as templates from './templates' export class ServerMailer { diff --git a/packages/pds/src/mailer/moderation.ts b/packages/pds/src/mailer/moderation.ts index 7ddd7371..37440dfe 100644 --- a/packages/pds/src/mailer/moderation.ts +++ b/packages/pds/src/mailer/moderation.ts @@ -1,7 +1,7 @@ import { Transporter } from 'nodemailer' import Mail from 'nodemailer/lib/mailer' -import { htmlToText } from 'nodemailer-html-to-text' import SMTPTransport from 'nodemailer/lib/smtp-transport' +import { htmlToText } from 'nodemailer-html-to-text' import { ServerConfig } from '../config' import { mailerLogger } from '../logger' diff --git a/packages/pds/src/mailer/templates/confirm-email.d.ts b/packages/pds/src/mailer/templates/confirm-email.d.ts index 3e2726d6..86d4a722 100644 --- a/packages/pds/src/mailer/templates/confirm-email.d.ts +++ b/packages/pds/src/mailer/templates/confirm-email.d.ts @@ -1,4 +1,4 @@ -import { TemplateDelegate } from "handlebars"; +import { TemplateDelegate } from 'handlebars' declare const template: TemplateDelegate<{ token: string }> export default template diff --git a/packages/pds/src/mailer/templates/delete-account.d.ts b/packages/pds/src/mailer/templates/delete-account.d.ts index 3e2726d6..86d4a722 100644 --- a/packages/pds/src/mailer/templates/delete-account.d.ts +++ b/packages/pds/src/mailer/templates/delete-account.d.ts @@ -1,4 +1,4 @@ -import { TemplateDelegate } from "handlebars"; +import { TemplateDelegate } from 'handlebars' declare const template: TemplateDelegate<{ token: string }> export default template diff --git a/packages/pds/src/mailer/templates/plc-operation.d.ts b/packages/pds/src/mailer/templates/plc-operation.d.ts index 3e2726d6..86d4a722 100644 --- a/packages/pds/src/mailer/templates/plc-operation.d.ts +++ b/packages/pds/src/mailer/templates/plc-operation.d.ts @@ -1,4 +1,4 @@ -import { TemplateDelegate } from "handlebars"; +import { TemplateDelegate } from 'handlebars' declare const template: TemplateDelegate<{ token: string }> export default template diff --git a/packages/pds/src/mailer/templates/reset-password.d.ts b/packages/pds/src/mailer/templates/reset-password.d.ts index fddf84b9..e6e5c02a 100644 --- a/packages/pds/src/mailer/templates/reset-password.d.ts +++ b/packages/pds/src/mailer/templates/reset-password.d.ts @@ -1,4 +1,4 @@ -import { TemplateDelegate } from "handlebars"; +import { TemplateDelegate } from 'handlebars' declare const template: TemplateDelegate<{ token: string; handle: string }> export default template diff --git a/packages/pds/src/mailer/templates/update-email.d.ts b/packages/pds/src/mailer/templates/update-email.d.ts index 3e2726d6..86d4a722 100644 --- a/packages/pds/src/mailer/templates/update-email.d.ts +++ b/packages/pds/src/mailer/templates/update-email.d.ts @@ -1,4 +1,4 @@ -import { TemplateDelegate } from "handlebars"; +import { TemplateDelegate } from 'handlebars' declare const template: TemplateDelegate<{ token: string }> export default template diff --git a/packages/pds/src/oauth/provider.ts b/packages/pds/src/oauth/provider.ts index 534e5c34..e5cbccbe 100644 --- a/packages/pds/src/oauth/provider.ts +++ b/packages/pds/src/oauth/provider.ts @@ -3,7 +3,6 @@ import { OAuthProvider, OAuthProviderOptions, } from '@atproto/oauth-provider' - import { AccountManager } from '../account-manager/index' import { oauthLogger } from '../logger' diff --git a/packages/pds/src/pipethrough.ts b/packages/pds/src/pipethrough.ts index d45ce590..a10133fe 100644 --- a/packages/pds/src/pipethrough.ts +++ b/packages/pds/src/pipethrough.ts @@ -1,9 +1,7 @@ -import express from 'express' import { IncomingHttpHeaders, ServerResponse } from 'node:http' import { PassThrough, Readable } from 'node:stream' +import express from 'express' import { Dispatcher } from 'undici' - -import { buildProxiedContentEncoding } from '@atproto-labs/xrpc-utils' import { decodeStream, getServiceEndpoint, @@ -17,11 +15,11 @@ import { HandlerPipeThroughStream, InternalServerError, InvalidRequestError, - parseReqNsid, XRPCError as XRPCServerError, + parseReqNsid, } from '@atproto/xrpc-server' - -import AppContext from './context' +import { buildProxiedContentEncoding } from '@atproto-labs/xrpc-utils' +import { AppContext } from './context' import { ids } from './lexicon/lexicons' import { httpLogger } from './logger' diff --git a/packages/pds/src/read-after-write/types.ts b/packages/pds/src/read-after-write/types.ts index cfdd6ff7..df492136 100644 --- a/packages/pds/src/read-after-write/types.ts +++ b/packages/pds/src/read-after-write/types.ts @@ -1,8 +1,8 @@ -import { Headers } from '@atproto/xrpc' -import { AtUri } from '@atproto/syntax' import { CID } from 'multiformats/cid' -import { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post' +import { AtUri } from '@atproto/syntax' +import { Headers } from '@atproto/xrpc' import { Record as ProfileRecord } from '../lexicon/types/app/bsky/actor/profile' +import { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post' import { LocalViewer } from './viewer' export type LocalRecords = { diff --git a/packages/pds/src/read-after-write/util.ts b/packages/pds/src/read-after-write/util.ts index 16ae22d0..02336d17 100644 --- a/packages/pds/src/read-after-write/util.ts +++ b/packages/pds/src/read-after-write/util.ts @@ -1,3 +1,4 @@ +import express from 'express' import { jsonToLex } from '@atproto/lexicon' import { HeadersMap } from '@atproto/xrpc' import { @@ -5,9 +6,7 @@ import { HandlerPipeThroughBuffer, parseReqNsid, } from '@atproto/xrpc-server' -import express from 'express' - -import AppContext from '../context' +import { AppContext } from '../context' import { lexicons } from '../lexicon/lexicons' import { readStickyLogger as log } from '../logger' import { diff --git a/packages/pds/src/read-after-write/viewer.ts b/packages/pds/src/read-after-write/viewer.ts index abfd56ba..9fc649a0 100644 --- a/packages/pds/src/read-after-write/viewer.ts +++ b/packages/pds/src/read-after-write/viewer.ts @@ -1,42 +1,42 @@ import { AtUri, INVALID_HANDLE } from '@atproto/syntax' import { createServiceAuthHeaders } from '@atproto/xrpc-server' -import { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post' -import { Record as ProfileRecord } from '../lexicon/types/app/bsky/actor/profile' +import { AccountManager } from '../account-manager' +import { ActorStoreReader } from '../actor-store/actor-store-reader' +import { BskyAppView } from '../bsky-app-view' +import { ImageUrlBuilder } from '../image/image-url-builder' import { ids } from '../lexicon/lexicons' import { - ProfileViewBasic, ProfileView, + ProfileViewBasic, ProfileViewDetailed, } from '../lexicon/types/app/bsky/actor/defs' -import { - FeedViewPost, - GeneratorView, - PostView, -} from '../lexicon/types/app/bsky/feed/defs' -import { ListView } from '../lexicon/types/app/bsky/graph/defs' -import { - Main as EmbedImages, - isMain as isEmbedImages, -} from '../lexicon/types/app/bsky/embed/images' +import { Record as ProfileRecord } from '../lexicon/types/app/bsky/actor/profile' import { Main as EmbedExternal, isMain as isEmbedExternal, } from '../lexicon/types/app/bsky/embed/external' +import { + Main as EmbedImages, + isMain as isEmbedImages, +} from '../lexicon/types/app/bsky/embed/images' import { Main as EmbedRecord, - isMain as isEmbedRecord, View as EmbedRecordView, ViewRecord, + isMain as isEmbedRecord, } from '../lexicon/types/app/bsky/embed/record' import { Main as EmbedRecordWithMedia, isMain as isEmbedRecordWithMedia, } from '../lexicon/types/app/bsky/embed/recordWithMedia' -import { ActorStoreReader } from '../actor-store/actor-store-reader' +import { + FeedViewPost, + GeneratorView, + PostView, +} from '../lexicon/types/app/bsky/feed/defs' +import { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post' +import { ListView } from '../lexicon/types/app/bsky/graph/defs' import { LocalRecords, RecordDescript } from './types' -import { AccountManager } from '../account-manager' -import { BskyAppView } from '../bsky-app-view' -import { ImageUrlBuilder } from '../image/image-url-builder' type CommonSignedUris = 'avatar' | 'banner' | 'feed_thumbnail' | 'feed_fullsize' diff --git a/packages/pds/src/redis.ts b/packages/pds/src/redis.ts index 67528a11..f6760ae3 100644 --- a/packages/pds/src/redis.ts +++ b/packages/pds/src/redis.ts @@ -1,4 +1,4 @@ -import assert from 'assert' +import assert from 'node:assert' import { Redis } from 'ioredis' import { redisLogger } from './logger' diff --git a/packages/pds/src/repo/prepare.ts b/packages/pds/src/repo/prepare.ts index bbe4f24d..eb86f4e9 100644 --- a/packages/pds/src/repo/prepare.ts +++ b/packages/pds/src/repo/prepare.ts @@ -1,9 +1,4 @@ import { CID } from 'multiformats/cid' -import { - AtUri, - ensureValidRecordKey, - ensureValidDatetime, -} from '@atproto/syntax' import { TID, check, dataToCborBlock } from '@atproto/common' import { BlobRef, @@ -15,30 +10,35 @@ import { untypedJsonBlobRef, } from '@atproto/lexicon' import { - cborToLex, - RecordDeleteOp, RecordCreateOp, + RecordDeleteOp, RecordUpdateOp, RecordWriteOp, WriteOpAction, + cborToLex, } from '@atproto/repo' import { - PreparedCreate, - PreparedUpdate, - PreparedDelete, + AtUri, + ensureValidDatetime, + ensureValidRecordKey, +} from '@atproto/syntax' +import { hasExplicitSlur } from '../handle/explicit-slurs' +import * as lex from '../lexicon/lexicons' +import { isRecord as isProfile } from '../lexicon/types/app/bsky/actor/profile' +import { isRecord as isFeedGenerator } from '../lexicon/types/app/bsky/feed/generator' +import { isRecord as isPost } from '../lexicon/types/app/bsky/feed/post' +import { isRecord as isList } from '../lexicon/types/app/bsky/graph/list' +import { isRecord as isStarterPack } from '../lexicon/types/app/bsky/graph/starterpack' +import { isTag } from '../lexicon/types/app/bsky/richtext/facet' +import { InvalidRecordError, - PreparedWrite, PreparedBlobRef, + PreparedCreate, + PreparedDelete, + PreparedUpdate, + PreparedWrite, ValidationStatus, } from './types' -import * as lex from '../lexicon/lexicons' -import { isRecord as isFeedGenerator } from '../lexicon/types/app/bsky/feed/generator' -import { isRecord as isStarterPack } from '../lexicon/types/app/bsky/graph/starterpack' -import { isRecord as isPost } from '../lexicon/types/app/bsky/feed/post' -import { isTag } from '../lexicon/types/app/bsky/richtext/facet' -import { isRecord as isList } from '../lexicon/types/app/bsky/graph/list' -import { isRecord as isProfile } from '../lexicon/types/app/bsky/actor/profile' -import { hasExplicitSlur } from '../handle/explicit-slurs' export const assertValidRecordWithStatus = ( record: Record<string, unknown>, diff --git a/packages/pds/src/repo/types.ts b/packages/pds/src/repo/types.ts index c0c8fd16..41fbba73 100644 --- a/packages/pds/src/repo/types.ts +++ b/packages/pds/src/repo/types.ts @@ -1,7 +1,7 @@ import { CID } from 'multiformats/cid' -import { AtUri } from '@atproto/syntax' -import { WriteOpAction } from '@atproto/repo' import { RepoRecord } from '@atproto/lexicon' +import { WriteOpAction } from '@atproto/repo' +import { AtUri } from '@atproto/syntax' export type ValidationStatus = 'valid' | 'unknown' | undefined diff --git a/packages/pds/src/scripts/rebuild-repo.ts b/packages/pds/src/scripts/rebuild-repo.ts index 0a71b524..6be44546 100644 --- a/packages/pds/src/scripts/rebuild-repo.ts +++ b/packages/pds/src/scripts/rebuild-repo.ts @@ -1,3 +1,4 @@ +import readline from 'node:readline/promises' import { TID } from '@atproto/common' import { BlockMap, @@ -6,8 +7,7 @@ import { MemoryBlockstore, signCommit, } from '@atproto/repo' -import readline from 'node:readline/promises' -import AppContext from '../context' +import { AppContext } from '../context' export const rebuildRepo = async (ctx: AppContext, args: string[]) => { const did = args[0] diff --git a/packages/pds/src/sequencer/db/index.ts b/packages/pds/src/sequencer/db/index.ts index 132e46f5..c630a62f 100644 --- a/packages/pds/src/sequencer/db/index.ts +++ b/packages/pds/src/sequencer/db/index.ts @@ -1,6 +1,6 @@ import { Database, Migrator } from '../../db' -import { SequencerDbSchema } from './schema' import migrations from './migrations' +import { SequencerDbSchema } from './schema' export * from './schema' diff --git a/packages/pds/src/sequencer/events.ts b/packages/pds/src/sequencer/events.ts index 4d7de593..c314c7b7 100644 --- a/packages/pds/src/sequencer/events.ts +++ b/packages/pds/src/sequencer/events.ts @@ -1,16 +1,16 @@ +import { CID } from 'multiformats/cid' import { z } from 'zod' import { cborEncode, schema } from '@atproto/common' import { BlockMap, - blocksToCarFile, CidSet, CommitData, WriteOpAction, + blocksToCarFile, } from '@atproto/repo' -import { PreparedWrite } from '../repo' -import { CID } from 'multiformats/cid' -import { RepoSeqInsert } from './db' import { AccountStatus } from '../account-manager' +import { PreparedWrite } from '../repo' +import { RepoSeqInsert } from './db' export const formatSeqCommit = async ( did: string, diff --git a/packages/pds/src/sequencer/outbox.ts b/packages/pds/src/sequencer/outbox.ts index 56ccba45..3d9cfd1e 100644 --- a/packages/pds/src/sequencer/outbox.ts +++ b/packages/pds/src/sequencer/outbox.ts @@ -1,6 +1,6 @@ import { AsyncBuffer, AsyncBufferFullError } from '@atproto/common' -import { Sequencer, SeqEvt } from '.' import { InvalidRequestError } from '@atproto/xrpc-server' +import { SeqEvt, Sequencer } from '.' export type OutboxOpts = { maxBufferSize: number @@ -121,5 +121,3 @@ export class Outbox { } } } - -export default Outbox diff --git a/packages/pds/src/sequencer/sequencer.ts b/packages/pds/src/sequencer/sequencer.ts index 680c8c2a..0448dec1 100644 --- a/packages/pds/src/sequencer/sequencer.ts +++ b/packages/pds/src/sequencer/sequencer.ts @@ -1,8 +1,18 @@ -import EventEmitter from 'events' +import EventEmitter from 'node:events' import TypedEmitter from 'typed-emitter' -import { seqLogger as log } from '../logger' import { SECOND, cborDecode, wait } from '@atproto/common' import { CommitData } from '@atproto/repo' +import { AccountStatus } from '../account-manager/helpers/account' +import { Crawlers } from '../crawlers' +import { seqLogger as log } from '../logger' +import { PreparedWrite } from '../repo' +import { + RepoSeqEntry, + RepoSeqInsert, + SequencerDb, + getDb, + getMigrator, +} from './db' import { AccountEvt, CommitEvt, @@ -16,16 +26,6 @@ import { formatSeqIdentityEvt, formatSeqTombstone, } from './events' -import { - SequencerDb, - getMigrator, - RepoSeqEntry, - RepoSeqInsert, - getDb, -} from './db' -import { PreparedWrite } from '../repo' -import { Crawlers } from '../crawlers' -import { AccountStatus } from '../account-manager/helpers/account' export * from './events' diff --git a/packages/pds/src/util/compression.ts b/packages/pds/src/util/compression.ts index f79a672f..1d150f73 100644 --- a/packages/pds/src/util/compression.ts +++ b/packages/pds/src/util/compression.ts @@ -1,5 +1,5 @@ -import express from 'express' import compression from 'compression' +import express from 'express' export default function () { return compression({ diff --git a/packages/pds/src/util/params.ts b/packages/pds/src/util/params.ts index 016af53c..a1009d01 100644 --- a/packages/pds/src/util/params.ts +++ b/packages/pds/src/util/params.ts @@ -1,5 +1,5 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' import { CID } from 'multiformats/cid' +import { InvalidRequestError } from '@atproto/xrpc-server' export const parseCidParam = (cid: string): CID => { try { diff --git a/packages/pds/src/well-known.ts b/packages/pds/src/well-known.ts index a2c0fe4a..68285e1d 100644 --- a/packages/pds/src/well-known.ts +++ b/packages/pds/src/well-known.ts @@ -1,8 +1,8 @@ -import express from 'express' -import AppContext from './context' +import { Router } from 'express' +import { AppContext } from './context' -export const createRouter = (ctx: AppContext): express.Router => { - const router = express.Router() +export const createRouter = (ctx: AppContext): Router => { + const router = Router() router.get('/.well-known/atproto-did', async function (req, res) { const handle = req.hostname diff --git a/packages/pds/tests/_util.ts b/packages/pds/tests/_util.ts index a49c834c..d3cd7b2c 100644 --- a/packages/pds/tests/_util.ts +++ b/packages/pds/tests/_util.ts @@ -1,11 +1,11 @@ -import { lexToJson } from '@atproto/lexicon' -import { AtUri } from '@atproto/syntax' -import { type Express } from 'express' -import { CID } from 'multiformats/cid' import { Server } from 'node:http' import { AddressInfo } from 'node:net' -import { FeedViewPost } from '../src/lexicon/types/app/bsky/feed/defs' +import { type Express } from 'express' +import { CID } from 'multiformats/cid' import { ToolsOzoneModerationDefs } from '@atproto/api' +import { lexToJson } from '@atproto/lexicon' +import { AtUri } from '@atproto/syntax' +import { FeedViewPost } from '../src/lexicon/types/app/bsky/feed/defs' // Swap out identifiers and dates with stable // values for the purpose of snapshot testing diff --git a/packages/pds/tests/account-deletion.test.ts b/packages/pds/tests/account-deletion.test.ts index 1490eb04..b2fe0a41 100644 --- a/packages/pds/tests/account-deletion.test.ts +++ b/packages/pds/tests/account-deletion.test.ts @@ -1,21 +1,21 @@ -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' -import { once, EventEmitter } from 'events' +import { EventEmitter, once } from 'node:events' import { Selectable } from 'kysely' import Mail from 'nodemailer/lib/mailer' import { AtpAgent } from '@atproto/api' -import basicSeed from './seeds/basic' -import { ServerMailer } from '../src/mailer' +import { fileExists } from '@atproto/common' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import { BlobNotFoundError } from '@atproto/repo' +import { AppContext } from '../src' import { - RepoRoot, Account, AppPassword, EmailToken, RefreshToken, + RepoRoot, } from '../src/account-manager/db' -import { fileExists } from '@atproto/common' -import { AppContext } from '../src' +import { ServerMailer } from '../src/mailer' import { RepoSeq } from '../src/sequencer/db' +import basicSeed from './seeds/basic' describe('account deletion', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/account-migration.test.ts b/packages/pds/tests/account-migration.test.ts index 9cef0070..6400dcd6 100644 --- a/packages/pds/tests/account-migration.test.ts +++ b/packages/pds/tests/account-migration.test.ts @@ -1,12 +1,12 @@ -import { AtpAgent, AtUri } from '@atproto/api' +import assert from 'node:assert' +import { AtUri, AtpAgent } from '@atproto/api' import { - mockNetworkUtilities, SeedClient, TestNetworkNoAppView, TestPds, + mockNetworkUtilities, } from '@atproto/dev-env' import { readCar } from '@atproto/repo' -import assert from 'assert' import { ids } from '../src/lexicon/lexicons' describe('account migration', () => { diff --git a/packages/pds/tests/account.test.ts b/packages/pds/tests/account.test.ts index 20731122..e932266a 100644 --- a/packages/pds/tests/account.test.ts +++ b/packages/pds/tests/account.test.ts @@ -1,9 +1,9 @@ +import { EventEmitter, once } from 'node:events' +import Mail from 'nodemailer/lib/mailer' import { AtpAgent, ComAtprotoServerResetPassword } from '@atproto/api' import * as crypto from '@atproto/crypto' import { TestNetworkNoAppView } from '@atproto/dev-env' import { IdResolver } from '@atproto/identity' -import { EventEmitter, once } from 'events' -import Mail from 'nodemailer/lib/mailer' import { AppContext } from '../src' import { ServerMailer } from '../src/mailer' diff --git a/packages/pds/tests/app-passwords.test.ts b/packages/pds/tests/app-passwords.test.ts index 35bae752..7368007f 100644 --- a/packages/pds/tests/app-passwords.test.ts +++ b/packages/pds/tests/app-passwords.test.ts @@ -1,6 +1,6 @@ +import * as jose from 'jose' import { AtpAgent } from '@atproto/api' import { TestNetworkNoAppView } from '@atproto/dev-env' -import * as jose from 'jose' describe('app_passwords', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/blob-deletes.test.ts b/packages/pds/tests/blob-deletes.test.ts index 6b0412b0..dfb20c5f 100644 --- a/packages/pds/tests/blob-deletes.test.ts +++ b/packages/pds/tests/blob-deletes.test.ts @@ -1,7 +1,7 @@ -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' import { AtpAgent, BlobRef } from '@atproto/api' -import { ids } from '../src/lexicon/lexicons' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import { AppContext } from '../src' +import { ids } from '../src/lexicon/lexicons' describe('blob deletes', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/create-post.test.ts b/packages/pds/tests/create-post.test.ts index 742fe2bb..f1120d7f 100644 --- a/packages/pds/tests/create-post.test.ts +++ b/packages/pds/tests/create-post.test.ts @@ -1,11 +1,11 @@ -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' import { AppBskyFeedPost, - AtUri, - RichText, AppBskyRichtextFacet, + AtUri, AtpAgent, + RichText, } from '@atproto/api' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import basicSeed from './seeds/basic' describe('pds posts record creation', () => { diff --git a/packages/pds/tests/crud.test.ts b/packages/pds/tests/crud.test.ts index 61273410..e0509ebc 100644 --- a/packages/pds/tests/crud.test.ts +++ b/packages/pds/tests/crud.test.ts @@ -1,15 +1,15 @@ import assert from 'node:assert' import fs from 'node:fs/promises' -import { AtUri } from '@atproto/syntax' import { AtpAgent } from '@atproto/api' -import { BlobRef } from '@atproto/lexicon' +import { TID, cidForCbor, ui8ToArrayBuffer } from '@atproto/common' import { TestNetworkNoAppView } from '@atproto/dev-env' -import { cidForCbor, TID, ui8ToArrayBuffer } from '@atproto/common' +import { BlobRef } from '@atproto/lexicon' import { BlobNotFoundError } from '@atproto/repo' +import { AtUri } from '@atproto/syntax' +import { AppContext } from '../src/context' +import { ids, lexicons } from '../src/lexicon/lexicons' import * as Post from '../src/lexicon/types/app/bsky/feed/post' import { forSnapshot, paginateAll } from './_util' -import AppContext from '../src/context' -import { ids, lexicons } from '../src/lexicon/lexicons' describe('crud operations', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/email-confirmation.test.ts b/packages/pds/tests/email-confirmation.test.ts index 2e7472d0..9f2e3ab0 100644 --- a/packages/pds/tests/email-confirmation.test.ts +++ b/packages/pds/tests/email-confirmation.test.ts @@ -1,13 +1,13 @@ -import { once, EventEmitter } from 'events' +import { EventEmitter, once } from 'node:events' import Mail from 'nodemailer/lib/mailer' -import { AtpAgent } from '@atproto/api' -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' -import userSeed from './seeds/users' -import { ServerMailer } from '../src/mailer' import { + AtpAgent, ComAtprotoServerConfirmEmail, ComAtprotoServerUpdateEmail, } from '@atproto/api' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' +import { ServerMailer } from '../src/mailer' +import userSeed from './seeds/users' describe('email confirmation', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/entryway.test.ts b/packages/pds/tests/entryway.test.ts index 30c5c376..c3d59aef 100644 --- a/packages/pds/tests/entryway.test.ts +++ b/packages/pds/tests/entryway.test.ts @@ -1,15 +1,15 @@ +import assert from 'node:assert' import * as os from 'node:os' import * as path from 'node:path' -import assert from 'node:assert' -import { decodeJwt } from 'jose' import * as plcLib from '@did-plc/lib' -import { parseReqNsid } from '@atproto/xrpc-server' +import getPort from 'get-port' +import { decodeJwt } from 'jose' +import * as ui8 from 'uint8arrays' import { AtpAgent } from '@atproto/api' import { Secp256k1Keypair, randomStr } from '@atproto/crypto' import { SeedClient, TestPds, TestPlc, mockResolvers } from '@atproto/dev-env' import * as pdsEntryway from '@atproto/pds-entryway' -import * as ui8 from 'uint8arrays' -import getPort from 'get-port' +import { parseReqNsid } from '@atproto/xrpc-server' describe('entryway', () => { let plc: TestPlc diff --git a/packages/pds/tests/file-uploads.test.ts b/packages/pds/tests/file-uploads.test.ts index 4173e339..b3cbd26d 100644 --- a/packages/pds/tests/file-uploads.test.ts +++ b/packages/pds/tests/file-uploads.test.ts @@ -1,14 +1,14 @@ -import fs from 'fs/promises' -import { gzipSync } from 'zlib' -import { AtpAgent } from '@atproto/api' -import { AppContext } from '../src' -import DiskBlobStore from '../src/disk-blobstore' +import fs from 'node:fs/promises' +import { gzipSync } from 'node:zlib' import * as uint8arrays from 'uint8arrays' +import { AtpAgent } from '@atproto/api' import { randomBytes } from '@atproto/crypto' -import { BlobRef } from '@atproto/lexicon' import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' -import { users } from './seeds/users' +import { BlobRef } from '@atproto/lexicon' +import { AppContext } from '../src' import { ActorDb } from '../src/actor-store/db' +import { DiskBlobStore } from '../src/disk-blobstore' +import { users } from './seeds/users' describe('file uploads', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/handles.test.ts b/packages/pds/tests/handles.test.ts index 50c4ba94..7cb43686 100644 --- a/packages/pds/tests/handles.test.ts +++ b/packages/pds/tests/handles.test.ts @@ -1,14 +1,14 @@ -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import { IdResolver } from '@atproto/identity' -import basicSeed from './seeds/basic' import { AppContext } from '../src' +import basicSeed from './seeds/basic' // outside of suite so they can be used in mock let alice: string let bob: string -jest.mock('dns/promises', () => { +jest.mock('node:dns/promises', () => { return { resolveTxt: (domain: string) => { if (domain === '_atproto.alice.external') { diff --git a/packages/pds/tests/invites-admin.test.ts b/packages/pds/tests/invites-admin.test.ts index 7ffe1d3d..990e8aee 100644 --- a/packages/pds/tests/invites-admin.test.ts +++ b/packages/pds/tests/invites-admin.test.ts @@ -1,6 +1,6 @@ -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' import { randomStr } from '@atproto/crypto' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' describe('pds admin invite views', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/moderation.test.ts b/packages/pds/tests/moderation.test.ts index 2eeff465..9adda3f4 100644 --- a/packages/pds/tests/moderation.test.ts +++ b/packages/pds/tests/moderation.test.ts @@ -1,12 +1,12 @@ import { AtpAgent } from '@atproto/api' -import { TestNetworkNoAppView, ImageRef, SeedClient } from '@atproto/dev-env' +import { ImageRef, SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import { BlobNotFoundError } from '@atproto/repo' -import basicSeed from './seeds/basic' import { RepoBlobRef, RepoRef, } from '../src/lexicon/types/com/atproto/admin/defs' import { Main as StrongRef } from '../src/lexicon/types/com/atproto/repo/strongRef' +import basicSeed from './seeds/basic' describe('moderation', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/moderator-auth.test.ts b/packages/pds/tests/moderator-auth.test.ts index 3330ba28..a4cb7e60 100644 --- a/packages/pds/tests/moderator-auth.test.ts +++ b/packages/pds/tests/moderator-auth.test.ts @@ -1,11 +1,11 @@ -import { AtpAgent } from '@atproto/api' -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' -import { Keypair, Secp256k1Keypair } from '@atproto/crypto' -import { createServiceAuthHeaders } from '@atproto/xrpc-server' import * as plc from '@did-plc/lib' -import usersSeed from './seeds/users' -import { RepoRef } from '../src/lexicon/types/com/atproto/admin/defs' +import { AtpAgent } from '@atproto/api' +import { Keypair, Secp256k1Keypair } from '@atproto/crypto' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' +import { createServiceAuthHeaders } from '@atproto/xrpc-server' import { ids } from '../src/lexicon/lexicons' +import { RepoRef } from '../src/lexicon/types/com/atproto/admin/defs' +import usersSeed from './seeds/users' describe('moderator auth', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/oauth.test.ts b/packages/pds/tests/oauth.test.ts index 3087a6f5..088773d7 100644 --- a/packages/pds/tests/oauth.test.ts +++ b/packages/pds/tests/oauth.test.ts @@ -1,11 +1,11 @@ import assert from 'node:assert' +import { once } from 'node:events' +import { Server, createServer } from 'node:http' +import { AddressInfo } from 'node:net' +import { Browser, Page, launch } from 'puppeteer' import { TestNetworkNoAppView } from '@atproto/dev-env' // @ts-expect-error (json file) import files from '@atproto/oauth-client-browser-example' -import { Browser, launch, Page } from 'puppeteer' -import { once } from 'node:events' -import { createServer, Server } from 'node:http' -import { AddressInfo } from 'node:net' const getVisibleElement = async (page: Page, selector: string) => { const elementHandle = await page.waitForSelector(selector) diff --git a/packages/pds/tests/plc-operations.test.ts b/packages/pds/tests/plc-operations.test.ts index 8c982fae..1e00c851 100644 --- a/packages/pds/tests/plc-operations.test.ts +++ b/packages/pds/tests/plc-operations.test.ts @@ -1,13 +1,13 @@ +import assert from 'node:assert' +import { once } from 'node:events' +import { EventEmitter } from 'node:stream' +import * as plc from '@did-plc/lib' +import Mail from 'nodemailer/lib/mailer' import { AtpAgent } from '@atproto/api' +import { check } from '@atproto/common' import { Secp256k1Keypair } from '@atproto/crypto' import { SeedClient, TestNetworkNoAppView, basicSeed } from '@atproto/dev-env' -import * as plc from '@did-plc/lib' -import assert from 'assert' -import { once } from 'events' -import Mail from 'nodemailer/lib/mailer' -import { EventEmitter } from 'stream' import { AppContext } from '../src' -import { check } from '@atproto/common' describe('plc operations', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/preferences.test.ts b/packages/pds/tests/preferences.test.ts index 93abdb61..eedd3fe1 100644 --- a/packages/pds/tests/preferences.test.ts +++ b/packages/pds/tests/preferences.test.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' -import usersSeed from './seeds/users' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import { AuthScope } from '../dist/auth-verifier' +import usersSeed from './seeds/users' describe('user preferences', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/proxied/admin.test.ts b/packages/pds/tests/proxied/admin.test.ts index d9871ea7..0a725025 100644 --- a/packages/pds/tests/proxied/admin.test.ts +++ b/packages/pds/tests/proxied/admin.test.ts @@ -1,7 +1,7 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import basicSeed from '../seeds/basic' +import { SeedClient, TestNetwork } from '@atproto/dev-env' import { forSnapshot } from '../_util' +import basicSeed from '../seeds/basic' describe('proxies admin requests', () => { let network: TestNetwork diff --git a/packages/pds/tests/proxied/feedgen.test.ts b/packages/pds/tests/proxied/feedgen.test.ts index 52831eda..d78d71b5 100644 --- a/packages/pds/tests/proxied/feedgen.test.ts +++ b/packages/pds/tests/proxied/feedgen.test.ts @@ -1,8 +1,8 @@ -import { AtpAgent, AtUri } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import basicSeed from '../seeds/basic' -import { forSnapshot } from '../_util' +import { AtUri, AtpAgent } from '@atproto/api' +import { SeedClient, TestNetwork } from '@atproto/dev-env' import { InvalidRequestError } from '@atproto/xrpc-server' +import { forSnapshot } from '../_util' +import basicSeed from '../seeds/basic' describe('feedgen proxy view', () => { let network: TestNetwork diff --git a/packages/pds/tests/proxied/notif.test.ts b/packages/pds/tests/proxied/notif.test.ts index 1d244be8..48b2924d 100644 --- a/packages/pds/tests/proxied/notif.test.ts +++ b/packages/pds/tests/proxied/notif.test.ts @@ -1,12 +1,12 @@ -import { once } from 'events' -import http from 'http' -import { AddressInfo } from 'net' +import { once } from 'node:events' +import http from 'node:http' +import { AddressInfo } from 'node:net' import express from 'express' import { AtpAgent } from '@atproto/api' -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import { verifyJwt } from '@atproto/xrpc-server' -import usersSeed from '../seeds/users' import { createServer } from '../../src/lexicon' +import usersSeed from '../seeds/users' describe('notif service proxy', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/proxied/procedures.test.ts b/packages/pds/tests/proxied/procedures.test.ts index 3cc84e3f..fa96e93f 100644 --- a/packages/pds/tests/proxied/procedures.test.ts +++ b/packages/pds/tests/proxied/procedures.test.ts @@ -1,5 +1,5 @@ import { AtpAgent } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { SeedClient, TestNetwork } from '@atproto/dev-env' import basicSeed from '../seeds/basic' describe('proxies appview procedures', () => { diff --git a/packages/pds/tests/proxied/proxy-catchall.test.ts b/packages/pds/tests/proxied/proxy-catchall.test.ts index 7ed68d1a..18d78198 100644 --- a/packages/pds/tests/proxied/proxy-catchall.test.ts +++ b/packages/pds/tests/proxied/proxy-catchall.test.ts @@ -1,13 +1,13 @@ -import AtpAgent from '@atproto/api' -import { Keypair } from '@atproto/crypto' -import { TestNetworkNoAppView } from '@atproto/dev-env' -import { LexiconDoc } from '@atproto/lexicon' -import * as plc from '@did-plc/lib' -import express from 'express' import { once } from 'node:events' import http from 'node:http' import { AddressInfo } from 'node:net' import { setTimeout as sleep } from 'node:timers/promises' +import * as plc from '@did-plc/lib' +import express from 'express' +import AtpAgent from '@atproto/api' +import { Keypair } from '@atproto/crypto' +import { TestNetworkNoAppView } from '@atproto/dev-env' +import { LexiconDoc } from '@atproto/lexicon' const lexicons = [ { diff --git a/packages/pds/tests/proxied/proxy-header.test.ts b/packages/pds/tests/proxied/proxy-header.test.ts index 131d4a28..350113c9 100644 --- a/packages/pds/tests/proxied/proxy-header.test.ts +++ b/packages/pds/tests/proxied/proxy-header.test.ts @@ -1,12 +1,12 @@ -import { Keypair } from '@atproto/crypto' -import { SeedClient, TestNetworkNoAppView, usersSeed } from '@atproto/dev-env' -import { verifyJwt } from '@atproto/xrpc-server' -import * as plc from '@did-plc/lib' -import express from 'express' import assert from 'node:assert' import { once } from 'node:events' import http from 'node:http' import { AddressInfo } from 'node:net' +import * as plc from '@did-plc/lib' +import express from 'express' +import { Keypair } from '@atproto/crypto' +import { SeedClient, TestNetworkNoAppView, usersSeed } from '@atproto/dev-env' +import { verifyJwt } from '@atproto/xrpc-server' import { parseProxyHeader } from '../../src/pipethrough' describe('proxy header', () => { diff --git a/packages/pds/tests/proxied/read-after-write.test.ts b/packages/pds/tests/proxied/read-after-write.test.ts index 72aa7f59..f344d85f 100644 --- a/packages/pds/tests/proxied/read-after-write.test.ts +++ b/packages/pds/tests/proxied/read-after-write.test.ts @@ -1,13 +1,13 @@ -import util from 'node:util' import assert from 'node:assert' -import { AtpAgent } from '@atproto/api' +import util from 'node:util' import { request } from 'undici' -import { TestNetwork, SeedClient, RecordRef } from '@atproto/dev-env' -import basicSeed from '../seeds/basic' -import { ThreadViewPost } from '../../src/lexicon/types/app/bsky/feed/defs' -import { View as RecordEmbedView } from '../../src/lexicon/types/app/bsky/embed/record' +import { AtpAgent } from '@atproto/api' +import { RecordRef, SeedClient, TestNetwork } from '@atproto/dev-env' import { View as ExternalEmbedView } from '../../src/lexicon/types/app/bsky/embed/external' import { View as ImagesEmbedView } from '../../src/lexicon/types/app/bsky/embed/images' +import { View as RecordEmbedView } from '../../src/lexicon/types/app/bsky/embed/record' +import { ThreadViewPost } from '../../src/lexicon/types/app/bsky/feed/defs' +import basicSeed from '../seeds/basic' describe('proxy read after write', () => { let network: TestNetwork diff --git a/packages/pds/tests/proxied/views.test.ts b/packages/pds/tests/proxied/views.test.ts index 01b097e8..eb69405c 100644 --- a/packages/pds/tests/proxied/views.test.ts +++ b/packages/pds/tests/proxied/views.test.ts @@ -1,7 +1,7 @@ -import { AtpAgent, AtUri } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import basicSeed from '../seeds/basic' +import { AtUri, AtpAgent } from '@atproto/api' +import { SeedClient, TestNetwork } from '@atproto/dev-env' import { forSnapshot } from '../_util' +import basicSeed from '../seeds/basic' describe('proxies view requests', () => { let network: TestNetwork diff --git a/packages/pds/tests/races.test.ts b/packages/pds/tests/races.test.ts index f8bc1412..4b0aac6b 100644 --- a/packages/pds/tests/races.test.ts +++ b/packages/pds/tests/races.test.ts @@ -1,10 +1,10 @@ import { AtpAgent } from '@atproto/api' import { wait } from '@atproto/common' +import { Keypair } from '@atproto/crypto' import { TestNetworkNoAppView } from '@atproto/dev-env' import { readCarWithRoot, verifyRepo } from '@atproto/repo' -import AppContext from '../src/context' +import { AppContext } from '../src/context' import { PreparedCreate, prepareCreate } from '../src/repo' -import { Keypair } from '@atproto/crypto' describe('races', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/rate-limits.test.ts b/packages/pds/tests/rate-limits.test.ts index 3e870312..f9587a1f 100644 --- a/packages/pds/tests/rate-limits.test.ts +++ b/packages/pds/tests/rate-limits.test.ts @@ -1,6 +1,6 @@ import { AtpAgent } from '@atproto/api' import { randomStr } from '@atproto/crypto' -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import userSeed from './seeds/basic' describe('rate limits', () => { diff --git a/packages/pds/tests/sequencer.test.ts b/packages/pds/tests/sequencer.test.ts index 184463b8..04e7f6b2 100644 --- a/packages/pds/tests/sequencer.test.ts +++ b/packages/pds/tests/sequencer.test.ts @@ -1,17 +1,17 @@ -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' -import { randomStr } from '@atproto/crypto' import { cborDecode, cborEncode, readFromGenerator, wait, } from '@atproto/common' -import { Sequencer, SeqEvt, formatSeqCommit } from '../src/sequencer' -import { sequencer, repoPrepare } from '../../pds' -import Outbox from '../src/sequencer/outbox' -import userSeed from './seeds/users' -import { ids } from '../src/lexicon/lexicons' +import { randomStr } from '@atproto/crypto' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import { readCarWithRoot } from '@atproto/repo' +import { repoPrepare, sequencer } from '../../pds' +import { ids } from '../src/lexicon/lexicons' +import { SeqEvt, Sequencer, formatSeqCommit } from '../src/sequencer' +import { Outbox } from '../src/sequencer/outbox' +import userSeed from './seeds/users' describe('sequencer', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/server.test.ts b/packages/pds/tests/server.test.ts index ea36d4b6..7a23d23e 100644 --- a/packages/pds/tests/server.test.ts +++ b/packages/pds/tests/server.test.ts @@ -1,9 +1,9 @@ -import { AtpAgent, AtUri } from '@atproto/api' +import { finished } from 'node:stream/promises' +import express from 'express' +import { request } from 'undici' +import { AtUri, AtpAgent } from '@atproto/api' import { randomStr } from '@atproto/crypto' import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' -import express from 'express' -import { finished } from 'node:stream/promises' -import { request } from 'undici' import { handler as errorHandler } from '../src/error' import { startServer } from './_util' import basicSeed from './seeds/basic' diff --git a/packages/pds/tests/sync/list.test.ts b/packages/pds/tests/sync/list.test.ts index a71f9327..789b3307 100644 --- a/packages/pds/tests/sync/list.test.ts +++ b/packages/pds/tests/sync/list.test.ts @@ -1,5 +1,5 @@ -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import basicSeed from '../seeds/basic' describe('sync listing', () => { diff --git a/packages/pds/tests/sync/subscribe-repos.test.ts b/packages/pds/tests/sync/subscribe-repos.test.ts index 573596df..1fe81c7f 100644 --- a/packages/pds/tests/sync/subscribe-repos.test.ts +++ b/packages/pds/tests/sync/subscribe-repos.test.ts @@ -1,28 +1,28 @@ -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' +import { CID } from 'multiformats/cid' +import { WebSocket } from 'ws' import { AtpAgent } from '@atproto/api' import { - cborDecode, HOUR, MINUTE, + cborDecode, readFromGenerator, wait, } from '@atproto/common' import { randomStr } from '@atproto/crypto' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import * as repo from '@atproto/repo' import { readCar } from '@atproto/repo' -import { byFrame, ErrorFrame, Frame, MessageFrame } from '@atproto/xrpc-server' -import { WebSocket } from 'ws' +import { ErrorFrame, Frame, MessageFrame, byFrame } from '@atproto/xrpc-server' +import { AppContext } from '../../src' +import { AccountStatus } from '../../src/account-manager' import { + Account as AccountEvt, Commit as CommitEvt, Handle as HandleEvt, - Tombstone as TombstoneEvt, - Account as AccountEvt, Identity as IdentityEvt, + Tombstone as TombstoneEvt, } from '../../src/lexicon/types/com/atproto/sync/subscribeRepos' -import { AppContext } from '../../src' import basicSeed from '../seeds/basic' -import { CID } from 'multiformats/cid' -import { AccountStatus } from '../../src/account-manager' describe('repo subscribe repos', () => { let serverHost: string diff --git a/packages/pds/tests/sync/sync.test.ts b/packages/pds/tests/sync/sync.test.ts index cdc565f1..281a8cd0 100644 --- a/packages/pds/tests/sync/sync.test.ts +++ b/packages/pds/tests/sync/sync.test.ts @@ -1,11 +1,11 @@ -import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' +import { CID } from 'multiformats/cid' import { AtpAgent } from '@atproto/api' -import { cidForCbor, TID } from '@atproto/common' +import { TID, cidForCbor } from '@atproto/common' import { Keypair, randomStr } from '@atproto/crypto' +import { SeedClient, TestNetworkNoAppView } from '@atproto/dev-env' import * as repo from '@atproto/repo' import { MemoryBlockstore } from '@atproto/repo' import { AtUri } from '@atproto/syntax' -import { CID } from 'multiformats/cid' describe('repo sync', () => { let network: TestNetworkNoAppView diff --git a/packages/pds/tests/takedown-appeal.test.ts b/packages/pds/tests/takedown-appeal.test.ts index afe1bbd7..fafdda93 100644 --- a/packages/pds/tests/takedown-appeal.test.ts +++ b/packages/pds/tests/takedown-appeal.test.ts @@ -1,7 +1,7 @@ import { AtpAgent, ComAtprotoModerationDefs } from '@atproto/api' import { SeedClient, TestNetwork } from '@atproto/dev-env' -import { forSubjectStatusSnapshot } from './_util' import { ids } from '../src/lexicon/lexicons' +import { forSubjectStatusSnapshot } from './_util' describe('appeal account takedown', () => { let network: TestNetwork diff --git a/packages/repo/bench/mst.bench.ts b/packages/repo/bench/mst.bench.ts index d0e4704e..6819aa95 100644 --- a/packages/repo/bench/mst.bench.ts +++ b/packages/repo/bench/mst.bench.ts @@ -1,7 +1,7 @@ +import fs from 'node:fs' import { CID } from 'multiformats' -import { Fanout, MemoryBlockstore, MST, NodeEntry } from '../src' +import { Fanout, MST, MemoryBlockstore, NodeEntry } from '../src' import * as util from '../tests/_util' -import fs from 'fs' type BenchmarkData = { fanout: number diff --git a/packages/repo/package.json b/packages/repo/package.json index 548759d9..8abc3d13 100644 --- a/packages/repo/package.json +++ b/packages/repo/package.json @@ -7,6 +7,9 @@ "atproto", "mst" ], + "engines": { + "node": ">=18.7.0" + }, "homepage": "https://atproto.com", "repository": { "type": "git", diff --git a/packages/repo/src/block-map.ts b/packages/repo/src/block-map.ts index a88d8444..5d3211e5 100644 --- a/packages/repo/src/block-map.ts +++ b/packages/repo/src/block-map.ts @@ -1,7 +1,7 @@ -import { lexToIpld, LexValue } from '@atproto/lexicon' -import { dataToCborBlock } from '@atproto/common' import { CID } from 'multiformats/cid' import * as uint8arrays from 'uint8arrays' +import { dataToCborBlock } from '@atproto/common' +import { LexValue, lexToIpld } from '@atproto/lexicon' export class BlockMap { private map: Map<string, Uint8Array> = new Map() diff --git a/packages/repo/src/data-diff.ts b/packages/repo/src/data-diff.ts index bbf6fcf4..6a4884ea 100644 --- a/packages/repo/src/data-diff.ts +++ b/packages/repo/src/data-diff.ts @@ -1,7 +1,7 @@ import { CID } from 'multiformats' -import CidSet from './cid-set' +import { BlockMap } from './block-map' +import { CidSet } from './cid-set' import { MST, NodeEntry, mstDiff } from './mst' -import BlockMap from './block-map' export class DataDiff { adds: Record<string, DataAdd> = {} @@ -115,5 +115,3 @@ export type DataDelete = { key: string cid: CID } - -export default DataDiff diff --git a/packages/repo/src/mst/diff.ts b/packages/repo/src/mst/diff.ts index 20bd215f..2b6400fa 100644 --- a/packages/repo/src/mst/diff.ts +++ b/packages/repo/src/mst/diff.ts @@ -1,6 +1,6 @@ import { DataDiff } from '../data-diff' -import MST from './mst' -import MstWalker from './walker' +import { MST } from './mst' +import { MstWalker } from './walker' export const nullDiff = async (tree: MST): Promise<DataDiff> => { const diff = new DataDiff() diff --git a/packages/repo/src/mst/mst.ts b/packages/repo/src/mst/mst.ts index 26db1f73..01fbd13b 100644 --- a/packages/repo/src/mst/mst.ts +++ b/packages/repo/src/mst/mst.ts @@ -1,14 +1,13 @@ -import z from 'zod' -import { CID } from 'multiformats' - -import { ReadableBlockstore } from '../storage' -import { schema as common, cidForCbor, dataToCborBlock } from '@atproto/common' import { BlockWriter } from '@ipld/car/writer' -import * as util from './util' -import BlockMap from '../block-map' -import CidSet from '../cid-set' +import { CID } from 'multiformats' +import { z } from 'zod' +import { cidForCbor, dataToCborBlock, schema as common } from '@atproto/common' +import { BlockMap } from '../block-map' +import { CidSet } from '../cid-set' import { MissingBlockError, MissingBlocksError } from '../error' import * as parse from '../parse' +import { ReadableBlockstore } from '../storage' +import * as util from './util' /** * This is an implementation of a Merkle Search Tree (MST) @@ -811,5 +810,3 @@ export class Leaf { } } } - -export default MST diff --git a/packages/repo/src/mst/util.ts b/packages/repo/src/mst/util.ts index 0cc916cd..932577be 100644 --- a/packages/repo/src/mst/util.ts +++ b/packages/repo/src/mst/util.ts @@ -1,9 +1,9 @@ import { CID } from 'multiformats' import * as uint8arrays from 'uint8arrays' -import { ReadableBlockstore } from '../storage' -import { sha256 } from '@atproto/crypto' -import { MST, Leaf, NodeEntry, NodeData, MstOpts } from './mst' import { cidForCbor } from '@atproto/common' +import { sha256 } from '@atproto/crypto' +import { ReadableBlockstore } from '../storage' +import { Leaf, MST, MstOpts, NodeData, NodeEntry } from './mst' export const leadingZerosOnHash = async (key: string | Uint8Array) => { const hash = await sha256(key) diff --git a/packages/repo/src/mst/walker.ts b/packages/repo/src/mst/walker.ts index f9f37539..f062208d 100644 --- a/packages/repo/src/mst/walker.ts +++ b/packages/repo/src/mst/walker.ts @@ -116,5 +116,3 @@ export class MstWalker { } } } - -export default MstWalker diff --git a/packages/repo/src/parse.ts b/packages/repo/src/parse.ts index bed93ad6..f195ef7b 100644 --- a/packages/repo/src/parse.ts +++ b/packages/repo/src/parse.ts @@ -1,7 +1,7 @@ -import { check, cborDecode } from '@atproto/common' -import { RepoRecord } from '@atproto/lexicon' import { CID } from 'multiformats/cid' -import BlockMap from './block-map' +import { cborDecode, check } from '@atproto/common' +import { RepoRecord } from '@atproto/lexicon' +import { BlockMap } from './block-map' import { MissingBlockError, UnexpectedObjectError } from './error' import { cborToLexRecord } from './util' diff --git a/packages/repo/src/readable-repo.ts b/packages/repo/src/readable-repo.ts index 7e53a7e5..50ecbf07 100644 --- a/packages/repo/src/readable-repo.ts +++ b/packages/repo/src/readable-repo.ts @@ -1,12 +1,12 @@ import { CID } from 'multiformats/cid' -import { def, RepoContents, Commit } from './types' -import { ReadableBlockstore } from './storage' -import { MST } from './mst' -import log from './logger' -import * as util from './util' -import * as parse from './parse' -import { MissingBlocksError } from './error' import { RepoRecord } from '@atproto/lexicon' +import { MissingBlocksError } from './error' +import log from './logger' +import { MST } from './mst' +import * as parse from './parse' +import { ReadableBlockstore } from './storage' +import { Commit, RepoContents, def } from './types' +import * as util from './util' type Params = { storage: ReadableBlockstore @@ -85,5 +85,3 @@ export class ReadableRepo { return contents } } - -export default ReadableRepo diff --git a/packages/repo/src/repo.ts b/packages/repo/src/repo.ts index 0a9bcf9a..af1ce4a1 100644 --- a/packages/repo/src/repo.ts +++ b/packages/repo/src/repo.ts @@ -1,23 +1,23 @@ import { CID } from 'multiformats/cid' -import { dataToCborBlock, TID } from '@atproto/common' +import { TID, dataToCborBlock } from '@atproto/common' import * as crypto from '@atproto/crypto' import { lexToIpld } from '@atproto/lexicon' +import { BlockMap } from './block-map' +import { CidSet } from './cid-set' +import { DataDiff } from './data-diff' +import log from './logger' +import { MST } from './mst' +import { ReadableRepo } from './readable-repo' +import { RepoStorage } from './storage' import { Commit, CommitData, - def, RecordCreateOp, RecordWriteOp, WriteOpAction, + def, } from './types' -import { RepoStorage } from './storage' -import { MST } from './mst' -import DataDiff from './data-diff' -import log from './logger' -import BlockMap from './block-map' -import { ReadableRepo } from './readable-repo' import * as util from './util' -import CidSet from './cid-set' type Params = { storage: RepoStorage diff --git a/packages/repo/src/storage/memory-blockstore.ts b/packages/repo/src/storage/memory-blockstore.ts index 1426d962..8277db4b 100644 --- a/packages/repo/src/storage/memory-blockstore.ts +++ b/packages/repo/src/storage/memory-blockstore.ts @@ -1,7 +1,7 @@ import { CID } from 'multiformats/cid' +import { BlockMap } from '../block-map' import { CommitData } from '../types' -import BlockMap from '../block-map' -import ReadableBlockstore from './readable-blockstore' +import { ReadableBlockstore } from './readable-blockstore' import { RepoStorage } from './types' export class MemoryBlockstore diff --git a/packages/repo/src/storage/readable-blockstore.ts b/packages/repo/src/storage/readable-blockstore.ts index 1f821712..74e17c8e 100644 --- a/packages/repo/src/storage/readable-blockstore.ts +++ b/packages/repo/src/storage/readable-blockstore.ts @@ -1,7 +1,7 @@ +import { CID } from 'multiformats/cid' import { check } from '@atproto/common' import { RepoRecord } from '@atproto/lexicon' -import { CID } from 'multiformats/cid' -import BlockMap from '../block-map' +import { BlockMap } from '../block-map' import { MissingBlockError } from '../error' import * as parse from '../parse' import { cborToLexRecord } from '../util' diff --git a/packages/repo/src/storage/sync-storage.ts b/packages/repo/src/storage/sync-storage.ts index 626aeedb..4c2292c9 100644 --- a/packages/repo/src/storage/sync-storage.ts +++ b/packages/repo/src/storage/sync-storage.ts @@ -1,6 +1,6 @@ import { CID } from 'multiformats/cid' -import BlockMap from '../block-map' -import ReadableBlockstore from './readable-blockstore' +import { BlockMap } from '../block-map' +import { ReadableBlockstore } from './readable-blockstore' export class SyncStorage extends ReadableBlockstore { constructor( diff --git a/packages/repo/src/storage/types.ts b/packages/repo/src/storage/types.ts index b1eebd5d..b38ef6c5 100644 --- a/packages/repo/src/storage/types.ts +++ b/packages/repo/src/storage/types.ts @@ -1,8 +1,8 @@ -import stream from 'stream' +import stream from 'node:stream' import { CID } from 'multiformats/cid' -import { RepoRecord } from '@atproto/lexicon' import { check } from '@atproto/common' -import BlockMap from '../block-map' +import { RepoRecord } from '@atproto/lexicon' +import { BlockMap } from '../block-map' import { CommitData } from '../types' export interface RepoStorage { diff --git a/packages/repo/src/sync/consumer.ts b/packages/repo/src/sync/consumer.ts index cf2716e2..c0436e42 100644 --- a/packages/repo/src/sync/consumer.ts +++ b/packages/repo/src/sync/consumer.ts @@ -1,17 +1,17 @@ import { CID } from 'multiformats/cid' +import { BlockMap } from '../block-map' +import { DataDiff } from '../data-diff' +import { MST } from '../mst' +import { ReadableRepo } from '../readable-repo' import { MemoryBlockstore, ReadableBlockstore, SyncStorage } from '../storage' -import DataDiff from '../data-diff' -import ReadableRepo from '../readable-repo' -import * as util from '../util' import { - RecordClaim, RecordCidClaim, + RecordClaim, VerifiedDiff, VerifiedRepo, + def, } from '../types' -import { def } from '../types' -import { MST } from '../mst' -import BlockMap from '../block-map' +import * as util from '../util' export const verifyRepoCar = async ( carBytes: Uint8Array, diff --git a/packages/repo/src/sync/provider.ts b/packages/repo/src/sync/provider.ts index 215481c6..c49c35c5 100644 --- a/packages/repo/src/sync/provider.ts +++ b/packages/repo/src/sync/provider.ts @@ -1,11 +1,11 @@ -import { def, RecordPath } from '../types' import { BlockWriter } from '@ipld/car/writer' import { CID } from 'multiformats/cid' -import CidSet from '../cid-set' +import { CidSet } from '../cid-set' import { MissingBlocksError } from '../error' -import { ReadableBlockstore, RepoStorage } from '../storage' -import * as util from '../util' import { MST } from '../mst' +import { ReadableBlockstore, RepoStorage } from '../storage' +import { RecordPath, def } from '../types' +import * as util from '../util' // Full Repo // ------------- diff --git a/packages/repo/src/types.ts b/packages/repo/src/types.ts index cda74bcb..3920e435 100644 --- a/packages/repo/src/types.ts +++ b/packages/repo/src/types.ts @@ -1,10 +1,10 @@ -import { z } from 'zod' -import { def as commonDef } from '@atproto/common-web' -import { schema as common } from '@atproto/common' import { CID } from 'multiformats' -import BlockMap from './block-map' +import { z } from 'zod' +import { schema as common } from '@atproto/common' +import { def as commonDef } from '@atproto/common-web' import { RepoRecord } from '@atproto/lexicon' -import CidSet from './cid-set' +import { BlockMap } from './block-map' +import { CidSet } from './cid-set' // Repo nodes // --------------- diff --git a/packages/repo/src/util.ts b/packages/repo/src/util.ts index d6ef28f7..898248ce 100644 --- a/packages/repo/src/util.ts +++ b/packages/repo/src/util.ts @@ -1,22 +1,24 @@ +import { Readable } from 'node:stream' import { setImmediate } from 'node:timers/promises' -import { CID } from 'multiformats/cid' -import * as cbor from '@ipld/dag-cbor' import { CarBlockIterator } from '@ipld/car/iterator' import { BlockWriter, CarWriter } from '@ipld/car/writer' +import * as cbor from '@ipld/dag-cbor' +import { CID } from 'multiformats/cid' import { - streamToBuffer, - verifyCidForBytes, + TID, + byteIterableToStream, cborDecode, check, - schema, cidForCbor, - byteIterableToStream, - TID, + schema, + streamToBuffer, + verifyCidForBytes, } from '@atproto/common' -import { ipldToLex, lexToIpld, LexValue, RepoRecord } from '@atproto/lexicon' - import * as crypto from '@atproto/crypto' -import DataDiff from './data-diff' +import { Keypair } from '@atproto/crypto' +import { LexValue, RepoRecord, ipldToLex, lexToIpld } from '@atproto/lexicon' +import { BlockMap } from './block-map' +import { DataDiff } from './data-diff' import { CarBlock, Commit, @@ -29,9 +31,6 @@ import { UnsignedCommit, WriteOpAction, } from './types' -import BlockMap from './block-map' -import { Keypair } from '@atproto/crypto' -import { Readable } from 'stream' export async function* verifyIncomingCarBlocks( car: AsyncIterable<CarBlock>, diff --git a/packages/repo/tests/_util.ts b/packages/repo/tests/_util.ts index a2de1fc0..0a149cdc 100644 --- a/packages/repo/tests/_util.ts +++ b/packages/repo/tests/_util.ts @@ -1,22 +1,22 @@ -import fs from 'fs' +import fs from 'node:fs' import { CID } from 'multiformats' import { TID, dataToCborBlock } from '@atproto/common' import * as crypto from '@atproto/crypto' -import { Repo } from '../src/repo' -import { RepoStorage } from '../src/storage' -import { MST } from '../src/mst' +import { Keypair, randomBytes } from '@atproto/crypto' import { BlockMap, CollectionContents, + Commit, + CommitData, + DataDiff, + RecordPath, RecordWriteOp, RepoContents, - RecordPath, WriteOpAction, - Commit, - DataDiff, - CommitData, } from '../src' -import { Keypair, randomBytes } from '@atproto/crypto' +import { MST } from '../src/mst' +import { Repo } from '../src/repo' +import { RepoStorage } from '../src/storage' type IdMapping = Record<string, CID> diff --git a/packages/repo/tests/commit-data.test.ts b/packages/repo/tests/commit-data.test.ts index 966290bd..af5ad99f 100644 --- a/packages/repo/tests/commit-data.test.ts +++ b/packages/repo/tests/commit-data.test.ts @@ -1,6 +1,6 @@ import { Secp256k1Keypair } from '@atproto/crypto' +import { Repo, WriteOpAction, blocksToCarFile, verifyProofs } from '../src' import { MemoryBlockstore } from '../src/storage' -import { blocksToCarFile, Repo, verifyProofs, WriteOpAction } from '../src' describe('Commit data', () => { // @NOTE this test uses a fully deterministic tree structure diff --git a/packages/repo/tests/mst.test.ts b/packages/repo/tests/mst.test.ts index 5a39d977..06cfb80f 100644 --- a/packages/repo/tests/mst.test.ts +++ b/packages/repo/tests/mst.test.ts @@ -1,12 +1,10 @@ +import { CID } from 'multiformats' +import { DataAdd, DataDelete, DataDiff, DataUpdate } from '../src/data-diff' import { MST } from '../src/mst' -import DataDiff, { DataAdd, DataUpdate, DataDelete } from '../src/data-diff' -import { countPrefixLen, InvalidMstKeyError } from '../src/mst/util' - +import { InvalidMstKeyError, countPrefixLen } from '../src/mst/util' import { MemoryBlockstore } from '../src/storage' import * as util from './_util' -import { CID } from 'multiformats' - describe('Merkle Search Tree', () => { let blockstore: MemoryBlockstore let mst: MST diff --git a/packages/repo/tests/proofs.test.ts b/packages/repo/tests/proofs.test.ts index 2bf1e38d..f35bb89f 100644 --- a/packages/repo/tests/proofs.test.ts +++ b/packages/repo/tests/proofs.test.ts @@ -3,7 +3,6 @@ import * as crypto from '@atproto/crypto' import { RecordCidClaim, RecordPath, Repo, RepoContents } from '../src' import { MemoryBlockstore } from '../src/storage' import * as sync from '../src/sync' - import * as util from './_util' describe('Repo Proofs', () => { diff --git a/packages/repo/tests/repo.test.ts b/packages/repo/tests/repo.test.ts index 75d7ef23..4e2ece34 100644 --- a/packages/repo/tests/repo.test.ts +++ b/packages/repo/tests/repo.test.ts @@ -1,10 +1,10 @@ +import { TID } from '@atproto/common' import * as crypto from '@atproto/crypto' +import { Secp256k1Keypair } from '@atproto/crypto' +import { RepoContents, WriteOpAction, verifyCommitSig } from '../src' import { Repo } from '../src/repo' import { MemoryBlockstore } from '../src/storage' import * as util from './_util' -import { TID } from '@atproto/common' -import { RepoContents, verifyCommitSig, WriteOpAction } from '../src' -import { Secp256k1Keypair } from '@atproto/crypto' describe('Repo', () => { const collName = 'com.example.posts' diff --git a/packages/repo/tests/sync.test.ts b/packages/repo/tests/sync.test.ts index 5018d8f5..d5107f3a 100644 --- a/packages/repo/tests/sync.test.ts +++ b/packages/repo/tests/sync.test.ts @@ -1,3 +1,5 @@ +import { CarReader } from '@ipld/car/reader' +import { streamToBuffer } from '@atproto/common' import * as crypto from '@atproto/crypto' import { CidSet, @@ -9,10 +11,7 @@ import { } from '../src' import { MemoryBlockstore } from '../src/storage' import * as sync from '../src/sync' - import * as util from './_util' -import { streamToBuffer } from '@atproto/common' -import { CarReader } from '@ipld/car/reader' describe('Repo Sync', () => { let storage: MemoryBlockstore diff --git a/packages/sync/package.json b/packages/sync/package.json index 353c45b2..0a7eef8d 100644 --- a/packages/sync/package.json +++ b/packages/sync/package.json @@ -15,6 +15,9 @@ "url": "https://github.com/bluesky-social/atproto", "directory": "packages/sync" }, + "engines": { + "node": ">=18.7.0" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { diff --git a/packages/sync/src/events.ts b/packages/sync/src/events.ts index 9f91603b..f9f2bde3 100644 --- a/packages/sync/src/events.ts +++ b/packages/sync/src/events.ts @@ -1,8 +1,8 @@ +import type { CID } from 'multiformats/cid' import { DidDocument } from '@atproto/identity' import type { RepoRecord } from '@atproto/lexicon' import { BlockMap } from '@atproto/repo' import { AtUri } from '@atproto/syntax' -import type { CID } from 'multiformats/cid' export type Event = CommitEvt | IdentityEvt | AccountEvt diff --git a/packages/sync/src/firehose/index.ts b/packages/sync/src/firehose/index.ts index 4a03382e..f765a136 100644 --- a/packages/sync/src/firehose/index.ts +++ b/packages/sync/src/firehose/index.ts @@ -1,20 +1,31 @@ -import { createDeferrable, Deferrable, wait } from '@atproto/common' +import { CID } from 'multiformats/cid' +import type { ClientOptions } from 'ws' +import { Deferrable, createDeferrable, wait } from '@atproto/common' import { + DidDocument, IdResolver, parseToAtprotoDocument, - DidDocument, } from '@atproto/identity' import { + RepoVerificationError, cborToLexRecord, formatDataKey, parseDataKey, readCar, - RepoVerificationError, verifyProofs, } from '@atproto/repo' import { AtUri } from '@atproto/syntax' import { Subscription } from '@atproto/xrpc-server' -import type { ClientOptions } from 'ws' +import { + AccountEvt, + AccountStatus, + CommitEvt, + CommitMeta, + Event, + IdentityEvt, +} from '../events' +import { EventRunner } from '../runner' +import { didAndSeqForEvt } from '../util' import { type Account, type Commit, @@ -26,17 +37,6 @@ import { isIdentity, isValidRepoEvent, } from './lexicons' -import { - Event, - CommitMeta, - CommitEvt, - AccountEvt, - AccountStatus, - IdentityEvt, -} from '../events' -import { CID } from 'multiformats/cid' -import { EventRunner } from '../runner' -import { didAndSeqForEvt } from '../util' export type FirehoseOptions = ClientOptions & { idResolver: IdResolver diff --git a/packages/sync/src/firehose/lexicons.ts b/packages/sync/src/firehose/lexicons.ts index 0a7b1605..57aee9b0 100644 --- a/packages/sync/src/firehose/lexicons.ts +++ b/packages/sync/src/firehose/lexicons.ts @@ -1,8 +1,7 @@ import type { IncomingMessage } from 'node:http' - +import type { CID } from 'multiformats/cid' import { type LexiconDoc, Lexicons } from '@atproto/lexicon' import type { ErrorFrame, HandlerAuth } from '@atproto/xrpc-server' -import type { CID } from 'multiformats/cid' // @NOTE: this file is an ugly copy job of codegen output. I'd like to clean this whole thing up diff --git a/packages/sync/src/runner/memory-runner.ts b/packages/sync/src/runner/memory-runner.ts index fc4c49a3..aee6e961 100644 --- a/packages/sync/src/runner/memory-runner.ts +++ b/packages/sync/src/runner/memory-runner.ts @@ -2,8 +2,6 @@ import PQueue from 'p-queue' import { ConsecutiveList } from './consecutive-list' import { EventRunner } from './types' -export { ConsecutiveList } - export type MemoryRunnerOptions = { setCursor?: (cursor: number) => Promise<void> concurrency?: number diff --git a/packages/sync/src/util.ts b/packages/sync/src/util.ts index ab4bebfa..f90d9465 100644 --- a/packages/sync/src/util.ts +++ b/packages/sync/src/util.ts @@ -1,4 +1,4 @@ -import { isAccount, isCommit, isIdentity, RepoEvent } from './firehose/lexicons' +import { RepoEvent, isAccount, isCommit, isIdentity } from './firehose/lexicons' export const didAndSeqForEvt = ( evt: RepoEvent, diff --git a/packages/sync/tests/firehose.test.ts b/packages/sync/tests/firehose.test.ts index 474a31d9..d32fd51e 100644 --- a/packages/sync/tests/firehose.test.ts +++ b/packages/sync/tests/firehose.test.ts @@ -1,12 +1,12 @@ +import { createDeferrable, wait } from '@atproto/common' import { - mockResolvers, SeedClient, TestNetworkNoAppView, + mockResolvers, } from '@atproto/dev-env' -import { Firehose, FirehoseOptions, MemoryRunner } from '../src' import { IdResolver } from '@atproto/identity' +import { Firehose, FirehoseOptions, MemoryRunner } from '../src' import { Create, Event } from '../src/events' -import { createDeferrable, wait } from '@atproto/common' describe('firehose', () => { let network: TestNetworkNoAppView diff --git a/packages/syntax/src/aturi_validation.ts b/packages/syntax/src/aturi_validation.ts index 4e537266..3bc29aea 100644 --- a/packages/syntax/src/aturi_validation.ts +++ b/packages/syntax/src/aturi_validation.ts @@ -1,5 +1,5 @@ -import { ensureValidHandle, ensureValidHandleRegex } from './handle' import { ensureValidDid, ensureValidDidRegex } from './did' +import { ensureValidHandle, ensureValidHandleRegex } from './handle' import { ensureValidNsid, ensureValidNsidRegex } from './nsid' // Human-readable constraints on ATURI: diff --git a/packages/syntax/tests/aturi.test.ts b/packages/syntax/tests/aturi.test.ts index ffb43799..7e546a24 100644 --- a/packages/syntax/tests/aturi.test.ts +++ b/packages/syntax/tests/aturi.test.ts @@ -1,6 +1,6 @@ +import * as fs from 'node:fs' +import * as readline from 'node:readline' import { AtUri, ensureValidAtUri, ensureValidAtUriRegex } from '../src/index' -import * as readline from 'readline' -import * as fs from 'fs' describe('At Uris', () => { it('parses valid at uris', () => { diff --git a/packages/syntax/tests/datetime.test.ts b/packages/syntax/tests/datetime.test.ts index c5c3d181..1e07ec73 100644 --- a/packages/syntax/tests/datetime.test.ts +++ b/packages/syntax/tests/datetime.test.ts @@ -1,12 +1,12 @@ +import * as fs from 'node:fs' +import * as readline from 'node:readline' import { - isValidDatetime, + InvalidDatetimeError, ensureValidDatetime, + isValidDatetime, normalizeDatetime, normalizeDatetimeAlways, - InvalidDatetimeError, } from '../src' -import * as readline from 'readline' -import * as fs from 'fs' describe('datetime validation', () => { const expectValid = (h: string) => { diff --git a/packages/syntax/tests/did.test.ts b/packages/syntax/tests/did.test.ts index 2c3abdae..68fdc562 100644 --- a/packages/syntax/tests/did.test.ts +++ b/packages/syntax/tests/did.test.ts @@ -1,6 +1,6 @@ -import { ensureValidDid, ensureValidDidRegex, InvalidDidError } from '../src' -import * as readline from 'readline' -import * as fs from 'fs' +import * as fs from 'node:fs' +import * as readline from 'node:readline' +import { InvalidDidError, ensureValidDid, ensureValidDidRegex } from '../src' describe('DID permissive validation', () => { const expectValid = (h: string) => { diff --git a/packages/syntax/tests/handle.test.ts b/packages/syntax/tests/handle.test.ts index ebea3a1b..0f0d51e4 100644 --- a/packages/syntax/tests/handle.test.ts +++ b/packages/syntax/tests/handle.test.ts @@ -1,11 +1,11 @@ +import * as fs from 'node:fs' +import * as readline from 'node:readline' import { - ensureValidHandle, - normalizeAndEnsureValidHandle, - ensureValidHandleRegex, InvalidHandleError, + ensureValidHandle, + ensureValidHandleRegex, + normalizeAndEnsureValidHandle, } from '../src' -import * as readline from 'readline' -import * as fs from 'fs' describe('handle validation', () => { const expectValid = (h: string) => { diff --git a/packages/syntax/tests/nsid.test.ts b/packages/syntax/tests/nsid.test.ts index c428bb60..8396428b 100644 --- a/packages/syntax/tests/nsid.test.ts +++ b/packages/syntax/tests/nsid.test.ts @@ -1,11 +1,11 @@ +import * as fs from 'node:fs' +import * as readline from 'node:readline' import { - ensureValidNsid, - ensureValidNsidRegex, InvalidNsidError, NSID, + ensureValidNsid, + ensureValidNsidRegex, } from '../src' -import * as readline from 'readline' -import * as fs from 'fs' describe('NSID parsing & creation', () => { it('parses valid NSIDs', () => { diff --git a/packages/syntax/tests/recordkey.test.ts b/packages/syntax/tests/recordkey.test.ts index 85d70ad2..d1063ea4 100644 --- a/packages/syntax/tests/recordkey.test.ts +++ b/packages/syntax/tests/recordkey.test.ts @@ -1,6 +1,6 @@ -import { ensureValidRecordKey, InvalidRecordKeyError } from '../src' -import * as readline from 'readline' -import * as fs from 'fs' +import * as fs from 'node:fs' +import * as readline from 'node:readline' +import { InvalidRecordKeyError, ensureValidRecordKey } from '../src' describe('recordkey validation', () => { const expectValid = (r: string) => { diff --git a/packages/syntax/tests/tid.test.ts b/packages/syntax/tests/tid.test.ts index 6fe012ad..6522c159 100644 --- a/packages/syntax/tests/tid.test.ts +++ b/packages/syntax/tests/tid.test.ts @@ -1,6 +1,6 @@ -import { ensureValidTid, InvalidTidError } from '../src' -import * as readline from 'readline' -import * as fs from 'fs' +import * as fs from 'node:fs' +import * as readline from 'node:readline' +import { InvalidTidError, ensureValidTid } from '../src' describe('tid validation', () => { const expectValid = (t: string) => { diff --git a/packages/xrpc-server/package.json b/packages/xrpc-server/package.json index 21f52aa8..1ffa7f0b 100644 --- a/packages/xrpc-server/package.json +++ b/packages/xrpc-server/package.json @@ -13,6 +13,9 @@ "url": "https://github.com/bluesky-social/atproto", "directory": "packages/xrpc-server" }, + "engines": { + "node": ">=18.7.0" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { diff --git a/packages/xrpc-server/src/auth.ts b/packages/xrpc-server/src/auth.ts index 78942f5c..bdd2cebd 100644 --- a/packages/xrpc-server/src/auth.ts +++ b/packages/xrpc-server/src/auth.ts @@ -1,7 +1,7 @@ +import * as ui8 from 'uint8arrays' import * as common from '@atproto/common' import { MINUTE } from '@atproto/common' import * as crypto from '@atproto/crypto' -import * as ui8 from 'uint8arrays' import { AuthRequiredError } from './types' type ServiceJwtParams = { diff --git a/packages/xrpc-server/src/rate-limiter.ts b/packages/xrpc-server/src/rate-limiter.ts index 01b487f9..eb0fe416 100644 --- a/packages/xrpc-server/src/rate-limiter.ts +++ b/packages/xrpc-server/src/rate-limiter.ts @@ -10,8 +10,8 @@ import { CalcPointsFn, RateLimitExceededError, RateLimiterConsume, - RateLimiterReset, RateLimiterI, + RateLimiterReset, RateLimiterStatus, XRPCReqContext, } from './types' diff --git a/packages/xrpc-server/src/server.ts b/packages/xrpc-server/src/server.ts index 41dc8293..9690afb8 100644 --- a/packages/xrpc-server/src/server.ts +++ b/packages/xrpc-server/src/server.ts @@ -1,12 +1,5 @@ -import { check, schema } from '@atproto/common' -import { - LexiconDoc, - Lexicons, - lexToJson, - LexXrpcProcedure, - LexXrpcQuery, - LexXrpcSubscription, -} from '@atproto/lexicon' +import { Readable } from 'node:stream' +import { pipeline } from 'node:stream/promises' import express, { Application, ErrorRequestHandler, @@ -16,10 +9,18 @@ import express, { RequestHandler, Response, Router, + json as jsonParser, + text as textParser, } from 'express' -import { Readable } from 'node:stream' -import { pipeline } from 'node:stream/promises' - +import { check, schema } from '@atproto/common' +import { + LexXrpcProcedure, + LexXrpcQuery, + LexXrpcSubscription, + LexiconDoc, + Lexicons, + lexToJson, +} from '@atproto/lexicon' import log from './logger' import { consumeMany, resetMany } from './rate-limiter' import { ErrorFrame, Frame, MessageFrame, XrpcStreamServer } from './stream' @@ -30,21 +31,21 @@ import { HandlerSuccess, InternalServerError, InvalidRequestError, - isHandlerError, - isHandlerPipeThroughBuffer, - isHandlerPipeThroughStream, - isShared, MethodNotImplementedError, Options, Params, - RateLimiterI, RateLimitExceededError, + RateLimiterI, XRPCError, XRPCHandler, XRPCHandlerConfig, XRPCReqContext, XRPCStreamHandler, XRPCStreamHandlerConfig, + isHandlerError, + isHandlerPipeThroughBuffer, + isHandlerPipeThroughStream, + isShared, } from './types' import { decodeQueryParams, @@ -59,7 +60,7 @@ export function createServer(lexicons?: LexiconDoc[], options?: Options) { export class Server { router: Express = express() - routes: Router = express.Router() + routes: Router = Router() subscriptions = new Map<string, XrpcStreamServer>() lex = new Lexicons() options: Options @@ -80,8 +81,8 @@ export class Server { }) this.options = opts this.middleware = { - json: express.json({ limit: opts?.payload?.jsonLimit }), - text: express.text({ limit: opts?.payload?.textLimit }), + json: jsonParser({ limit: opts?.payload?.jsonLimit }), + text: textParser({ limit: opts?.payload?.textLimit }), } this.globalRateLimiters = [] this.sharedRateLimiters = {} diff --git a/packages/xrpc-server/src/stream/frames.ts b/packages/xrpc-server/src/stream/frames.ts index 866277d3..6869b3dd 100644 --- a/packages/xrpc-server/src/stream/frames.ts +++ b/packages/xrpc-server/src/stream/frames.ts @@ -1,13 +1,13 @@ import * as uint8arrays from 'uint8arrays' -import { cborEncode, cborDecodeMulti } from '@atproto/common' +import { cborDecodeMulti, cborEncode } from '@atproto/common' import { - frameHeader, + ErrorFrameBody, + ErrorFrameHeader, FrameHeader, FrameType, MessageFrameHeader, - ErrorFrameHeader, - ErrorFrameBody, errorFrameBody, + frameHeader, } from './types' export abstract class Frame { diff --git a/packages/xrpc-server/src/stream/server.ts b/packages/xrpc-server/src/stream/server.ts index f52730df..9d52d99e 100644 --- a/packages/xrpc-server/src/stream/server.ts +++ b/packages/xrpc-server/src/stream/server.ts @@ -1,7 +1,7 @@ -import { IncomingMessage } from 'http' -import { WebSocketServer, ServerOptions, WebSocket } from 'ws' +import { IncomingMessage } from 'node:http' +import { ServerOptions, WebSocket, WebSocketServer } from 'ws' import { ErrorFrame, Frame } from './frames' -import logger from './logger' +import { logger } from './logger' import { CloseCode, DisconnectError } from './types' export class XrpcStreamServer { diff --git a/packages/xrpc-server/src/stream/stream.ts b/packages/xrpc-server/src/stream/stream.ts index d2475365..6da90ab0 100644 --- a/packages/xrpc-server/src/stream/stream.ts +++ b/packages/xrpc-server/src/stream/stream.ts @@ -1,6 +1,6 @@ -import { XRPCError, ResponseType } from '@atproto/xrpc' -import { DuplexOptions } from 'stream' -import { createWebSocketStream, WebSocket } from 'ws' +import { DuplexOptions } from 'node:stream' +import { WebSocket, createWebSocketStream } from 'ws' +import { ResponseType, XRPCError } from '@atproto/xrpc' import { Frame, MessageFrame } from './frames' export function streamByteChunks(ws: WebSocket, options?: DuplexOptions) { diff --git a/packages/xrpc-server/src/stream/subscription.ts b/packages/xrpc-server/src/stream/subscription.ts index 50fdb804..63d1752e 100644 --- a/packages/xrpc-server/src/stream/subscription.ts +++ b/packages/xrpc-server/src/stream/subscription.ts @@ -1,6 +1,6 @@ import { ClientOptions } from 'ws' -import { WebSocketKeepAlive } from './websocket-keepalive' import { ensureChunkIsMessage } from './stream' +import { WebSocketKeepAlive } from './websocket-keepalive' export class Subscription<T = unknown> { constructor( diff --git a/packages/xrpc-server/src/stream/websocket-keepalive.ts b/packages/xrpc-server/src/stream/websocket-keepalive.ts index 8efeee4e..dd332669 100644 --- a/packages/xrpc-server/src/stream/websocket-keepalive.ts +++ b/packages/xrpc-server/src/stream/websocket-keepalive.ts @@ -1,5 +1,5 @@ +import { ClientOptions, WebSocket } from 'ws' import { SECOND, wait } from '@atproto/common' -import { WebSocket, ClientOptions } from 'ws' import { streamByteChunks } from './stream' import { CloseCode, DisconnectError } from './types' diff --git a/packages/xrpc-server/src/types.ts b/packages/xrpc-server/src/types.ts index 5ea430a9..61b7c913 100644 --- a/packages/xrpc-server/src/types.ts +++ b/packages/xrpc-server/src/types.ts @@ -1,14 +1,14 @@ +import { IncomingMessage } from 'node:http' +import { Readable } from 'node:stream' +import express from 'express' +import { isHttpError } from 'http-errors' +import { z } from 'zod' import { ResponseType, ResponseTypeNames, ResponseTypeStrings, XRPCError as XRPCClientError, } from '@atproto/xrpc' -import express from 'express' -import { IncomingMessage } from 'http' -import { isHttpError } from 'http-errors' -import { Readable } from 'stream' -import zod from 'zod' export type CatchallHandler = ( req: express.Request, @@ -47,60 +47,56 @@ export type UndecodedParams = (typeof express.request)['query'] export type Primitive = string | number | boolean export type Params = Record<string, Primitive | Primitive[] | undefined> -export const handlerInput = zod.object({ - encoding: zod.string(), - body: zod.any(), +export const handlerInput = z.object({ + encoding: z.string(), + body: z.any(), }) -export type HandlerInput = zod.infer<typeof handlerInput> +export type HandlerInput = z.infer<typeof handlerInput> -export const handlerAuth = zod.object({ - credentials: zod.any(), - artifacts: zod.any(), +export const handlerAuth = z.object({ + credentials: z.any(), + artifacts: z.any(), }) -export type HandlerAuth = zod.infer<typeof handlerAuth> +export type HandlerAuth = z.infer<typeof handlerAuth> -export const headersSchema = zod.record(zod.string()) +export const headersSchema = z.record(z.string()) -export const handlerSuccess = zod.object({ - encoding: zod.string(), - body: zod.any(), +export const handlerSuccess = z.object({ + encoding: z.string(), + body: z.any(), headers: headersSchema.optional(), }) -export type HandlerSuccess = zod.infer<typeof handlerSuccess> +export type HandlerSuccess = z.infer<typeof handlerSuccess> -export const handlerPipeThroughBuffer = zod.object({ - encoding: zod.string(), - buffer: zod.instanceof(Buffer), +export const handlerPipeThroughBuffer = z.object({ + encoding: z.string(), + buffer: z.instanceof(Buffer), headers: headersSchema.optional(), }) -export type HandlerPipeThroughBuffer = zod.infer< - typeof handlerPipeThroughBuffer -> +export type HandlerPipeThroughBuffer = z.infer<typeof handlerPipeThroughBuffer> -export const handlerPipeThroughStream = zod.object({ - encoding: zod.string(), - stream: zod.instanceof(Readable), +export const handlerPipeThroughStream = z.object({ + encoding: z.string(), + stream: z.instanceof(Readable), headers: headersSchema.optional(), }) -export type HandlerPipeThroughStream = zod.infer< - typeof handlerPipeThroughStream -> +export type HandlerPipeThroughStream = z.infer<typeof handlerPipeThroughStream> -export const handlerPipeThrough = zod.union([ +export const handlerPipeThrough = z.union([ handlerPipeThroughBuffer, handlerPipeThroughStream, ]) -export type HandlerPipeThrough = zod.infer<typeof handlerPipeThrough> +export type HandlerPipeThrough = z.infer<typeof handlerPipeThrough> -export const handlerError = zod.object({ - status: zod.number(), - error: zod.string().optional(), - message: zod.string().optional(), +export const handlerError = z.object({ + status: z.number(), + error: z.string().optional(), + message: z.string().optional(), }) -export type HandlerError = zod.infer<typeof handlerError> +export type HandlerError = z.infer<typeof handlerError> export type HandlerOutput = HandlerSuccess | HandlerPipeThrough | HandlerError diff --git a/packages/xrpc-server/src/util.ts b/packages/xrpc-server/src/util.ts index 5c721eee..7a6cabda 100644 --- a/packages/xrpc-server/src/util.ts +++ b/packages/xrpc-server/src/util.ts @@ -1,28 +1,27 @@ import assert from 'node:assert' -import { Duplex, pipeline, Readable } from 'node:stream' import { IncomingMessage } from 'node:http' +import { Duplex, Readable, pipeline } from 'node:stream' import express from 'express' import mime from 'mime-types' +import { MaxSizeChecker, createDecoders } from '@atproto/common' import { - jsonToLex, - Lexicons, LexXrpcProcedure, LexXrpcQuery, LexXrpcSubscription, + Lexicons, + jsonToLex, } from '@atproto/lexicon' -import { createDecoders, MaxSizeChecker } from '@atproto/common' import { ResponseType } from '@atproto/xrpc' - import { - UndecodedParams, - Params, HandlerInput, HandlerSuccess, - handlerSuccess, - InvalidRequestError, InternalServerError, - XRPCError, + InvalidRequestError, + Params, RouteOpts, + UndecodedParams, + XRPCError, + handlerSuccess, } from './types' export function decodeQueryParams( diff --git a/packages/xrpc-server/tests/_util.ts b/packages/xrpc-server/tests/_util.ts index f3bc70be..b0dc5622 100644 --- a/packages/xrpc-server/tests/_util.ts +++ b/packages/xrpc-server/tests/_util.ts @@ -1,5 +1,5 @@ -import * as http from 'node:http' import { once } from 'node:events' +import * as http from 'node:http' import express from 'express' import * as xrpc from '../src' import { AuthRequiredError } from '../src' diff --git a/packages/xrpc-server/tests/auth.test.ts b/packages/xrpc-server/tests/auth.test.ts index 66a56106..07ef8f46 100644 --- a/packages/xrpc-server/tests/auth.test.ts +++ b/packages/xrpc-server/tests/auth.test.ts @@ -1,5 +1,5 @@ -import * as http from 'node:http' import { KeyObject, createPrivateKey } from 'node:crypto' +import * as http from 'node:http' import { AddressInfo } from 'node:net' import * as jose from 'jose' import KeyEncoder from 'key-encoder' @@ -7,13 +7,13 @@ import * as ui8 from 'uint8arrays' import { MINUTE } from '@atproto/common' import { Secp256k1Keypair } from '@atproto/crypto' import { LexiconDoc } from '@atproto/lexicon' -import { XrpcClient, XRPCError } from '@atproto/xrpc' +import { XRPCError, XrpcClient } from '@atproto/xrpc' import * as xrpcServer from '../src' import { - createServer, + basicAuthHeaders, closeServer, createBasicAuth, - basicAuthHeaders, + createServer, } from './_util' const LEXICONS: LexiconDoc[] = [ diff --git a/packages/xrpc-server/tests/bodies.test.ts b/packages/xrpc-server/tests/bodies.test.ts index 90fcd7c1..bf6c154f 100644 --- a/packages/xrpc-server/tests/bodies.test.ts +++ b/packages/xrpc-server/tests/bodies.test.ts @@ -2,13 +2,13 @@ import * as http from 'node:http' import { AddressInfo } from 'node:net' import { Readable } from 'node:stream' import { brotliCompressSync, deflateSync, gzipSync } from 'node:zlib' -import { LexiconDoc } from '@atproto/lexicon' -import { ResponseType, XrpcClient } from '@atproto/xrpc' import { cidForCbor } from '@atproto/common' import { randomBytes } from '@atproto/crypto' -import { createServer, closeServer } from './_util' +import { LexiconDoc } from '@atproto/lexicon' +import { ResponseType, XrpcClient } from '@atproto/xrpc' import * as xrpcServer from '../src' -import logger from '../src/logger' +import { logger } from '../src/logger' +import { closeServer, createServer } from './_util' const LEXICONS: LexiconDoc[] = [ { diff --git a/packages/xrpc-server/tests/errors.test.ts b/packages/xrpc-server/tests/errors.test.ts index 25b0b04e..ec683ca0 100644 --- a/packages/xrpc-server/tests/errors.test.ts +++ b/packages/xrpc-server/tests/errors.test.ts @@ -2,8 +2,8 @@ import * as http from 'node:http' import { AddressInfo } from 'node:net' import { LexiconDoc } from '@atproto/lexicon' import { XRPCError, XRPCInvalidResponseError, XrpcClient } from '@atproto/xrpc' -import { createServer, closeServer } from './_util' import * as xrpcServer from '../src' +import { closeServer, createServer } from './_util' const LEXICONS: LexiconDoc[] = [ { diff --git a/packages/xrpc-server/tests/frames.test.ts b/packages/xrpc-server/tests/frames.test.ts index d386b57d..a17b0b3a 100644 --- a/packages/xrpc-server/tests/frames.test.ts +++ b/packages/xrpc-server/tests/frames.test.ts @@ -1,6 +1,6 @@ import * as cborx from 'cbor-x' import * as uint8arrays from 'uint8arrays' -import { MessageFrame, ErrorFrame, Frame, FrameType } from '../src' +import { ErrorFrame, Frame, FrameType, MessageFrame } from '../src' describe('Frames', () => { it('creates and parses message frame.', async () => { diff --git a/packages/xrpc-server/tests/ipld.test.ts b/packages/xrpc-server/tests/ipld.test.ts index 78e57748..ff38d90d 100644 --- a/packages/xrpc-server/tests/ipld.test.ts +++ b/packages/xrpc-server/tests/ipld.test.ts @@ -1,10 +1,10 @@ import * as http from 'node:http' import { AddressInfo } from 'node:net' +import { CID } from 'multiformats/cid' import { LexiconDoc } from '@atproto/lexicon' import { XrpcClient } from '@atproto/xrpc' -import { CID } from 'multiformats/cid' -import { createServer, closeServer } from './_util' import * as xrpcServer from '../src' +import { closeServer, createServer } from './_util' const LEXICONS: LexiconDoc[] = [ { diff --git a/packages/xrpc-server/tests/parameters.test.ts b/packages/xrpc-server/tests/parameters.test.ts index 2ab1bf1a..a88a36bb 100644 --- a/packages/xrpc-server/tests/parameters.test.ts +++ b/packages/xrpc-server/tests/parameters.test.ts @@ -2,8 +2,8 @@ import * as http from 'node:http' import { AddressInfo } from 'node:net' import { LexiconDoc } from '@atproto/lexicon' import { XrpcClient } from '@atproto/xrpc' -import { createServer, closeServer } from './_util' import * as xrpcServer from '../src' +import { closeServer, createServer } from './_util' const LEXICONS: LexiconDoc[] = [ { diff --git a/packages/xrpc-server/tests/procedures.test.ts b/packages/xrpc-server/tests/procedures.test.ts index 195138a1..90ca0429 100644 --- a/packages/xrpc-server/tests/procedures.test.ts +++ b/packages/xrpc-server/tests/procedures.test.ts @@ -1,10 +1,10 @@ import * as http from 'node:http' +import { AddressInfo } from 'node:net' import { Readable } from 'node:stream' import { LexiconDoc } from '@atproto/lexicon' import { XrpcClient } from '@atproto/xrpc' -import { createServer, closeServer } from './_util' import * as xrpcServer from '../src' -import { AddressInfo } from 'node:net' +import { closeServer, createServer } from './_util' const LEXICONS: LexiconDoc[] = [ { diff --git a/packages/xrpc-server/tests/queries.test.ts b/packages/xrpc-server/tests/queries.test.ts index 39845f82..c673fa1e 100644 --- a/packages/xrpc-server/tests/queries.test.ts +++ b/packages/xrpc-server/tests/queries.test.ts @@ -2,8 +2,8 @@ import * as http from 'node:http' import { AddressInfo } from 'node:net' import { LexiconDoc } from '@atproto/lexicon' import { XrpcClient } from '@atproto/xrpc' -import { createServer, closeServer } from './_util' import * as xrpcServer from '../src' +import { closeServer, createServer } from './_util' const LEXICONS: LexiconDoc[] = [ { diff --git a/packages/xrpc-server/tests/responses.test.ts b/packages/xrpc-server/tests/responses.test.ts index 5feb42bc..ae892969 100644 --- a/packages/xrpc-server/tests/responses.test.ts +++ b/packages/xrpc-server/tests/responses.test.ts @@ -1,10 +1,10 @@ import * as http from 'node:http' import { AddressInfo } from 'node:net' +import { byteIterableToStream } from '@atproto/common' import { LexiconDoc } from '@atproto/lexicon' import { XrpcClient } from '@atproto/xrpc' -import { byteIterableToStream } from '@atproto/common' -import { createServer, closeServer } from './_util' import * as xrpcServer from '../src' +import { closeServer, createServer } from './_util' const LEXICONS: LexiconDoc[] = [ { diff --git a/packages/xrpc-server/tests/stream.test.ts b/packages/xrpc-server/tests/stream.test.ts index fa879dfd..faae93e5 100644 --- a/packages/xrpc-server/tests/stream.test.ts +++ b/packages/xrpc-server/tests/stream.test.ts @@ -1,6 +1,6 @@ -import * as http from 'http' -import { once } from 'events' -import { AddressInfo } from 'net' +import { once } from 'node:events' +import * as http from 'node:http' +import { AddressInfo } from 'node:net' import { WebSocket } from 'ws' import { XRPCError } from '@atproto/xrpc' import { diff --git a/packages/xrpc-server/tests/subscriptions.test.ts b/packages/xrpc-server/tests/subscriptions.test.ts index cff7646a..109397c5 100644 --- a/packages/xrpc-server/tests/subscriptions.test.ts +++ b/packages/xrpc-server/tests/subscriptions.test.ts @@ -1,17 +1,17 @@ import * as http from 'node:http' import { AddressInfo } from 'node:net' -import { WebSocket, WebSocketServer, createWebSocketStream } from 'ws' import getPort from 'get-port' +import { WebSocket, WebSocketServer, createWebSocketStream } from 'ws' import { wait } from '@atproto/common' import { LexiconDoc } from '@atproto/lexicon' -import { byFrame, MessageFrame, ErrorFrame, Frame, Subscription } from '../src' +import { ErrorFrame, Frame, MessageFrame, Subscription, byFrame } from '../src' +import * as xrpcServer from '../src' import { - createServer, + basicAuthHeaders, closeServer, createBasicAuth, - basicAuthHeaders, + createServer, } from './_util' -import * as xrpcServer from '../src' const LEXICONS: LexiconDoc[] = [ { diff --git a/packages/xrpc/src/client.ts b/packages/xrpc/src/client.ts index 4d36b6aa..00956350 100644 --- a/packages/xrpc/src/client.ts +++ b/packages/xrpc/src/client.ts @@ -1,7 +1,7 @@ import { LexiconDoc, Lexicons } from '@atproto/lexicon' import { CallOptions, QueryParams } from './types' -import { XrpcClient } from './xrpc-client' import { combineHeaders } from './util' +import { XrpcClient } from './xrpc-client' /** @deprecated Use {@link XrpcClient} instead */ export class Client { diff --git a/packages/xrpc/src/index.ts b/packages/xrpc/src/index.ts index f14bb111..1967728b 100644 --- a/packages/xrpc/src/index.ts +++ b/packages/xrpc/src/index.ts @@ -4,7 +4,9 @@ export * from './types' export * from './util' export * from './xrpc-client' +/* eslint-disable import/no-deprecated */ import { Client } from './client' /** @deprecated create a local {@link XrpcClient} instance instead */ const defaultInst = new Client() export default defaultInst +/* eslint-enable import/no-deprecated */ diff --git a/packages/xrpc/src/util.ts b/packages/xrpc/src/util.ts index 558449c9..6fd21f88 100644 --- a/packages/xrpc/src/util.ts +++ b/packages/xrpc/src/util.ts @@ -1,17 +1,17 @@ import { - jsonStringToLex, LexXrpcProcedure, LexXrpcQuery, + jsonStringToLex, stringifyLex, } from '@atproto/lexicon' import { CallOptions, - errorResponseBody, ErrorResponseBody, Gettable, QueryParams, ResponseType, XRPCError, + errorResponseBody, } from './types' const ReadableStream = diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index feb0d227..79b4911e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,15 @@ importers: eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) + eslint-import-resolver-typescript: + specifier: ^3.7.0 + version: 3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.0) + eslint-plugin-import: + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.0) + eslint-plugin-n: + specifier: ^17.15.0 + version: 17.15.0(eslint@8.57.0) eslint-plugin-prettier: specifier: ^5.1.3 version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) @@ -4955,11 +4964,26 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@eslint-community/eslint-utils@4.4.1(eslint@8.57.0): + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true + /@eslint-community/regexpp@4.12.1: + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + /@eslint/eslintrc@2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5621,6 +5645,11 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 + /@nolyfill/is-core-module@1.0.39: + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + dev: true + /@npmcli/fs@2.1.2: resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -6035,6 +6064,10 @@ packages: dev: true optional: true + /@rtsao/scc@1.1.0: + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + dev: true + /@sinclair/typebox@0.24.51: resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} dev: true @@ -6355,6 +6388,10 @@ packages: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + /@types/keygrip@1.0.6: resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} dev: true @@ -6849,14 +6886,46 @@ packages: is-array-buffer: 3.0.2 dev: true + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + is-array-buffer: 3.0.4 + dev: true + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.5 + is-string: 1.0.7 + dev: true + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true + /array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} @@ -6867,6 +6936,26 @@ packages: es-shim-unscopables: 1.0.0 dev: true + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + /arraybuffer.prototype.slice@1.0.1: resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} engines: {node: '>= 0.4'} @@ -6879,6 +6968,20 @@ packages: is-shared-array-buffer: 1.0.2 dev: true + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + get-intrinsic: 1.2.5 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -6932,6 +7035,13 @@ packages: engines: {node: '>= 0.4'} dev: true + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + /await-lock@2.2.2: resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} dev: false @@ -7277,12 +7387,30 @@ packages: - bluebird dev: true + /call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + dev: true + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.1 + /call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.5 + set-function-length: 1.2.2 + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -7782,6 +7910,33 @@ packages: engines: {node: '>= 14'} dev: true + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + /dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true @@ -7883,6 +8038,17 @@ packages: dependencies: ms: 2.0.0 + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -7947,6 +8113,15 @@ packages: clone: 1.0.4 dev: true + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -7954,6 +8129,15 @@ packages: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + /degenerator@5.0.1: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} @@ -8042,6 +8226,13 @@ packages: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -8081,6 +8272,15 @@ packages: engines: {node: '>=10'} dev: true + /dunder-proto@1.0.0: + resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + dev: true + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -8140,6 +8340,14 @@ packages: dependencies: once: 1.4.0 + /enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -8211,6 +8419,75 @@ packages: which-typed-array: 1.1.11 dev: true + /es-abstract@1.23.5: + resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.5 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.3 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.3 + typed-array-length: 1.0.7 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.16 + dev: true + + /es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} @@ -8220,12 +8497,27 @@ packages: has-tostringtag: 1.0.0 dev: true + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.5 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + /es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: has: 1.0.3 dev: true + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.2 + dev: true + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} @@ -8484,6 +8776,16 @@ packages: source-map: 0.6.1 dev: true + /eslint-compat-utils@0.5.1(eslint@8.57.0): + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.57.0 + semver: 7.6.3 + dev: true + /eslint-config-prettier@9.1.0(eslint@8.57.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -8493,6 +8795,139 @@ packages: eslint: 8.57.0 dev: true + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.15.1 + resolve: 1.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.0): + resolution: {integrity: sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7 + enhanced-resolve: 5.17.1 + eslint: 8.57.0 + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.8.1 + is-bun-module: 1.3.0 + is-glob: 4.0.3 + stable-hash: 0.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.12.0(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.0): + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.6.3) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-es-x@7.8.0(eslint@8.57.0): + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) + '@eslint-community/regexpp': 4.12.1 + eslint: 8.57.0 + eslint-compat-utils: 0.5.1(eslint@8.57.0) + dev: true + + /eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.0): + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@rtsao/scc': 1.1.0 + '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.6.3) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.15.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-n@17.15.0(eslint@8.57.0): + resolution: {integrity: sha512-xF3zJkOfLlFOm5TvmqmsnA9/fO+/z2pYs0dkuKXKN/ymS6UB1yEcaoIkqxLKQ9Dw/WmLX/Tdh6/5ZS5azVixFQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.23.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) + enhanced-resolve: 5.17.1 + eslint: 8.57.0 + eslint-plugin-es-x: 7.8.0(eslint@8.57.0) + get-tsconfig: 4.8.1 + globals: 15.13.0 + ignore: 5.3.2 + minimatch: 9.0.5 + semver: 7.6.3 + dev: true + /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -8772,6 +9207,17 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true @@ -9003,6 +9449,10 @@ packages: /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} @@ -9054,6 +9504,20 @@ packages: has-proto: 1.0.1 has-symbols: 1.0.3 + /get-intrinsic@1.2.5: + resolution: {integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.1 + dunder-proto: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + function-bind: 1.1.2 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + dev: true + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -9088,6 +9552,21 @@ packages: get-intrinsic: 1.2.1 dev: true + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + get-intrinsic: 1.2.5 + dev: true + + /get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /get-uri@6.0.3: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} @@ -9162,12 +9641,25 @@ packages: type-fest: 0.20.2 dev: true + /globals@15.13.0: + resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + engines: {node: '>=18'} + dev: true + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + dev: true + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -9197,6 +9689,11 @@ packages: get-intrinsic: 1.2.1 dev: true + /gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true @@ -9257,14 +9754,32 @@ packages: dependencies: get-intrinsic: 1.2.1 + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.1 + dev: true + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} + /has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.0 + dev: true + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + /has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + dev: true + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} @@ -9272,6 +9787,13 @@ packages: has-symbols: 1.0.3 dev: true + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} dev: true @@ -9288,6 +9810,13 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -9446,6 +9975,11 @@ packages: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + dev: true + /import-cwd@3.0.0: resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} engines: {node: '>=8'} @@ -9526,6 +10060,15 @@ packages: side-channel: 1.0.4 dev: true + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.4 + dev: true + /ioredis@5.3.2: resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==} engines: {node: '>=12.22.0'} @@ -9575,6 +10118,14 @@ packages: is-typed-array: 1.1.12 dev: true + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.2.5 + dev: true + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -9582,6 +10133,13 @@ packages: /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: @@ -9610,6 +10168,12 @@ packages: builtin-modules: 3.3.0 dev: true + /is-bun-module@1.3.0: + resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} + dependencies: + semver: 7.6.3 + dev: true + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -9627,6 +10191,20 @@ packages: dependencies: has: 1.0.3 + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -9638,6 +10216,13 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + /is-finalizationregistry@1.1.0: + resolution: {integrity: sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + dev: true + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -9647,6 +10232,13 @@ packages: engines: {node: '>=6'} dev: true + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -9657,6 +10249,11 @@ packages: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} dev: true + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + dev: true + /is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true @@ -9666,6 +10263,11 @@ packages: engines: {node: '>= 0.4'} dev: true + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -9701,12 +10303,24 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + dev: true + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + dev: true + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -9740,12 +10354,32 @@ packages: which-typed-array: 1.1.11 dev: true + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.16 + dev: true + + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + dev: true + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.2.5 + dev: true + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -10299,6 +10933,13 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -10737,6 +11378,13 @@ packages: dependencies: brace-expansion: 2.0.1 + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -11039,6 +11687,11 @@ packages: /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + /object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + dev: true + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -11053,6 +11706,44 @@ packages: object-keys: 1.1.1 dev: true + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 + dev: true + + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + dev: true + + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /on-exit-leak-free@2.1.0: resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} @@ -11439,6 +12130,11 @@ packages: find-up: 4.1.0 dev: true + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + /postcss-calc@8.2.4(postcss@8.4.38): resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: @@ -12261,6 +12957,20 @@ packages: dependencies: redis-errors: 1.2.0 + /reflect.getprototypeof@1.0.8: + resolution: {integrity: sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + dunder-proto: 1.0.0 + es-abstract: 1.23.5 + es-errors: 1.3.0 + get-intrinsic: 1.2.5 + gopd: 1.2.0 + which-builtin-type: 1.2.0 + dev: true + /regenerator-runtime@0.14.0: resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} dev: true @@ -12274,6 +12984,16 @@ packages: functions-have-names: 1.2.3 dev: true + /regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -12319,6 +13039,10 @@ packages: engines: {node: '>=8'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve.exports@1.1.1: resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} engines: {node: '>=10'} @@ -12457,6 +13181,16 @@ packages: isarray: 2.0.5 dev: true + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.2.5 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -12475,6 +13209,15 @@ packages: is-regex: 1.1.4 dev: true + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + /safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} @@ -12570,6 +13313,28 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.5 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -12841,6 +13606,10 @@ packages: minipass: 3.3.6 dev: true + /stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + dev: true + /stable@0.1.8: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' @@ -12932,6 +13701,16 @@ packages: es-abstract: 1.22.1 dev: true + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 + dev: true + /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: @@ -12940,6 +13719,14 @@ packages: es-abstract: 1.22.1 dev: true + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: @@ -12948,6 +13735,15 @@ packages: es-abstract: 1.22.1 dev: true + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -13126,6 +13922,11 @@ packages: - ts-node dev: true + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} dependencies: @@ -13341,6 +14142,15 @@ packages: yn: 3.1.1 dev: true + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: false @@ -13452,6 +14262,15 @@ packages: is-typed-array: 1.1.12 dev: true + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} @@ -13462,6 +14281,17 @@ packages: is-typed-array: 1.1.12 dev: true + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.2.0 + is-typed-array: 1.1.13 + dev: true + /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} @@ -13473,6 +14303,19 @@ packages: is-typed-array: 1.1.12 dev: true + /typed-array-byte-offset@1.0.3: + resolution: {integrity: sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.2.0 + is-typed-array: 1.1.13 + reflect.getprototypeof: 1.0.8 + dev: true + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: @@ -13481,6 +14324,18 @@ packages: is-typed-array: 1.1.12 dev: true + /typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.0.1 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.8 + dev: true + /typed-emitter@2.1.0: resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} optionalDependencies: @@ -13685,6 +14540,35 @@ packages: is-symbol: 1.0.4 dev: true + /which-builtin-type@1.2.0: + resolution: {integrity: sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.1.0 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.16 + dev: true + + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + dev: true + /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true @@ -13708,6 +14592,17 @@ packages: has-tostringtag: 1.0.0 dev: true + /which-typed-array@1.1.16: + resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true diff --git a/services/bsky/api.js b/services/bsky/api.js index e14b43f2..56c769b9 100644 --- a/services/bsky/api.js +++ b/services/bsky/api.js @@ -1,4 +1,5 @@ /* eslint-env node */ +/* eslint-disable import/order */ 'use strict' @@ -39,11 +40,12 @@ dd.tracer._tracer.startSpan = function (name, options) { } // Tracer code above must come before anything else -const path = require('node:path') const assert = require('node:assert') -const cluster = require('cluster') +const cluster = require('node:cluster') +const path = require('node:path') + +const { BskyAppView, ServerConfig } = require('@atproto/bsky') const { Secp256k1Keypair } = require('@atproto/crypto') -const { ServerConfig, BskyAppView } = require('@atproto/bsky') const main = async () => { const env = getEnv() diff --git a/services/bsync/index.js b/services/bsync/index.js index 93aa1a10..ae5e162e 100644 --- a/services/bsync/index.js +++ b/services/bsync/index.js @@ -7,10 +7,10 @@ require('dd-trace') // Only works with commonjs // Tracer code above must come before anything else const { - envToCfg, - readEnv, - httpLogger, default: BsyncService, + envToCfg, + httpLogger, + readEnv, } = require('@atproto/bsync') const main = async () => { diff --git a/services/ozone/api.js b/services/ozone/api.js index 0b957b0d..cc05cfb2 100644 --- a/services/ozone/api.js +++ b/services/ozone/api.js @@ -13,19 +13,19 @@ require('dd-trace') // Only works with commonjs }) // Tracer code above must come before anything else -const path = require('path') +const path = require('node:path') const { BunnyInvalidator, CloudfrontInvalidator, MultiImageInvalidator, } = require('@atproto/aws') const { + Database, OzoneService, envToCfg, envToSecrets, - readEnv, httpLogger, - Database, + readEnv, } = require('@atproto/ozone') const main = async () => { diff --git a/services/pds/index.js b/services/pds/index.js index 9022216d..04dc2e64 100644 --- a/services/pds/index.js +++ b/services/pds/index.js @@ -6,8 +6,8 @@ const { PDS, envToCfg, envToSecrets, - readEnv, httpLogger, + readEnv, } = require('@atproto/pds') const pkg = require('@atproto/pds/package.json') diff --git a/services/pds/run-script.js b/services/pds/run-script.js index ee9d6278..600f42db 100644 --- a/services/pds/run-script.js +++ b/services/pds/run-script.js @@ -2,10 +2,10 @@ 'use strict' const { + AppContext, envToCfg, envToSecrets, readEnv, - AppContext, scripts, } = require('@atproto/pds') diff --git a/services/pds/tracer.js b/services/pds/tracer.js index 67e9cce5..de770ba7 100644 --- a/services/pds/tracer.js +++ b/services/pds/tracer.js @@ -1,13 +1,12 @@ /* eslint-env node */ +/* eslint-disable import/order */ 'use strict' const { registerInstrumentations } = require('@opentelemetry/instrumentation') - const { BetterSqlite3Instrumentation, } = require('opentelemetry-plugin-better-sqlite3') - const { TracerProvider } = require('dd-trace') // Only works with commonjs .init({ logInjection: true }) .use('express', { @@ -22,7 +21,7 @@ registerInstrumentations({ instrumentations: [new BetterSqlite3Instrumentation()], }) -const path = require('path') +const path = require('node:path') function maintainXrpcResource(span, req) { // Show actual xrpc method as resource rather than the route pattern