@evanp/activitypub-bot 0.40.1 → 0.41.0

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.
@@ -17,7 +17,10 @@ const { values } = parseArgs({
17
17
  fanout: { type: 'string' },
18
18
  intake: { type: 'string' },
19
19
  'index-file': { type: 'string' },
20
+ 'profile-file': { type: 'string' },
20
21
  'allow-private': { type: 'boolean' },
22
+ 'redis-url': { type: 'string' },
23
+ 'trust-proxy': { type: 'string' },
21
24
  help: { type: 'boolean', short: 'h' }
22
25
  },
23
26
  allowPositionals: false
@@ -39,6 +42,8 @@ Options:
39
42
  --index-file <path> HTML page to show at root path
40
43
  --profile-file <path> HTML page to show for bot profiles
41
44
  --allow-private flag to allow private network requests
45
+ --redis-url <url> Redis connection URL for rate limiting
46
+ --trust-proxy <value> Express 'trust proxy' setting (e.g. "1", "loopback", "true")
42
47
  -h, --help Show this help
43
48
  `)
44
49
  process.exit(0)
@@ -78,6 +83,16 @@ const FANOUT = parseNumber(values.fanout) || parseNumber(process.env.FANOUT) ||
78
83
  const INTAKE = parseNumber(values.intake) || parseNumber(process.env.INTAKE) || 2
79
84
  const INDEX_FILE = values['index-file'] || process.env.INDEX_FILE || DEFAULT_INDEX_FILE
80
85
  const PROFILE_FILE = values['profile-file'] || process.env.PROFILE_FILE || DEFAULT_PROFILE_FILE
86
+ const REDIS_URL = normalize(values['redis-url']) || process.env.REDIS_URL || undefined
87
+ const TRUST_PROXY_RAW = normalize(values['trust-proxy']) || process.env.TRUST_PROXY
88
+ const TRUST_PROXY = (() => {
89
+ if (TRUST_PROXY_RAW == null) return undefined
90
+ const bool = parseBoolean(TRUST_PROXY_RAW)
91
+ if (bool !== undefined) return bool
92
+ const num = Number.parseInt(TRUST_PROXY_RAW, 10)
93
+ if (!Number.isNaN(num) && String(num) === TRUST_PROXY_RAW.trim()) return num
94
+ return TRUST_PROXY_RAW
95
+ })()
81
96
  const ALLOW_PRIVATE = values['allow-private'] ||
82
97
  ('ALLOW_PRIVATE' in process.env)
83
98
  ? parseBoolean(process.env.ALLOW_PRIVATE)
@@ -96,7 +111,9 @@ const app = await makeApp({
96
111
  intakeWorkerCount: INTAKE,
97
112
  indexFileName: INDEX_FILE,
98
113
  profileFileName: PROFILE_FILE,
99
- allowPrivateNetworkRequests: ALLOW_PRIVATE
114
+ allowPrivateNetworkRequests: ALLOW_PRIVATE,
115
+ redisUrl: REDIS_URL,
116
+ trustProxy: TRUST_PROXY
100
117
  })
101
118
 
102
119
  const server = app.listen(parseInt(PORT), () => {
package/lib/app.js CHANGED
@@ -63,7 +63,7 @@ function createWorkers (logger, count, WorkerClass, ...args) {
63
63
  return { workers, runs }
64
64
  }
65
65
 
66
- export async function makeApp ({ databaseUrl, origin, bots, logLevel = 'silent', deliveryWorkerCount = 2, distributionWorkerCount = 8, fanoutWorkerCount = 4, intakeWorkerCount = 2, indexFileName = DEFAULT_INDEX_FILENAME, profileFileName = DEFAULT_PROFILE_FILENAME, allowPrivateNetworkRequests = false, redisUrl }) {
66
+ export async function makeApp ({ databaseUrl, origin, bots, logLevel = 'silent', deliveryWorkerCount = 2, distributionWorkerCount = 8, fanoutWorkerCount = 4, intakeWorkerCount = 2, indexFileName = DEFAULT_INDEX_FILENAME, profileFileName = DEFAULT_PROFILE_FILENAME, allowPrivateNetworkRequests = false, redisUrl, trustProxy }) {
67
67
  const logger = Logger({
68
68
  level: logLevel
69
69
  })
@@ -202,6 +202,10 @@ export async function makeApp ({ databaseUrl, origin, bots, logLevel = 'silent',
202
202
 
203
203
  app.disable('x-powered-by')
204
204
 
205
+ if (trustProxy !== undefined) {
206
+ app.set('trust proxy', trustProxy)
207
+ }
208
+
205
209
  const rateLimitHandler = (req, res) => {
206
210
  res.status(429)
207
211
  .set('Content-Type', 'application/problem+json')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evanp/activitypub-bot",
3
- "version": "0.40.1",
3
+ "version": "0.41.0",
4
4
  "description": "server-side ActivityPub bot framework",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",