expediate 1.0.5 → 1.0.6

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 (73) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/CONTRIBUTING.md +150 -0
  3. package/README.md +278 -779
  4. package/dist/apis.d.ts +372 -12
  5. package/dist/apis.d.ts.map +1 -1
  6. package/dist/apis.js +483 -65
  7. package/dist/apis.js.map +1 -1
  8. package/dist/cjs/index.js +2290 -807
  9. package/dist/git.d.ts +1 -1
  10. package/dist/git.d.ts.map +1 -1
  11. package/dist/git.js +5 -5
  12. package/dist/git.js.map +1 -1
  13. package/dist/http-objects.d.ts +26 -0
  14. package/dist/http-objects.d.ts.map +1 -0
  15. package/dist/http-objects.js +588 -0
  16. package/dist/http-objects.js.map +1 -0
  17. package/dist/index.d.ts +6 -5
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/jwt-auth.d.ts +11 -0
  22. package/dist/jwt-auth.d.ts.map +1 -1
  23. package/dist/jwt-auth.js +9 -9
  24. package/dist/jwt-auth.js.map +1 -1
  25. package/dist/middleware.js +2 -2
  26. package/dist/middleware.js.map +1 -1
  27. package/dist/mimetypes.json +882 -1
  28. package/dist/misc.d.ts +161 -25
  29. package/dist/misc.d.ts.map +1 -1
  30. package/dist/misc.js +228 -80
  31. package/dist/misc.js.map +1 -1
  32. package/dist/openapi.d.ts +156 -13
  33. package/dist/openapi.d.ts.map +1 -1
  34. package/dist/openapi.js +214 -71
  35. package/dist/openapi.js.map +1 -1
  36. package/dist/router-types.d.ts +760 -0
  37. package/dist/router-types.d.ts.map +1 -0
  38. package/dist/router-types.js +23 -0
  39. package/dist/router-types.js.map +1 -0
  40. package/dist/router.d.ts +7 -530
  41. package/dist/router.d.ts.map +1 -1
  42. package/dist/router.js +128 -375
  43. package/dist/router.js.map +1 -1
  44. package/dist/static.d.ts +2 -2
  45. package/dist/static.d.ts.map +1 -1
  46. package/dist/static.js +77 -22
  47. package/dist/static.js.map +1 -1
  48. package/docs/THREAT_MODEL.md +52 -0
  49. package/docs/api-builder-v2-design.md +644 -0
  50. package/docs/api-builder-v3-design.md +397 -0
  51. package/docs/api-builder.md +454 -0
  52. package/docs/benchmark.md +27 -0
  53. package/docs/body-parsing.md +223 -0
  54. package/docs/errors.md +359 -0
  55. package/docs/expediate.png +0 -0
  56. package/docs/git.md +139 -0
  57. package/docs/jwt-auth.md +251 -0
  58. package/docs/logo.svg +12 -0
  59. package/docs/middleware.md +264 -0
  60. package/docs/openapi.md +180 -0
  61. package/docs/router.md +356 -0
  62. package/docs/static.md +128 -0
  63. package/docs/wiki.json +123 -0
  64. package/package.json +30 -8
  65. package/dist/cjs/apis.js +0 -327
  66. package/dist/cjs/git.js +0 -293
  67. package/dist/cjs/jwt-auth.js +0 -532
  68. package/dist/cjs/middleware.js +0 -511
  69. package/dist/cjs/mimetypes.json +0 -1
  70. package/dist/cjs/misc.js +0 -787
  71. package/dist/cjs/openapi.js +0 -485
  72. package/dist/cjs/router.js +0 -898
  73. package/dist/cjs/static.js +0 -669
package/dist/misc.d.ts CHANGED
@@ -1,14 +1,42 @@
1
1
  import { Readable } from 'stream';
2
- import type { RouterRequest, Middleware } from './router.js';
2
+ import type { RouterRequest, RouterResponse, Middleware } from './router.js';
3
3
  /**
4
4
  * A JSON reviver function, matching the second parameter of `JSON.parse`.
5
5
  * Receives each key/value pair during parsing and may return a transformed
6
6
  * value.
7
7
  */
8
8
  type Reviver = (key: string, value: unknown) => unknown;
9
+ /**
10
+ * Selects which requests a body parser handles, based on `Content-Type`.
11
+ *
12
+ * - **string** — a MIME type, matched against the request's media type.
13
+ * Wildcards are supported: `'*\/*'` matches anything and `'application/*'`
14
+ * matches any `application/…` subtype.
15
+ * - **string[]** — matches when any entry matches.
16
+ * - **function** — a predicate receiving the request; return `true` to handle it.
17
+ *
18
+ * Matching is case-insensitive. Requests that do not match are passed through
19
+ * to the next middleware untouched.
20
+ */
21
+ export type BodyTypeMatcher = string | string[] | ((req: RouterRequest) => boolean);
22
+ /**
23
+ * Hook invoked with the raw (already decompressed) body buffer **before** it is
24
+ * parsed. Mirrors Express's `verify` option and is typically used to capture
25
+ * the raw bytes (e.g. for webhook signature verification).
26
+ *
27
+ * Throw to reject the request: the thrown value's `status`/`statusCode` is used
28
+ * as the HTTP status (defaulting to `403`), and its `message` as the body.
29
+ *
30
+ * @param req - The incoming request.
31
+ * @param res - The outgoing response.
32
+ * @param buf - The raw, decompressed body buffer.
33
+ * @param encoding - The charset parsed from the `Content-Type` header.
34
+ */
35
+ export type VerifyFn = (req: RouterRequest, res: RouterResponse, buf: Buffer, encoding: string) => void;
9
36
  /**
10
37
  * Options shared by all body-parsing middleware factories
11
- * ({@link json}, {@link formData}, {@link parseBody}).
38
+ * ({@link json}, {@link formData}, {@link formEncoded}, {@link raw},
39
+ * {@link text}, {@link parseBody}).
12
40
  */
13
41
  export interface BodyOptions {
14
42
  /**
@@ -31,15 +59,32 @@ export interface BodyOptions {
31
59
  reviver?: Reviver | null;
32
60
  /**
33
61
  * When `true` (default), JSON parsing is restricted to objects and arrays.
34
- * Bare primitives (strings, numbers, booleans) at the top level are
35
- * rejected. Has no effect on non-JSON bodies.
62
+ * Bare primitives (strings, numbers, booleans, or `null`) at the top level
63
+ * are rejected with `400 Bad Request`. Has no effect on non-JSON bodies.
36
64
  *
37
- * @remarks Currently reserved for future enforcement; not yet applied.
65
+ * @remarks Enforced in `readBodyAsJson` (tagged `FIX-10`).
38
66
  */
39
67
  strict?: boolean;
68
+ /**
69
+ * Override which requests this parser handles, based on `Content-Type`.
70
+ * When omitted, each factory uses its natural default (e.g. {@link json}
71
+ * defaults to `'application/json'`). See {@link BodyTypeMatcher}.
72
+ */
73
+ type?: BodyTypeMatcher;
74
+ /**
75
+ * Optional hook called with the raw body buffer before parsing.
76
+ * Throw to reject the request. See {@link VerifyFn}.
77
+ */
78
+ verify?: VerifyFn | null;
40
79
  }
41
- /** Resolved body options with all fields guaranteed to be present. */
42
- type ResolvedBodyOptions = Required<BodyOptions>;
80
+ /**
81
+ * Resolved body options with all fields guaranteed to be present.
82
+ * `type` may be `null` (match any content type, used by {@link parseBody}).
83
+ */
84
+ type ResolvedBodyOptions = Required<Omit<BodyOptions, 'type' | 'verify'>> & {
85
+ type: BodyTypeMatcher | null;
86
+ verify: VerifyFn | null;
87
+ };
43
88
  /**
44
89
  * Options for the {@link logger} middleware factory.
45
90
  */
@@ -118,11 +163,25 @@ export interface FormPart {
118
163
  * @returns A Node.js-compatible encoding name (e.g. `'utf8'`, `'iso-8859-1'`).
119
164
  */
120
165
  export declare function extractCharset(contentType: string): string;
121
- export type BodyContent = {
166
+ export interface BodyContent {
122
167
  mimetype: string;
123
168
  content: Buffer;
124
- };
125
- export declare function readReqBody(req: RouterRequest, opts: ResolvedBodyOptions, mimetype: string | null): Promise<BodyContent | null>;
169
+ }
170
+ /**
171
+ * Promise-based body collector used by the `req.json()`, `req.text()`, and
172
+ * `req.formData()` request helpers.
173
+ *
174
+ * @param req - The incoming request.
175
+ * @param opts - Resolved body-parsing options.
176
+ * @param mimetype - Expected MIME type, or `null` to accept any content type.
177
+ * @param res - The outgoing response, required only so an `opts.verify`
178
+ * hook receives the Express-style `(req, res, buf, encoding)`
179
+ * arguments. When omitted, the verify hook is skipped.
180
+ * @returns The collected `{ mimetype, content }`, or `null` for an empty body.
181
+ * Rejects with `{ status, message }` on size, encoding, type, or
182
+ * verify-hook failures.
183
+ */
184
+ export declare function readReqBody(req: RouterRequest, opts: ResolvedBodyOptions, mimetype: string | null, res?: RouterResponse): Promise<BodyContent | null>;
126
185
  /**
127
186
  * Parse a raw `multipart/form-data` body buffer into an array of
128
187
  * {@link FormPart} objects.
@@ -151,23 +210,18 @@ export declare function readReqBody(req: RouterRequest, opts: ResolvedBodyOption
151
210
  */
152
211
  export declare function parseMultipartBody(contentType: string, data: Buffer): FormPart[];
153
212
  /**
154
- * Middleware factory that parses a `application/json` request body and
213
+ * Middleware factory that parses an `application/json` request body and
155
214
  * assigns the parsed value to `req.body`.
156
215
  *
157
- * Also attaches a `res.json(data)` helper to the response object so that
158
- * handlers can send JSON responses conveniently:
159
- * ```ts
160
- * res.json({ ok: true });
161
- * ```
162
- *
163
216
  * Behaviour:
164
217
  * - Requests without a body (`Content-Length: 0` or absent) are passed
165
218
  * through to `next()` without touching `req.body`.
219
+ * - Requests whose `Content-Type` is not `application/json` are also passed
220
+ * through to `next()` unchanged, allowing other parsers to handle them
221
+ * (Express-compatible composable behaviour).
166
222
  * - Bodies larger than `opts.limit` receive **413 Content Too Large**.
167
223
  * - Bodies with an unsupported `Content-Encoding` receive
168
224
  * **415 Unsupported Media Type**.
169
- * - Bodies whose `Content-Type` is not `application/json` receive
170
- * **415 Unsupported Media Type**.
171
225
  * - Parse errors receive **500 Internal Server Error**.
172
226
  *
173
227
  * @param opts - Optional configuration (see {@link BodyOptions}).
@@ -203,8 +257,8 @@ export declare function formData(opts?: BodyOptions): Middleware;
203
257
  * Behaviour:
204
258
  * - Requests without a body are passed through to `next()`.
205
259
  * - Bodies larger than `opts.limit` receive **413 Content Too Large**.
206
- * - Bodies whose `Content-Type` is not `application/x-www-form-urlencoded`
207
- * receive **415 Unsupported Media Type**.
260
+ * - Requests whose `Content-Type` is not `application/x-www-form-urlencoded`
261
+ * are passed through to `next()` unchanged (Express-compatible composable behaviour).
208
262
  * - Parse errors receive **400 Bad Request**.
209
263
  *
210
264
  * @param opts - Optional configuration (see {@link BodyOptions}).
@@ -238,13 +292,55 @@ export declare function formEncoded(opts?: BodyOptions): Middleware;
238
292
  * @returns An Express-compatible middleware function.
239
293
  */
240
294
  export declare function parseBody(opts?: BodyOptions): Middleware;
295
+ /**
296
+ * Middleware factory that collects the request body into a `Buffer` and assigns
297
+ * it to `req.body` without any parsing.
298
+ *
299
+ * Behaviour:
300
+ * - Defaults to handling `application/octet-stream`; override with `opts.type`
301
+ * (e.g. `raw({ type: '*\/*' })` to capture every body).
302
+ * - Requests without a body are passed through to `next()`.
303
+ * - Requests whose `Content-Type` does not match are passed through unchanged.
304
+ * - Bodies larger than `opts.limit` receive **413 Content Too Large**.
305
+ * - Bodies with an unsupported `Content-Encoding` receive
306
+ * **415 Unsupported Media Type**.
307
+ *
308
+ * @param opts - Optional configuration (see {@link BodyOptions}).
309
+ * @returns An Express-compatible middleware function.
310
+ *
311
+ * @example
312
+ * ```ts
313
+ * app.post('/webhook', raw({ type: 'application/json' }), (req, res) => {
314
+ * const raw = req.body as Buffer; // untouched bytes
315
+ * res.send('ok');
316
+ * });
317
+ * ```
318
+ */
319
+ export declare function raw(opts?: BodyOptions): Middleware;
320
+ /**
321
+ * Middleware factory that decodes the request body as text (using the charset
322
+ * from the `Content-Type` header) and assigns the resulting string to
323
+ * `req.body`.
324
+ *
325
+ * Behaviour:
326
+ * - Defaults to handling `text/plain`; override with `opts.type`
327
+ * (e.g. `text({ type: 'text/*' })`).
328
+ * - Requests without a body are passed through to `next()`.
329
+ * - Requests whose `Content-Type` does not match are passed through unchanged.
330
+ * - Bodies larger than `opts.limit` receive **413 Content Too Large**.
331
+ * - Decoding errors receive **500 Internal Server Error**.
332
+ *
333
+ * @param opts - Optional configuration (see {@link BodyOptions}).
334
+ * @returns An Express-compatible middleware function.
335
+ */
336
+ export declare function text(opts?: BodyOptions): Middleware;
241
337
  /**
242
338
  * A single part from a `multipart/form-data` body, with its content exposed
243
339
  * as a Node.js `Readable` stream instead of a pre-collected `Buffer`.
244
340
  *
245
341
  * Yielded by {@link streamFormData}.
246
342
  */
247
- export type FormPartStream = {
343
+ export interface FormPartStream {
248
344
  /**
249
345
  * Raw part headers (e.g. `Content-Disposition`, `Content-Type`).
250
346
  * Keys are lowercased; values are trimmed.
@@ -255,7 +351,7 @@ export type FormPartStream = {
255
351
  * part content as a single chunk and then ends.
256
352
  */
257
353
  stream: Readable;
258
- };
354
+ }
259
355
  /**
260
356
  * Async generator that yields each part of a `multipart/form-data` request
261
357
  * body as a {@link FormPartStream} object.
@@ -320,7 +416,25 @@ export declare function streamFormData(req: RouterRequest, opts?: BodyOptions):
320
416
  * ```
321
417
  */
322
418
  export declare function logger(opts?: Partial<LoggerOptions>): Middleware;
323
- export type CorsOptions = {
419
+ /**
420
+ * Configuration for the {@link cors} middleware factory.
421
+ */
422
+ export interface CorsOptions {
423
+ /**
424
+ * Value(s) allowed for `Access-Control-Allow-Origin`.
425
+ *
426
+ * - A single `string` (including `'*'`) is sent as-is — there's only one
427
+ * possible value, so no per-request matching is needed.
428
+ * - A `string[]` is treated as an allow-list: the request's `Origin` header
429
+ * is compared against each entry, and only the matching entry is echoed
430
+ * back as the (single) header value. `res.setHeader()` does not join
431
+ * array values for this header — sending the array directly would make
432
+ * Node emit one `Access-Control-Allow-Origin` line per element, which
433
+ * violates the CORS spec (only one value is permitted there) and causes
434
+ * browsers to reject the response outright.
435
+ * - When the request's `Origin` is not in the array, no match is sent and
436
+ * `Access-Control-Allow-Origin` is omitted, so the browser denies access.
437
+ */
324
438
  origin: string | string[];
325
439
  allowHeaders: string | string[];
326
440
  allowMethods: string | string[];
@@ -329,7 +443,29 @@ export type CorsOptions = {
329
443
  vary: string | string[] | undefined;
330
444
  optionsStatus: number;
331
445
  preflight: ((req: RouterRequest) => boolean) | undefined;
332
- };
446
+ }
447
+ /**
448
+ * Middleware factory that adds Cross-Origin Resource Sharing (CORS) response
449
+ * headers and answers `OPTIONS` preflight requests.
450
+ *
451
+ * CORS headers are only set when the request carries an `Origin` header
452
+ * (browser-only; server-to-server requests typically omit it). When
453
+ * {@link CorsOptions.origin} is an array, the request's `Origin` is matched
454
+ * against it via {@link resolveAllowOrigin} and only the matching value is
455
+ * echoed back — see that option's documentation for why a plain array cannot
456
+ * be passed straight to `res.setHeader()`.
457
+ *
458
+ * @param opts - Optional configuration (see {@link CorsOptions}). All fields
459
+ * are optional; unset fields fall back to permissive defaults
460
+ * (wildcard origin, no credentials, no max-age).
461
+ * @returns An Express-compatible middleware function.
462
+ *
463
+ * @example
464
+ * ```ts
465
+ * // Allow exactly two known origins, denying everything else
466
+ * app.use(cors({ origin: ['https://app.example.com', 'https://admin.example.com'] }));
467
+ * ```
468
+ */
333
469
  export declare function cors(opts?: Partial<CorsOptions>): Middleware;
334
470
  declare const _default: {
335
471
  json: typeof json;
@@ -1 +1 @@
1
- {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../src/misc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../src/misc.ts"],"names":[],"mappings":"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"}