diff --git a/.changeset/fair-tigers-thank.md b/.changeset/fair-tigers-thank.md new file mode 100644 index 000000000..9491e3c47 --- /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 000000000..02236e7d5 --- /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 000000000..2211f1159 --- /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 8529167b1..8afe9bb56 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 dccb907cf..cda9f5843 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 16e700de3..681b5d036 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 078e42351..d7161f6af 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 000000000..b5230afc1 --- /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 e9de33276..2601cf849 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 333fbd49a..000000000 --- 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 7613e58d1..b0be3ba79 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 43d46020e..8ced8afe4 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 556dba965..905268de8 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 042a90bbe..bc33e100c 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 503e635c8..b2375899f 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 a1c873b7d..6014d46ff 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 3afada34b..8568f90f0 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 610766866..2e3a8a09f 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 f17ec4029..8d0b7c6db 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 f76e2bfa7..0dfcf67b6 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 f5ed15177..f2d5f4087 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 bbf8d842f..6d2371b11 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 c7ac5bdf9..4c4c4eb21 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 8d1e05521..f4b190e10 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 2b7d0227b..44f48b5f4 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 145ffba7f..5e9e28bf0 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 b2387dba3..823faf636 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 0c686aa96..11c4802ca 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) => { diff --git a/packages/api/tests/errors.test.ts b/packages/api/tests/errors.test.ts index 2d903f2f1..e2cfff268 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 7e8b54a69..a180828b5 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 3e051fb04..0af184aeb 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 681dddc73..b8eb014ee 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 1ed415d32..2041f1903 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 d7d3f9d47..f85e4a532 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 6e2a88947..45365df1f 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 9cc8a9a07..f30986852 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 b277284b5..752d68507 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 da2eb1836..7589307dd 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 81014d63f..682a5a0cc 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 27edc5e09..4d77afd94 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 796460106..069885e6f 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 046312114..a28d79045 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 3328bda7a..9f7eb8b5e 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 4af0927fe..b6f29a2ac 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 9e0d944e7..88dc6213c 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 e5fbe0e32..1808833d9 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 55624324a..b71bead2d 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 897a1c251..1c83ddcca 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 d0804bde2..61ba78319 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 decd4a045..e61ac0e94 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 647bfdd09..12ce1d4dc 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 9bf3eaf26..9f8dea404 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 e99630452..4e09bf00f 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 7d30f3ac6..e750350ab 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 e15f91aa6..5b6613b72 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 86fa1cc3d..6b4416310 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 630f02d5d..d7c7f95d3 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 6055c5579..cf514bbf8 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 ad13b3a0a..17e91c544 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 37f1b601b..31930e999 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 853c54530..d0d319518 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 e56efe17a..744297b97 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 3042b07ed..bed8610ba 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 76a501a3c..80594ab16 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 94aac9cdb..46bf7af66 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 71501ba23..b314e0a1d 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 995bc294c..e009637c4 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 89f79edbb..70fd3c9b4 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 fbd62c215..61f951d06 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 31d241710..e913658a9 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 1f417c32b..c28671ad7 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 47aaa6cd0..b311ac918 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 770f79294..8832bfd5f 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 845bc87b1..dac4baf03 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 c7eec21ba..9aeb9816c 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 051e5564b..2f25af796 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 2f9f8c757..177e6a7c2 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 a0e1cf9df..013a67725 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 53ca0dba8..5665950a6 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 5462d7a71..393da722d 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 2c80e4218..8ebd4c700 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 d8e532003..55507633a 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 f5df1cbf5..c40b6a4b1 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 fe58a66b0..1b25638dd 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 8f4fa2f07..07d11dac5 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 7cafa2283..901b2549f 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 32c04b608..959a20ace 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 923b4dfe4..2ecdea14c 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 f77c4a199..441c3f1fe 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 d96943827..8753c44ae 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 79df48579..ffe077505 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 35187f781..7c53caecb 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 24dd96945..3baa89a0c 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 562c10038..c7098065f 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 788e7dbef..4efee135c 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 3be4c1c01..740787375 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 8256efbe7..14cf1b9a5 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 6cb524c6e..f917ede3d 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 dbbf32d10..f9d2b1448 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 bb8c8660a..c7c9897c3 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 044a8d4df..5bbebc40a 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 8b0f42dae..dd3859090 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 a8eaabf29..3eb292664 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 e628d0ab2..cc65a0d8c 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 d1bc06cc8..29cfa1bb4 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 40a21a9c2..83e0bc7b1 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 diff --git a/packages/bsky/src/context.ts b/packages/bsky/src/context.ts index 06e48ba8c..55c665999 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 aeb095898..8de5fe722 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 diff --git a/packages/bsky/src/data-plane/bsync/index.ts b/packages/bsky/src/data-plane/bsync/index.ts index a8ad57467..722d4fa7f 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 11e68a668..0b12db4c6 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 59d8ccf0d..ef74d3a09 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 195b09483..5fe3f830a 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 - -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 9b1cc645d..063aef8e2 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 cee5d100f..ae9dddbf4 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 a12c63a22..6814e58a4 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 66f9f98f6..17578099a 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 ec4956a04..290a376f4 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 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 e234768e8..08e168595 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 f3b82c755..8e567680d 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 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 6f2387557..36f8e1d9b 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 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 5efdb0e30..7ee479055 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 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 98e9fc722..6afd30aff 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 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 09eabcdb9..19cd392bd 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 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 f2a43cff4..0536176da 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 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 f6deaf0a6..7451060d7 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 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 3b92d4a13..34b9bb4b8 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 606d2aff3..80ce45135 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 type Post = Selectable 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 762fb4c4b..deeca3f56 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 ec2e7754f..c43267b8d 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 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 844c84544..fe237c5cf 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 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 bbcd42190..a6c53d84e 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 d88d230dd..ade9dea32 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 60b737a88..4a0135d74 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> => ({ 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 8ef27fdfe..9038807fd 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 fb8dffc09..007ace4fe 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 5504d38f8..f64bf4bd0 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 2a0e00f2c..2ce84b391 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 ccd485da3..045279f82 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