{"version":3,"sources":["jsdelivr-header.js","/npm/@atproto/bsky@0.0.217/src/index.ts"],"names":[],"mappings":"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","file":"/npm/@atproto/bsky@0.0.217/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@atproto/bsky@0.0.217/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import events from 'node:events'\nimport http from 'node:http'\nimport { AddressInfo } from 'node:net'\nimport compression from 'compression'\nimport cors from 'cors'\nimport { Etcd3 } from 'etcd3'\nimport express from 'express'\nimport { HttpTerminator, createHttpTerminator } from 'http-terminator'\nimport { AtpAgent } from '@atproto/api'\nimport { DAY, SECOND } from '@atproto/common'\nimport { Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport API, { blobResolver, external, health, sitemap, wellKnown } from './api'\nimport { createBlobDispatcher } from './api/blob-dispatcher'\nimport { AuthVerifier, createPublicKeyObject } from './auth-verifier'\nimport { authWithApiKey as bsyncAuth, createBsyncClient } from './bsync'\nimport { ServerConfig } from './config'\nimport { AppContext } from './context'\nimport { authWithApiKey as courierAuth, createCourierClient } from './courier'\nimport {\n  BasicHostList,\n  EtcdHostList,\n  createDataPlaneClient,\n} from './data-plane/client'\nimport * as error from './error'\nimport { FeatureGatesClient } from './feature-gates'\nimport { Hydrator } from './hydration/hydrator'\nimport * as imageServer from './image/server'\nimport { ImageUriBuilder } from './image/uri'\nimport { createKwsClient } from './kws'\nimport { createServer } from './lexicon'\nimport { loggerMiddleware } from './logger'\nimport { authWithApiKey as rolodexAuth, createRolodexClient } from './rolodex'\nimport { createStashClient } from './stash'\nimport { Views } from './views'\nimport { VideoUriBuilder } from './views/util'\n\nexport { ServerConfig } from './config'\nexport type { ServerConfigValues } from './config'\nexport { AppContext } from './context'\nexport * from './data-plane'\nexport { BackgroundQueue } from './data-plane/server/background'\nexport { Database } from './data-plane/server/db'\nexport { Redis } from './redis'\n\nexport class BskyAppView {\n  public ctx: AppContext\n  public app: express.Application\n  public server?: http.Server\n  private terminator?: HttpTerminator\n\n  constructor(opts: { ctx: AppContext; app: express.Application }) {\n    this.ctx = opts.ctx\n    this.app = opts.app\n  }\n\n  static create(opts: {\n    config: ServerConfig\n    signingKey: Keypair\n  }): BskyAppView {\n    const { config, signingKey } = opts\n    const app = express()\n    app.set('trust proxy', true)\n    app.use(cors({ maxAge: DAY / SECOND }))\n    app.use(loggerMiddleware)\n    app.use(compression())\n\n    // used solely for handle resolution: identity lookups occur on dataplane\n    const idResolver = new IdResolver({\n      plcUrl: config.didPlcUrl,\n      backupNameservers: config.handleResolveNameservers,\n    })\n\n    const imgUriBuilder = new ImageUriBuilder(\n      config.cdnUrl || `${config.publicUrl}/img`,\n    )\n    const videoUriBuilder = new VideoUriBuilder({\n      playlistUrlPattern:\n        config.videoPlaylistUrlPattern ||\n        `${config.publicUrl}/vid/%s/%s/playlist.m3u8`,\n      thumbnailUrlPattern:\n        config.videoThumbnailUrlPattern ||\n        `${config.publicUrl}/vid/%s/%s/thumbnail.jpg`,\n    })\n\n    const searchAgent = config.searchUrl\n      ? new AtpAgent({ service: config.searchUrl })\n      : undefined\n\n    const suggestionsAgent = config.suggestionsUrl\n      ? new AtpAgent({ service: config.suggestionsUrl })\n      : undefined\n    if (suggestionsAgent && config.suggestionsApiKey) {\n      suggestionsAgent.api.setHeader(\n        'authorization',\n        `Bearer ${config.suggestionsApiKey}`,\n      )\n    }\n\n    const topicsAgent = config.topicsUrl\n      ? new AtpAgent({ service: config.topicsUrl })\n      : undefined\n    if (topicsAgent && config.topicsApiKey) {\n      topicsAgent.api.setHeader(\n        'authorization',\n        `Bearer ${config.topicsApiKey}`,\n      )\n    }\n\n    const etcd = config.etcdHosts.length\n      ? new Etcd3({ hosts: config.etcdHosts })\n      : undefined\n\n    const dataplaneHostList =\n      etcd && config.dataplaneUrlsEtcdKeyPrefix\n        ? new EtcdHostList(\n            etcd,\n            config.dataplaneUrlsEtcdKeyPrefix,\n            config.dataplaneUrls,\n          )\n        : new BasicHostList(config.dataplaneUrls)\n\n    const dataplane = createDataPlaneClient(dataplaneHostList, {\n      httpVersion: config.dataplaneHttpVersion,\n      rejectUnauthorized: !config.dataplaneIgnoreBadTls,\n    })\n    const hydrator = new Hydrator(dataplane, config.labelsFromIssuerDids, {\n      debugFieldAllowedDids: config.debugFieldAllowedDids,\n    })\n    const views = new Views({\n      imgUriBuilder: imgUriBuilder,\n      videoUriBuilder: videoUriBuilder,\n      indexedAtEpoch: config.indexedAtEpoch,\n      threadTagsBumpDown: [...config.threadTagsBumpDown],\n      threadTagsHide: [...config.threadTagsHide],\n      visibilityTagHide: config.visibilityTagHide,\n      visibilityTagRankPrefix: config.visibilityTagRankPrefix,\n    })\n\n    const bsyncClient = createBsyncClient({\n      baseUrl: config.bsyncUrl,\n      httpVersion: config.bsyncHttpVersion ?? '2',\n      nodeOptions: { rejectUnauthorized: !config.bsyncIgnoreBadTls },\n      interceptors: config.bsyncApiKey ? [bsyncAuth(config.bsyncApiKey)] : [],\n    })\n\n    const stashClient = createStashClient(bsyncClient)\n\n    const courierClient = config.courierUrl\n      ? createCourierClient({\n          baseUrl: config.courierUrl,\n          httpVersion: config.courierHttpVersion ?? '2',\n          nodeOptions: { rejectUnauthorized: !config.courierIgnoreBadTls },\n          interceptors: config.courierApiKey\n            ? [courierAuth(config.courierApiKey)]\n            : [],\n        })\n      : undefined\n\n    const rolodexClient = config.rolodexUrl\n      ? createRolodexClient({\n          baseUrl: config.rolodexUrl,\n          httpVersion: config.rolodexHttpVersion ?? '2',\n          nodeOptions: { rejectUnauthorized: !config.rolodexIgnoreBadTls },\n          interceptors: config.rolodexApiKey\n            ? [rolodexAuth(config.rolodexApiKey)]\n            : [],\n        })\n      : undefined\n\n    const kwsClient = config.kws ? createKwsClient(config.kws) : undefined\n\n    const entrywayJwtPublicKey = config.entrywayJwtPublicKeyHex\n      ? createPublicKeyObject(config.entrywayJwtPublicKeyHex)\n      : undefined\n    const authVerifier = new AuthVerifier(dataplane, {\n      ownDid: config.serverDid,\n      alternateAudienceDids: config.alternateAudienceDids,\n      modServiceDid: config.modServiceDid,\n      adminPasses: config.adminPasswords,\n      entrywayJwtPublicKey,\n    })\n\n    const featureGatesClient = new FeatureGatesClient({\n      growthBookApiHost: config.growthBookApiHost,\n      growthBookClientKey: config.growthBookClientKey,\n      eventProxyTrackingEndpoint: config.eventProxyTrackingEndpoint,\n    })\n\n    const blobDispatcher = createBlobDispatcher(config)\n\n    const ctx = new AppContext({\n      cfg: config,\n      etcd,\n      dataplane,\n      dataplaneHostList,\n      searchAgent,\n      suggestionsAgent,\n      topicsAgent,\n      hydrator,\n      views,\n      signingKey,\n      idResolver,\n      bsyncClient,\n      stashClient,\n      courierClient,\n      rolodexClient,\n      authVerifier,\n      featureGatesClient,\n      blobDispatcher,\n      kwsClient,\n    })\n\n    let server = createServer({\n      validateResponse: config.debugMode,\n      payload: {\n        jsonLimit: 100 * 1024, // 100kb\n        textLimit: 100 * 1024, // 100kb\n        blobLimit: 5 * 1024 * 1024, // 5mb\n      },\n    })\n\n    server = API(server, ctx)\n\n    app.use(health.createRouter(ctx))\n    app.use(wellKnown.createRouter(ctx))\n    app.use(blobResolver.createMiddleware(ctx))\n    app.use(imageServer.createMiddleware(ctx, { prefix: '/img/' }))\n\n    if (config.dataplaneUrls.length > 0 || config.dataplaneUrlsEtcdKeyPrefix) {\n      app.use(sitemap.createRouter(ctx))\n    }\n\n    app.use(server.xrpc.router)\n    app.use(error.handler)\n    app.use('/external', external.createRouter(ctx))\n\n    return new BskyAppView({ ctx, app })\n  }\n\n  async start(): Promise<http.Server> {\n    if (this.ctx.dataplaneHostList instanceof EtcdHostList) {\n      await this.ctx.dataplaneHostList.connect()\n    }\n    this.ctx.featureGatesClient.start() // lazy, no await\n    const server = this.app.listen(this.ctx.cfg.port)\n    this.server = server\n    server.keepAliveTimeout = 90000\n    this.terminator = createHttpTerminator({ server })\n    await events.once(server, 'listening')\n    const { port } = server.address() as AddressInfo\n    this.ctx.cfg.assignPort(port)\n    return server\n  }\n\n  async destroy(): Promise<void> {\n    this.ctx.featureGatesClient.destroy()\n    await this.terminator?.terminate()\n    await this.ctx.etcd?.close()\n  }\n}\n\nexport default BskyAppView\n"]}