@atproto/xrpc-server 0.7.19 → 0.9.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/auth.js +11 -11
  3. package/dist/auth.js.map +1 -1
  4. package/dist/errors.d.ts +67 -0
  5. package/dist/errors.d.ts.map +1 -0
  6. package/dist/errors.js +202 -0
  7. package/dist/errors.js.map +1 -0
  8. package/dist/index.d.ts +4 -3
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +3 -2
  11. package/dist/index.js.map +1 -1
  12. package/dist/rate-limiter.d.ts +95 -26
  13. package/dist/rate-limiter.d.ts.map +1 -1
  14. package/dist/rate-limiter.js +179 -85
  15. package/dist/rate-limiter.js.map +1 -1
  16. package/dist/server.d.ts +20 -15
  17. package/dist/server.d.ts.map +1 -1
  18. package/dist/server.js +185 -220
  19. package/dist/server.js.map +1 -1
  20. package/dist/types.d.ts +80 -175
  21. package/dist/types.d.ts.map +1 -1
  22. package/dist/types.js +9 -226
  23. package/dist/types.js.map +1 -1
  24. package/dist/util.d.ts +12 -9
  25. package/dist/util.d.ts.map +1 -1
  26. package/dist/util.js +114 -78
  27. package/dist/util.js.map +1 -1
  28. package/package.json +4 -3
  29. package/src/auth.ts +1 -1
  30. package/src/errors.ts +293 -0
  31. package/src/index.ts +4 -3
  32. package/src/rate-limiter.ts +270 -104
  33. package/src/server.ts +265 -276
  34. package/src/types.ts +144 -429
  35. package/src/util.ts +131 -85
  36. package/tests/auth.test.ts +2 -2
  37. package/tests/bodies.test.ts +18 -27
  38. package/tests/errors.test.ts +1 -1
  39. package/tests/ipld.test.ts +15 -14
  40. package/tests/parameters.test.ts +4 -7
  41. package/tests/procedures.test.ts +22 -34
  42. package/tests/queries.test.ts +9 -12
  43. package/tests/rate-limiter.test.ts +8 -11
  44. package/tests/responses.test.ts +12 -15
  45. package/tsconfig.build.tsbuildinfo +1 -1
package/dist/server.js CHANGED
@@ -32,14 +32,19 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  exports.Server = void 0;
37
40
  exports.createServer = createServer;
41
+ const node_assert_1 = __importDefault(require("node:assert"));
38
42
  const node_stream_1 = require("node:stream");
39
43
  const promises_1 = require("node:stream/promises");
40
44
  const express_1 = __importStar(require("express"));
41
45
  const common_1 = require("@atproto/common");
42
46
  const lexicon_1 = require("@atproto/lexicon");
47
+ const errors_1 = require("./errors");
43
48
  const logger_1 = __importStar(require("./logger"));
44
49
  const rate_limiter_1 = require("./rate-limiter");
45
50
  const stream_1 = require("./stream");
@@ -80,13 +85,7 @@ class Server {
80
85
  writable: true,
81
86
  value: void 0
82
87
  });
83
- Object.defineProperty(this, "middleware", {
84
- enumerable: true,
85
- configurable: true,
86
- writable: true,
87
- value: void 0
88
- });
89
- Object.defineProperty(this, "globalRateLimiters", {
88
+ Object.defineProperty(this, "globalRateLimiter", {
90
89
  enumerable: true,
91
90
  configurable: true,
92
91
  writable: true,
@@ -98,45 +97,74 @@ class Server {
98
97
  writable: true,
99
98
  value: void 0
100
99
  });
101
- Object.defineProperty(this, "routeRateLimiters", {
100
+ Object.defineProperty(this, "catchall", {
102
101
  enumerable: true,
103
102
  configurable: true,
104
103
  writable: true,
105
- value: void 0
104
+ value: async (req, res, next) => {
105
+ // catchall handler only applies to XRPC routes
106
+ if (!req.url.startsWith('/xrpc/'))
107
+ return next();
108
+ // Validate the NSID
109
+ const nsid = (0, util_1.extractUrlNsid)(req.url);
110
+ if (!nsid) {
111
+ return next(new errors_1.InvalidRequestError('invalid xrpc path'));
112
+ }
113
+ if (this.globalRateLimiter) {
114
+ try {
115
+ await this.globalRateLimiter.handle({
116
+ req,
117
+ res,
118
+ auth: undefined,
119
+ params: {},
120
+ input: undefined,
121
+ async resetRouteRateLimits() { },
122
+ });
123
+ }
124
+ catch (err) {
125
+ return next(err);
126
+ }
127
+ }
128
+ // Ensure that known XRPC methods are only called with the correct HTTP
129
+ // method.
130
+ const def = this.lex.getDef(nsid);
131
+ if (def) {
132
+ const expectedMethod = def.type === 'procedure' ? 'POST' : def.type === 'query' ? 'GET' : null;
133
+ if (expectedMethod != null && expectedMethod !== req.method) {
134
+ return next(new errors_1.InvalidRequestError(`Incorrect HTTP method (${req.method}) expected ${expectedMethod}`));
135
+ }
136
+ }
137
+ if (this.options.catchall) {
138
+ this.options.catchall.call(null, req, res, next);
139
+ }
140
+ else if (!def) {
141
+ next(new errors_1.MethodNotImplementedError());
142
+ }
143
+ else {
144
+ next();
145
+ }
146
+ }
106
147
  });
107
148
  if (lexicons) {
108
149
  this.addLexicons(lexicons);
109
150
  }
110
151
  this.router.use(this.routes);
111
- this.router.use('/xrpc/:methodId', this.catchall.bind(this));
152
+ this.router.use(this.catchall);
112
153
  this.router.use(createErrorMiddleware(opts));
113
154
  this.router.once('mount', (app) => {
114
155
  this.enableStreamingOnListen(app);
115
156
  });
116
157
  this.options = opts;
117
- this.middleware = {
118
- json: (0, express_1.json)({ limit: opts?.payload?.jsonLimit }),
119
- text: (0, express_1.text)({ limit: opts?.payload?.textLimit }),
120
- };
121
- this.globalRateLimiters = [];
122
- this.sharedRateLimiters = {};
123
- this.routeRateLimiters = {};
124
- if (opts?.rateLimits?.global) {
125
- for (const limit of opts.rateLimits.global) {
126
- const rateLimiter = opts.rateLimits.creator({
127
- ...limit,
128
- keyPrefix: `rl-${limit.name}`,
129
- });
130
- this.globalRateLimiters.push(rateLimiter);
158
+ if (opts.rateLimits) {
159
+ const { global, shared, creator, bypass } = opts.rateLimits;
160
+ if (global) {
161
+ this.globalRateLimiter = rate_limiter_1.RouteRateLimiter.from(global.map((options) => creator(buildRateLimiterOptions(options))), { bypass });
131
162
  }
132
- }
133
- if (opts?.rateLimits?.shared) {
134
- for (const limit of opts.rateLimits.shared) {
135
- const rateLimiter = opts.rateLimits.creator({
136
- ...limit,
137
- keyPrefix: `rl-${limit.name}`,
138
- });
139
- this.sharedRateLimiters[limit.name] = rateLimiter;
163
+ if (shared) {
164
+ this.sharedRateLimiters = new Map(shared.map((options) => [
165
+ options.name,
166
+ creator(buildRateLimiterOptions(options)),
167
+ ]));
140
168
  }
141
169
  }
142
170
  }
@@ -181,117 +209,98 @@ class Server {
181
209
  // http
182
210
  // =
183
211
  async addRoute(nsid, def, config) {
184
- const verb = def.type === 'procedure' ? 'post' : 'get';
185
- const middleware = [];
186
- middleware.push(createLocalsMiddleware(nsid));
187
- if (config.auth) {
188
- middleware.push(createAuthMiddleware(config.auth));
212
+ const path = `/xrpc/${nsid}`;
213
+ const handler = this.createHandler(nsid, def, config);
214
+ if (def.type === 'procedure') {
215
+ this.routes.post(path, handler);
189
216
  }
190
- if (verb === 'post') {
191
- middleware.push(this.middleware.json);
192
- middleware.push(this.middleware.text);
217
+ else {
218
+ this.routes.get(path, handler);
193
219
  }
194
- this.setupRouteRateLimits(nsid, config);
195
- this.routes[verb](`/xrpc/${nsid}`, ...middleware, this.createHandler(nsid, def, config));
196
220
  }
197
- async catchall(req, res, next) {
198
- if (this.globalRateLimiters) {
221
+ createParamsVerifier(nsid, def) {
222
+ return (req) => {
223
+ const queryParams = 'query' in req ? req.query : (0, util_1.getQueryParams)(req.url);
224
+ const params = (0, util_1.decodeQueryParams)(def, queryParams);
199
225
  try {
200
- const rlRes = await (0, rate_limiter_1.consumeMany)({
201
- req,
202
- res,
203
- auth: undefined,
204
- params: {},
205
- input: undefined,
206
- async resetRouteRateLimits() { },
207
- }, this.globalRateLimiters.map((rl) => (ctx) => rl.consume(ctx)));
208
- if (rlRes instanceof types_1.RateLimitExceededError) {
209
- return next(rlRes);
210
- }
226
+ return this.lex.assertValidXrpcParams(nsid, params);
211
227
  }
212
- catch (err) {
213
- return next(err);
228
+ catch (e) {
229
+ throw new errors_1.InvalidRequestError(String(e));
214
230
  }
215
- }
216
- if (this.options.catchall) {
217
- return this.options.catchall(req, res, next);
218
- }
219
- const def = this.lex.getDef(req.params.methodId);
220
- if (!def) {
221
- return next(new types_1.MethodNotImplementedError());
222
- }
223
- // validate method
224
- if (def.type === 'query' && req.method !== 'GET') {
225
- return next(new types_1.InvalidRequestError(`Incorrect HTTP method (${req.method}) expected GET`));
226
- }
227
- else if (def.type === 'procedure' && req.method !== 'POST') {
228
- return next(new types_1.InvalidRequestError(`Incorrect HTTP method (${req.method}) expected POST`));
229
- }
230
- return next();
231
+ };
232
+ }
233
+ createInputVerifier(nsid, def, routeOpts) {
234
+ return (0, util_1.createInputVerifier)(nsid, def, routeOpts, this.lex);
231
235
  }
232
- createHandler(nsid, def, routeCfg) {
233
- const routeOpts = {
234
- blobLimit: routeCfg.opts?.blobLimit ?? this.options.payload?.blobLimit,
236
+ createAuthVerifier(cfg) {
237
+ const { auth } = cfg;
238
+ if (!auth)
239
+ return null;
240
+ return async (ctx) => {
241
+ const result = await auth(ctx);
242
+ return (0, errors_1.excludeErrorResult)(result);
235
243
  };
236
- const validateReqInput = (req) => (0, util_1.validateInput)(nsid, def, req, routeOpts, this.lex);
244
+ }
245
+ createHandler(nsid, def, cfg) {
246
+ const authVerifier = this.createAuthVerifier(cfg);
247
+ const paramsVerifier = this.createParamsVerifier(nsid, def);
248
+ const inputVerifier = this.createInputVerifier(nsid, def, {
249
+ blobLimit: cfg.opts?.blobLimit ?? this.options.payload?.blobLimit,
250
+ jsonLimit: cfg.opts?.jsonLimit ?? this.options.payload?.jsonLimit,
251
+ textLimit: cfg.opts?.textLimit ?? this.options.payload?.textLimit,
252
+ });
237
253
  const validateResOutput = this.options.validateResponse === false
238
254
  ? null
239
255
  : (output) => (0, util_1.validateOutput)(nsid, def, output, this.lex);
240
- const assertValidXrpcParams = (params) => this.lex.assertValidXrpcParams(nsid, params);
241
- const rls = this.routeRateLimiters[nsid] ?? [];
242
- const consumeRateLimit = (reqCtx) => (0, rate_limiter_1.consumeMany)(reqCtx, rls.map((rl) => (ctx) => rl.consume(ctx)));
243
- const resetRateLimit = (reqCtx) => (0, rate_limiter_1.resetMany)(reqCtx, rls.map((rl) => (ctx) => rl.reset(ctx)));
256
+ const routeLimiter = this.createRouteRateLimiter(nsid, cfg);
244
257
  return async function (req, res, next) {
245
258
  try {
246
- // validate request
247
- let params = (0, util_1.decodeQueryParams)(def, req.query);
248
- try {
249
- params = assertValidXrpcParams(params);
250
- }
251
- catch (e) {
252
- throw new types_1.InvalidRequestError(String(e));
253
- }
254
- const input = validateReqInput(req);
255
- const locals = req[kRequestLocals];
256
- const reqCtx = {
259
+ // parse & validate params
260
+ const params = paramsVerifier(req);
261
+ // authenticate request
262
+ const auth = authVerifier
263
+ ? await authVerifier({ req, res, params })
264
+ : undefined;
265
+ // parse & validate input
266
+ const input = await inputVerifier(req, res);
267
+ const ctx = {
257
268
  params,
258
269
  input,
259
- auth: locals.auth,
270
+ auth,
260
271
  req,
261
272
  res,
262
- resetRouteRateLimits: async () => resetRateLimit(reqCtx),
273
+ resetRouteRateLimits: async () => routeLimiter?.reset(ctx),
263
274
  };
264
275
  // handle rate limits
265
- const result = await consumeRateLimit(reqCtx);
266
- if (result instanceof types_1.RateLimitExceededError) {
267
- return next(result);
268
- }
276
+ if (routeLimiter)
277
+ await routeLimiter.handle(ctx);
269
278
  // run the handler
270
- const output = await routeCfg.handler(reqCtx);
279
+ const output = await cfg.handler(ctx);
271
280
  if (!output) {
272
281
  validateResOutput?.(output);
273
282
  res.status(200);
274
283
  res.end();
275
284
  }
276
285
  else if ((0, types_1.isHandlerPipeThroughStream)(output)) {
277
- setHeaders(res, output);
286
+ (0, util_1.setHeaders)(res, output.headers);
278
287
  res.status(200);
279
288
  res.header('Content-Type', output.encoding);
280
289
  await (0, promises_1.pipeline)(output.stream, res);
281
290
  }
282
291
  else if ((0, types_1.isHandlerPipeThroughBuffer)(output)) {
283
- setHeaders(res, output);
292
+ (0, util_1.setHeaders)(res, output.headers);
284
293
  res.status(200);
285
294
  res.header('Content-Type', output.encoding);
286
295
  res.end(output.buffer);
287
296
  }
288
- else if ((0, types_1.isHandlerError)(output)) {
289
- next(types_1.XRPCError.fromError(output));
297
+ else if ((0, errors_1.isErrorResult)(output)) {
298
+ next(errors_1.XRPCError.fromError(output));
290
299
  }
291
300
  else {
292
301
  validateResOutput?.(output);
293
302
  res.status(200);
294
- setHeaders(res, output);
303
+ (0, util_1.setHeaders)(res, output.headers);
295
304
  if (output.encoding === 'application/json' ||
296
305
  output.encoding === 'json') {
297
306
  const json = (0, lexicon_1.lexToJson)(output.body);
@@ -316,7 +325,7 @@ class Server {
316
325
  // if the value passed to next is false-y (e.g. null, undefined, 0).
317
326
  // Hence we replace it with an InternalServerError.
318
327
  if (!err) {
319
- next(new types_1.InternalServerError());
328
+ next(new errors_1.InternalServerError());
320
329
  }
321
330
  else {
322
331
  next(err);
@@ -324,28 +333,22 @@ class Server {
324
333
  }
325
334
  };
326
335
  }
327
- async addSubscription(nsid, def, config) {
328
- const assertValidXrpcParams = (params) => this.lex.assertValidXrpcParams(nsid, params);
336
+ async addSubscription(nsid, def, cfg) {
337
+ const paramsVerifier = this.createParamsVerifier(nsid, def);
338
+ const authVerifier = this.createAuthVerifier(cfg);
339
+ const { handler } = cfg;
329
340
  this.subscriptions.set(nsid, new stream_1.XrpcStreamServer({
330
341
  noServer: true,
331
342
  handler: async function* (req, signal) {
332
343
  try {
333
- // authenticate request
334
- const auth = await config.auth?.({ req });
335
- if ((0, types_1.isHandlerError)(auth)) {
336
- throw types_1.XRPCError.fromHandlerError(auth);
337
- }
338
344
  // validate request
339
- let params = (0, util_1.decodeQueryParams)(def, (0, util_1.getQueryParams)(req.url));
340
- try {
341
- params = assertValidXrpcParams(params);
342
- }
343
- catch (e) {
344
- throw new types_1.InvalidRequestError(String(e));
345
- }
345
+ const params = paramsVerifier(req);
346
+ // authenticate request
347
+ const auth = authVerifier
348
+ ? await authVerifier({ req, params })
349
+ : undefined;
346
350
  // stream
347
- const items = config.handler({ req, params, auth, signal });
348
- for await (const item of items) {
351
+ for await (const item of handler({ req, params, auth, signal })) {
349
352
  if (item instanceof stream_1.Frame) {
350
353
  yield item;
351
354
  continue;
@@ -370,7 +373,7 @@ class Server {
370
373
  }
371
374
  }
372
375
  catch (err) {
373
- const xrpcErrPayload = types_1.XRPCError.fromError(err).payload;
376
+ const xrpcErrPayload = errors_1.XRPCError.fromError(err).payload;
374
377
  yield new stream_1.ErrorFrame({
375
378
  error: xrpcErrPayload.error ?? 'Unknown',
376
379
  message: xrpcErrPayload.message,
@@ -385,10 +388,8 @@ class Server {
385
388
  // @ts-ignore the args spread
386
389
  const httpServer = _listen.call(app, ...args);
387
390
  httpServer.on('upgrade', (req, socket, head) => {
388
- const url = new URL(req.url || '', 'http://x');
389
- const sub = url.pathname.startsWith('/xrpc/')
390
- ? this.subscriptions.get(url.pathname.replace('/xrpc/', ''))
391
- : undefined;
391
+ const nsid = req.url ? (0, util_1.extractUrlNsid)(req.url) : undefined;
392
+ const sub = nsid ? this.subscriptions.get(nsid) : undefined;
392
393
  if (!sub)
393
394
  return socket.destroy();
394
395
  sub.wss.handleUpgrade(req, socket, head, (ws) => sub.wss.emit('connection', ws, req));
@@ -396,105 +397,60 @@ class Server {
396
397
  return httpServer;
397
398
  };
398
399
  }
399
- setupRouteRateLimits(nsid, config) {
400
- this.routeRateLimiters[nsid] = [];
401
- for (const limit of this.globalRateLimiters) {
402
- this.routeRateLimiters[nsid].push({
403
- consume: (ctx) => limit.consume(ctx),
404
- reset: (ctx) => limit.reset(ctx),
405
- });
406
- }
407
- if (config.rateLimit) {
408
- const limits = Array.isArray(config.rateLimit)
409
- ? config.rateLimit
410
- : [config.rateLimit];
411
- this.routeRateLimiters[nsid] = [];
412
- for (let i = 0; i < limits.length; i++) {
413
- const limit = limits[i];
414
- const { calcKey, calcPoints } = limit;
415
- if ((0, types_1.isShared)(limit)) {
416
- const rateLimiter = this.sharedRateLimiters[limit.name];
417
- if (rateLimiter) {
418
- this.routeRateLimiters[nsid].push({
419
- consume: (ctx) => rateLimiter.consume(ctx, {
420
- calcKey,
421
- calcPoints,
422
- }),
423
- reset: (ctx) => rateLimiter.reset(ctx, {
424
- calcKey,
425
- }),
426
- });
427
- }
428
- }
429
- else {
430
- const { durationMs, points } = limit;
431
- const rateLimiter = this.options.rateLimits?.creator({
432
- keyPrefix: `nsid-${i}`,
433
- durationMs,
434
- points,
435
- calcKey,
436
- calcPoints,
437
- });
438
- if (rateLimiter) {
439
- this.sharedRateLimiters[nsid] = rateLimiter;
440
- this.routeRateLimiters[nsid].push({
441
- consume: (ctx) => rateLimiter.consume(ctx, {
442
- calcKey,
443
- calcPoints,
444
- }),
445
- reset: (ctx) => rateLimiter.reset(ctx, {
446
- calcKey,
447
- }),
448
- });
449
- }
450
- }
400
+ createRouteRateLimiter(nsid, config) {
401
+ // @NOTE global & shared rate limiters are instantiated with a context of
402
+ // HandlerContext which is compatible (more generic) with the context of
403
+ // this route specific rate limiters (C). For this reason, it's safe to
404
+ // cast these with an `any` context
405
+ const globalRateLimiter = this.globalRateLimiter;
406
+ // No route specific rate limiting configured, use the global rate limiter.
407
+ if (!config.rateLimit)
408
+ return globalRateLimiter;
409
+ const { rateLimits } = this.options;
410
+ // @NOTE Silently ignore creation of route specific rate limiter if the
411
+ // `rateLimits` options was not provided to the constructor.
412
+ if (!rateLimits)
413
+ return globalRateLimiter;
414
+ const { creator, bypass } = rateLimits;
415
+ const rateLimiters = (0, util_1.asArray)(config.rateLimit).map((options, i) => {
416
+ if ((0, types_1.isSharedRateLimitOpts)(options)) {
417
+ const rateLimiter = this.sharedRateLimiters?.get(options.name);
418
+ // The route config references a shared rate limiter that does not
419
+ // exist. This is a configuration error.
420
+ (0, node_assert_1.default)(rateLimiter, `Shared rate limiter "${options.name}" not defined`);
421
+ return rate_limiter_1.WrappedRateLimiter.from(rateLimiter, options);
451
422
  }
452
- }
423
+ else {
424
+ return creator({
425
+ ...options,
426
+ calcKey: options.calcKey ?? defaultKey,
427
+ calcPoints: options.calcPoints ?? defaultPoints,
428
+ keyPrefix: `${nsid}-${i}`,
429
+ });
430
+ }
431
+ });
432
+ // If the route config contains an empty array, use global rate limiter.
433
+ if (!rateLimiters.length)
434
+ return globalRateLimiter;
435
+ // The global rate limiter (if present) should be applied in addition to
436
+ // the route specific rate limiters.
437
+ if (globalRateLimiter)
438
+ rateLimiters.push(globalRateLimiter);
439
+ return rate_limiter_1.RouteRateLimiter.from(rateLimiters, { bypass });
453
440
  }
454
441
  }
455
442
  exports.Server = Server;
456
- function setHeaders(res, result) {
457
- const { headers } = result;
458
- if (headers) {
459
- for (const [name, val] of Object.entries(headers)) {
460
- if (val != null)
461
- res.header(name, val);
462
- }
463
- }
464
- }
465
- const kRequestLocals = Symbol('requestLocals');
466
- function createLocalsMiddleware(nsid) {
467
- return function (req, _res, next) {
468
- const locals = { auth: undefined, nsid };
469
- req[kRequestLocals] = locals;
470
- return next();
471
- };
472
- }
473
- function createAuthMiddleware(verifier) {
474
- return async function (req, res, next) {
475
- try {
476
- const result = await verifier({ req, res });
477
- if ((0, types_1.isHandlerError)(result)) {
478
- throw types_1.XRPCError.fromHandlerError(result);
479
- }
480
- const locals = req[kRequestLocals];
481
- locals.auth = result;
482
- next();
483
- }
484
- catch (err) {
485
- next(err);
486
- }
487
- };
488
- }
489
- function createErrorMiddleware({ errorParser = (err) => types_1.XRPCError.fromError(err), }) {
443
+ function createErrorMiddleware({ errorParser = (err) => errors_1.XRPCError.fromError(err), }) {
490
444
  return (err, req, res, next) => {
491
- const locals = req[kRequestLocals];
492
- const methodSuffix = locals ? ` method ${locals.nsid}` : '';
445
+ const nsid = (0, util_1.extractUrlNsid)(req.originalUrl);
493
446
  const xrpcError = errorParser(err);
494
447
  // Use the request's logger (if available) to benefit from request context
495
448
  // (id, timing) and logging configuration (serialization, etc.).
496
449
  const logger = isPinoHttpRequest(req) ? req.log : logger_1.default;
497
- const isInternalError = xrpcError instanceof types_1.InternalServerError;
450
+ const isInternalError = xrpcError instanceof errors_1.InternalServerError;
451
+ const msgPrefix = isInternalError ? 'unhandled exception' : 'error';
452
+ const msgSuffix = nsid ? `xrpc method ${nsid}` : `${req.method} ${req.url}`;
453
+ const msg = `${msgPrefix} in ${msgSuffix}`;
498
454
  logger.error({
499
455
  // @NOTE Computation of error stack is an expensive operation, so
500
456
  // we strip it for expected errors.
@@ -502,16 +458,14 @@ function createErrorMiddleware({ errorParser = (err) => types_1.XRPCError.fromEr
502
458
  ? err
503
459
  : toSimplifiedErrorLike(err),
504
460
  // XRPC specific properties, for easier browsing of logs
505
- nsid: locals?.nsid,
461
+ nsid,
506
462
  type: xrpcError.type,
507
463
  status: xrpcError.statusCode,
508
464
  payload: xrpcError.payload,
509
465
  // Ensure that the logged item's name is set to LOGGER_NAME, instead of
510
466
  // the name of the pino-http logger, to ensure consistency across logs.
511
467
  name: logger_1.LOGGER_NAME,
512
- }, isInternalError
513
- ? `unhandled exception in xrpc${methodSuffix}`
514
- : `error in xrpc${methodSuffix}`);
468
+ }, msg);
515
469
  if (res.headersSent) {
516
470
  return next(err);
517
471
  }
@@ -538,4 +492,15 @@ function toSimplifiedErrorLike(err) {
538
492
  }
539
493
  return err;
540
494
  }
495
+ function buildRateLimiterOptions({ name, calcKey = defaultKey, calcPoints = defaultPoints, ...desc }) {
496
+ return { ...desc, calcKey, calcPoints, keyPrefix: `rl-${name}` };
497
+ }
498
+ const defaultPoints = () => 1;
499
+ /**
500
+ * @note when using a proxy, ensure headers are getting forwarded correctly:
501
+ * `app.set('trust proxy', true)`
502
+ *
503
+ * @see {@link https://expressjs.com/en/guide/behind-proxies.html}
504
+ */
505
+ const defaultKey = ({ req }) => req.ip;
541
506
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}