@atproto/bsky 0.0.199 → 0.0.200

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/api/app/bsky/contact/dismissMatch.d.ts +4 -0
  3. package/dist/api/app/bsky/contact/dismissMatch.d.ts.map +1 -0
  4. package/dist/api/app/bsky/contact/dismissMatch.js +23 -0
  5. package/dist/api/app/bsky/contact/dismissMatch.js.map +1 -0
  6. package/dist/api/app/bsky/contact/getMatches.d.ts +4 -0
  7. package/dist/api/app/bsky/contact/getMatches.d.ts.map +1 -0
  8. package/dist/api/app/bsky/contact/getMatches.js +59 -0
  9. package/dist/api/app/bsky/contact/getMatches.js.map +1 -0
  10. package/dist/api/app/bsky/contact/getSyncStatus.d.ts +4 -0
  11. package/dist/api/app/bsky/contact/getSyncStatus.d.ts.map +1 -0
  12. package/dist/api/app/bsky/contact/getSyncStatus.js +32 -0
  13. package/dist/api/app/bsky/contact/getSyncStatus.js.map +1 -0
  14. package/dist/api/app/bsky/contact/importContacts.d.ts +4 -0
  15. package/dist/api/app/bsky/contact/importContacts.d.ts.map +1 -0
  16. package/dist/api/app/bsky/contact/importContacts.js +62 -0
  17. package/dist/api/app/bsky/contact/importContacts.js.map +1 -0
  18. package/dist/api/app/bsky/contact/removeData.d.ts +4 -0
  19. package/dist/api/app/bsky/contact/removeData.d.ts.map +1 -0
  20. package/dist/api/app/bsky/contact/removeData.js +22 -0
  21. package/dist/api/app/bsky/contact/removeData.js.map +1 -0
  22. package/dist/api/app/bsky/contact/startPhoneVerification.d.ts +4 -0
  23. package/dist/api/app/bsky/contact/startPhoneVerification.d.ts.map +1 -0
  24. package/dist/api/app/bsky/contact/startPhoneVerification.js +23 -0
  25. package/dist/api/app/bsky/contact/startPhoneVerification.js.map +1 -0
  26. package/dist/api/app/bsky/contact/util.d.ts +6 -0
  27. package/dist/api/app/bsky/contact/util.d.ts.map +1 -0
  28. package/dist/api/app/bsky/contact/util.js +10 -0
  29. package/dist/api/app/bsky/contact/util.js.map +1 -0
  30. package/dist/api/app/bsky/contact/verifyPhone.d.ts +4 -0
  31. package/dist/api/app/bsky/contact/verifyPhone.d.ts.map +1 -0
  32. package/dist/api/app/bsky/contact/verifyPhone.js +26 -0
  33. package/dist/api/app/bsky/contact/verifyPhone.js.map +1 -0
  34. package/dist/api/app/bsky/graph/getRelationships.d.ts.map +1 -1
  35. package/dist/api/app/bsky/graph/getRelationships.js +4 -0
  36. package/dist/api/app/bsky/graph/getRelationships.js.map +1 -1
  37. package/dist/api/index.d.ts.map +1 -1
  38. package/dist/api/index.js +14 -0
  39. package/dist/api/index.js.map +1 -1
  40. package/dist/config.d.ts +8 -0
  41. package/dist/config.d.ts.map +1 -1
  42. package/dist/config.js +21 -0
  43. package/dist/config.js.map +1 -1
  44. package/dist/context.d.ts +3 -0
  45. package/dist/context.d.ts.map +1 -1
  46. package/dist/context.js +3 -0
  47. package/dist/context.js.map +1 -1
  48. package/dist/hydration/actor.js +1 -1
  49. package/dist/hydration/actor.js.map +1 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +12 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/lexicon/index.d.ts +19 -0
  54. package/dist/lexicon/index.d.ts.map +1 -1
  55. package/dist/lexicon/index.js +48 -1
  56. package/dist/lexicon/index.js.map +1 -1
  57. package/dist/lexicon/lexicons.d.ts +664 -0
  58. package/dist/lexicon/lexicons.d.ts.map +1 -1
  59. package/dist/lexicon/lexicons.js +354 -0
  60. package/dist/lexicon/lexicons.js.map +1 -1
  61. package/dist/lexicon/types/app/bsky/contact/defs.d.ts +24 -0
  62. package/dist/lexicon/types/app/bsky/contact/defs.d.ts.map +1 -0
  63. package/dist/lexicon/types/app/bsky/contact/defs.js +25 -0
  64. package/dist/lexicon/types/app/bsky/contact/defs.js.map +1 -0
  65. package/dist/lexicon/types/app/bsky/contact/dismissMatch.d.ts +25 -0
  66. package/dist/lexicon/types/app/bsky/contact/dismissMatch.d.ts.map +1 -0
  67. package/dist/lexicon/types/app/bsky/contact/dismissMatch.js +7 -0
  68. package/dist/lexicon/types/app/bsky/contact/dismissMatch.js.map +1 -0
  69. package/dist/lexicon/types/app/bsky/contact/getMatches.d.ts +25 -0
  70. package/dist/lexicon/types/app/bsky/contact/getMatches.d.ts.map +1 -0
  71. package/dist/lexicon/types/app/bsky/contact/getMatches.js +7 -0
  72. package/dist/lexicon/types/app/bsky/contact/getMatches.js.map +1 -0
  73. package/dist/lexicon/types/app/bsky/contact/getSyncStatus.d.ts +21 -0
  74. package/dist/lexicon/types/app/bsky/contact/getSyncStatus.d.ts.map +1 -0
  75. package/dist/lexicon/types/app/bsky/contact/getSyncStatus.js +7 -0
  76. package/dist/lexicon/types/app/bsky/contact/getSyncStatus.js.map +1 -0
  77. package/dist/lexicon/types/app/bsky/contact/importContacts.d.ts +30 -0
  78. package/dist/lexicon/types/app/bsky/contact/importContacts.d.ts.map +1 -0
  79. package/dist/lexicon/types/app/bsky/contact/importContacts.js +7 -0
  80. package/dist/lexicon/types/app/bsky/contact/importContacts.js.map +1 -0
  81. package/dist/lexicon/types/app/bsky/contact/removeData.d.ts +23 -0
  82. package/dist/lexicon/types/app/bsky/contact/removeData.d.ts.map +1 -0
  83. package/dist/lexicon/types/app/bsky/contact/removeData.js +7 -0
  84. package/dist/lexicon/types/app/bsky/contact/removeData.js.map +1 -0
  85. package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.d.ts +25 -0
  86. package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.d.ts.map +1 -0
  87. package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.js +7 -0
  88. package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.js.map +1 -0
  89. package/dist/lexicon/types/app/bsky/contact/verifyPhone.d.ts +29 -0
  90. package/dist/lexicon/types/app/bsky/contact/verifyPhone.d.ts.map +1 -0
  91. package/dist/lexicon/types/app/bsky/contact/verifyPhone.js +7 -0
  92. package/dist/lexicon/types/app/bsky/contact/verifyPhone.js.map +1 -0
  93. package/dist/lexicon/types/app/bsky/graph/defs.d.ts +8 -0
  94. package/dist/lexicon/types/app/bsky/graph/defs.d.ts.map +1 -1
  95. package/dist/lexicon/types/app/bsky/graph/defs.js.map +1 -1
  96. package/dist/proto/bsky_pb.d.ts +0 -4
  97. package/dist/proto/bsky_pb.d.ts.map +1 -1
  98. package/dist/proto/bsky_pb.js +0 -10
  99. package/dist/proto/bsky_pb.js.map +1 -1
  100. package/dist/proto/rolodex_connect.d.ts +83 -0
  101. package/dist/proto/rolodex_connect.d.ts.map +1 -0
  102. package/dist/proto/rolodex_connect.js +90 -0
  103. package/dist/proto/rolodex_connect.js.map +1 -0
  104. package/dist/proto/rolodex_pb.d.ts +363 -0
  105. package/dist/proto/rolodex_pb.d.ts.map +1 -0
  106. package/dist/proto/rolodex_pb.js +1032 -0
  107. package/dist/proto/rolodex_pb.js.map +1 -0
  108. package/dist/rolodex.d.ts +9 -0
  109. package/dist/rolodex.d.ts.map +1 -0
  110. package/dist/rolodex.js +25 -0
  111. package/dist/rolodex.js.map +1 -0
  112. package/package.json +13 -13
  113. package/proto/rolodex.proto +116 -0
  114. package/src/api/app/bsky/contact/dismissMatch.ts +24 -0
  115. package/src/api/app/bsky/contact/getMatches.ts +111 -0
  116. package/src/api/app/bsky/contact/getSyncStatus.ts +35 -0
  117. package/src/api/app/bsky/contact/importContacts.ts +118 -0
  118. package/src/api/app/bsky/contact/removeData.ts +23 -0
  119. package/src/api/app/bsky/contact/startPhoneVerification.ts +24 -0
  120. package/src/api/app/bsky/contact/util.ts +13 -0
  121. package/src/api/app/bsky/contact/verifyPhone.ts +27 -0
  122. package/src/api/app/bsky/graph/getRelationships.ts +4 -0
  123. package/src/api/index.ts +14 -0
  124. package/src/config.ts +27 -0
  125. package/src/context.ts +6 -0
  126. package/src/hydration/actor.ts +1 -1
  127. package/src/index.ts +13 -0
  128. package/src/lexicon/index.ts +101 -0
  129. package/src/lexicon/lexicons.ts +375 -0
  130. package/src/lexicon/types/app/bsky/contact/defs.ts +52 -0
  131. package/src/lexicon/types/app/bsky/contact/dismissMatch.ts +43 -0
  132. package/src/lexicon/types/app/bsky/contact/getMatches.ts +43 -0
  133. package/src/lexicon/types/app/bsky/contact/getSyncStatus.ts +39 -0
  134. package/src/lexicon/types/app/bsky/contact/importContacts.ts +49 -0
  135. package/src/lexicon/types/app/bsky/contact/removeData.ts +40 -0
  136. package/src/lexicon/types/app/bsky/contact/startPhoneVerification.ts +43 -0
  137. package/src/lexicon/types/app/bsky/contact/verifyPhone.ts +48 -0
  138. package/src/lexicon/types/app/bsky/graph/defs.ts +8 -0
  139. package/src/proto/bsky_pb.ts +0 -6
  140. package/src/proto/rolodex_connect.ts +89 -0
  141. package/src/proto/rolodex_pb.ts +746 -0
  142. package/src/rolodex.ts +42 -0
  143. package/tests/views/__snapshots__/profile.test.ts.snap +103 -0
  144. package/tests/views/profile.test.ts +39 -0
  145. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -83,6 +83,11 @@ class ServerConfig {
83
83
  const courierHttpVersion = process.env.BSKY_COURIER_HTTP_VERSION || '2';
84
84
  const courierIgnoreBadTls = process.env.BSKY_COURIER_IGNORE_BAD_TLS === 'true';
85
85
  (0, node_assert_1.default)(courierHttpVersion === '1.1' || courierHttpVersion === '2');
86
+ const rolodexUrl = process.env.BSKY_ROLODEX_URL || undefined;
87
+ const rolodexApiKey = process.env.BSKY_ROLODEX_API_KEY || undefined;
88
+ const rolodexHttpVersion = process.env.BSKY_ROLODEX_HTTP_VERSION || '2';
89
+ const rolodexIgnoreBadTls = process.env.BSKY_ROLODEX_IGNORE_BAD_TLS === 'true';
90
+ (0, node_assert_1.default)(rolodexHttpVersion === '1.1' || rolodexHttpVersion === '2');
86
91
  const blobRateLimitBypassKey = process.env.BSKY_BLOB_RATE_LIMIT_BYPASS_KEY || undefined;
87
92
  // single domain would be e.g. "mypds.com", subdomains are supported with a leading dot e.g. ".mypds.com"
88
93
  const blobRateLimitBypassHostname = process.env.BSKY_BLOB_RATE_LIMIT_BYPASS_HOSTNAME || undefined;
@@ -208,6 +213,10 @@ class ServerConfig {
208
213
  courierApiKey,
209
214
  courierHttpVersion,
210
215
  courierIgnoreBadTls,
216
+ rolodexUrl,
217
+ rolodexApiKey,
218
+ rolodexHttpVersion,
219
+ rolodexIgnoreBadTls,
211
220
  blobRateLimitBypassKey,
212
221
  blobRateLimitBypassHostname,
213
222
  adminPasswords,
@@ -305,6 +314,18 @@ class ServerConfig {
305
314
  get courierIgnoreBadTls() {
306
315
  return this.cfg.courierIgnoreBadTls;
307
316
  }
317
+ get rolodexUrl() {
318
+ return this.cfg.rolodexUrl;
319
+ }
320
+ get rolodexApiKey() {
321
+ return this.cfg.rolodexApiKey;
322
+ }
323
+ get rolodexHttpVersion() {
324
+ return this.cfg.rolodexHttpVersion;
325
+ }
326
+ get rolodexIgnoreBadTls() {
327
+ return this.cfg.rolodexIgnoreBadTls;
328
+ }
308
329
  get searchUrl() {
309
330
  return this.cfg.searchUrl;
310
331
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport { subLogger as log } from './logger'\n\ntype LiveNowConfig = {\n did: string\n domains: string[]\n}[]\n\nexport interface KwsConfig {\n apiKey: string\n apiOrigin: string\n authOrigin: string\n clientId: string\n redirectUrl: string\n userAgent: string\n /**\n * V1 secret used to validate `adult-verifieid` redirects\n */\n verificationSecret: string\n /**\n * V1 secret used to validate `adult-verified` webhooks\n */\n webhookSecret: string\n /**\n * V2 secret used to validate `age-verified` webhooks\n */\n ageVerifiedWebhookSecret: string\n /**\n * V2 secret used to validate `age-verified` redirects\n */\n ageVerifiedRedirectSecret: string\n}\n\nexport interface ServerConfigValues {\n // service\n version?: string\n debugMode?: boolean\n port?: number\n publicUrl?: string\n serverDid: string\n alternateAudienceDids: string[]\n entrywayJwtPublicKeyHex?: string\n liveNowConfig?: LiveNowConfig\n // external services\n etcdHosts: string[]\n dataplaneUrls: string[]\n dataplaneUrlsEtcdKeyPrefix?: string\n dataplaneHttpVersion?: '1.1' | '2'\n dataplaneIgnoreBadTls?: boolean\n bsyncUrl: string\n bsyncApiKey?: string\n bsyncHttpVersion?: '1.1' | '2'\n bsyncIgnoreBadTls?: boolean\n courierUrl?: string\n courierApiKey?: string\n courierHttpVersion?: '1.1' | '2'\n courierIgnoreBadTls?: boolean\n searchUrl?: string\n searchTagsHide: Set<string>\n suggestionsUrl?: string\n suggestionsApiKey?: string\n topicsUrl?: string\n topicsApiKey?: string\n cdnUrl?: string\n videoPlaylistUrlPattern?: string\n videoThumbnailUrlPattern?: string\n blobRateLimitBypassKey?: string\n blobRateLimitBypassHostname?: string\n // identity\n didPlcUrl: string\n handleResolveNameservers?: string[]\n // moderation and administration\n modServiceDid: string\n adminPasswords: string[]\n labelsFromIssuerDids?: string[]\n indexedAtEpoch?: Date\n // misc/dev\n blobCacheLocation?: string\n statsigKey?: string\n statsigEnv?: string\n // threads\n bigThreadUris: Set<string>\n bigThreadDepth?: number\n maxThreadDepth?: number\n maxThreadParents: number\n threadTagsHide: Set<string>\n threadTagsBumpDown: Set<string>\n visibilityTagHide: string\n visibilityTagRankPrefix: string\n // notifications\n notificationsDelayMs?: number\n // client config\n clientCheckEmailConfirmed?: boolean\n topicsEnabled?: boolean\n // http proxy agent\n disableSsrfProtection?: boolean\n proxyAllowHTTP2?: boolean\n proxyHeadersTimeout?: number\n proxyBodyTimeout?: number\n proxyMaxResponseSize?: number\n proxyMaxRetries?: number\n proxyPreferCompressed?: boolean\n kws?: KwsConfig\n debugFieldAllowedDids: Set<string>\n}\n\nexport class ServerConfig {\n private assignedPort?: number\n constructor(private cfg: ServerConfigValues) {}\n\n static readEnv(overrides?: Partial<ServerConfigValues>) {\n const version = process.env.BSKY_VERSION || undefined\n const debugMode =\n // Because security related features are disabled in development mode, this requires explicit opt-in.\n process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test'\n const publicUrl = process.env.BSKY_PUBLIC_URL || undefined\n const serverDid = process.env.BSKY_SERVER_DID || 'did:example:test'\n const envPort = parseInt(process.env.BSKY_PORT || '', 10)\n const port = isNaN(envPort) ? 2584 : envPort\n const didPlcUrl = process.env.BSKY_DID_PLC_URL || 'http://localhost:2582'\n const alternateAudienceDids = envList(process.env.BSKY_ALT_AUDIENCE_DIDS)\n const entrywayJwtPublicKeyHex =\n process.env.BSKY_ENTRYWAY_JWT_PUBLIC_KEY_HEX || undefined\n let liveNowConfig: LiveNowConfig | undefined\n if (process.env.BSKY_LIVE_NOW_CONFIG) {\n try {\n const parsed = JSON.parse(process.env.BSKY_LIVE_NOW_CONFIG)\n if (isLiveNowConfig(parsed)) {\n liveNowConfig = parsed\n } else {\n throw new Error('Live Now config failed format validation')\n }\n } catch (err) {\n log.error({ err }, 'Invalid BSKY_LIVE_NOW_CONFIG')\n }\n }\n const handleResolveNameservers = envList(\n process.env.BSKY_HANDLE_RESOLVE_NAMESERVERS,\n )\n const cdnUrl = process.env.BSKY_CDN_URL || process.env.BSKY_IMG_URI_ENDPOINT\n const etcdHosts =\n overrides?.etcdHosts ?? envList(process.env.BSKY_ETCD_HOSTS)\n // e.g. https://video.invalid/watch/%s/%s/playlist.m3u8\n const videoPlaylistUrlPattern = process.env.BSKY_VIDEO_PLAYLIST_URL_PATTERN\n // e.g. https://video.invalid/watch/%s/%s/thumbnail.jpg\n const videoThumbnailUrlPattern =\n process.env.BSKY_VIDEO_THUMBNAIL_URL_PATTERN\n const blobCacheLocation = process.env.BSKY_BLOB_CACHE_LOC\n const searchUrl =\n process.env.BSKY_SEARCH_URL ||\n process.env.BSKY_SEARCH_ENDPOINT ||\n undefined\n const searchTagsHide = new Set(envList(process.env.BSKY_SEARCH_TAGS_HIDE))\n const suggestionsUrl = process.env.BSKY_SUGGESTIONS_URL || undefined\n const suggestionsApiKey = process.env.BSKY_SUGGESTIONS_API_KEY || undefined\n const topicsUrl = process.env.BSKY_TOPICS_URL || undefined\n const topicsApiKey = process.env.BSKY_TOPICS_API_KEY\n const dataplaneUrls =\n overrides?.dataplaneUrls ?? envList(process.env.BSKY_DATAPLANE_URLS)\n const dataplaneUrlsEtcdKeyPrefix =\n process.env.BSKY_DATAPLANE_URLS_ETCD_KEY_PREFIX || undefined\n const dataplaneHttpVersion = process.env.BSKY_DATAPLANE_HTTP_VERSION || '2'\n const dataplaneIgnoreBadTls =\n process.env.BSKY_DATAPLANE_IGNORE_BAD_TLS === 'true'\n assert(\n !dataplaneUrlsEtcdKeyPrefix || etcdHosts.length,\n 'etcd prefix for dataplane urls may only be configured when there are etcd hosts',\n )\n assert(\n dataplaneUrls.length || dataplaneUrlsEtcdKeyPrefix,\n 'dataplane urls are not configured directly nor with etcd',\n )\n assert(dataplaneHttpVersion === '1.1' || dataplaneHttpVersion === '2')\n const labelsFromIssuerDids = envList(\n process.env.BSKY_LABELS_FROM_ISSUER_DIDS,\n )\n const bsyncUrl = process.env.BSKY_BSYNC_URL || undefined\n assert(bsyncUrl)\n const bsyncApiKey = process.env.BSKY_BSYNC_API_KEY || undefined\n const bsyncHttpVersion = process.env.BSKY_BSYNC_HTTP_VERSION || '2'\n const bsyncIgnoreBadTls = process.env.BSKY_BSYNC_IGNORE_BAD_TLS === 'true'\n assert(bsyncHttpVersion === '1.1' || bsyncHttpVersion === '2')\n const courierUrl = process.env.BSKY_COURIER_URL || undefined\n const courierApiKey = process.env.BSKY_COURIER_API_KEY || undefined\n const courierHttpVersion = process.env.BSKY_COURIER_HTTP_VERSION || '2'\n const courierIgnoreBadTls =\n process.env.BSKY_COURIER_IGNORE_BAD_TLS === 'true'\n assert(courierHttpVersion === '1.1' || courierHttpVersion === '2')\n const blobRateLimitBypassKey =\n process.env.BSKY_BLOB_RATE_LIMIT_BYPASS_KEY || undefined\n // single domain would be e.g. \"mypds.com\", subdomains are supported with a leading dot e.g. \".mypds.com\"\n const blobRateLimitBypassHostname =\n process.env.BSKY_BLOB_RATE_LIMIT_BYPASS_HOSTNAME || undefined\n assert(\n !blobRateLimitBypassKey || blobRateLimitBypassHostname,\n 'must specify a hostname when using a blob rate limit bypass key',\n )\n const adminPasswords = envList(\n process.env.BSKY_ADMIN_PASSWORDS || process.env.BSKY_ADMIN_PASSWORD,\n )\n const modServiceDid = process.env.MOD_SERVICE_DID\n assert(modServiceDid)\n const statsigKey =\n process.env.NODE_ENV === 'test'\n ? 'secret-key'\n : process.env.BSKY_STATSIG_KEY || undefined\n const statsigEnv =\n process.env.NODE_ENV === 'test'\n ? 'test'\n : process.env.BSKY_STATSIG_ENV || 'development'\n const clientCheckEmailConfirmed =\n process.env.BSKY_CLIENT_CHECK_EMAIL_CONFIRMED === 'true'\n const topicsEnabled = process.env.BSKY_TOPICS_ENABLED === 'true'\n const indexedAtEpoch = process.env.BSKY_INDEXED_AT_EPOCH\n ? new Date(process.env.BSKY_INDEXED_AT_EPOCH)\n : undefined\n assert(\n !indexedAtEpoch || !isNaN(indexedAtEpoch.getTime()),\n 'invalid BSKY_INDEXED_AT_EPOCH',\n )\n const bigThreadUris = new Set(envList(process.env.BSKY_BIG_THREAD_URIS))\n const bigThreadDepth = process.env.BSKY_BIG_THREAD_DEPTH\n ? parseInt(process.env.BSKY_BIG_THREAD_DEPTH || '', 10)\n : undefined\n const maxThreadDepth = process.env.BSKY_MAX_THREAD_DEPTH\n ? parseInt(process.env.BSKY_MAX_THREAD_DEPTH || '', 10)\n : undefined\n const maxThreadParents = process.env.BSKY_MAX_THREAD_PARENTS\n ? parseInt(process.env.BSKY_MAX_THREAD_PARENTS || '', 10)\n : 50\n const threadTagsHide = new Set(envList(process.env.BSKY_THREAD_TAGS_HIDE))\n const threadTagsBumpDown = new Set(\n envList(process.env.BSKY_THREAD_TAGS_BUMP_DOWN),\n )\n const visibilityTagHide = process.env.BSKY_VISIBILITY_TAG_HIDE || ''\n const visibilityTagRankPrefix =\n process.env.BSKY_VISIBILITY_TAG_RANK_PREFIX || ''\n\n const notificationsDelayMs = process.env.BSKY_NOTIFICATIONS_DELAY_MS\n ? parseInt(process.env.BSKY_NOTIFICATIONS_DELAY_MS || '', 10)\n : 0\n\n const disableSsrfProtection = process.env.BSKY_DISABLE_SSRF_PROTECTION\n ? process.env.BSKY_DISABLE_SSRF_PROTECTION === 'true'\n : debugMode\n\n const proxyAllowHTTP2 = process.env.BSKY_PROXY_ALLOW_HTTP2 === 'true'\n const proxyHeadersTimeout =\n parseInt(process.env.BSKY_PROXY_HEADERS_TIMEOUT || '', 10) || undefined\n const proxyBodyTimeout =\n parseInt(process.env.BSKY_PROXY_BODY_TIMEOUT || '', 10) || undefined\n const proxyMaxResponseSize =\n parseInt(process.env.BSKY_PROXY_MAX_RESPONSE_SIZE || '', 10) || undefined\n const proxyMaxRetries =\n parseInt(process.env.BSKY_PROXY_MAX_RETRIES || '', 10) || undefined\n const proxyPreferCompressed =\n process.env.BSKY_PROXY_PREFER_COMPRESSED === 'true'\n\n let kws: KwsConfig | undefined\n const kwsApiKey = process.env.BSKY_KWS_API_KEY\n const kwsApiOrigin = process.env.BSKY_KWS_API_ORIGIN\n const kwsAuthOrigin = process.env.BSKY_KWS_AUTH_ORIGIN\n const kwsClientId = process.env.BSKY_KWS_CLIENT_ID\n const kwsRedirectUrl = process.env.BSKY_KWS_REDIRECT_URL\n const kwsUserAgent = process.env.BSKY_KWS_USER_AGENT\n const kwsVerificationSecret = process.env.BSKY_KWS_VERIFICATION_SECRET\n const kwsWebhookSecret = process.env.BSKY_KWS_WEBHOOK_SECRET\n const kwsAgeVerifiedWebhookSecret =\n process.env.BSKY_KWS_AGE_VERIFIED_WEBHOOK_SECRET\n const kwsAgeVerifiedRedirectSecret =\n process.env.BSKY_KWS_AGE_VERIFIED_REDIRECT_SECRET\n if (\n kwsApiKey ||\n kwsApiOrigin ||\n kwsAuthOrigin ||\n kwsClientId ||\n kwsRedirectUrl ||\n kwsUserAgent ||\n kwsVerificationSecret ||\n kwsWebhookSecret ||\n kwsAgeVerifiedWebhookSecret ||\n kwsAgeVerifiedRedirectSecret\n ) {\n assert(\n kwsApiOrigin &&\n kwsAuthOrigin &&\n kwsClientId &&\n kwsRedirectUrl &&\n kwsUserAgent &&\n kwsVerificationSecret &&\n kwsWebhookSecret &&\n kwsApiKey &&\n kwsAgeVerifiedWebhookSecret &&\n kwsAgeVerifiedRedirectSecret,\n 'all KWS environment variables must be set if any are set',\n )\n kws = {\n apiKey: kwsApiKey,\n apiOrigin: kwsApiOrigin,\n authOrigin: kwsAuthOrigin,\n clientId: kwsClientId,\n redirectUrl: kwsRedirectUrl,\n userAgent: kwsUserAgent,\n verificationSecret: kwsVerificationSecret,\n webhookSecret: kwsWebhookSecret,\n ageVerifiedWebhookSecret: kwsAgeVerifiedWebhookSecret,\n ageVerifiedRedirectSecret: kwsAgeVerifiedRedirectSecret,\n }\n }\n\n const debugFieldAllowedDids = new Set(\n envList(process.env.BSKY_DEBUG_FIELD_ALLOWED_DIDS),\n )\n\n return new ServerConfig({\n version,\n debugMode,\n port,\n publicUrl,\n serverDid,\n alternateAudienceDids,\n entrywayJwtPublicKeyHex,\n liveNowConfig,\n etcdHosts,\n dataplaneUrls,\n dataplaneUrlsEtcdKeyPrefix,\n dataplaneHttpVersion,\n dataplaneIgnoreBadTls,\n searchUrl,\n searchTagsHide,\n suggestionsUrl,\n suggestionsApiKey,\n topicsUrl,\n topicsApiKey,\n didPlcUrl,\n labelsFromIssuerDids,\n handleResolveNameservers,\n cdnUrl,\n videoPlaylistUrlPattern,\n videoThumbnailUrlPattern,\n blobCacheLocation,\n bsyncUrl,\n bsyncApiKey,\n bsyncHttpVersion,\n bsyncIgnoreBadTls,\n courierUrl,\n courierApiKey,\n courierHttpVersion,\n courierIgnoreBadTls,\n blobRateLimitBypassKey,\n blobRateLimitBypassHostname,\n adminPasswords,\n modServiceDid,\n statsigKey,\n statsigEnv,\n clientCheckEmailConfirmed,\n topicsEnabled,\n indexedAtEpoch,\n bigThreadUris,\n bigThreadDepth,\n maxThreadDepth,\n maxThreadParents,\n threadTagsHide,\n threadTagsBumpDown,\n visibilityTagHide,\n visibilityTagRankPrefix,\n notificationsDelayMs,\n disableSsrfProtection,\n proxyAllowHTTP2,\n proxyHeadersTimeout,\n proxyBodyTimeout,\n proxyMaxResponseSize,\n proxyMaxRetries,\n proxyPreferCompressed,\n kws,\n debugFieldAllowedDids,\n ...stripUndefineds(overrides ?? {}),\n })\n }\n\n assignPort(port: number) {\n assert(\n !this.cfg.port || this.cfg.port === port,\n 'Conflicting port in config',\n )\n this.assignedPort = port\n }\n\n get version() {\n return this.cfg.version\n }\n\n get debugMode() {\n return !!this.cfg.debugMode\n }\n\n get port() {\n return this.assignedPort || this.cfg.port\n }\n\n get publicUrl() {\n return this.cfg.publicUrl\n }\n\n get serverDid() {\n return this.cfg.serverDid\n }\n\n get alternateAudienceDids() {\n return this.cfg.alternateAudienceDids\n }\n\n get entrywayJwtPublicKeyHex() {\n return this.cfg.entrywayJwtPublicKeyHex\n }\n\n get liveNowConfig() {\n return this.cfg.liveNowConfig\n }\n\n get etcdHosts() {\n return this.cfg.etcdHosts\n }\n\n get dataplaneUrlsEtcdKeyPrefix() {\n return this.cfg.dataplaneUrlsEtcdKeyPrefix\n }\n\n get dataplaneUrls() {\n return this.cfg.dataplaneUrls\n }\n\n get dataplaneHttpVersion() {\n return this.cfg.dataplaneHttpVersion\n }\n\n get dataplaneIgnoreBadTls() {\n return this.cfg.dataplaneIgnoreBadTls\n }\n\n get bsyncUrl() {\n return this.cfg.bsyncUrl\n }\n\n get bsyncApiKey() {\n return this.cfg.bsyncApiKey\n }\n\n get bsyncHttpVersion() {\n return this.cfg.bsyncHttpVersion\n }\n\n get bsyncIgnoreBadTls() {\n return this.cfg.bsyncIgnoreBadTls\n }\n\n get courierUrl() {\n return this.cfg.courierUrl\n }\n\n get courierApiKey() {\n return this.cfg.courierApiKey\n }\n\n get courierHttpVersion() {\n return this.cfg.courierHttpVersion\n }\n\n get courierIgnoreBadTls() {\n return this.cfg.courierIgnoreBadTls\n }\n\n get searchUrl() {\n return this.cfg.searchUrl\n }\n\n get searchTagsHide() {\n return this.cfg.searchTagsHide\n }\n\n get suggestionsUrl() {\n return this.cfg.suggestionsUrl\n }\n\n get suggestionsApiKey() {\n return this.cfg.suggestionsApiKey\n }\n\n get topicsUrl() {\n return this.cfg.topicsUrl\n }\n\n get topicsApiKey() {\n return this.cfg.topicsApiKey\n }\n\n get cdnUrl() {\n return this.cfg.cdnUrl\n }\n\n get videoPlaylistUrlPattern() {\n return this.cfg.videoPlaylistUrlPattern\n }\n\n get videoThumbnailUrlPattern() {\n return this.cfg.videoThumbnailUrlPattern\n }\n\n get blobRateLimitBypassKey() {\n return this.cfg.blobRateLimitBypassKey\n }\n\n get blobRateLimitBypassHostname() {\n return this.cfg.blobRateLimitBypassHostname\n }\n\n get didPlcUrl() {\n return this.cfg.didPlcUrl\n }\n\n get handleResolveNameservers() {\n return this.cfg.handleResolveNameservers\n }\n\n get adminPasswords() {\n return this.cfg.adminPasswords\n }\n\n get modServiceDid() {\n return this.cfg.modServiceDid\n }\n\n get labelsFromIssuerDids() {\n return this.cfg.labelsFromIssuerDids ?? []\n }\n\n get blobCacheLocation() {\n return this.cfg.blobCacheLocation\n }\n\n get statsigKey() {\n return this.cfg.statsigKey\n }\n\n get statsigEnv() {\n return this.cfg.statsigEnv\n }\n\n get clientCheckEmailConfirmed() {\n return this.cfg.clientCheckEmailConfirmed\n }\n\n get topicsEnabled() {\n return this.cfg.topicsEnabled\n }\n\n get indexedAtEpoch() {\n return this.cfg.indexedAtEpoch\n }\n\n get bigThreadUris() {\n return this.cfg.bigThreadUris\n }\n\n get bigThreadDepth() {\n return this.cfg.bigThreadDepth\n }\n\n get maxThreadDepth() {\n return this.cfg.maxThreadDepth\n }\n\n get maxThreadParents() {\n return this.cfg.maxThreadParents\n }\n\n get threadTagsHide() {\n return this.cfg.threadTagsHide\n }\n\n get threadTagsBumpDown() {\n return this.cfg.threadTagsBumpDown\n }\n\n get visibilityTagHide() {\n return this.cfg.visibilityTagHide\n }\n\n get visibilityTagRankPrefix() {\n return this.cfg.visibilityTagRankPrefix\n }\n\n get notificationsDelayMs() {\n return this.cfg.notificationsDelayMs ?? 0\n }\n\n get disableSsrfProtection(): boolean {\n return this.cfg.disableSsrfProtection ?? false\n }\n\n get proxyAllowHTTP2(): boolean {\n return this.cfg.proxyAllowHTTP2 ?? false\n }\n\n get proxyHeadersTimeout(): number {\n return this.cfg.proxyHeadersTimeout ?? 30e3\n }\n\n get proxyBodyTimeout(): number {\n return this.cfg.proxyBodyTimeout ?? 30e3\n }\n\n get proxyMaxResponseSize(): number {\n return this.cfg.proxyMaxResponseSize ?? 10 * 1024 * 1024 // 10mb\n }\n\n get proxyMaxRetries(): number {\n return this.cfg.proxyMaxRetries ?? 3\n }\n\n get proxyPreferCompressed(): boolean {\n return this.cfg.proxyPreferCompressed ?? true\n }\n\n get kws() {\n return this.cfg.kws\n }\n\n get debugFieldAllowedDids() {\n return this.cfg.debugFieldAllowedDids\n }\n}\n\nfunction stripUndefineds(\n obj: Record<string, unknown>,\n): Record<string, unknown> {\n const result = {}\n Object.entries(obj).forEach(([key, val]) => {\n if (val !== undefined) {\n result[key] = val\n }\n })\n return result\n}\n\nfunction envList(str: string | undefined): string[] {\n if (str === undefined || str.length === 0) return []\n return str.split(',')\n}\n\nfunction isLiveNowConfig(data: any): data is LiveNowConfig {\n return (\n Array.isArray(data) &&\n data.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n typeof item.did === 'string' &&\n Array.isArray(item.domains) &&\n item.domains.every((domain: any) => typeof domain === 'string'),\n )\n )\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport { subLogger as log } from './logger'\n\ntype LiveNowConfig = {\n did: string\n domains: string[]\n}[]\n\nexport interface KwsConfig {\n apiKey: string\n apiOrigin: string\n authOrigin: string\n clientId: string\n redirectUrl: string\n userAgent: string\n /**\n * V1 secret used to validate `adult-verifieid` redirects\n */\n verificationSecret: string\n /**\n * V1 secret used to validate `adult-verified` webhooks\n */\n webhookSecret: string\n /**\n * V2 secret used to validate `age-verified` webhooks\n */\n ageVerifiedWebhookSecret: string\n /**\n * V2 secret used to validate `age-verified` redirects\n */\n ageVerifiedRedirectSecret: string\n}\n\nexport interface ServerConfigValues {\n // service\n version?: string\n debugMode?: boolean\n port?: number\n publicUrl?: string\n serverDid: string\n alternateAudienceDids: string[]\n entrywayJwtPublicKeyHex?: string\n liveNowConfig?: LiveNowConfig\n // external services\n etcdHosts: string[]\n dataplaneUrls: string[]\n dataplaneUrlsEtcdKeyPrefix?: string\n dataplaneHttpVersion?: '1.1' | '2'\n dataplaneIgnoreBadTls?: boolean\n bsyncUrl: string\n bsyncApiKey?: string\n bsyncHttpVersion?: '1.1' | '2'\n bsyncIgnoreBadTls?: boolean\n courierUrl?: string\n courierApiKey?: string\n courierHttpVersion?: '1.1' | '2'\n courierIgnoreBadTls?: boolean\n rolodexUrl?: string\n rolodexApiKey?: string\n rolodexHttpVersion?: '1.1' | '2'\n rolodexIgnoreBadTls?: boolean\n searchUrl?: string\n searchTagsHide: Set<string>\n suggestionsUrl?: string\n suggestionsApiKey?: string\n topicsUrl?: string\n topicsApiKey?: string\n cdnUrl?: string\n videoPlaylistUrlPattern?: string\n videoThumbnailUrlPattern?: string\n blobRateLimitBypassKey?: string\n blobRateLimitBypassHostname?: string\n // identity\n didPlcUrl: string\n handleResolveNameservers?: string[]\n // moderation and administration\n modServiceDid: string\n adminPasswords: string[]\n labelsFromIssuerDids?: string[]\n indexedAtEpoch?: Date\n // misc/dev\n blobCacheLocation?: string\n statsigKey?: string\n statsigEnv?: string\n // threads\n bigThreadUris: Set<string>\n bigThreadDepth?: number\n maxThreadDepth?: number\n maxThreadParents: number\n threadTagsHide: Set<string>\n threadTagsBumpDown: Set<string>\n visibilityTagHide: string\n visibilityTagRankPrefix: string\n // notifications\n notificationsDelayMs?: number\n // client config\n clientCheckEmailConfirmed?: boolean\n topicsEnabled?: boolean\n // http proxy agent\n disableSsrfProtection?: boolean\n proxyAllowHTTP2?: boolean\n proxyHeadersTimeout?: number\n proxyBodyTimeout?: number\n proxyMaxResponseSize?: number\n proxyMaxRetries?: number\n proxyPreferCompressed?: boolean\n kws?: KwsConfig\n debugFieldAllowedDids: Set<string>\n}\n\nexport class ServerConfig {\n private assignedPort?: number\n constructor(private cfg: ServerConfigValues) {}\n\n static readEnv(overrides?: Partial<ServerConfigValues>) {\n const version = process.env.BSKY_VERSION || undefined\n const debugMode =\n // Because security related features are disabled in development mode, this requires explicit opt-in.\n process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test'\n const publicUrl = process.env.BSKY_PUBLIC_URL || undefined\n const serverDid = process.env.BSKY_SERVER_DID || 'did:example:test'\n const envPort = parseInt(process.env.BSKY_PORT || '', 10)\n const port = isNaN(envPort) ? 2584 : envPort\n const didPlcUrl = process.env.BSKY_DID_PLC_URL || 'http://localhost:2582'\n const alternateAudienceDids = envList(process.env.BSKY_ALT_AUDIENCE_DIDS)\n const entrywayJwtPublicKeyHex =\n process.env.BSKY_ENTRYWAY_JWT_PUBLIC_KEY_HEX || undefined\n let liveNowConfig: LiveNowConfig | undefined\n if (process.env.BSKY_LIVE_NOW_CONFIG) {\n try {\n const parsed = JSON.parse(process.env.BSKY_LIVE_NOW_CONFIG)\n if (isLiveNowConfig(parsed)) {\n liveNowConfig = parsed\n } else {\n throw new Error('Live Now config failed format validation')\n }\n } catch (err) {\n log.error({ err }, 'Invalid BSKY_LIVE_NOW_CONFIG')\n }\n }\n const handleResolveNameservers = envList(\n process.env.BSKY_HANDLE_RESOLVE_NAMESERVERS,\n )\n const cdnUrl = process.env.BSKY_CDN_URL || process.env.BSKY_IMG_URI_ENDPOINT\n const etcdHosts =\n overrides?.etcdHosts ?? envList(process.env.BSKY_ETCD_HOSTS)\n // e.g. https://video.invalid/watch/%s/%s/playlist.m3u8\n const videoPlaylistUrlPattern = process.env.BSKY_VIDEO_PLAYLIST_URL_PATTERN\n // e.g. https://video.invalid/watch/%s/%s/thumbnail.jpg\n const videoThumbnailUrlPattern =\n process.env.BSKY_VIDEO_THUMBNAIL_URL_PATTERN\n const blobCacheLocation = process.env.BSKY_BLOB_CACHE_LOC\n const searchUrl =\n process.env.BSKY_SEARCH_URL ||\n process.env.BSKY_SEARCH_ENDPOINT ||\n undefined\n const searchTagsHide = new Set(envList(process.env.BSKY_SEARCH_TAGS_HIDE))\n const suggestionsUrl = process.env.BSKY_SUGGESTIONS_URL || undefined\n const suggestionsApiKey = process.env.BSKY_SUGGESTIONS_API_KEY || undefined\n const topicsUrl = process.env.BSKY_TOPICS_URL || undefined\n const topicsApiKey = process.env.BSKY_TOPICS_API_KEY\n const dataplaneUrls =\n overrides?.dataplaneUrls ?? envList(process.env.BSKY_DATAPLANE_URLS)\n const dataplaneUrlsEtcdKeyPrefix =\n process.env.BSKY_DATAPLANE_URLS_ETCD_KEY_PREFIX || undefined\n const dataplaneHttpVersion = process.env.BSKY_DATAPLANE_HTTP_VERSION || '2'\n const dataplaneIgnoreBadTls =\n process.env.BSKY_DATAPLANE_IGNORE_BAD_TLS === 'true'\n assert(\n !dataplaneUrlsEtcdKeyPrefix || etcdHosts.length,\n 'etcd prefix for dataplane urls may only be configured when there are etcd hosts',\n )\n assert(\n dataplaneUrls.length || dataplaneUrlsEtcdKeyPrefix,\n 'dataplane urls are not configured directly nor with etcd',\n )\n assert(dataplaneHttpVersion === '1.1' || dataplaneHttpVersion === '2')\n const labelsFromIssuerDids = envList(\n process.env.BSKY_LABELS_FROM_ISSUER_DIDS,\n )\n const bsyncUrl = process.env.BSKY_BSYNC_URL || undefined\n assert(bsyncUrl)\n const bsyncApiKey = process.env.BSKY_BSYNC_API_KEY || undefined\n const bsyncHttpVersion = process.env.BSKY_BSYNC_HTTP_VERSION || '2'\n const bsyncIgnoreBadTls = process.env.BSKY_BSYNC_IGNORE_BAD_TLS === 'true'\n assert(bsyncHttpVersion === '1.1' || bsyncHttpVersion === '2')\n const courierUrl = process.env.BSKY_COURIER_URL || undefined\n const courierApiKey = process.env.BSKY_COURIER_API_KEY || undefined\n const courierHttpVersion = process.env.BSKY_COURIER_HTTP_VERSION || '2'\n const courierIgnoreBadTls =\n process.env.BSKY_COURIER_IGNORE_BAD_TLS === 'true'\n assert(courierHttpVersion === '1.1' || courierHttpVersion === '2')\n const rolodexUrl = process.env.BSKY_ROLODEX_URL || undefined\n const rolodexApiKey = process.env.BSKY_ROLODEX_API_KEY || undefined\n const rolodexHttpVersion = process.env.BSKY_ROLODEX_HTTP_VERSION || '2'\n const rolodexIgnoreBadTls =\n process.env.BSKY_ROLODEX_IGNORE_BAD_TLS === 'true'\n assert(rolodexHttpVersion === '1.1' || rolodexHttpVersion === '2')\n const blobRateLimitBypassKey =\n process.env.BSKY_BLOB_RATE_LIMIT_BYPASS_KEY || undefined\n // single domain would be e.g. \"mypds.com\", subdomains are supported with a leading dot e.g. \".mypds.com\"\n const blobRateLimitBypassHostname =\n process.env.BSKY_BLOB_RATE_LIMIT_BYPASS_HOSTNAME || undefined\n assert(\n !blobRateLimitBypassKey || blobRateLimitBypassHostname,\n 'must specify a hostname when using a blob rate limit bypass key',\n )\n const adminPasswords = envList(\n process.env.BSKY_ADMIN_PASSWORDS || process.env.BSKY_ADMIN_PASSWORD,\n )\n const modServiceDid = process.env.MOD_SERVICE_DID\n assert(modServiceDid)\n const statsigKey =\n process.env.NODE_ENV === 'test'\n ? 'secret-key'\n : process.env.BSKY_STATSIG_KEY || undefined\n const statsigEnv =\n process.env.NODE_ENV === 'test'\n ? 'test'\n : process.env.BSKY_STATSIG_ENV || 'development'\n const clientCheckEmailConfirmed =\n process.env.BSKY_CLIENT_CHECK_EMAIL_CONFIRMED === 'true'\n const topicsEnabled = process.env.BSKY_TOPICS_ENABLED === 'true'\n const indexedAtEpoch = process.env.BSKY_INDEXED_AT_EPOCH\n ? new Date(process.env.BSKY_INDEXED_AT_EPOCH)\n : undefined\n assert(\n !indexedAtEpoch || !isNaN(indexedAtEpoch.getTime()),\n 'invalid BSKY_INDEXED_AT_EPOCH',\n )\n const bigThreadUris = new Set(envList(process.env.BSKY_BIG_THREAD_URIS))\n const bigThreadDepth = process.env.BSKY_BIG_THREAD_DEPTH\n ? parseInt(process.env.BSKY_BIG_THREAD_DEPTH || '', 10)\n : undefined\n const maxThreadDepth = process.env.BSKY_MAX_THREAD_DEPTH\n ? parseInt(process.env.BSKY_MAX_THREAD_DEPTH || '', 10)\n : undefined\n const maxThreadParents = process.env.BSKY_MAX_THREAD_PARENTS\n ? parseInt(process.env.BSKY_MAX_THREAD_PARENTS || '', 10)\n : 50\n const threadTagsHide = new Set(envList(process.env.BSKY_THREAD_TAGS_HIDE))\n const threadTagsBumpDown = new Set(\n envList(process.env.BSKY_THREAD_TAGS_BUMP_DOWN),\n )\n const visibilityTagHide = process.env.BSKY_VISIBILITY_TAG_HIDE || ''\n const visibilityTagRankPrefix =\n process.env.BSKY_VISIBILITY_TAG_RANK_PREFIX || ''\n\n const notificationsDelayMs = process.env.BSKY_NOTIFICATIONS_DELAY_MS\n ? parseInt(process.env.BSKY_NOTIFICATIONS_DELAY_MS || '', 10)\n : 0\n\n const disableSsrfProtection = process.env.BSKY_DISABLE_SSRF_PROTECTION\n ? process.env.BSKY_DISABLE_SSRF_PROTECTION === 'true'\n : debugMode\n\n const proxyAllowHTTP2 = process.env.BSKY_PROXY_ALLOW_HTTP2 === 'true'\n const proxyHeadersTimeout =\n parseInt(process.env.BSKY_PROXY_HEADERS_TIMEOUT || '', 10) || undefined\n const proxyBodyTimeout =\n parseInt(process.env.BSKY_PROXY_BODY_TIMEOUT || '', 10) || undefined\n const proxyMaxResponseSize =\n parseInt(process.env.BSKY_PROXY_MAX_RESPONSE_SIZE || '', 10) || undefined\n const proxyMaxRetries =\n parseInt(process.env.BSKY_PROXY_MAX_RETRIES || '', 10) || undefined\n const proxyPreferCompressed =\n process.env.BSKY_PROXY_PREFER_COMPRESSED === 'true'\n\n let kws: KwsConfig | undefined\n const kwsApiKey = process.env.BSKY_KWS_API_KEY\n const kwsApiOrigin = process.env.BSKY_KWS_API_ORIGIN\n const kwsAuthOrigin = process.env.BSKY_KWS_AUTH_ORIGIN\n const kwsClientId = process.env.BSKY_KWS_CLIENT_ID\n const kwsRedirectUrl = process.env.BSKY_KWS_REDIRECT_URL\n const kwsUserAgent = process.env.BSKY_KWS_USER_AGENT\n const kwsVerificationSecret = process.env.BSKY_KWS_VERIFICATION_SECRET\n const kwsWebhookSecret = process.env.BSKY_KWS_WEBHOOK_SECRET\n const kwsAgeVerifiedWebhookSecret =\n process.env.BSKY_KWS_AGE_VERIFIED_WEBHOOK_SECRET\n const kwsAgeVerifiedRedirectSecret =\n process.env.BSKY_KWS_AGE_VERIFIED_REDIRECT_SECRET\n if (\n kwsApiKey ||\n kwsApiOrigin ||\n kwsAuthOrigin ||\n kwsClientId ||\n kwsRedirectUrl ||\n kwsUserAgent ||\n kwsVerificationSecret ||\n kwsWebhookSecret ||\n kwsAgeVerifiedWebhookSecret ||\n kwsAgeVerifiedRedirectSecret\n ) {\n assert(\n kwsApiOrigin &&\n kwsAuthOrigin &&\n kwsClientId &&\n kwsRedirectUrl &&\n kwsUserAgent &&\n kwsVerificationSecret &&\n kwsWebhookSecret &&\n kwsApiKey &&\n kwsAgeVerifiedWebhookSecret &&\n kwsAgeVerifiedRedirectSecret,\n 'all KWS environment variables must be set if any are set',\n )\n kws = {\n apiKey: kwsApiKey,\n apiOrigin: kwsApiOrigin,\n authOrigin: kwsAuthOrigin,\n clientId: kwsClientId,\n redirectUrl: kwsRedirectUrl,\n userAgent: kwsUserAgent,\n verificationSecret: kwsVerificationSecret,\n webhookSecret: kwsWebhookSecret,\n ageVerifiedWebhookSecret: kwsAgeVerifiedWebhookSecret,\n ageVerifiedRedirectSecret: kwsAgeVerifiedRedirectSecret,\n }\n }\n\n const debugFieldAllowedDids = new Set(\n envList(process.env.BSKY_DEBUG_FIELD_ALLOWED_DIDS),\n )\n\n return new ServerConfig({\n version,\n debugMode,\n port,\n publicUrl,\n serverDid,\n alternateAudienceDids,\n entrywayJwtPublicKeyHex,\n liveNowConfig,\n etcdHosts,\n dataplaneUrls,\n dataplaneUrlsEtcdKeyPrefix,\n dataplaneHttpVersion,\n dataplaneIgnoreBadTls,\n searchUrl,\n searchTagsHide,\n suggestionsUrl,\n suggestionsApiKey,\n topicsUrl,\n topicsApiKey,\n didPlcUrl,\n labelsFromIssuerDids,\n handleResolveNameservers,\n cdnUrl,\n videoPlaylistUrlPattern,\n videoThumbnailUrlPattern,\n blobCacheLocation,\n bsyncUrl,\n bsyncApiKey,\n bsyncHttpVersion,\n bsyncIgnoreBadTls,\n courierUrl,\n courierApiKey,\n courierHttpVersion,\n courierIgnoreBadTls,\n rolodexUrl,\n rolodexApiKey,\n rolodexHttpVersion,\n rolodexIgnoreBadTls,\n blobRateLimitBypassKey,\n blobRateLimitBypassHostname,\n adminPasswords,\n modServiceDid,\n statsigKey,\n statsigEnv,\n clientCheckEmailConfirmed,\n topicsEnabled,\n indexedAtEpoch,\n bigThreadUris,\n bigThreadDepth,\n maxThreadDepth,\n maxThreadParents,\n threadTagsHide,\n threadTagsBumpDown,\n visibilityTagHide,\n visibilityTagRankPrefix,\n notificationsDelayMs,\n disableSsrfProtection,\n proxyAllowHTTP2,\n proxyHeadersTimeout,\n proxyBodyTimeout,\n proxyMaxResponseSize,\n proxyMaxRetries,\n proxyPreferCompressed,\n kws,\n debugFieldAllowedDids,\n ...stripUndefineds(overrides ?? {}),\n })\n }\n\n assignPort(port: number) {\n assert(\n !this.cfg.port || this.cfg.port === port,\n 'Conflicting port in config',\n )\n this.assignedPort = port\n }\n\n get version() {\n return this.cfg.version\n }\n\n get debugMode() {\n return !!this.cfg.debugMode\n }\n\n get port() {\n return this.assignedPort || this.cfg.port\n }\n\n get publicUrl() {\n return this.cfg.publicUrl\n }\n\n get serverDid() {\n return this.cfg.serverDid\n }\n\n get alternateAudienceDids() {\n return this.cfg.alternateAudienceDids\n }\n\n get entrywayJwtPublicKeyHex() {\n return this.cfg.entrywayJwtPublicKeyHex\n }\n\n get liveNowConfig() {\n return this.cfg.liveNowConfig\n }\n\n get etcdHosts() {\n return this.cfg.etcdHosts\n }\n\n get dataplaneUrlsEtcdKeyPrefix() {\n return this.cfg.dataplaneUrlsEtcdKeyPrefix\n }\n\n get dataplaneUrls() {\n return this.cfg.dataplaneUrls\n }\n\n get dataplaneHttpVersion() {\n return this.cfg.dataplaneHttpVersion\n }\n\n get dataplaneIgnoreBadTls() {\n return this.cfg.dataplaneIgnoreBadTls\n }\n\n get bsyncUrl() {\n return this.cfg.bsyncUrl\n }\n\n get bsyncApiKey() {\n return this.cfg.bsyncApiKey\n }\n\n get bsyncHttpVersion() {\n return this.cfg.bsyncHttpVersion\n }\n\n get bsyncIgnoreBadTls() {\n return this.cfg.bsyncIgnoreBadTls\n }\n\n get courierUrl() {\n return this.cfg.courierUrl\n }\n\n get courierApiKey() {\n return this.cfg.courierApiKey\n }\n\n get courierHttpVersion() {\n return this.cfg.courierHttpVersion\n }\n\n get courierIgnoreBadTls() {\n return this.cfg.courierIgnoreBadTls\n }\n\n get rolodexUrl() {\n return this.cfg.rolodexUrl\n }\n get rolodexApiKey() {\n return this.cfg.rolodexApiKey\n }\n get rolodexHttpVersion() {\n return this.cfg.rolodexHttpVersion\n }\n get rolodexIgnoreBadTls() {\n return this.cfg.rolodexIgnoreBadTls\n }\n\n get searchUrl() {\n return this.cfg.searchUrl\n }\n\n get searchTagsHide() {\n return this.cfg.searchTagsHide\n }\n\n get suggestionsUrl() {\n return this.cfg.suggestionsUrl\n }\n\n get suggestionsApiKey() {\n return this.cfg.suggestionsApiKey\n }\n\n get topicsUrl() {\n return this.cfg.topicsUrl\n }\n\n get topicsApiKey() {\n return this.cfg.topicsApiKey\n }\n\n get cdnUrl() {\n return this.cfg.cdnUrl\n }\n\n get videoPlaylistUrlPattern() {\n return this.cfg.videoPlaylistUrlPattern\n }\n\n get videoThumbnailUrlPattern() {\n return this.cfg.videoThumbnailUrlPattern\n }\n\n get blobRateLimitBypassKey() {\n return this.cfg.blobRateLimitBypassKey\n }\n\n get blobRateLimitBypassHostname() {\n return this.cfg.blobRateLimitBypassHostname\n }\n\n get didPlcUrl() {\n return this.cfg.didPlcUrl\n }\n\n get handleResolveNameservers() {\n return this.cfg.handleResolveNameservers\n }\n\n get adminPasswords() {\n return this.cfg.adminPasswords\n }\n\n get modServiceDid() {\n return this.cfg.modServiceDid\n }\n\n get labelsFromIssuerDids() {\n return this.cfg.labelsFromIssuerDids ?? []\n }\n\n get blobCacheLocation() {\n return this.cfg.blobCacheLocation\n }\n\n get statsigKey() {\n return this.cfg.statsigKey\n }\n\n get statsigEnv() {\n return this.cfg.statsigEnv\n }\n\n get clientCheckEmailConfirmed() {\n return this.cfg.clientCheckEmailConfirmed\n }\n\n get topicsEnabled() {\n return this.cfg.topicsEnabled\n }\n\n get indexedAtEpoch() {\n return this.cfg.indexedAtEpoch\n }\n\n get bigThreadUris() {\n return this.cfg.bigThreadUris\n }\n\n get bigThreadDepth() {\n return this.cfg.bigThreadDepth\n }\n\n get maxThreadDepth() {\n return this.cfg.maxThreadDepth\n }\n\n get maxThreadParents() {\n return this.cfg.maxThreadParents\n }\n\n get threadTagsHide() {\n return this.cfg.threadTagsHide\n }\n\n get threadTagsBumpDown() {\n return this.cfg.threadTagsBumpDown\n }\n\n get visibilityTagHide() {\n return this.cfg.visibilityTagHide\n }\n\n get visibilityTagRankPrefix() {\n return this.cfg.visibilityTagRankPrefix\n }\n\n get notificationsDelayMs() {\n return this.cfg.notificationsDelayMs ?? 0\n }\n\n get disableSsrfProtection(): boolean {\n return this.cfg.disableSsrfProtection ?? false\n }\n\n get proxyAllowHTTP2(): boolean {\n return this.cfg.proxyAllowHTTP2 ?? false\n }\n\n get proxyHeadersTimeout(): number {\n return this.cfg.proxyHeadersTimeout ?? 30e3\n }\n\n get proxyBodyTimeout(): number {\n return this.cfg.proxyBodyTimeout ?? 30e3\n }\n\n get proxyMaxResponseSize(): number {\n return this.cfg.proxyMaxResponseSize ?? 10 * 1024 * 1024 // 10mb\n }\n\n get proxyMaxRetries(): number {\n return this.cfg.proxyMaxRetries ?? 3\n }\n\n get proxyPreferCompressed(): boolean {\n return this.cfg.proxyPreferCompressed ?? true\n }\n\n get kws() {\n return this.cfg.kws\n }\n\n get debugFieldAllowedDids() {\n return this.cfg.debugFieldAllowedDids\n }\n}\n\nfunction stripUndefineds(\n obj: Record<string, unknown>,\n): Record<string, unknown> {\n const result = {}\n Object.entries(obj).forEach(([key, val]) => {\n if (val !== undefined) {\n result[key] = val\n }\n })\n return result\n}\n\nfunction envList(str: string | undefined): string[] {\n if (str === undefined || str.length === 0) return []\n return str.split(',')\n}\n\nfunction isLiveNowConfig(data: any): data is LiveNowConfig {\n return (\n Array.isArray(data) &&\n data.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n typeof item.did === 'string' &&\n Array.isArray(item.domains) &&\n item.domains.every((domain: any) => typeof domain === 'string'),\n )\n )\n}\n"]}
package/dist/context.d.ts CHANGED
@@ -13,6 +13,7 @@ import { DataPlaneClient, HostList } from './data-plane/client';
13
13
  import { FeatureGates } from './feature-gates';
14
14
  import { Hydrator } from './hydration/hydrator';
15
15
  import { KwsClient } from './kws';
16
+ import { RolodexClient } from './rolodex';
16
17
  import { StashClient } from './stash';
17
18
  import { ParsedLabelers } from './util';
18
19
  import { Views } from './views';
@@ -33,6 +34,7 @@ export declare class AppContext {
33
34
  bsyncClient: BsyncClient;
34
35
  stashClient: StashClient;
35
36
  courierClient: CourierClient | undefined;
37
+ rolodexClient: RolodexClient | undefined;
36
38
  authVerifier: AuthVerifier;
37
39
  featureGates: FeatureGates;
38
40
  blobDispatcher: Dispatcher;
@@ -53,6 +55,7 @@ export declare class AppContext {
53
55
  get bsyncClient(): BsyncClient;
54
56
  get stashClient(): StashClient;
55
57
  get courierClient(): CourierClient | undefined;
58
+ get rolodexClient(): RolodexClient | undefined;
56
59
  get authVerifier(): AuthVerifier;
57
60
  get featureGates(): FeatureGates;
58
61
  get blobDispatcher(): Dispatcher;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EACL,cAAc,EAGf,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,qBAAa,UAAU;IAEnB,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE;QACZ,GAAG,EAAE,YAAY,CAAA;QACjB,IAAI,EAAE,KAAK,GAAG,SAAS,CAAA;QACvB,SAAS,EAAE,eAAe,CAAA;QAC1B,iBAAiB,EAAE,QAAQ,CAAA;QAC3B,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAA;QACjC,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAA;QACtC,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAA;QACjC,QAAQ,EAAE,QAAQ,CAAA;QAClB,KAAK,EAAE,KAAK,CAAA;QACZ,UAAU,EAAE,OAAO,CAAA;QACnB,UAAU,EAAE,UAAU,CAAA;QACtB,WAAW,EAAE,WAAW,CAAA;QACxB,WAAW,EAAE,WAAW,CAAA;QACxB,aAAa,EAAE,aAAa,GAAG,SAAS,CAAA;QACxC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAA;QACxC,YAAY,EAAE,YAAY,CAAA;QAC1B,YAAY,EAAE,YAAY,CAAA;QAC1B,cAAc,EAAE,UAAU,CAAA;QAC1B,SAAS,EAAE,SAAS,GAAG,SAAS,CAAA;KACjC;IAGH,IAAI,GAAG,IAAI,YAAY,CAEtB;IAED,IAAI,IAAI,sBAEP;IAED,IAAI,SAAS,IAAI,eAAe,CAE/B;IAED,IAAI,iBAAiB,IAAI,QAAQ,CAEhC;IAED,IAAI,WAAW,IAAI,QAAQ,GAAG,SAAS,CAEtC;IAED,IAAI,gBAAgB,IAAI,QAAQ,GAAG,SAAS,CAE3C;IAED,IAAI,WAAW,IAAI,QAAQ,GAAG,SAAS,CAEtC;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,CAE1B;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,aAAa,IAAI,aAAa,GAAG,SAAS,CAE7C;IAED,IAAI,aAAa,IAAI,aAAa,GAAG,SAAS,CAE7C;IAED,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED,IAAI,cAAc,IAAI,UAAU,CAE/B;IAED,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,CAErC;IAED,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,GAAG,cAAc;CAYlD"}
package/dist/context.js CHANGED
@@ -91,6 +91,9 @@ class AppContext {
91
91
  get courierClient() {
92
92
  return this.opts.courierClient;
93
93
  }
94
+ get rolodexClient() {
95
+ return this.opts.rolodexClient;
96
+ }
94
97
  get authVerifier() {
95
98
  return this.opts.authVerifier;
96
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmC;AAenC,qCAA4C;AAE5C,iCAIe;AAGf,MAAa,UAAU;IACrB,YACU,IAmBP;QAnBD;;;;mBAAQ,IAAI;WAmBX;IACA,CAAC;IAEJ,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACvB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;IAC5B,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAA;IACpC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;IAC9B,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAA;IACnC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;IAC9B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA;IAC3B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;IACxB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAA;IAC7B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAA;IAC7B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;IAC9B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;IAC9B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAA;IAChC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAA;IAC/B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAA;IAC/B,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAA;IACjC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;IAC5B,CAAC;IAED,WAAW,CAAC,GAAoB;QAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA;QACjD,IAAI,MAA6B,CAAA;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,IAAA,yBAAkB,EAAC,GAAG,CAAC,CAAA;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,IAAI,CAAA;YACb,mBAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,gCAAgC,CAAC,CAAA;QAC1D,CAAC;QACD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAA,2BAAoB,EAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;QACvE,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAhHD,gCAgHC","sourcesContent":["import * as plc from '@did-plc/lib'\nimport { Etcd3 } from 'etcd3'\nimport express from 'express'\nimport { Dispatcher } from 'undici'\nimport { AtpAgent } from '@atproto/api'\nimport { Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { AuthVerifier } from './auth-verifier'\nimport { BsyncClient } from './bsync'\nimport { ServerConfig } from './config'\nimport { CourierClient } from './courier'\nimport { DataPlaneClient, HostList } from './data-plane/client'\nimport { FeatureGates } from './feature-gates'\nimport { Hydrator } from './hydration/hydrator'\nimport { KwsClient } from './kws'\nimport { httpLogger as log } from './logger'\nimport { StashClient } from './stash'\nimport {\n ParsedLabelers,\n defaultLabelerHeader,\n parseLabelerHeader,\n} from './util'\nimport { Views } from './views'\n\nexport class AppContext {\n constructor(\n private opts: {\n cfg: ServerConfig\n etcd: Etcd3 | undefined\n dataplane: DataPlaneClient\n dataplaneHostList: HostList\n searchAgent: AtpAgent | undefined\n suggestionsAgent: AtpAgent | undefined\n topicsAgent: AtpAgent | undefined\n hydrator: Hydrator\n views: Views\n signingKey: Keypair\n idResolver: IdResolver\n bsyncClient: BsyncClient\n stashClient: StashClient\n courierClient: CourierClient | undefined\n authVerifier: AuthVerifier\n featureGates: FeatureGates\n blobDispatcher: Dispatcher\n kwsClient: KwsClient | undefined\n },\n ) {}\n\n get cfg(): ServerConfig {\n return this.opts.cfg\n }\n\n get etcd() {\n return this.opts.etcd\n }\n\n get dataplane(): DataPlaneClient {\n return this.opts.dataplane\n }\n\n get dataplaneHostList(): HostList {\n return this.opts.dataplaneHostList\n }\n\n get searchAgent(): AtpAgent | undefined {\n return this.opts.searchAgent\n }\n\n get suggestionsAgent(): AtpAgent | undefined {\n return this.opts.suggestionsAgent\n }\n\n get topicsAgent(): AtpAgent | undefined {\n return this.opts.topicsAgent\n }\n\n get hydrator(): Hydrator {\n return this.opts.hydrator\n }\n\n get views(): Views {\n return this.opts.views\n }\n\n get signingKey(): Keypair {\n return this.opts.signingKey\n }\n\n get plcClient(): plc.Client {\n return new plc.Client(this.cfg.didPlcUrl)\n }\n\n get idResolver(): IdResolver {\n return this.opts.idResolver\n }\n\n get bsyncClient(): BsyncClient {\n return this.opts.bsyncClient\n }\n\n get stashClient(): StashClient {\n return this.opts.stashClient\n }\n\n get courierClient(): CourierClient | undefined {\n return this.opts.courierClient\n }\n\n get authVerifier(): AuthVerifier {\n return this.opts.authVerifier\n }\n\n get featureGates(): FeatureGates {\n return this.opts.featureGates\n }\n\n get blobDispatcher(): Dispatcher {\n return this.opts.blobDispatcher\n }\n\n get kwsClient(): KwsClient | undefined {\n return this.opts.kwsClient\n }\n\n reqLabelers(req: express.Request): ParsedLabelers {\n const val = req.header('atproto-accept-labelers')\n let parsed: ParsedLabelers | null\n try {\n parsed = parseLabelerHeader(val)\n } catch (err) {\n parsed = null\n log.info({ err, val }, 'failed to parse labeler header')\n }\n if (!parsed) return defaultLabelerHeader(this.cfg.labelsFromIssuerDids)\n return parsed\n }\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmC;AAenC,qCAA4C;AAG5C,iCAIe;AAGf,MAAa,UAAU;IACrB,YACU,IAoBP;QApBD;;;;mBAAQ,IAAI;WAoBX;IACA,CAAC;IAEJ,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACvB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;IAC5B,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAA;IACpC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;IAC9B,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAA;IACnC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;IAC9B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA;IAC3B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;IACxB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAA;IAC7B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAA;IAC7B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;IAC9B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;IAC9B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAA;IAChC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAA;IAChC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAA;IAC/B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAA;IAC/B,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAA;IACjC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;IAC5B,CAAC;IAED,WAAW,CAAC,GAAoB;QAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA;QACjD,IAAI,MAA6B,CAAA;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,IAAA,yBAAkB,EAAC,GAAG,CAAC,CAAA;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,IAAI,CAAA;YACb,mBAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,gCAAgC,CAAC,CAAA;QAC1D,CAAC;QACD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAA,2BAAoB,EAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;QACvE,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AArHD,gCAqHC","sourcesContent":["import * as plc from '@did-plc/lib'\nimport { Etcd3 } from 'etcd3'\nimport express from 'express'\nimport { Dispatcher } from 'undici'\nimport { AtpAgent } from '@atproto/api'\nimport { Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { AuthVerifier } from './auth-verifier'\nimport { BsyncClient } from './bsync'\nimport { ServerConfig } from './config'\nimport { CourierClient } from './courier'\nimport { DataPlaneClient, HostList } from './data-plane/client'\nimport { FeatureGates } from './feature-gates'\nimport { Hydrator } from './hydration/hydrator'\nimport { KwsClient } from './kws'\nimport { httpLogger as log } from './logger'\nimport { RolodexClient } from './rolodex'\nimport { StashClient } from './stash'\nimport {\n ParsedLabelers,\n defaultLabelerHeader,\n parseLabelerHeader,\n} from './util'\nimport { Views } from './views'\n\nexport class AppContext {\n constructor(\n private opts: {\n cfg: ServerConfig\n etcd: Etcd3 | undefined\n dataplane: DataPlaneClient\n dataplaneHostList: HostList\n searchAgent: AtpAgent | undefined\n suggestionsAgent: AtpAgent | undefined\n topicsAgent: AtpAgent | undefined\n hydrator: Hydrator\n views: Views\n signingKey: Keypair\n idResolver: IdResolver\n bsyncClient: BsyncClient\n stashClient: StashClient\n courierClient: CourierClient | undefined\n rolodexClient: RolodexClient | undefined\n authVerifier: AuthVerifier\n featureGates: FeatureGates\n blobDispatcher: Dispatcher\n kwsClient: KwsClient | undefined\n },\n ) {}\n\n get cfg(): ServerConfig {\n return this.opts.cfg\n }\n\n get etcd() {\n return this.opts.etcd\n }\n\n get dataplane(): DataPlaneClient {\n return this.opts.dataplane\n }\n\n get dataplaneHostList(): HostList {\n return this.opts.dataplaneHostList\n }\n\n get searchAgent(): AtpAgent | undefined {\n return this.opts.searchAgent\n }\n\n get suggestionsAgent(): AtpAgent | undefined {\n return this.opts.suggestionsAgent\n }\n\n get topicsAgent(): AtpAgent | undefined {\n return this.opts.topicsAgent\n }\n\n get hydrator(): Hydrator {\n return this.opts.hydrator\n }\n\n get views(): Views {\n return this.opts.views\n }\n\n get signingKey(): Keypair {\n return this.opts.signingKey\n }\n\n get plcClient(): plc.Client {\n return new plc.Client(this.cfg.didPlcUrl)\n }\n\n get idResolver(): IdResolver {\n return this.opts.idResolver\n }\n\n get bsyncClient(): BsyncClient {\n return this.opts.bsyncClient\n }\n\n get stashClient(): StashClient {\n return this.opts.stashClient\n }\n\n get courierClient(): CourierClient | undefined {\n return this.opts.courierClient\n }\n\n get rolodexClient(): RolodexClient | undefined {\n return this.opts.rolodexClient\n }\n\n get authVerifier(): AuthVerifier {\n return this.opts.authVerifier\n }\n\n get featureGates(): FeatureGates {\n return this.opts.featureGates\n }\n\n get blobDispatcher(): Dispatcher {\n return this.opts.blobDispatcher\n }\n\n get kwsClient(): KwsClient | undefined {\n return this.opts.kwsClient\n }\n\n reqLabelers(req: express.Request): ParsedLabelers {\n const val = req.header('atproto-accept-labelers')\n let parsed: ParsedLabelers | null\n try {\n parsed = parseLabelerHeader(val)\n } catch (err) {\n parsed = null\n log.info({ err, val }, 'failed to parse labeler header')\n }\n if (!parsed) return defaultLabelerHeader(this.cfg.labelsFromIssuerDids)\n return parsed\n }\n}\n"]}
@@ -59,7 +59,7 @@ class ActorHydrator {
59
59
  !!actor.tombstonedAt) {
60
60
  return acc.set(did, null);
61
61
  }
62
- const profile = actor.profile
62
+ const profile = actor.profile?.record
63
63
  ? (0, util_1.parseRecord)(actor.profile, includeTakedowns)
64
64
  : undefined;
65
65
  const status = actor.statusRecord
@@ -1 +1 @@
1
- {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../src/hydration/actor.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppBskyNotificationDeclaration } from '@atproto/api'\nimport { mapDefined } from '@atproto/common'\nimport { DataPlaneClient } from '../data-plane/client'\nimport { Record as ProfileRecord } from '../lexicon/types/app/bsky/actor/profile'\nimport { Record as StatusRecord } from '../lexicon/types/app/bsky/actor/status'\nimport { Record as NotificationDeclarationRecord } from '../lexicon/types/app/bsky/notification/declaration'\nimport { Record as ChatDeclarationRecord } from '../lexicon/types/chat/bsky/actor/declaration'\nimport { ActivitySubscription, VerificationMeta } from '../proto/bsky_pb'\nimport {\n HydrationMap,\n RecordInfo,\n isActivitySubscriptionEnabled,\n parseRecord,\n parseString,\n safeTakedownRef,\n} from './util'\n\ntype AllowActivitySubscriptions = Extract<\n AppBskyNotificationDeclaration.Record['allowSubscriptions'],\n 'followers' | 'mutuals' | 'none'\n>\n\nexport type Actor = {\n did: string\n handle?: string\n profile?: ProfileRecord\n profileCid?: string\n profileTakedownRef?: string\n sortedAt?: Date\n indexedAt?: Date\n takedownRef?: string\n isLabeler: boolean\n allowIncomingChatsFrom?: string\n upstreamStatus?: string\n createdAt?: Date\n priorityNotifications: boolean\n trustedVerifier?: boolean\n verifications: VerificationHydrationState[]\n status?: RecordInfo<StatusRecord>\n allowActivitySubscriptionsFrom: AllowActivitySubscriptions\n /**\n * Debug information for internal development\n */\n debug?: {\n pagerank?: number\n accountTags?: string[]\n profileTags?: string[]\n [key: string]: unknown\n }\n}\n\nexport type VerificationHydrationState = {\n issuer: string\n uri: string\n handle: string\n displayName: string\n createdAt: string\n}\n\nexport type VerificationMetaRequired = Required<VerificationMeta>\n\nexport type Actors = HydrationMap<Actor>\n\nexport type ChatDeclaration = RecordInfo<ChatDeclarationRecord>\n\nexport type ChatDeclarations = HydrationMap<ChatDeclaration>\nexport type NotificationDeclaration = RecordInfo<NotificationDeclarationRecord>\n\nexport type NotificationDeclarations = HydrationMap<NotificationDeclaration>\n\nexport type Status = RecordInfo<StatusRecord>\nexport type Statuses = HydrationMap<Status>\n\nexport type ProfileViewerState = {\n muted?: boolean\n mutedByList?: string\n blockedBy?: string\n blocking?: string\n blockedByList?: string\n blockingByList?: string\n following?: string\n followedBy?: string\n}\n\nexport type ProfileViewerStates = HydrationMap<ProfileViewerState>\n\ntype ActivitySubscriptionState = {\n post: boolean\n reply: boolean\n}\n\nexport type ActivitySubscriptionStates = HydrationMap<\n ActivitySubscriptionState | undefined\n>\n\ntype KnownFollowersState = {\n count: number\n followers: string[]\n}\n\nexport type KnownFollowersStates = HydrationMap<KnownFollowersState | undefined>\n\nexport type ProfileAgg = {\n followers: number\n follows: number\n posts: number\n lists: number\n feeds: number\n starterPacks: number\n}\n\nexport type ProfileAggs = HydrationMap<ProfileAgg>\n\nexport class ActorHydrator {\n constructor(public dataplane: DataPlaneClient) {}\n\n async getRepoRevSafe(did: string | null): Promise<string | null> {\n if (!did) return null\n try {\n const res = await this.dataplane.getLatestRev({ actorDid: did })\n return parseString(res.rev) ?? null\n } catch {\n return null\n }\n }\n\n async getDids(\n handleOrDids: string[],\n opts?: { lookupUnidirectional?: boolean },\n ): Promise<(string | undefined)[]> {\n const handles = handleOrDids.filter((actor) => !actor.startsWith('did:'))\n const res = handles.length\n ? await this.dataplane.getDidsByHandles({\n handles,\n lookupUnidirectional: opts?.lookupUnidirectional,\n })\n : { dids: [] }\n const didByHandle = handles.reduce(\n (acc, cur, i) => {\n const did = res.dids[i]\n if (did && did.length > 0) {\n return acc.set(cur, did)\n }\n return acc\n },\n new Map() as Map<string, string>,\n )\n return handleOrDids.map((id) =>\n id.startsWith('did:') ? id : didByHandle.get(id),\n )\n }\n\n async getDidsDefined(handleOrDids: string[]): Promise<string[]> {\n const res = await this.getDids(handleOrDids)\n // @ts-ignore\n return res.filter((did) => did !== undefined)\n }\n\n async getActors(\n dids: string[],\n opts: {\n includeTakedowns?: boolean\n skipCacheForDids?: string[]\n } = {},\n ): Promise<Actors> {\n const { includeTakedowns = false, skipCacheForDids } = opts\n if (!dids.length) return new HydrationMap<Actor>()\n const res = await this.dataplane.getActors({ dids, skipCacheForDids })\n return dids.reduce((acc, did, i) => {\n const actor = res.actors[i]\n const isNoHosted =\n actor.takenDown ||\n (actor.upstreamStatus && actor.upstreamStatus !== 'active')\n if (\n !actor.exists ||\n (isNoHosted && !includeTakedowns) ||\n !!actor.tombstonedAt\n ) {\n return acc.set(did, null)\n }\n\n const profile = actor.profile\n ? parseRecord<ProfileRecord>(actor.profile, includeTakedowns)\n : undefined\n\n const status = actor.statusRecord\n ? parseRecord<StatusRecord>(actor.statusRecord, includeTakedowns)\n : undefined\n\n const verifications = mapDefined(\n Object.entries(actor.verifiedBy),\n ([actorDid, verificationMeta]) => {\n if (\n verificationMeta.handle &&\n verificationMeta.rkey &&\n verificationMeta.sortedAt\n ) {\n return {\n issuer: actorDid,\n uri: `at://${actorDid}/app.bsky.graph.verification/${verificationMeta.rkey}`,\n handle: verificationMeta.handle,\n displayName: verificationMeta.displayName,\n createdAt: verificationMeta.sortedAt.toDate().toISOString(),\n }\n }\n // Filter out the verification meta that doesn't contain all info.\n return undefined\n },\n )\n\n const allowActivitySubscriptionsFrom = (\n val: string,\n ): AllowActivitySubscriptions => {\n switch (val) {\n case 'followers':\n case 'mutuals':\n case 'none':\n return val\n default:\n // The dataplane should set the default of \"FOLLOWERS\". Just in case.\n return 'followers'\n }\n }\n\n const debug = {\n pagerank: actor.pagerank,\n accountTags: actor.tags,\n profileTags: actor.profileTags,\n }\n\n return acc.set(did, {\n did,\n handle: parseString(actor.handle),\n profile: profile?.record,\n profileCid: profile?.cid,\n profileTakedownRef: profile?.takedownRef,\n sortedAt: profile?.sortedAt,\n indexedAt: profile?.indexedAt,\n takedownRef: safeTakedownRef(actor),\n isLabeler: actor.labeler ?? false,\n allowIncomingChatsFrom: actor.allowIncomingChatsFrom || undefined,\n upstreamStatus: actor.upstreamStatus || undefined,\n createdAt: actor.createdAt?.toDate(),\n priorityNotifications: actor.priorityNotifications,\n trustedVerifier: actor.trustedVerifier,\n verifications,\n status: status,\n allowActivitySubscriptionsFrom: allowActivitySubscriptionsFrom(\n actor.allowActivitySubscriptionsFrom,\n ),\n debug,\n })\n }, new HydrationMap<Actor>())\n }\n\n async getChatDeclarations(\n uris: string[],\n includeTakedowns = false,\n ): Promise<ChatDeclarations> {\n if (!uris.length) return new HydrationMap<ChatDeclaration>()\n const res = await this.dataplane.getActorChatDeclarationRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<ChatDeclarationRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<ChatDeclaration>())\n }\n\n async getNotificationDeclarations(\n uris: string[],\n includeTakedowns = false,\n ): Promise<NotificationDeclarations> {\n if (!uris.length) return new HydrationMap<NotificationDeclaration>()\n const res = await this.dataplane.getActorChatDeclarationRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<NotificationDeclarationRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<NotificationDeclaration>())\n }\n\n async getStatus(uris: string[], includeTakedowns = false): Promise<Statuses> {\n if (!uris.length) return new HydrationMap<Status>()\n const res = await this.dataplane.getStatusRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<StatusRecord>(res.records[i], includeTakedowns)\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Status>())\n }\n\n // \"naive\" because this method does not verify the existence of the list itself\n // a later check in the main hydrator will remove list uris that have been deleted or\n // repurposed to \"curate lists\"\n async getProfileViewerStatesNaive(\n dids: string[],\n viewer: string,\n ): Promise<ProfileViewerStates> {\n if (!dids.length) return new HydrationMap<ProfileViewerState>()\n const res = await this.dataplane.getRelationships({\n actorDid: viewer,\n targetDids: dids,\n })\n\n return dids.reduce((acc, did, i) => {\n const rels = res.relationships[i]\n if (viewer === did) {\n // ignore self-follows, self-mutes, self-blocks, self-activity-subscriptions\n return acc.set(did, {})\n }\n return acc.set(did, {\n muted: rels.muted ?? false,\n mutedByList: parseString(rels.mutedByList),\n blockedBy: parseString(rels.blockedBy),\n blocking: parseString(rels.blocking),\n blockedByList: parseString(rels.blockedByList),\n blockingByList: parseString(rels.blockingByList),\n following: parseString(rels.following),\n followedBy: parseString(rels.followedBy),\n })\n }, new HydrationMap<ProfileViewerState>())\n }\n\n async getKnownFollowers(\n dids: string[],\n viewer: string | null,\n ): Promise<KnownFollowersStates> {\n if (!viewer) return new HydrationMap<KnownFollowersState | undefined>()\n const { results: knownFollowersResults } = await this.dataplane\n .getFollowsFollowing(\n {\n actorDid: viewer,\n targetDids: dids,\n },\n {\n signal: AbortSignal.timeout(100),\n },\n )\n .catch(() => ({ results: [] }))\n return dids.reduce((acc, did, i) => {\n const result = knownFollowersResults[i]?.dids\n return acc.set(\n did,\n result && result.length > 0\n ? {\n count: result.length,\n followers: result.slice(0, 5),\n }\n : undefined,\n )\n }, new HydrationMap<KnownFollowersState | undefined>())\n }\n\n async getActivitySubscriptions(\n dids: string[],\n viewer: string | null,\n ): Promise<ActivitySubscriptionStates> {\n if (!viewer) {\n return new HydrationMap<ActivitySubscriptionState | undefined>()\n }\n\n const activitySubscription = (val: ActivitySubscription | undefined) => {\n if (!val) return undefined\n\n const result = {\n post: !!val.post,\n reply: !!val.reply,\n }\n if (!isActivitySubscriptionEnabled(result)) return undefined\n\n return result\n }\n\n const { subscriptions } = await this.dataplane\n .getActivitySubscriptionsByActorAndSubjects(\n { actorDid: viewer, subjectDids: dids },\n { signal: AbortSignal.timeout(100) },\n )\n .catch(() => ({ subscriptions: [] }))\n\n return dids.reduce((acc, did, i) => {\n return acc.set(did, activitySubscription(subscriptions[i]))\n }, new HydrationMap<ActivitySubscriptionState | undefined>())\n }\n\n async getProfileAggregates(dids: string[]): Promise<ProfileAggs> {\n if (!dids.length) return new HydrationMap<ProfileAgg>()\n const counts = await this.dataplane.getCountsForUsers({ dids })\n return dids.reduce((acc, did, i) => {\n return acc.set(did, {\n followers: counts.followers[i] ?? 0,\n follows: counts.following[i] ?? 0,\n posts: counts.posts[i] ?? 0,\n lists: counts.lists[i] ?? 0,\n feeds: counts.feeds[i] ?? 0,\n starterPacks: counts.starterPacks[i] ?? 0,\n })\n }, new HydrationMap<ProfileAgg>())\n }\n}\n"]}
1
+ {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../src/hydration/actor.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppBskyNotificationDeclaration } from '@atproto/api'\nimport { mapDefined } from '@atproto/common'\nimport { DataPlaneClient } from '../data-plane/client'\nimport { Record as ProfileRecord } from '../lexicon/types/app/bsky/actor/profile'\nimport { Record as StatusRecord } from '../lexicon/types/app/bsky/actor/status'\nimport { Record as NotificationDeclarationRecord } from '../lexicon/types/app/bsky/notification/declaration'\nimport { Record as ChatDeclarationRecord } from '../lexicon/types/chat/bsky/actor/declaration'\nimport { ActivitySubscription, VerificationMeta } from '../proto/bsky_pb'\nimport {\n HydrationMap,\n RecordInfo,\n isActivitySubscriptionEnabled,\n parseRecord,\n parseString,\n safeTakedownRef,\n} from './util'\n\ntype AllowActivitySubscriptions = Extract<\n AppBskyNotificationDeclaration.Record['allowSubscriptions'],\n 'followers' | 'mutuals' | 'none'\n>\n\nexport type Actor = {\n did: string\n handle?: string\n profile?: ProfileRecord\n profileCid?: string\n profileTakedownRef?: string\n sortedAt?: Date\n indexedAt?: Date\n takedownRef?: string\n isLabeler: boolean\n allowIncomingChatsFrom?: string\n upstreamStatus?: string\n createdAt?: Date\n priorityNotifications: boolean\n trustedVerifier?: boolean\n verifications: VerificationHydrationState[]\n status?: RecordInfo<StatusRecord>\n allowActivitySubscriptionsFrom: AllowActivitySubscriptions\n /**\n * Debug information for internal development\n */\n debug?: {\n pagerank?: number\n accountTags?: string[]\n profileTags?: string[]\n [key: string]: unknown\n }\n}\n\nexport type VerificationHydrationState = {\n issuer: string\n uri: string\n handle: string\n displayName: string\n createdAt: string\n}\n\nexport type VerificationMetaRequired = Required<VerificationMeta>\n\nexport type Actors = HydrationMap<Actor>\n\nexport type ChatDeclaration = RecordInfo<ChatDeclarationRecord>\n\nexport type ChatDeclarations = HydrationMap<ChatDeclaration>\nexport type NotificationDeclaration = RecordInfo<NotificationDeclarationRecord>\n\nexport type NotificationDeclarations = HydrationMap<NotificationDeclaration>\n\nexport type Status = RecordInfo<StatusRecord>\nexport type Statuses = HydrationMap<Status>\n\nexport type ProfileViewerState = {\n muted?: boolean\n mutedByList?: string\n blockedBy?: string\n blocking?: string\n blockedByList?: string\n blockingByList?: string\n following?: string\n followedBy?: string\n}\n\nexport type ProfileViewerStates = HydrationMap<ProfileViewerState>\n\ntype ActivitySubscriptionState = {\n post: boolean\n reply: boolean\n}\n\nexport type ActivitySubscriptionStates = HydrationMap<\n ActivitySubscriptionState | undefined\n>\n\ntype KnownFollowersState = {\n count: number\n followers: string[]\n}\n\nexport type KnownFollowersStates = HydrationMap<KnownFollowersState | undefined>\n\nexport type ProfileAgg = {\n followers: number\n follows: number\n posts: number\n lists: number\n feeds: number\n starterPacks: number\n}\n\nexport type ProfileAggs = HydrationMap<ProfileAgg>\n\nexport class ActorHydrator {\n constructor(public dataplane: DataPlaneClient) {}\n\n async getRepoRevSafe(did: string | null): Promise<string | null> {\n if (!did) return null\n try {\n const res = await this.dataplane.getLatestRev({ actorDid: did })\n return parseString(res.rev) ?? null\n } catch {\n return null\n }\n }\n\n async getDids(\n handleOrDids: string[],\n opts?: { lookupUnidirectional?: boolean },\n ): Promise<(string | undefined)[]> {\n const handles = handleOrDids.filter((actor) => !actor.startsWith('did:'))\n const res = handles.length\n ? await this.dataplane.getDidsByHandles({\n handles,\n lookupUnidirectional: opts?.lookupUnidirectional,\n })\n : { dids: [] }\n const didByHandle = handles.reduce(\n (acc, cur, i) => {\n const did = res.dids[i]\n if (did && did.length > 0) {\n return acc.set(cur, did)\n }\n return acc\n },\n new Map() as Map<string, string>,\n )\n return handleOrDids.map((id) =>\n id.startsWith('did:') ? id : didByHandle.get(id),\n )\n }\n\n async getDidsDefined(handleOrDids: string[]): Promise<string[]> {\n const res = await this.getDids(handleOrDids)\n // @ts-ignore\n return res.filter((did) => did !== undefined)\n }\n\n async getActors(\n dids: string[],\n opts: {\n includeTakedowns?: boolean\n skipCacheForDids?: string[]\n } = {},\n ): Promise<Actors> {\n const { includeTakedowns = false, skipCacheForDids } = opts\n if (!dids.length) return new HydrationMap<Actor>()\n const res = await this.dataplane.getActors({ dids, skipCacheForDids })\n return dids.reduce((acc, did, i) => {\n const actor = res.actors[i]\n const isNoHosted =\n actor.takenDown ||\n (actor.upstreamStatus && actor.upstreamStatus !== 'active')\n if (\n !actor.exists ||\n (isNoHosted && !includeTakedowns) ||\n !!actor.tombstonedAt\n ) {\n return acc.set(did, null)\n }\n\n const profile = actor.profile?.record\n ? parseRecord<ProfileRecord>(actor.profile, includeTakedowns)\n : undefined\n\n const status = actor.statusRecord\n ? parseRecord<StatusRecord>(actor.statusRecord, includeTakedowns)\n : undefined\n\n const verifications = mapDefined(\n Object.entries(actor.verifiedBy),\n ([actorDid, verificationMeta]) => {\n if (\n verificationMeta.handle &&\n verificationMeta.rkey &&\n verificationMeta.sortedAt\n ) {\n return {\n issuer: actorDid,\n uri: `at://${actorDid}/app.bsky.graph.verification/${verificationMeta.rkey}`,\n handle: verificationMeta.handle,\n displayName: verificationMeta.displayName,\n createdAt: verificationMeta.sortedAt.toDate().toISOString(),\n }\n }\n // Filter out the verification meta that doesn't contain all info.\n return undefined\n },\n )\n\n const allowActivitySubscriptionsFrom = (\n val: string,\n ): AllowActivitySubscriptions => {\n switch (val) {\n case 'followers':\n case 'mutuals':\n case 'none':\n return val\n default:\n // The dataplane should set the default of \"FOLLOWERS\". Just in case.\n return 'followers'\n }\n }\n\n const debug = {\n pagerank: actor.pagerank,\n accountTags: actor.tags,\n profileTags: actor.profileTags,\n }\n\n return acc.set(did, {\n did,\n handle: parseString(actor.handle),\n profile: profile?.record,\n profileCid: profile?.cid,\n profileTakedownRef: profile?.takedownRef,\n sortedAt: profile?.sortedAt,\n indexedAt: profile?.indexedAt,\n takedownRef: safeTakedownRef(actor),\n isLabeler: actor.labeler ?? false,\n allowIncomingChatsFrom: actor.allowIncomingChatsFrom || undefined,\n upstreamStatus: actor.upstreamStatus || undefined,\n createdAt: actor.createdAt?.toDate(),\n priorityNotifications: actor.priorityNotifications,\n trustedVerifier: actor.trustedVerifier,\n verifications,\n status: status,\n allowActivitySubscriptionsFrom: allowActivitySubscriptionsFrom(\n actor.allowActivitySubscriptionsFrom,\n ),\n debug,\n })\n }, new HydrationMap<Actor>())\n }\n\n async getChatDeclarations(\n uris: string[],\n includeTakedowns = false,\n ): Promise<ChatDeclarations> {\n if (!uris.length) return new HydrationMap<ChatDeclaration>()\n const res = await this.dataplane.getActorChatDeclarationRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<ChatDeclarationRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<ChatDeclaration>())\n }\n\n async getNotificationDeclarations(\n uris: string[],\n includeTakedowns = false,\n ): Promise<NotificationDeclarations> {\n if (!uris.length) return new HydrationMap<NotificationDeclaration>()\n const res = await this.dataplane.getActorChatDeclarationRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<NotificationDeclarationRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<NotificationDeclaration>())\n }\n\n async getStatus(uris: string[], includeTakedowns = false): Promise<Statuses> {\n if (!uris.length) return new HydrationMap<Status>()\n const res = await this.dataplane.getStatusRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<StatusRecord>(res.records[i], includeTakedowns)\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Status>())\n }\n\n // \"naive\" because this method does not verify the existence of the list itself\n // a later check in the main hydrator will remove list uris that have been deleted or\n // repurposed to \"curate lists\"\n async getProfileViewerStatesNaive(\n dids: string[],\n viewer: string,\n ): Promise<ProfileViewerStates> {\n if (!dids.length) return new HydrationMap<ProfileViewerState>()\n const res = await this.dataplane.getRelationships({\n actorDid: viewer,\n targetDids: dids,\n })\n\n return dids.reduce((acc, did, i) => {\n const rels = res.relationships[i]\n if (viewer === did) {\n // ignore self-follows, self-mutes, self-blocks, self-activity-subscriptions\n return acc.set(did, {})\n }\n return acc.set(did, {\n muted: rels.muted ?? false,\n mutedByList: parseString(rels.mutedByList),\n blockedBy: parseString(rels.blockedBy),\n blocking: parseString(rels.blocking),\n blockedByList: parseString(rels.blockedByList),\n blockingByList: parseString(rels.blockingByList),\n following: parseString(rels.following),\n followedBy: parseString(rels.followedBy),\n })\n }, new HydrationMap<ProfileViewerState>())\n }\n\n async getKnownFollowers(\n dids: string[],\n viewer: string | null,\n ): Promise<KnownFollowersStates> {\n if (!viewer) return new HydrationMap<KnownFollowersState | undefined>()\n const { results: knownFollowersResults } = await this.dataplane\n .getFollowsFollowing(\n {\n actorDid: viewer,\n targetDids: dids,\n },\n {\n signal: AbortSignal.timeout(100),\n },\n )\n .catch(() => ({ results: [] }))\n return dids.reduce((acc, did, i) => {\n const result = knownFollowersResults[i]?.dids\n return acc.set(\n did,\n result && result.length > 0\n ? {\n count: result.length,\n followers: result.slice(0, 5),\n }\n : undefined,\n )\n }, new HydrationMap<KnownFollowersState | undefined>())\n }\n\n async getActivitySubscriptions(\n dids: string[],\n viewer: string | null,\n ): Promise<ActivitySubscriptionStates> {\n if (!viewer) {\n return new HydrationMap<ActivitySubscriptionState | undefined>()\n }\n\n const activitySubscription = (val: ActivitySubscription | undefined) => {\n if (!val) return undefined\n\n const result = {\n post: !!val.post,\n reply: !!val.reply,\n }\n if (!isActivitySubscriptionEnabled(result)) return undefined\n\n return result\n }\n\n const { subscriptions } = await this.dataplane\n .getActivitySubscriptionsByActorAndSubjects(\n { actorDid: viewer, subjectDids: dids },\n { signal: AbortSignal.timeout(100) },\n )\n .catch(() => ({ subscriptions: [] }))\n\n return dids.reduce((acc, did, i) => {\n return acc.set(did, activitySubscription(subscriptions[i]))\n }, new HydrationMap<ActivitySubscriptionState | undefined>())\n }\n\n async getProfileAggregates(dids: string[]): Promise<ProfileAggs> {\n if (!dids.length) return new HydrationMap<ProfileAgg>()\n const counts = await this.dataplane.getCountsForUsers({ dids })\n return dids.reduce((acc, did, i) => {\n return acc.set(did, {\n followers: counts.followers[i] ?? 0,\n follows: counts.following[i] ?? 0,\n posts: counts.posts[i] ?? 0,\n lists: counts.lists[i] ?? 0,\n feeds: counts.feeds[i] ?? 0,\n starterPacks: counts.starterPacks[i] ?? 0,\n })\n }, new HydrationMap<ProfileAgg>())\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAK5B,OAAO,OAAO,MAAM,SAAS,CAAA;AAI7B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAMzC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAmBtC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,qBAAa,WAAW;IACf,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAgB;gBAEvB,IAAI,EAAE;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;KAAE;IAK/D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,OAAO,CAAA;KACpB,GAAG,WAAW;IAmKT,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAe7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAK5B,OAAO,OAAO,MAAM,SAAS,CAAA;AAI7B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAMzC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAoBtC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,qBAAa,WAAW;IACf,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAgB;gBAEvB,IAAI,EAAE;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;KAAE;IAK/D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,OAAO,CAAA;KACpB,GAAG,WAAW;IA+KT,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAe7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B;AAED,eAAe,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -64,6 +64,7 @@ const uri_1 = require("./image/uri");
64
64
  const kws_1 = require("./kws");
65
65
  const lexicon_1 = require("./lexicon");
66
66
  const logger_1 = require("./logger");
67
+ const rolodex_1 = require("./rolodex");
67
68
  const stash_1 = require("./stash");
68
69
  const views_1 = require("./views");
69
70
  const util_1 = require("./views/util");
@@ -180,6 +181,16 @@ class BskyAppView {
180
181
  : [],
181
182
  })
182
183
  : undefined;
184
+ const rolodexClient = config.rolodexUrl
185
+ ? (0, rolodex_1.createRolodexClient)({
186
+ baseUrl: config.rolodexUrl,
187
+ httpVersion: config.rolodexHttpVersion ?? '2',
188
+ nodeOptions: { rejectUnauthorized: !config.rolodexIgnoreBadTls },
189
+ interceptors: config.rolodexApiKey
190
+ ? [(0, rolodex_1.authWithApiKey)(config.rolodexApiKey)]
191
+ : [],
192
+ })
193
+ : undefined;
183
194
  const kwsClient = config.kws ? (0, kws_1.createKwsClient)(config.kws) : undefined;
184
195
  const entrywayJwtPublicKey = config.entrywayJwtPublicKeyHex
185
196
  ? (0, auth_verifier_1.createPublicKeyObject)(config.entrywayJwtPublicKeyHex)
@@ -211,6 +222,7 @@ class BskyAppView {
211
222
  bsyncClient,
212
223
  stashClient,
213
224
  courierClient,
225
+ rolodexClient,
214
226
  authVerifier,
215
227
  featureGates,
216
228
  blobDispatcher,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["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, 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 { FeatureGates } 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 { 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 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 featureGates = new FeatureGates({\n apiKey: config.statsigKey,\n env: config.statsigEnv,\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 authVerifier,\n featureGates,\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 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 await this.ctx.featureGates.start()\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 await this.terminator?.terminate()\n this.ctx.featureGates.destroy()\n await this.ctx.etcd?.close()\n }\n}\n\nexport default BskyAppView\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["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, 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 { FeatureGates } 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 featureGates = new FeatureGates({\n apiKey: config.statsigKey,\n env: config.statsigEnv,\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 featureGates,\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 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 await this.ctx.featureGates.start()\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 await this.terminator?.terminate()\n this.ctx.featureGates.destroy()\n await this.ctx.etcd?.close()\n }\n}\n\nexport default BskyAppView\n"]}
@@ -15,6 +15,13 @@ import * as AppBskyAgeassuranceGetState from './types/app/bsky/ageassurance/getS
15
15
  import * as AppBskyBookmarkCreateBookmark from './types/app/bsky/bookmark/createBookmark.js';
16
16
  import * as AppBskyBookmarkDeleteBookmark from './types/app/bsky/bookmark/deleteBookmark.js';
17
17
  import * as AppBskyBookmarkGetBookmarks from './types/app/bsky/bookmark/getBookmarks.js';
18
+ import * as AppBskyContactDismissMatch from './types/app/bsky/contact/dismissMatch.js';
19
+ import * as AppBskyContactGetMatches from './types/app/bsky/contact/getMatches.js';
20
+ import * as AppBskyContactGetSyncStatus from './types/app/bsky/contact/getSyncStatus.js';
21
+ import * as AppBskyContactImportContacts from './types/app/bsky/contact/importContacts.js';
22
+ import * as AppBskyContactRemoveData from './types/app/bsky/contact/removeData.js';
23
+ import * as AppBskyContactStartPhoneVerification from './types/app/bsky/contact/startPhoneVerification.js';
24
+ import * as AppBskyContactVerifyPhone from './types/app/bsky/contact/verifyPhone.js';
18
25
  import * as AppBskyFeedDescribeFeedGenerator from './types/app/bsky/feed/describeFeedGenerator.js';
19
26
  import * as AppBskyFeedGetActorFeeds from './types/app/bsky/feed/getActorFeeds.js';
20
27
  import * as AppBskyFeedGetActorLikes from './types/app/bsky/feed/getActorLikes.js';
@@ -251,6 +258,7 @@ export declare class AppBskyNS {
251
258
  actor: AppBskyActorNS;
252
259
  ageassurance: AppBskyAgeassuranceNS;
253
260
  bookmark: AppBskyBookmarkNS;
261
+ contact: AppBskyContactNS;
254
262
  embed: AppBskyEmbedNS;
255
263
  feed: AppBskyFeedNS;
256
264
  graph: AppBskyGraphNS;
@@ -286,6 +294,17 @@ export declare class AppBskyBookmarkNS {
286
294
  deleteBookmark<A extends Auth = void>(cfg: MethodConfigOrHandler<A, AppBskyBookmarkDeleteBookmark.QueryParams, AppBskyBookmarkDeleteBookmark.HandlerInput, AppBskyBookmarkDeleteBookmark.HandlerOutput>): void;
287
295
  getBookmarks<A extends Auth = void>(cfg: MethodConfigOrHandler<A, AppBskyBookmarkGetBookmarks.QueryParams, AppBskyBookmarkGetBookmarks.HandlerInput, AppBskyBookmarkGetBookmarks.HandlerOutput>): void;
288
296
  }
297
+ export declare class AppBskyContactNS {
298
+ _server: Server;
299
+ constructor(server: Server);
300
+ dismissMatch<A extends Auth = void>(cfg: MethodConfigOrHandler<A, AppBskyContactDismissMatch.QueryParams, AppBskyContactDismissMatch.HandlerInput, AppBskyContactDismissMatch.HandlerOutput>): void;
301
+ getMatches<A extends Auth = void>(cfg: MethodConfigOrHandler<A, AppBskyContactGetMatches.QueryParams, AppBskyContactGetMatches.HandlerInput, AppBskyContactGetMatches.HandlerOutput>): void;
302
+ getSyncStatus<A extends Auth = void>(cfg: MethodConfigOrHandler<A, AppBskyContactGetSyncStatus.QueryParams, AppBskyContactGetSyncStatus.HandlerInput, AppBskyContactGetSyncStatus.HandlerOutput>): void;
303
+ importContacts<A extends Auth = void>(cfg: MethodConfigOrHandler<A, AppBskyContactImportContacts.QueryParams, AppBskyContactImportContacts.HandlerInput, AppBskyContactImportContacts.HandlerOutput>): void;
304
+ removeData<A extends Auth = void>(cfg: MethodConfigOrHandler<A, AppBskyContactRemoveData.QueryParams, AppBskyContactRemoveData.HandlerInput, AppBskyContactRemoveData.HandlerOutput>): void;
305
+ startPhoneVerification<A extends Auth = void>(cfg: MethodConfigOrHandler<A, AppBskyContactStartPhoneVerification.QueryParams, AppBskyContactStartPhoneVerification.HandlerInput, AppBskyContactStartPhoneVerification.HandlerOutput>): void;
306
+ verifyPhone<A extends Auth = void>(cfg: MethodConfigOrHandler<A, AppBskyContactVerifyPhone.QueryParams, AppBskyContactVerifyPhone.HandlerInput, AppBskyContactVerifyPhone.HandlerOutput>): void;
307
+ }
289
308
  export declare class AppBskyEmbedNS {
290
309
  _server: Server;
291
310
  constructor(server: Server);