@c9up/ream 0.2.5 → 0.2.7
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.
- package/README.md +3 -9
- package/dist/HttpKernel.js +2 -2
- package/dist/HttpKernel.js.map +1 -1
- package/dist/Ignitor.d.ts +3 -3
- package/dist/Ignitor.d.ts.map +1 -1
- package/dist/Ignitor.js +50 -0
- package/dist/Ignitor.js.map +1 -1
- package/dist/bootstrap/hyper-server.js.map +1 -1
- package/dist/helpers/compose.d.ts +30 -0
- package/dist/helpers/compose.d.ts.map +1 -0
- package/dist/helpers/compose.js +27 -0
- package/dist/helpers/compose.js.map +1 -0
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/index.js +1 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/is.d.ts +69 -16
- package/dist/helpers/is.d.ts.map +1 -1
- package/dist/helpers/is.js +80 -20
- package/dist/helpers/is.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/middleware/Pipeline.d.ts +9 -3
- package/dist/middleware/Pipeline.d.ts.map +1 -1
- package/dist/middleware/Pipeline.js +10 -4
- package/dist/middleware/Pipeline.js.map +1 -1
- package/dist/rpc/RpcRouter.js +2 -2
- package/dist/rpc/RpcRouter.js.map +1 -1
- package/dist/scheduler/Scheduler.d.ts.map +1 -1
- package/dist/scheduler/Scheduler.js +12 -4
- package/dist/scheduler/Scheduler.js.map +1 -1
- package/dist/services/app.d.ts +6 -0
- package/dist/services/app.d.ts.map +1 -1
- package/dist/services/app.js +8 -0
- package/dist/services/app.js.map +1 -1
- package/dist/services/config.d.ts +15 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +18 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/encryption.d.ts +23 -0
- package/dist/services/encryption.d.ts.map +1 -0
- package/dist/services/encryption.js +33 -0
- package/dist/services/encryption.js.map +1 -0
- package/dist/services/logger.d.ts +29 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +40 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/urlBuilder.d.ts +21 -0
- package/dist/services/urlBuilder.d.ts.map +1 -0
- package/dist/services/urlBuilder.js +34 -0
- package/dist/services/urlBuilder.js.map +1 -0
- package/dist/session/Session.js.map +1 -1
- package/dist/testing/ApiResponse.d.ts +44 -44
- package/dist/testing/ApiResponse.d.ts.map +1 -1
- package/dist/testing/ApiResponse.js +48 -48
- package/dist/testing/ApiResponse.js.map +1 -1
- package/dist/testing/RequestBuilder.d.ts +39 -39
- package/dist/testing/RequestBuilder.d.ts.map +1 -1
- package/dist/testing/RequestBuilder.js +49 -49
- package/dist/testing/RequestBuilder.js.map +1 -1
- package/dist/testing/TestClient.d.ts +23 -8
- package/dist/testing/TestClient.d.ts.map +1 -1
- package/dist/testing/TestClient.js +52 -11
- package/dist/testing/TestClient.js.map +1 -1
- package/dist/testing/testUtils.d.ts +62 -0
- package/dist/testing/testUtils.d.ts.map +1 -0
- package/dist/testing/testUtils.js +77 -0
- package/dist/testing/testUtils.js.map +1 -0
- package/events.win32-x64-msvc.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +21 -1
- package/scheduler.win32-x64-msvc.node +0 -0
- package/src/HttpKernel.ts +2 -2
- package/src/Ignitor.ts +59 -4
- package/src/bootstrap/hyper-server.ts +1 -1
- package/src/helpers/compose.ts +84 -0
- package/src/helpers/index.ts +1 -0
- package/src/helpers/is.ts +88 -22
- package/src/index.ts +2 -2
- package/src/middleware/Pipeline.ts +10 -4
- package/src/rpc/RpcRouter.ts +2 -2
- package/src/scheduler/Scheduler.ts +10 -4
- package/src/services/app.ts +9 -0
- package/src/services/config.ts +24 -0
- package/src/services/encryption.ts +42 -0
- package/src/services/logger.ts +49 -0
- package/src/services/urlBuilder.ts +41 -0
- package/src/session/Session.ts +2 -2
- package/src/testing/ApiResponse.ts +52 -52
- package/src/testing/RequestBuilder.ts +55 -55
- package/src/testing/TestClient.ts +55 -13
- package/src/testing/testUtils.ts +90 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cookie/value signing singleton service.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import encryption from '@c9up/ream/services/encryption'
|
|
6
|
+
* const signed = encryption.sign('payload')
|
|
7
|
+
*
|
|
8
|
+
* Registered only when `APP_KEY` is set — there is nothing to sign with
|
|
9
|
+
* otherwise — so the not-ready message names that rather than the boot phase.
|
|
10
|
+
*/
|
|
11
|
+
import { createServiceProxy } from './createServiceProxy.js';
|
|
12
|
+
let instance;
|
|
13
|
+
/** @internal Set the signer (called by Ignitor once APP_KEY is validated). */
|
|
14
|
+
export function setEncryption(signer) {
|
|
15
|
+
instance = signer;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* @internal Unset the locator IF it still points at `signer` (called by
|
|
19
|
+
* Ignitor.stop()). Ownership-guarded — see services/app.ts.
|
|
20
|
+
*/
|
|
21
|
+
export function clearEncryption(signer) {
|
|
22
|
+
if (instance === signer)
|
|
23
|
+
instance = undefined;
|
|
24
|
+
}
|
|
25
|
+
/** @internal Get the signer directly. */
|
|
26
|
+
export function getEncryption() {
|
|
27
|
+
return instance;
|
|
28
|
+
}
|
|
29
|
+
const encryption = createServiceProxy(() => instance, '[E_MISSING_APP_KEY] Encryption accessed before it was registered. ' +
|
|
30
|
+
'It exists only when APP_KEY is set (>= 16 characters) — check the ' +
|
|
31
|
+
'environment before reaching for it, or you are reading it before boot.');
|
|
32
|
+
export default encryption;
|
|
33
|
+
//# sourceMappingURL=encryption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/services/encryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,IAAI,QAAkC,CAAA;AAEtC,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,QAAQ,GAAG,MAAM,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,IAAI,QAAQ,KAAK,MAAM;QAAE,QAAQ,GAAG,SAAS,CAAA;AAC/C,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,GAAiB,kBAAkB,CACjD,GAAG,EAAE,CAAC,QAAQ,EACd,oEAAoE;IAClE,oEAAoE;IACpE,wEAAwE,CAC3E,CAAA;AAED,eAAe,UAAU,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application logger singleton service.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import logger from '@c9up/ream/services/logger'
|
|
6
|
+
* logger.info('user signed in', { userId })
|
|
7
|
+
*
|
|
8
|
+
* ream does not implement the logger — it declares the contract
|
|
9
|
+
* ({@link ContextLogger}) and reads whatever a provider bound as `'logger'`.
|
|
10
|
+
* `@c9up/spectrum` is the implementation in this universe, the way `hash` is
|
|
11
|
+
* sigil's and validation is rune's.
|
|
12
|
+
*
|
|
13
|
+
* `ctx.logger` stays the right thing to use inside a request: it is
|
|
14
|
+
* correlation-scoped. This is for everywhere else — a provider, a scheduled
|
|
15
|
+
* task, a console command — where there is no request to scope to.
|
|
16
|
+
*/
|
|
17
|
+
import type { ChildLoggerSource } from '../http/HttpContext.js';
|
|
18
|
+
/** @internal Set the logger (called by Ignitor once providers have booted). */
|
|
19
|
+
export declare function setLogger(logger: ChildLoggerSource): void;
|
|
20
|
+
/**
|
|
21
|
+
* @internal Unset the locator IF it still points at `logger` (called by
|
|
22
|
+
* Ignitor.stop()). Ownership-guarded — see services/app.ts.
|
|
23
|
+
*/
|
|
24
|
+
export declare function clearLogger(logger: ChildLoggerSource): void;
|
|
25
|
+
/** @internal Get the logger directly. */
|
|
26
|
+
export declare function getLogger(): ChildLoggerSource | undefined;
|
|
27
|
+
declare const logger: ChildLoggerSource;
|
|
28
|
+
export default logger;
|
|
29
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAK/D,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAEzD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAE3D;AAED,yCAAyC;AACzC,wBAAgB,SAAS,IAAI,iBAAiB,GAAG,SAAS,CAEzD;AAED,QAAA,MAAM,MAAM,EAAE,iBAMb,CAAA;AAED,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application logger singleton service.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import logger from '@c9up/ream/services/logger'
|
|
6
|
+
* logger.info('user signed in', { userId })
|
|
7
|
+
*
|
|
8
|
+
* ream does not implement the logger — it declares the contract
|
|
9
|
+
* ({@link ContextLogger}) and reads whatever a provider bound as `'logger'`.
|
|
10
|
+
* `@c9up/spectrum` is the implementation in this universe, the way `hash` is
|
|
11
|
+
* sigil's and validation is rune's.
|
|
12
|
+
*
|
|
13
|
+
* `ctx.logger` stays the right thing to use inside a request: it is
|
|
14
|
+
* correlation-scoped. This is for everywhere else — a provider, a scheduled
|
|
15
|
+
* task, a console command — where there is no request to scope to.
|
|
16
|
+
*/
|
|
17
|
+
import { createServiceProxy } from './createServiceProxy.js';
|
|
18
|
+
let instance;
|
|
19
|
+
/** @internal Set the logger (called by Ignitor once providers have booted). */
|
|
20
|
+
export function setLogger(logger) {
|
|
21
|
+
instance = logger;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @internal Unset the locator IF it still points at `logger` (called by
|
|
25
|
+
* Ignitor.stop()). Ownership-guarded — see services/app.ts.
|
|
26
|
+
*/
|
|
27
|
+
export function clearLogger(logger) {
|
|
28
|
+
if (instance === logger)
|
|
29
|
+
instance = undefined;
|
|
30
|
+
}
|
|
31
|
+
/** @internal Get the logger directly. */
|
|
32
|
+
export function getLogger() {
|
|
33
|
+
return instance;
|
|
34
|
+
}
|
|
35
|
+
const logger = createServiceProxy(() => instance, 'Logger accessed before initialization. ' +
|
|
36
|
+
'ream declares the contract but implements no logger — install one (`@c9up/spectrum`) ' +
|
|
37
|
+
"and register its provider, which binds it as 'logger'. Inside a request, prefer " +
|
|
38
|
+
'`ctx.logger`, which is scoped to the correlation id.');
|
|
39
|
+
export default logger;
|
|
40
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,IAAI,QAAuC,CAAA;AAE3C,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAC,MAAyB;IACjD,QAAQ,GAAG,MAAM,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAyB;IACnD,IAAI,QAAQ,KAAK,MAAM;QAAE,QAAQ,GAAG,SAAS,CAAA;AAC/C,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,SAAS;IACvB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,MAAM,GAAsB,kBAAkB,CAClD,GAAG,EAAE,CAAC,QAAQ,EACd,yCAAyC;IACvC,uFAAuF;IACvF,kFAAkF;IAClF,sDAAsD,CACzD,CAAA;AAED,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Named-route URL helpers, as free functions.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { urlFor, signedUrlFor } from '@c9up/ream/services/urlBuilder'
|
|
6
|
+
* const href = urlFor('users.show', { id: '42' })
|
|
7
|
+
* const link = signedUrlFor('email.verify', { id: '42' }, { expiresIn: '1h' })
|
|
8
|
+
*
|
|
9
|
+
* Both delegate to the router — the same code `router.urlFor` /
|
|
10
|
+
* `router.makeSignedUrl` run — so a route renamed in one place cannot mean two
|
|
11
|
+
* things. They exist as functions rather than as another proxy object because
|
|
12
|
+
* that is all there is to the URL builder: two calls, no state.
|
|
13
|
+
*
|
|
14
|
+
* `signedUrlFor` needs an APP_KEY-backed signer and says so if there is none.
|
|
15
|
+
*/
|
|
16
|
+
import type { SignedUrlOptions } from '../router/Router.js';
|
|
17
|
+
/** Generate a URL from a named route, filling `:param` placeholders. */
|
|
18
|
+
export declare function urlFor(name: string, params?: Record<string, string>): string;
|
|
19
|
+
/** Generate a tamper-proof signed URL for a named route. */
|
|
20
|
+
export declare function signedUrlFor(name: string, params?: Record<string, string>, options?: SignedUrlOptions): string;
|
|
21
|
+
//# sourceMappingURL=urlBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlBuilder.d.ts","sourceRoot":"","sources":["../../src/services/urlBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAQ3D,wEAAwE;AACxE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAI5E;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM,CAIR"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Named-route URL helpers, as free functions.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { urlFor, signedUrlFor } from '@c9up/ream/services/urlBuilder'
|
|
6
|
+
* const href = urlFor('users.show', { id: '42' })
|
|
7
|
+
* const link = signedUrlFor('email.verify', { id: '42' }, { expiresIn: '1h' })
|
|
8
|
+
*
|
|
9
|
+
* Both delegate to the router — the same code `router.urlFor` /
|
|
10
|
+
* `router.makeSignedUrl` run — so a route renamed in one place cannot mean two
|
|
11
|
+
* things. They exist as functions rather than as another proxy object because
|
|
12
|
+
* that is all there is to the URL builder: two calls, no state.
|
|
13
|
+
*
|
|
14
|
+
* `signedUrlFor` needs an APP_KEY-backed signer and says so if there is none.
|
|
15
|
+
*/
|
|
16
|
+
import { getRouter } from './router.js';
|
|
17
|
+
const NOT_READY = 'URL builder used before initialization. ' +
|
|
18
|
+
'Routes are registered during the boot phase — build URLs from inside a ' +
|
|
19
|
+
'controller, a view, or a preload, not at module top level.';
|
|
20
|
+
/** Generate a URL from a named route, filling `:param` placeholders. */
|
|
21
|
+
export function urlFor(name, params) {
|
|
22
|
+
const router = getRouter();
|
|
23
|
+
if (!router)
|
|
24
|
+
throw new Error(NOT_READY);
|
|
25
|
+
return router.urlFor(name, params);
|
|
26
|
+
}
|
|
27
|
+
/** Generate a tamper-proof signed URL for a named route. */
|
|
28
|
+
export function signedUrlFor(name, params, options) {
|
|
29
|
+
const router = getRouter();
|
|
30
|
+
if (!router)
|
|
31
|
+
throw new Error(NOT_READY);
|
|
32
|
+
return router.makeSignedUrl(name, params, options);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=urlBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlBuilder.js","sourceRoot":"","sources":["../../src/services/urlBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,SAAS,GACb,0CAA0C;IAC1C,yEAAyE;IACzE,4DAA4D,CAAA;AAE9D,wEAAwE;AACxE,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,MAA+B;IAClE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAA;IACvC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AACpC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,MAA+B,EAC/B,OAA0B;IAE1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAA;IACvC,OAAO,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/session/Session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAwC9D,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,OAAO,CACL,KAAK,IAAI,MAAM;QACf,
|
|
1
|
+
{"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/session/Session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Rich HTTP test response —
|
|
2
|
+
* Rich HTTP test response — `helix`'s `ApiResponse` parity.
|
|
3
3
|
*
|
|
4
|
-
* Wraps the raw {@link TestResponse} and exposes the full
|
|
4
|
+
* Wraps the raw {@link TestResponse} and exposes the full helix response surface:
|
|
5
5
|
* accessor METHODS (`status()`, `headers()`, `body()`, `text()`, `header()`,
|
|
6
|
-
* `cookies()`, `redirects()`, `error()`, …) matching
|
|
6
|
+
* `cookies()`, `redirects()`, `error()`, …) matching helix exactly, the complete
|
|
7
7
|
* `assert*` family, response `dump*()` debuggers, and `macro()`/`getter()` for
|
|
8
8
|
* consumer extension.
|
|
9
9
|
*
|
|
10
|
-
* `json()` is kept as an additive convenience (not in
|
|
11
|
-
* parity —
|
|
10
|
+
* `json()` is kept as an additive convenience (not in helix, but harmless for
|
|
11
|
+
* parity — helix code never calls it) so `res.json()` call sites need no change.
|
|
12
12
|
*/
|
|
13
13
|
import type { Dict } from '../types/helpers.js';
|
|
14
14
|
/** The raw response shape the low-level sender produces. */
|
|
@@ -39,7 +39,7 @@ export interface ResponseCookie {
|
|
|
39
39
|
value: string;
|
|
40
40
|
[attr: string]: string;
|
|
41
41
|
}
|
|
42
|
-
/** A file parsed from a `multipart/form-data` response —
|
|
42
|
+
/** A file parsed from a `multipart/form-data` response — helix `files()` entry. */
|
|
43
43
|
export interface ResponseFile {
|
|
44
44
|
/** The form field name. */
|
|
45
45
|
fieldName: string;
|
|
@@ -52,7 +52,7 @@ export interface ResponseFile {
|
|
|
52
52
|
/** The raw file bytes. */
|
|
53
53
|
content: Buffer;
|
|
54
54
|
}
|
|
55
|
-
/** The
|
|
55
|
+
/** The helix error object returned by `response.error()`. */
|
|
56
56
|
export interface ResponseError {
|
|
57
57
|
/** The error status code (>= 400). */
|
|
58
58
|
status: number;
|
|
@@ -61,13 +61,13 @@ export interface ResponseError {
|
|
|
61
61
|
}
|
|
62
62
|
/** Extra context the builder threads into the response. */
|
|
63
63
|
export interface ApiResponseMeta {
|
|
64
|
-
/** The (final) request method —
|
|
64
|
+
/** The (final) request method — helix `response.method()`. */
|
|
65
65
|
method?: string;
|
|
66
|
-
/** URLs followed when redirects were configured —
|
|
66
|
+
/** URLs followed when redirects were configured — helix `response.redirects()`. */
|
|
67
67
|
redirects?: string[];
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
70
|
-
* Every
|
|
70
|
+
* Every helix status-shortcut assertion, as `methodName → code`. Consumed to
|
|
71
71
|
* generate the `assert*` methods on both {@link ApiResponse} and the builder,
|
|
72
72
|
* so the two surfaces never drift.
|
|
73
73
|
*/
|
|
@@ -98,80 +98,80 @@ export declare const STATUS_ASSERTIONS: {
|
|
|
98
98
|
readonly assertUnprocessableEntity: 422;
|
|
99
99
|
readonly assertLocked: 423;
|
|
100
100
|
readonly assertTooManyRequests: 429;
|
|
101
|
-
/** ream extra (not in
|
|
101
|
+
/** ream extra (not in helix's list, kept for convenience). */
|
|
102
102
|
readonly assertInternalServerError: 500;
|
|
103
103
|
};
|
|
104
104
|
/**
|
|
105
105
|
* The rich response. Constructed by the request builder from a raw
|
|
106
|
-
* {@link TestResponse}; exposes the
|
|
106
|
+
* {@link TestResponse}; exposes the helix accessor + assertion surface.
|
|
107
107
|
*
|
|
108
108
|
* PARITY NOTE: the status code / headers / raw text are METHODS — `status()`,
|
|
109
109
|
* `headers()`, `text()` — and `body()` returns the content-type-parsed body,
|
|
110
|
-
* exactly like
|
|
110
|
+
* exactly like helix. `json()` is kept as an additive convenience.
|
|
111
111
|
*/
|
|
112
112
|
export declare class ApiResponse {
|
|
113
113
|
#private;
|
|
114
114
|
constructor(raw: TestResponse, meta?: ApiResponseMeta);
|
|
115
|
-
/** HTTP status code —
|
|
115
|
+
/** HTTP status code — helix `status()`. */
|
|
116
116
|
status(): number;
|
|
117
|
-
/** Status class digit (2 for 2xx, 4 for 4xx, …) —
|
|
117
|
+
/** Status class digit (2 for 2xx, 4 for 4xx, …) — helix `statusType()`. */
|
|
118
118
|
statusType(): number;
|
|
119
|
-
/** All response headers (lower-cased keys) —
|
|
119
|
+
/** All response headers (lower-cased keys) — helix `headers()`. */
|
|
120
120
|
headers(): Dict;
|
|
121
|
-
/** A single response header value —
|
|
121
|
+
/** A single response header value — helix `header(name)`. */
|
|
122
122
|
header(name: string): string | undefined;
|
|
123
|
-
/** Raw response text —
|
|
123
|
+
/** Raw response text — helix `text()`. */
|
|
124
124
|
text(): string;
|
|
125
125
|
/**
|
|
126
|
-
* The parsed response body —
|
|
126
|
+
* The parsed response body — helix `body()`. Parses by `Content-Type`:
|
|
127
127
|
* `application/json` → object, `application/x-www-form-urlencoded` → object,
|
|
128
128
|
* `multipart/form-data` → the non-file fields (files come from {@link files});
|
|
129
129
|
* otherwise the raw text. A registered parser (`ApiResponse.addParser`) for the
|
|
130
130
|
* content-type takes precedence.
|
|
131
131
|
*/
|
|
132
132
|
body(): unknown;
|
|
133
|
-
/** Convenience JSON parse (additive; not in
|
|
133
|
+
/** Convenience JSON parse (additive; not in helix). */
|
|
134
134
|
json<T = unknown>(): T;
|
|
135
|
-
/** The request method that produced this response —
|
|
135
|
+
/** The request method that produced this response — helix `method()`. */
|
|
136
136
|
method(): string;
|
|
137
|
-
/** Response `Content-Type` without parameters —
|
|
137
|
+
/** Response `Content-Type` without parameters — helix `type()`. */
|
|
138
138
|
type(): string | undefined;
|
|
139
|
-
/** Charset from `Content-Type`, if any —
|
|
139
|
+
/** Charset from `Content-Type`, if any — helix `charset()`. */
|
|
140
140
|
charset(): string | undefined;
|
|
141
|
-
/** All response cookies, parsed from `Set-Cookie` —
|
|
141
|
+
/** All response cookies, parsed from `Set-Cookie` — helix `cookies()`. */
|
|
142
142
|
cookies(): Record<string, ResponseCookie>;
|
|
143
|
-
/** A single parsed response cookie —
|
|
143
|
+
/** A single parsed response cookie — helix `cookie(name)`. */
|
|
144
144
|
cookie(name: string): ResponseCookie | undefined;
|
|
145
|
-
/** URLs followed for a redirected request —
|
|
145
|
+
/** URLs followed for a redirected request — helix `redirects()`. */
|
|
146
146
|
redirects(): string[];
|
|
147
|
-
/** Parsed `Link` header (`rel → url`) —
|
|
147
|
+
/** Parsed `Link` header (`rel → url`) — helix `links()`. */
|
|
148
148
|
links(): Record<string, string>;
|
|
149
149
|
/**
|
|
150
|
-
* Files parsed from a `multipart/form-data` response —
|
|
150
|
+
* Files parsed from a `multipart/form-data` response — helix `files()`. Each
|
|
151
151
|
* entry carries the field name, filename, content-type and the raw bytes.
|
|
152
152
|
* Empty for non-multipart responses.
|
|
153
153
|
*/
|
|
154
154
|
files(): Record<string, ResponseFile>;
|
|
155
|
-
/** Whether the response carries a body —
|
|
155
|
+
/** Whether the response carries a body — helix `hasBody()`. */
|
|
156
156
|
hasBody(): boolean;
|
|
157
|
-
/** Whether the status is an error (>= 400) —
|
|
157
|
+
/** Whether the status is an error (>= 400) — helix `hasError()`. */
|
|
158
158
|
hasError(): boolean;
|
|
159
|
-
/** Whether the status is a server error (>= 500) —
|
|
159
|
+
/** Whether the status is a server error (>= 500) — helix `hasFatalError()`. */
|
|
160
160
|
hasFatalError(): boolean;
|
|
161
161
|
/**
|
|
162
|
-
* The error object when the response is an error, else `undefined` —
|
|
162
|
+
* The error object when the response is an error, else `undefined` — helix
|
|
163
163
|
* `error()`. Exposes `.status` and `.text` (superagent-style).
|
|
164
164
|
*/
|
|
165
165
|
error(): ResponseError | undefined;
|
|
166
|
-
/** Print status + headers + body to stderr —
|
|
166
|
+
/** Print status + headers + body to stderr — helix `response.dump()`. */
|
|
167
167
|
dump(): this;
|
|
168
|
-
/** Print only the response body —
|
|
168
|
+
/** Print only the response body — helix `response.dumpBody()`. */
|
|
169
169
|
dumpBody(): this;
|
|
170
|
-
/** Print only the response headers —
|
|
170
|
+
/** Print only the response headers — helix `response.dumpHeaders()`. */
|
|
171
171
|
dumpHeaders(): this;
|
|
172
|
-
/** Print only the response cookies —
|
|
172
|
+
/** Print only the response cookies — helix `response.dumpCookies()`. */
|
|
173
173
|
dumpCookies(): this;
|
|
174
|
-
/** Print the error object, if any —
|
|
174
|
+
/** Print the error object, if any — helix `response.dumpError()`. */
|
|
175
175
|
dumpError(): this;
|
|
176
176
|
assertStatus(code: number): this;
|
|
177
177
|
assertHeader(name: string, value?: string | RegExp): this;
|
|
@@ -183,28 +183,28 @@ export declare class ApiResponse {
|
|
|
183
183
|
assertBodyNotContains(subset: unknown): this;
|
|
184
184
|
assertTextIncludes(substring: string): this;
|
|
185
185
|
/**
|
|
186
|
-
* Assert the request was redirected to `path` —
|
|
186
|
+
* Assert the request was redirected to `path` — helix `assertRedirectsTo`.
|
|
187
187
|
* Checks the followed redirect chain (`redirects()`); also accepts a direct
|
|
188
188
|
* 3xx `Location` match when no redirects were followed.
|
|
189
189
|
*/
|
|
190
190
|
assertRedirectsTo(path: string): this;
|
|
191
191
|
/**
|
|
192
|
-
* Assert the response conforms to the registered OpenAPI spec —
|
|
193
|
-
* `assertAgainstApiSpec()`.
|
|
194
|
-
*
|
|
192
|
+
* Assert the response conforms to the registered OpenAPI spec — helix
|
|
193
|
+
* `assertAgainstApiSpec()`. helix ships this via the SEPARATE opt-in
|
|
194
|
+
* `a separate OpenAPI-assertions plugin` plugin; register a validator with
|
|
195
195
|
* {@link ApiResponse.registerApiSpecValidator} to enable it. Without one, this
|
|
196
196
|
* throws (never silently passes).
|
|
197
197
|
*/
|
|
198
198
|
assertAgainstApiSpec(): this;
|
|
199
199
|
/**
|
|
200
|
-
* Register a shared property (
|
|
200
|
+
* Register a shared property (helix `ApiResponse.macro`) or lazy getter
|
|
201
201
|
* (`ApiResponse.getter`). The callback is invoked with `this` bound to the
|
|
202
|
-
* response AND the response as its first argument, so both
|
|
202
|
+
* response AND the response as its first argument, so both helix's
|
|
203
203
|
* `function () { return this.header('x') }` and `(res) => res.header('x')` work.
|
|
204
204
|
*/
|
|
205
205
|
static macro(name: string, value: unknown): void;
|
|
206
206
|
static getter(name: string, fn: (this: ApiResponse, res: ApiResponse) => unknown): void;
|
|
207
|
-
/** Register a response body parser for a content-type —
|
|
207
|
+
/** Register a response body parser for a content-type — helix `ApiRequest.addParser`. */
|
|
208
208
|
static addParser(contentType: string, fn: (body: string, headers: Dict) => unknown): void;
|
|
209
209
|
/** Register the validator backing {@link assertAgainstApiSpec} (OpenAPI opt-in). */
|
|
210
210
|
static registerApiSpecValidator(fn: (res: ApiResponse) => void): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiResponse.d.ts","sourceRoot":"","sources":["../../src/testing/ApiResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,IAAI,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAA;CACvB;AAED,wEAAwE;AACxE,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAEpD;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjE;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAczD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAcxE;AAOD,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAuBD,
|
|
1
|
+
{"version":3,"file":"ApiResponse.d.ts","sourceRoot":"","sources":["../../src/testing/ApiResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,IAAI,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAA;CACvB;AAED,wEAAwE;AACxE,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAEpD;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjE;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAczD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAcxE;AAOD,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAuBD,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB;AAqFD,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2B5B,8DAA8D;;CAEtD,CAAA;AAMV;;;;;;;GAOG;AAEH,qBAAa,WAAW;;gBAKV,GAAG,EAAE,YAAY,EAAE,IAAI,GAAE,eAAoB;IASzD,2CAA2C;IAC3C,MAAM,IAAI,MAAM;IAIhB,2EAA2E;IAC3E,UAAU,IAAI,MAAM;IAIpB,mEAAmE;IACnE,OAAO,IAAI,IAAI;IAIf,6DAA6D;IAC7D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIxC,0CAA0C;IAC1C,IAAI,IAAI,MAAM;IAId;;;;;;OAMG;IACH,IAAI,IAAI,OAAO;IAmBf,uDAAuD;IACvD,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC;IAItB,yEAAyE;IACzE,MAAM,IAAI,MAAM;IAIhB,mEAAmE;IACnE,IAAI,IAAI,MAAM,GAAG,SAAS;IAK1B,+DAA+D;IAC/D,OAAO,IAAI,MAAM,GAAG,SAAS;IAM7B,0EAA0E;IAC1E,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAIzC,8DAA8D;IAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIhD,oEAAoE;IACpE,SAAS,IAAI,MAAM,EAAE;IAIrB,4DAA4D;IAC5D,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAW/B;;;;OAIG;IACH,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAOrC,+DAA+D;IAC/D,OAAO,IAAI,OAAO;IAIlB,oEAAoE;IACpE,QAAQ,IAAI,OAAO;IAInB,+EAA+E;IAC/E,aAAa,IAAI,OAAO;IAIxB;;;OAGG;IACH,KAAK,IAAI,aAAa,GAAG,SAAS;IAOlC,yEAAyE;IACzE,IAAI,IAAI,IAAI;IAQZ,kEAAkE;IAClE,QAAQ,IAAI,IAAI;IAIhB,wEAAwE;IACxE,WAAW,IAAI,IAAI;IAMnB,wEAAwE;IACxE,WAAW,IAAI,IAAI;IAMnB,qEAAqE;IACrE,SAAS,IAAI,IAAI;IAOjB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAShC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkBzD,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOvC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAoBzD,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAoBvC,UAAU,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAUnC,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAUzC,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAU5C,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAS3C;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAoBrC;;;;;;OAMG;IACH,oBAAoB,IAAI,IAAI;IAW5B;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAGhD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,GAAG,IAAI;IAIvF,yFAAyF;IACzF,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,OAAO,GAAG,IAAI;IAIzF,oFAAoF;IACpF,MAAM,CAAC,wBAAwB,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;CAGtE;AAeD,mFAAmF;AACnF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;KAC/B,CAAC,IAAI,MAAM,OAAO,iBAAiB,GAAG,MAAM,CAAC;CAC/C,CAAA;AAID,MAAM,WAAW,WAAY,SAAQ,gBAAgB,CAAC,WAAW,CAAC;CAAG"}
|