@c9up/ream 0.1.6 → 0.1.8
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/dist/Application.d.ts +9 -1
- package/dist/Application.d.ts.map +1 -1
- package/dist/Application.js +35 -5
- package/dist/Application.js.map +1 -1
- package/dist/GracefulShutdown.d.ts.map +1 -1
- package/dist/GracefulShutdown.js +13 -7
- package/dist/GracefulShutdown.js.map +1 -1
- package/dist/HttpKernel.d.ts.map +1 -1
- package/dist/HttpKernel.js +43 -14
- package/dist/HttpKernel.js.map +1 -1
- package/dist/Ignitor.d.ts +10 -10
- package/dist/Ignitor.d.ts.map +1 -1
- package/dist/Ignitor.js +104 -32
- package/dist/Ignitor.js.map +1 -1
- package/dist/bodyparser/BodyParserMiddleware.d.ts +3 -0
- package/dist/bodyparser/BodyParserMiddleware.d.ts.map +1 -1
- package/dist/bodyparser/BodyParserMiddleware.js +32 -16
- package/dist/bodyparser/BodyParserMiddleware.js.map +1 -1
- package/dist/bodyparser/parseSize.d.ts +2 -1
- package/dist/bodyparser/parseSize.d.ts.map +1 -1
- package/dist/bodyparser/parseSize.js +2 -1
- package/dist/bodyparser/parseSize.js.map +1 -1
- package/dist/container/Container.d.ts.map +1 -1
- package/dist/container/Container.js +6 -7
- package/dist/container/Container.js.map +1 -1
- package/dist/decorators/Service.d.ts +4 -6
- package/dist/decorators/Service.d.ts.map +1 -1
- package/dist/decorators/Service.js +0 -1
- package/dist/decorators/Service.js.map +1 -1
- package/dist/events/Emitter.d.ts +16 -6
- package/dist/events/Emitter.d.ts.map +1 -1
- package/dist/events/Emitter.js +32 -25
- package/dist/events/Emitter.js.map +1 -1
- package/dist/events/EventsProvider.d.ts +1 -0
- package/dist/events/EventsProvider.d.ts.map +1 -1
- package/dist/events/EventsProvider.js +6 -4
- package/dist/events/EventsProvider.js.map +1 -1
- package/dist/graphql/GraphQLEngine.d.ts +16 -0
- package/dist/graphql/GraphQLEngine.d.ts.map +1 -1
- package/dist/graphql/GraphQLEngine.js +122 -4
- package/dist/graphql/GraphQLEngine.js.map +1 -1
- package/dist/graphql/GraphQLProvider.d.ts.map +1 -1
- package/dist/graphql/GraphQLProvider.js +13 -2
- package/dist/graphql/GraphQLProvider.js.map +1 -1
- package/dist/http/HttpContext.d.ts +27 -1
- package/dist/http/HttpContext.d.ts.map +1 -1
- package/dist/http/HttpContext.js +20 -1
- package/dist/http/HttpContext.js.map +1 -1
- package/dist/http/RedirectBuilder.d.ts +5 -1
- package/dist/http/RedirectBuilder.d.ts.map +1 -1
- package/dist/http/RedirectBuilder.js +26 -3
- package/dist/http/RedirectBuilder.js.map +1 -1
- package/dist/http/Request.d.ts +13 -0
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/http/Request.js +18 -0
- package/dist/http/Request.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/middleware/Pipeline.d.ts +13 -0
- package/dist/middleware/Pipeline.d.ts.map +1 -1
- package/dist/middleware/Pipeline.js +43 -7
- package/dist/middleware/Pipeline.js.map +1 -1
- package/dist/router/Router.d.ts +21 -2
- package/dist/router/Router.d.ts.map +1 -1
- package/dist/router/Router.js +53 -8
- package/dist/router/Router.js.map +1 -1
- package/dist/rpc/RpcProvider.d.ts.map +1 -1
- package/dist/rpc/RpcProvider.js +11 -2
- package/dist/rpc/RpcProvider.js.map +1 -1
- package/dist/rpc/RpcRouter.d.ts +11 -3
- package/dist/rpc/RpcRouter.d.ts.map +1 -1
- package/dist/rpc/RpcRouter.js +92 -8
- package/dist/rpc/RpcRouter.js.map +1 -1
- package/dist/scheduler/ScheduleProvider.d.ts.map +1 -1
- package/dist/scheduler/ScheduleProvider.js +10 -0
- package/dist/scheduler/ScheduleProvider.js.map +1 -1
- package/dist/scheduler/locks/MemoryLockBackend.d.ts +0 -1
- package/dist/scheduler/locks/MemoryLockBackend.d.ts.map +1 -1
- package/dist/scheduler/locks/MemoryLockBackend.js +0 -1
- package/dist/scheduler/locks/MemoryLockBackend.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 +9 -0
- package/dist/services/app.js.map +1 -1
- package/dist/services/router.d.ts +5 -0
- package/dist/services/router.d.ts.map +1 -1
- package/dist/services/router.js +8 -0
- package/dist/services/router.js.map +1 -1
- package/dist/services/server.d.ts +5 -0
- package/dist/services/server.d.ts.map +1 -1
- package/dist/services/server.js +8 -0
- package/dist/services/server.js.map +1 -1
- package/dist/session/SessionMiddleware.d.ts.map +1 -1
- package/dist/session/SessionMiddleware.js +4 -0
- package/dist/session/SessionMiddleware.js.map +1 -1
- package/dist/session/drivers/MemoryDriver.d.ts +1 -1
- package/dist/session/drivers/MemoryDriver.d.ts.map +1 -1
- package/dist/session/drivers/MemoryDriver.js +14 -6
- package/dist/session/drivers/MemoryDriver.js.map +1 -1
- package/dist/testing/TestClient.d.ts +11 -5
- package/dist/testing/TestClient.d.ts.map +1 -1
- package/dist/testing/TestClient.js +9 -4
- package/dist/testing/TestClient.js.map +1 -1
- package/events.darwin-arm64.node +0 -0
- package/events.darwin-x64.node +0 -0
- package/events.linux-arm64-gnu.node +0 -0
- package/events.linux-x64-gnu.node +0 -0
- package/events.win32-x64-msvc.node +0 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +29 -1
- package/scheduler.darwin-arm64.node +0 -0
- package/scheduler.darwin-x64.node +0 -0
- package/scheduler.linux-arm64-gnu.node +0 -0
- package/scheduler.linux-x64-gnu.node +0 -0
- package/scheduler.win32-x64-msvc.node +0 -0
- package/src/Application.ts +36 -5
- package/src/GracefulShutdown.ts +15 -7
- package/src/HttpKernel.ts +52 -17
- package/src/Ignitor.ts +106 -34
- package/src/bodyparser/BodyParserMiddleware.ts +43 -16
- package/src/bodyparser/parseSize.ts +2 -1
- package/src/container/Container.ts +6 -9
- package/src/decorators/Service.ts +4 -6
- package/src/events/Emitter.ts +36 -28
- package/src/events/EventsProvider.ts +6 -4
- package/src/graphql/GraphQLEngine.ts +139 -3
- package/src/graphql/GraphQLProvider.ts +17 -2
- package/src/http/HttpContext.ts +38 -1
- package/src/http/RedirectBuilder.ts +23 -3
- package/src/http/Request.ts +20 -0
- package/src/index.ts +2 -2
- package/src/middleware/Pipeline.ts +61 -8
- package/src/router/Router.ts +53 -8
- package/src/rpc/RpcProvider.ts +14 -2
- package/src/rpc/RpcRouter.ts +115 -11
- package/src/scheduler/ScheduleProvider.ts +10 -0
- package/src/scheduler/locks/MemoryLockBackend.ts +0 -2
- package/src/services/app.ts +9 -0
- package/src/services/router.ts +8 -0
- package/src/services/server.ts +8 -0
- package/src/session/SessionMiddleware.ts +6 -0
- package/src/session/drivers/MemoryDriver.ts +14 -6
- package/src/testing/TestClient.ts +18 -7
- package/dist/server/HyperServer.d.ts +0 -64
- package/dist/server/HyperServer.d.ts.map +0 -1
- package/dist/server/HyperServer.js +0 -54
- package/dist/server/HyperServer.js.map +0 -1
- package/dist/storage/S3Driver.d.ts +0 -27
- package/dist/storage/S3Driver.d.ts.map +0 -1
- package/dist/storage/S3Driver.js +0 -135
- package/dist/storage/S3Driver.js.map +0 -1
- package/dist/storage/StorageManager.d.ts +0 -31
- package/dist/storage/StorageManager.d.ts.map +0 -1
- package/dist/storage/StorageManager.js +0 -120
- package/dist/storage/StorageManager.js.map +0 -1
- package/src/server/HyperServer.ts +0 -121
- package/src/storage/S3Driver.ts +0 -171
- package/src/storage/StorageManager.ts +0 -142
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventsProvider.js","sourceRoot":"","sources":["../../src/events/EventsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAsB/C,MAAM,CAAC,OAAO,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"EventsProvider.js","sourceRoot":"","sources":["../../src/events/EventsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAsB/C,MAAM,CAAC,OAAO,OAAO,cAAc;IAGX;IAFtB,QAAQ,CAAqB;IAE7B,YAAsB,GAAqB;QAArB,QAAG,GAAH,GAAG,CAAkB;IAAG,CAAC;IAE/C,QAAQ;QACN,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAW,QAAQ,CAAC,CAAC,CAAA;QAEzF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAW,QAAQ,CAAC,CAAA;YAC1D,yDAAyD;YACzD,8DAA8D;YAC9D,2DAA2D;YAC3D,gCAAgC;YAChC,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU;gBAC3C,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBAC5D,CAAC,CAAC,SAAS,CAAA;YACf,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAU,OAAO,CAAC,CAAC,CAAA;QAC3F,yEAAyE;QACzE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAU,OAAO,CAAC,CAAC,CAAA;IAC5F,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAU,OAAO,CAAC,CAAA;QAC5D,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,QAAQ;YAAE,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1D,CAAC;CACF"}
|
|
@@ -28,6 +28,22 @@ export interface GraphQLConfig {
|
|
|
28
28
|
path?: string;
|
|
29
29
|
/** Enable playground/introspection in dev (default: true when NODE_ENV !== 'production'). */
|
|
30
30
|
playground?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Reject a query string longer than this many characters BEFORE parsing —
|
|
33
|
+
* caps the work the parser does on a hostile payload (default: 100_000).
|
|
34
|
+
*/
|
|
35
|
+
maxQueryBytes?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Reject a query whose selection set nests deeper than this — bounds
|
|
38
|
+
* resolver recursion / amplification (default: 12).
|
|
39
|
+
*/
|
|
40
|
+
maxDepth?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Reject a query selecting more than this many fields in total (aliases
|
|
43
|
+
* count) — bounds fan-out where a client repeats an expensive resolver
|
|
44
|
+
* (default: 1000).
|
|
45
|
+
*/
|
|
46
|
+
maxComplexity?: number;
|
|
31
47
|
}
|
|
32
48
|
export interface ResolverOptions {
|
|
33
49
|
guard?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphQLEngine.d.ts","sourceRoot":"","sources":["../../src/graphql/GraphQLEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"GraphQLEngine.d.ts","sourceRoot":"","sources":["../../src/graphql/GraphQLEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AA0HzD,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6FAA6F;IAC7F,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAgBD,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,SAAS,EAAE,cAAc,EAAE,CAAA;CAC5B;AAED,qBAAa,aAAa;;IAIxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBAqBT,MAAM,EAAE,aAAa;IAYjC,oDAAoD;IACpD,YAAY,CAAC,SAAS,EAAE;QAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;KAAE,GAAG,IAAI;IAIpF,4CAA4C;IAC5C,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,EACzF,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,eAAe,GACxB,IAAI;IAWP,qCAAqC;IAC/B,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiP7C,mDAAmD;IACnD,eAAe,IAAI,MAAM;CAG1B;AA8BD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,OAAO,CAWrF"}
|
|
@@ -22,6 +22,47 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import * as fs from 'node:fs';
|
|
24
24
|
import { loadNapi } from '../helpers/napi-loader.js';
|
|
25
|
+
/**
|
|
26
|
+
* Coerce an argument value to its schema-declared scalar type. GraphQL input
|
|
27
|
+
* coercion: a string literal `"5"` for an `Int` arg becomes the number `5`, a
|
|
28
|
+
* number for an `ID` becomes its string form, etc. Arrays coerce element-wise.
|
|
29
|
+
* Unknown / custom / enum types pass through untouched.
|
|
30
|
+
*/
|
|
31
|
+
function coerceScalar(value, type) {
|
|
32
|
+
if (value === null || value === undefined)
|
|
33
|
+
return value;
|
|
34
|
+
if (Array.isArray(value))
|
|
35
|
+
return value.map((v) => coerceScalar(v, type));
|
|
36
|
+
switch (type) {
|
|
37
|
+
case 'Int':
|
|
38
|
+
if (typeof value === 'number')
|
|
39
|
+
return value;
|
|
40
|
+
if (typeof value === 'string' && value.trim() !== '' && Number.isInteger(Number(value))) {
|
|
41
|
+
return Number(value);
|
|
42
|
+
}
|
|
43
|
+
return value;
|
|
44
|
+
case 'Float':
|
|
45
|
+
if (typeof value === 'number')
|
|
46
|
+
return value;
|
|
47
|
+
if (typeof value === 'string' && value.trim() !== '' && !Number.isNaN(Number(value))) {
|
|
48
|
+
return Number(value);
|
|
49
|
+
}
|
|
50
|
+
return value;
|
|
51
|
+
case 'Boolean':
|
|
52
|
+
if (typeof value === 'boolean')
|
|
53
|
+
return value;
|
|
54
|
+
if (value === 'true')
|
|
55
|
+
return true;
|
|
56
|
+
if (value === 'false')
|
|
57
|
+
return false;
|
|
58
|
+
return value;
|
|
59
|
+
case 'ID':
|
|
60
|
+
return typeof value === 'number' ? String(value) : value;
|
|
61
|
+
default:
|
|
62
|
+
// String, custom scalars, enums, input objects — left as the client sent.
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
25
66
|
let graphqlNativeCache;
|
|
26
67
|
/**
|
|
27
68
|
* Lazily load the Rust GraphQL parser from the `index` NAPI binary. There is no
|
|
@@ -43,6 +84,35 @@ const OPERATION_TYPE = {
|
|
|
43
84
|
mutation: 'Mutation',
|
|
44
85
|
subscription: 'Subscription',
|
|
45
86
|
};
|
|
87
|
+
/**
|
|
88
|
+
* Bound a parsed selection tree's depth and total field count. Iterative (explicit
|
|
89
|
+
* stack) so a pathological deeply-nested query can't overflow the JS call stack
|
|
90
|
+
* during the check itself, and short-circuits as soon as a limit is crossed.
|
|
91
|
+
* Returns an error message, or `null` when the query is within limits.
|
|
92
|
+
*/
|
|
93
|
+
function checkSelectionLimits(fields, maxDepth, maxComplexity) {
|
|
94
|
+
let count = 0;
|
|
95
|
+
const stack = fields.map((field) => ({
|
|
96
|
+
field,
|
|
97
|
+
depth: 1,
|
|
98
|
+
}));
|
|
99
|
+
while (stack.length > 0) {
|
|
100
|
+
const top = stack.pop();
|
|
101
|
+
if (!top)
|
|
102
|
+
break;
|
|
103
|
+
if (top.depth > maxDepth) {
|
|
104
|
+
return `Query is too deep (max depth ${maxDepth})`;
|
|
105
|
+
}
|
|
106
|
+
count += 1;
|
|
107
|
+
if (count > maxComplexity) {
|
|
108
|
+
return `Query is too complex (max ${maxComplexity} fields)`;
|
|
109
|
+
}
|
|
110
|
+
for (const child of top.field.selection) {
|
|
111
|
+
stack.push({ field: child, depth: top.depth + 1 });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
46
116
|
/** Map a Rust `ParsedField` (sub_fields) onto the engine's `SelectionField` (selection). */
|
|
47
117
|
function mapRustField(f) {
|
|
48
118
|
return {
|
|
@@ -58,6 +128,24 @@ export class GraphQLEngine {
|
|
|
58
128
|
#container;
|
|
59
129
|
path;
|
|
60
130
|
#playground;
|
|
131
|
+
#maxQueryBytes;
|
|
132
|
+
#maxDepth;
|
|
133
|
+
#maxComplexity;
|
|
134
|
+
/** Lazily-parsed `Type.field → argName → scalarType` map for input coercion. */
|
|
135
|
+
#argTypes;
|
|
136
|
+
/** Parse (once) the schema's argument types from the SDL for coercion. */
|
|
137
|
+
#schemaArgTypes() {
|
|
138
|
+
if (this.#argTypes === undefined) {
|
|
139
|
+
try {
|
|
140
|
+
this.#argTypes = JSON.parse(graphqlNative().graphqlSchemaArgTypes(this.#schemaSource));
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Native unavailable or schema unparseable → coercion becomes a no-op.
|
|
144
|
+
this.#argTypes = {};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return this.#argTypes ?? {};
|
|
148
|
+
}
|
|
61
149
|
constructor(config) {
|
|
62
150
|
if (!fs.existsSync(config.schemaPath)) {
|
|
63
151
|
throw new Error(`GraphQL schema not found: ${config.schemaPath}`);
|
|
@@ -65,6 +153,9 @@ export class GraphQLEngine {
|
|
|
65
153
|
this.#schemaSource = fs.readFileSync(config.schemaPath, 'utf8');
|
|
66
154
|
this.path = config.path ?? '/graphql';
|
|
67
155
|
this.#playground = config.playground ?? process.env.NODE_ENV !== 'production';
|
|
156
|
+
this.#maxQueryBytes = config.maxQueryBytes ?? 100_000;
|
|
157
|
+
this.#maxDepth = config.maxDepth ?? 12;
|
|
158
|
+
this.#maxComplexity = config.maxComplexity ?? 1000;
|
|
68
159
|
}
|
|
69
160
|
/** Set IoC container for resolver instantiation. */
|
|
70
161
|
useContainer(container) {
|
|
@@ -113,11 +204,25 @@ export class GraphQLEngine {
|
|
|
113
204
|
}
|
|
114
205
|
/** Execute a GraphQL query against registered resolvers. */
|
|
115
206
|
async #execute(request, ctx) {
|
|
207
|
+
// DoS guard 1 — cap the raw query size BEFORE handing it to the parser, so a
|
|
208
|
+
// hostile multi-MB payload can't tie up the native parser.
|
|
209
|
+
if (request.query.length > this.#maxQueryBytes) {
|
|
210
|
+
return {
|
|
211
|
+
errors: [{ message: `Query exceeds the maximum size of ${this.#maxQueryBytes} bytes` }],
|
|
212
|
+
};
|
|
213
|
+
}
|
|
116
214
|
// Parse the query to extract operation type and fields
|
|
117
215
|
const parsed = this.#parseQuery(request.query);
|
|
118
216
|
if (parsed.errors) {
|
|
119
217
|
return { errors: parsed.errors };
|
|
120
218
|
}
|
|
219
|
+
// DoS guard 2 — bound the selection tree's depth and total field count
|
|
220
|
+
// (aliases included) before resolving anything. Iterative walk so the check
|
|
221
|
+
// itself can't blow the stack on a deeply nested query.
|
|
222
|
+
const limitError = checkSelectionLimits(parsed.fields, this.#maxDepth, this.#maxComplexity);
|
|
223
|
+
if (limitError) {
|
|
224
|
+
return { errors: [{ message: limitError }] };
|
|
225
|
+
}
|
|
121
226
|
const data = {};
|
|
122
227
|
const errors = [];
|
|
123
228
|
for (const field of parsed.fields) {
|
|
@@ -163,7 +268,7 @@ export class GraphQLEngine {
|
|
|
163
268
|
},
|
|
164
269
|
};
|
|
165
270
|
}
|
|
166
|
-
const args = this.#buildArgs(field, request.variables);
|
|
271
|
+
const args = this.#buildArgs(field, request.variables, typeName);
|
|
167
272
|
const result = await handler.call(instance, null, args, ctx);
|
|
168
273
|
// Prune to the client's selection set: a resolver returning a rich
|
|
169
274
|
// object (ORM entity, etc.) must not leak fields the client did not
|
|
@@ -179,7 +284,7 @@ export class GraphQLEngine {
|
|
|
179
284
|
* Build the resolver argument bag: `$variable` references resolve against
|
|
180
285
|
* `request.variables`, then any unreferenced variables are merged in.
|
|
181
286
|
*/
|
|
182
|
-
#buildArgs(field, variables) {
|
|
287
|
+
#buildArgs(field, variables, typeName) {
|
|
183
288
|
const args = {};
|
|
184
289
|
for (const [k, v] of Object.entries(field.args)) {
|
|
185
290
|
if (typeof v === 'string' && v.startsWith('$') && variables) {
|
|
@@ -195,6 +300,16 @@ export class GraphQLEngine {
|
|
|
195
300
|
args[k] = v;
|
|
196
301
|
}
|
|
197
302
|
}
|
|
303
|
+
// Coerce each argument to its schema-declared scalar type (Int/Float/Boolean/
|
|
304
|
+
// ID). A literal `task(id: "5")` or a string variable thus reaches the
|
|
305
|
+
// resolver as the right runtime type instead of being silently mistyped.
|
|
306
|
+
const argTypes = this.#schemaArgTypes()[`${typeName}.${field.name}`];
|
|
307
|
+
if (argTypes) {
|
|
308
|
+
for (const [k, declaredType] of Object.entries(argTypes)) {
|
|
309
|
+
if (k in args)
|
|
310
|
+
args[k] = coerceScalar(args[k], declaredType);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
198
313
|
return args;
|
|
199
314
|
}
|
|
200
315
|
/** Enforce guard/role/permission on a resolver. */
|
|
@@ -206,14 +321,17 @@ export class GraphQLEngine {
|
|
|
206
321
|
if (needsAuth && !ctx.auth?.authenticated) {
|
|
207
322
|
return 'Unauthorized';
|
|
208
323
|
}
|
|
324
|
+
// Read roles/permissions from the top level OR nested under `user` — the
|
|
325
|
+
// auth provider (e.g. warden) sets `ctx.auth.user.roles`, not the top level.
|
|
326
|
+
// Mirrors the HTTP guard middleware fix.
|
|
209
327
|
if (roles.length > 0) {
|
|
210
|
-
const userRoles = ctx.auth?.roles ?? [];
|
|
328
|
+
const userRoles = ctx.auth?.roles ?? ctx.auth?.user?.roles ?? [];
|
|
211
329
|
if (!roles.some((r) => userRoles.includes(r))) {
|
|
212
330
|
return 'Insufficient role';
|
|
213
331
|
}
|
|
214
332
|
}
|
|
215
333
|
if (permissions.length > 0) {
|
|
216
|
-
const userPerms = ctx.auth?.permissions ?? [];
|
|
334
|
+
const userPerms = ctx.auth?.permissions ?? ctx.auth?.user?.permissions ?? [];
|
|
217
335
|
if (!permissions.every((p) => userPerms.includes(p))) {
|
|
218
336
|
return 'Insufficient permissions';
|
|
219
337
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphQLEngine.js","sourceRoot":"","sources":["../../src/graphql/GraphQLEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAoBpD,IAAI,kBAA6C,CAAA;AACjD;;;;GAIG;AACH,SAAS,aAAa;IACpB,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACrC,kBAAkB,GAAG,QAAQ,CAAgB;YAC3C,UAAU,EAAE,OAAO;YACnB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;YAC9B,eAAe,EAAE,SAAS;SAC3B,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,kBAAkB,CAAA;AAC3B,CAAC;AAED,MAAM,cAAc,GAA2B;IAC7C,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,cAAc;CAC7B,CAAA;AAED,4FAA4F;AAC5F,SAAS,YAAY,CAAC,CAAkB;IACtC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,SAAS;QAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC;KAC1C,CAAA;AACH,CAAC;AAyCD,MAAM,OAAO,aAAa;IACxB,aAAa,CAAQ;IACrB,UAAU,GAA+B,IAAI,GAAG,EAAE,CAAA;IAClD,UAAU,CAAwD;IACzD,IAAI,CAAQ;IACrB,WAAW,CAAS;IAEpB,YAAY,MAAqB;QAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC/D,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,UAAU,CAAA;QACrC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;IAC/E,CAAC;IAED,oDAAoD;IACpD,YAAY,CAAC,SAAgE;QAC3E,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;IAC7B,CAAC;IAED,4CAA4C;IAC5C,QAAQ,CACN,QAAgB,EAChB,SAAiB,EACjB,YAAyF,EACzF,UAAkB,EAClB,OAAyB;QAEzB,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAA;QACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE;YACvB,QAAQ;YACR,SAAS;YACT,YAAY;YACZ,UAAU;YACV,OAAO,EAAE,OAAO,IAAI,EAAE;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,MAAM,CAAC,GAAgB;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;QAEnC,aAAa;QACb,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;YAChD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACvD,OAAM;QACR,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAA;YAC9E,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QAClC,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,CAAA;YACpF,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC7C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,YAAY,KAAK;gBAC3D,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,uBAAuB,CAAA;YAC7B,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,QAAQ,CACZ,OAAuB,EACvB,GAAgB;QAKhB,uDAAuD;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;QAClC,CAAC;QAED,MAAM,IAAI,GAA4B,EAAE,CAAA;QACxC,MAAM,MAAM,GAAgD,EAAE,CAAA;QAE9D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;YAC9E,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACrD,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC/C,CAAA;IACH,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,aAAa,CACjB,KAAqB,EACrB,QAAgB,EAChB,OAAuB,EACvB,GAAgB;QAIhB,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAA;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;aACjE,CAAA;QACH,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QAC1D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;QAC1E,CAAC;QAED,IAAI,CAAC;YACH,mDAAmD;YACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU;gBAC9B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;gBAC1C,CAAC,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAA;YAE5B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAC1C,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE;wBACL,OAAO,EAAE,mBAAmB,KAAK,CAAC,UAAU,YAAY;wBACxD,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;qBACnB;iBACF,CAAA;YACH,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;YACtD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;YAC5D,mEAAmE;YACnE,oEAAoE;YACpE,mEAAmE;YACnE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAA;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAA;YACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;QACnE,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,UAAU,CACR,KAAqB,EACrB,SAA8C;QAE9C,MAAM,IAAI,GAA4B,EAAE,CAAA;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC5D,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACb,CAAC;QACH,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;oBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,mDAAmD;IACnD,cAAc,CAAC,OAAwB,EAAE,GAAgB;QACvD,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrF,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACjF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAA;QAE7C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;QACjF,IAAI,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC;YAC1C,OAAO,cAAc,CAAA;QACvB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAA;YACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9C,OAAO,mBAAmB,CAAA;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAA;YAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,OAAO,0BAA0B,CAAA;YACnC,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,KAAa;QAKvB,sEAAsE;QACtE,4EAA4E;QAC5E,wEAAwE;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAoB,CAAA;QAC9E,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,OAAO,CAAA;QAC9D,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAA;QACrF,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAA;IAC3D,CAAC;IAED,iBAAiB;QACf,OAAO;;;;;;;;;;;;;;+CAcoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;;;QAIhE,CAAA;IACN,CAAC;IAED,mDAAmD;IACnD,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;CACF;AAED,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,IAAa;IACrC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACzE,oFAAoF;IACpF,MAAM,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IAClD,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAEtC,IAAI,SAA8C,CAAA;IAClD,IACE,WAAW,IAAI,IAAI;QACnB,IAAI,CAAC,SAAS,KAAK,IAAI;QACvB,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAClC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAC9B,CAAC;QACD,gIAAgI;QAChI,SAAS,GAAG,IAAI,CAAC,SAA2C,CAAA;IAC9D,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1E,MAAM,aAAa,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IAE3E,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA;AAC/C,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,SAA2B;IAC1E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAA;IACjF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAClC,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;YACxB,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
1
|
+
{"version":3,"file":"GraphQLEngine.js","sourceRoot":"","sources":["../../src/graphql/GraphQLEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphQLProvider.d.ts","sourceRoot":"","sources":["../../src/graphql/GraphQLProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"GraphQLProvider.d.ts","sourceRoot":"","sources":["../../src/graphql/GraphQLProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAsB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEtE,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,aAAa,CAAA;CACvB;AAED,qBAAa,eAAgB,SAAQ,QAAQ;;gBAG/B,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,sBAA2B;IAKjE,qEAAqE;IACrE,IAAI,MAAM,IAAI,aAAa,GAAG,SAAS,CAEtC;IAEQ,QAAQ,IAAI,IAAI;IAuBV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CASrC"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @implements Story 24.5
|
|
16
16
|
*/
|
|
17
|
+
import { ReamError } from '../errors/ReamError.js';
|
|
17
18
|
import { Provider } from '../Provider.js';
|
|
18
19
|
import { GraphQLEngine } from './GraphQLEngine.js';
|
|
19
20
|
export class GraphQLProvider extends Provider {
|
|
@@ -31,9 +32,19 @@ export class GraphQLProvider extends Provider {
|
|
|
31
32
|
const engine = this.#engine ?? (config?.schemaPath ? new GraphQLEngine(config) : undefined);
|
|
32
33
|
if (!engine)
|
|
33
34
|
return; // GraphQL not configured — opt-out.
|
|
34
|
-
|
|
35
|
+
const container = this.app.container;
|
|
36
|
+
if (container.has('graphql')) {
|
|
37
|
+
if (container.resolve('graphql') === engine) {
|
|
38
|
+
this.#engine = engine;
|
|
39
|
+
return; // re-register is idempotent
|
|
40
|
+
}
|
|
41
|
+
throw new ReamError('GRAPHQL_PROVIDER_ALREADY_REGISTERED', "Container token 'graphql' is already bound to a different instance", {
|
|
42
|
+
hint: 'Only one GraphQLProvider can own the graphql binding. Remove the duplicate provider from your reamrc.ts.',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
engine.useContainer(container);
|
|
35
46
|
this.#engine = engine;
|
|
36
|
-
|
|
47
|
+
container.singleton('graphql', () => engine);
|
|
37
48
|
}
|
|
38
49
|
async boot() {
|
|
39
50
|
const engine = this.#engine;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphQLProvider.js","sourceRoot":"","sources":["../../src/graphql/GraphQLProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"GraphQLProvider.js","sourceRoot":"","sources":["../../src/graphql/GraphQLProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAsB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAOtE,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,OAAO,CAAgB;IAEvB,YAAY,GAAe,EAAE,UAAkC,EAAE;QAC/D,KAAK,CAAC,GAAG,CAAC,CAAA;QACV,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;IAC/B,CAAC;IAED,qEAAqE;IACrE,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAEQ,QAAQ;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAgB,SAAS,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC3F,IAAI,CAAC,MAAM;YAAE,OAAM,CAAC,oCAAoC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAA;QACpC,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,IAAI,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC5C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;gBACrB,OAAM,CAAC,4BAA4B;YACrC,CAAC;YACD,MAAM,IAAI,SAAS,CACjB,qCAAqC,EACrC,oEAAoE,EACpE;gBACE,IAAI,EAAE,0GAA0G;aACjH,CACF,CAAA;QACH,CAAC;QACD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC9C,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAS,QAAQ,CAAC,CAAA;QACxD,2EAA2E;QAC3E,kDAAkD;QAClD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACpD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACvD,CAAC;CACF"}
|
|
@@ -23,6 +23,22 @@ export interface AuthState {
|
|
|
23
23
|
roles?: string[];
|
|
24
24
|
permissions?: string[];
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Per-request authorization entry point — populated by an authorization
|
|
28
|
+
* middleware (e.g. `@c9up/warden`'s Bouncer initializer). A structural
|
|
29
|
+
* contract only: Ream stays agnostic of any concrete authorization package,
|
|
30
|
+
* exactly as `auth` is a slot that Warden fills. A handler authorizes via
|
|
31
|
+
* `await ctx.bouncer?.authorize('post.edit', post)` (throws on denial, mapped
|
|
32
|
+
* to 403 by the ExceptionHandler) or branches on `ctx.bouncer?.allows(...)`.
|
|
33
|
+
*/
|
|
34
|
+
export interface Authorizer {
|
|
35
|
+
/** True iff the action is authorized. Never throws on denial. */
|
|
36
|
+
allows(ability: string, ...args: unknown[]): Promise<boolean>;
|
|
37
|
+
/** Boolean negation of {@link allows}. Never throws on denial. */
|
|
38
|
+
denies(ability: string, ...args: unknown[]): Promise<boolean>;
|
|
39
|
+
/** Resolves on allow; throws an authorization failure (status 403) on deny. */
|
|
40
|
+
authorize(ability: string, ...args: unknown[]): Promise<void>;
|
|
41
|
+
}
|
|
26
42
|
export interface RouteInfo {
|
|
27
43
|
pattern: string;
|
|
28
44
|
name?: string;
|
|
@@ -52,7 +68,11 @@ export declare class HttpContext {
|
|
|
52
68
|
readonly route: RouteInfo;
|
|
53
69
|
/** Authentication state — populated by auth middleware. */
|
|
54
70
|
auth: AuthState;
|
|
55
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* Request locale — the primary subtag of the first `Accept-Language` entry
|
|
73
|
+
* (e.g. `fr-CH,fr;q=0.9` → `fr`), defaulting to `en`. Middleware (or i18n)
|
|
74
|
+
* may override it; it's a plain mutable field.
|
|
75
|
+
*/
|
|
56
76
|
locale: string;
|
|
57
77
|
/** Per-request key-value store (for middleware to pass data downstream). */
|
|
58
78
|
readonly store: Map<string, unknown>;
|
|
@@ -62,6 +82,12 @@ export declare class HttpContext {
|
|
|
62
82
|
* `ctx.events?.emit('user:updated', user)`. Undefined when events aren't wired.
|
|
63
83
|
*/
|
|
64
84
|
events?: Emitter;
|
|
85
|
+
/**
|
|
86
|
+
* Per-request authorization entry point, when an authorization middleware
|
|
87
|
+
* is wired (e.g. `@c9up/warden`'s Bouncer initializer). Undefined when no
|
|
88
|
+
* such middleware ran. See {@link Authorizer}.
|
|
89
|
+
*/
|
|
90
|
+
bouncer?: Authorizer;
|
|
65
91
|
constructor(id: string, rawRequest: RawRequest, params: Record<string, string>, route: RouteInfo);
|
|
66
92
|
/** @internal Set the route URL resolver (injected by HttpKernel from Router). */
|
|
67
93
|
setRouteUrlResolver(resolver: RouteUrlResolver): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpContext.d.ts","sourceRoot":"","sources":["../../src/http/HttpContext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,OAAO,CAAA;IACtB,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;QAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,WAAW;;IACtB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,0BAA0B;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IAEzB,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAE3B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEvC,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IAEzB,2DAA2D;IAC3D,IAAI,EAAE,SAAS,CAA2B;IAE1C
|
|
1
|
+
{"version":3,"file":"HttpContext.d.ts","sourceRoot":"","sources":["../../src/http/HttpContext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,OAAO,CAAA;IACtB,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;QAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7D,kEAAkE;IAClE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7D,+EAA+E;IAC/E,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,WAAW;;IACtB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,0BAA0B;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IAEzB,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAE3B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEvC,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IAEzB,2DAA2D;IAC3D,IAAI,EAAE,SAAS,CAA2B;IAE1C;;;;OAIG;IACH,MAAM,SAAO;IAEb,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAY;IAEhD;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;;OAIG;IACH,OAAO,CAAC,EAAE,UAAU,CAAA;gBAMlB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,KAAK,EAAE,SAAS;IAoBlB,iFAAiF;IACjF,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;CAGtD"}
|
package/dist/http/HttpContext.js
CHANGED
|
@@ -22,7 +22,11 @@ export class HttpContext {
|
|
|
22
22
|
route;
|
|
23
23
|
/** Authentication state — populated by auth middleware. */
|
|
24
24
|
auth = { authenticated: false };
|
|
25
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Request locale — the primary subtag of the first `Accept-Language` entry
|
|
27
|
+
* (e.g. `fr-CH,fr;q=0.9` → `fr`), defaulting to `en`. Middleware (or i18n)
|
|
28
|
+
* may override it; it's a plain mutable field.
|
|
29
|
+
*/
|
|
26
30
|
locale = 'en';
|
|
27
31
|
/** Per-request key-value store (for middleware to pass data downstream). */
|
|
28
32
|
store = new Map();
|
|
@@ -32,6 +36,12 @@ export class HttpContext {
|
|
|
32
36
|
* `ctx.events?.emit('user:updated', user)`. Undefined when events aren't wired.
|
|
33
37
|
*/
|
|
34
38
|
events;
|
|
39
|
+
/**
|
|
40
|
+
* Per-request authorization entry point, when an authorization middleware
|
|
41
|
+
* is wired (e.g. `@c9up/warden`'s Bouncer initializer). Undefined when no
|
|
42
|
+
* such middleware ran. See {@link Authorizer}.
|
|
43
|
+
*/
|
|
44
|
+
bouncer;
|
|
35
45
|
/** Route URL resolver for redirect().toRoute(). */
|
|
36
46
|
#routeUrlResolver;
|
|
37
47
|
constructor(id, rawRequest, params, route) {
|
|
@@ -40,6 +50,7 @@ export class HttpContext {
|
|
|
40
50
|
this.route = route;
|
|
41
51
|
this.request = new Request(rawRequest, params);
|
|
42
52
|
this.response = new Response();
|
|
53
|
+
this.locale = parseAcceptLanguage(this.request.header('accept-language')) ?? 'en';
|
|
43
54
|
// Wire redirect builder with request context
|
|
44
55
|
this.response.setRedirectFactory(() => new RedirectBuilder(this.response, {
|
|
45
56
|
requestUrl: this.request.url(),
|
|
@@ -52,4 +63,12 @@ export class HttpContext {
|
|
|
52
63
|
this.#routeUrlResolver = resolver;
|
|
53
64
|
}
|
|
54
65
|
}
|
|
66
|
+
/** Primary subtag of the first Accept-Language entry: `fr-CH,fr;q=0.9` → `fr`. */
|
|
67
|
+
function parseAcceptLanguage(header) {
|
|
68
|
+
if (!header)
|
|
69
|
+
return undefined;
|
|
70
|
+
const first = header.split(',')[0]?.trim().split(';')[0]?.trim();
|
|
71
|
+
const primary = first?.split('-')[0]?.toLowerCase();
|
|
72
|
+
return primary || undefined;
|
|
73
|
+
}
|
|
55
74
|
//# sourceMappingURL=HttpContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpContext.js","sourceRoot":"","sources":["../../src/http/HttpContext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"HttpContext.js","sourceRoot":"","sources":["../../src/http/HttpContext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAgDxC,MAAM,OAAO,WAAW;IACtB,qCAAqC;IAC5B,EAAE,CAAQ;IAEnB,0BAA0B;IACjB,OAAO,CAAS;IAEzB,mCAAmC;IAC1B,QAAQ,CAAU;IAE3B,uDAAuD;IAC9C,MAAM,CAAwB;IAEvC,2CAA2C;IAClC,KAAK,CAAW;IAEzB,2DAA2D;IAC3D,IAAI,GAAc,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;IAE1C;;;;OAIG;IACH,MAAM,GAAG,IAAI,CAAA;IAEb,4EAA4E;IACnE,KAAK,GAAyB,IAAI,GAAG,EAAE,CAAA;IAEhD;;;;OAIG;IACH,MAAM,CAAU;IAEhB;;;;OAIG;IACH,OAAO,CAAa;IAEpB,mDAAmD;IACnD,iBAAiB,CAAmB;IAEpC,YACE,EAAU,EACV,UAAsB,EACtB,MAA8B,EAC9B,KAAgB;QAEhB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,IAAI,CAAA;QAEjF,6CAA6C;QAC7C,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAC9B,GAAG,EAAE,CACH,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAC9B,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YAC9C,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;SACzC,CAAC,CACL,CAAA;IACH,CAAC;IAED,iFAAiF;IACjF,mBAAmB,CAAC,QAA0B;QAC5C,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAA;IACnC,CAAC;CACF;AAED,kFAAkF;AAClF,SAAS,mBAAmB,CAAC,MAA0B;IACrD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;IAChE,MAAM,OAAO,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAA;IACnD,OAAO,OAAO,IAAI,SAAS,CAAA;AAC7B,CAAC"}
|
|
@@ -25,7 +25,11 @@ export declare class RedirectBuilder {
|
|
|
25
25
|
toPath(path: string): void;
|
|
26
26
|
/** Redirect to a named route. */
|
|
27
27
|
toRoute(name: string, params?: Record<string, string>): void;
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Redirect back to the previous page (Referer header).
|
|
30
|
+
* Only trusts same-origin or relative referers — external URLs fall back
|
|
31
|
+
* to `fallback` to prevent open redirect attacks.
|
|
32
|
+
*/
|
|
29
33
|
back(fallback?: string): void;
|
|
30
34
|
}
|
|
31
35
|
//# sourceMappingURL=RedirectBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectBuilder.d.ts","sourceRoot":"","sources":["../../src/http/RedirectBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"RedirectBuilder.d.ts","sourceRoot":"","sources":["../../src/http/RedirectBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAA;AAcxF,qBAAa,eAAe;;gBAUxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;KACpC;IAQH,gCAAgC;IAChC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IASzC,gDAAgD;IAChD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B,iCAAiC;IACjC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ5D;;;;OAIG;IACH,IAAI,CAAC,QAAQ,SAAM,GAAG,IAAI;CAoB3B"}
|
|
@@ -8,6 +8,20 @@
|
|
|
8
8
|
* response.redirect().withQs({ page: '2' }).toPath('/results')
|
|
9
9
|
* response.redirect().toRoute('posts.show', { id: '42' })
|
|
10
10
|
*/
|
|
11
|
+
function isSameOriginOrRelative(referer, requestUrl) {
|
|
12
|
+
if (referer.startsWith('/') && !referer.startsWith('//'))
|
|
13
|
+
return true;
|
|
14
|
+
if (!requestUrl)
|
|
15
|
+
return false;
|
|
16
|
+
try {
|
|
17
|
+
const ref = new URL(referer);
|
|
18
|
+
const req = new URL(requestUrl);
|
|
19
|
+
return ref.origin === req.origin;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
11
25
|
export class RedirectBuilder {
|
|
12
26
|
#response;
|
|
13
27
|
#status = 302;
|
|
@@ -52,10 +66,19 @@ export class RedirectBuilder {
|
|
|
52
66
|
const path = this.#routeUrlResolver(name, params);
|
|
53
67
|
this.toPath(path);
|
|
54
68
|
}
|
|
55
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Redirect back to the previous page (Referer header).
|
|
71
|
+
* Only trusts same-origin or relative referers — external URLs fall back
|
|
72
|
+
* to `fallback` to prevent open redirect attacks.
|
|
73
|
+
*/
|
|
56
74
|
back(fallback = '/') {
|
|
57
|
-
const referer = this.#requestReferer
|
|
58
|
-
|
|
75
|
+
const referer = this.#requestReferer;
|
|
76
|
+
if (referer && isSameOriginOrRelative(referer, this.#requestUrl)) {
|
|
77
|
+
this.toPath(referer);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.toPath(fallback);
|
|
81
|
+
}
|
|
59
82
|
}
|
|
60
83
|
#appendQs(path) {
|
|
61
84
|
let qs = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectBuilder.js","sourceRoot":"","sources":["../../src/http/RedirectBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,OAAO,eAAe;IAC1B,SAAS,CAAU;IACnB,OAAO,GAAG,GAAG,CAAA;IACb,GAAG,GAAkC,IAAI,CAAA;IACzC,UAAU,GAAG,KAAK,CAAA;IAClB,WAAW,CAAS;IACpB,eAAe,CAAS;IACxB,iBAAiB,CAAmB;IAEpC,YACE,QAAkB,EAClB,OAIC;QAED,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,UAAU,CAAA;QACtC,IAAI,CAAC,eAAe,GAAG,OAAO,EAAE,cAAc,CAAA;QAC9C,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,gBAAgB,CAAA;IACpD,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2DAA2D;IAC3D,MAAM,CAAC,EAA2B;QAChC,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACf,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACxB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,gDAAgD;IAChD,MAAM,CAAC,IAAY;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,IAAY,EAAE,MAA+B;QACnD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;QACvF,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"RedirectBuilder.js","sourceRoot":"","sources":["../../src/http/RedirectBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/http/Request.d.ts
CHANGED
|
@@ -156,5 +156,18 @@ export declare class Request {
|
|
|
156
156
|
setFiles(files: import('../bodyparser/MultipartFile.js').MultipartFile[]): void;
|
|
157
157
|
/** @internal Set the parsed body (called by BodyParser middleware). */
|
|
158
158
|
setParsedBody(body: Dict<unknown>): void;
|
|
159
|
+
/**
|
|
160
|
+
* @internal Store the validated + transformed payload (called by the
|
|
161
|
+
* validation middleware after a route validator passes).
|
|
162
|
+
*/
|
|
163
|
+
setValidated(data: unknown): void;
|
|
164
|
+
/**
|
|
165
|
+
* The validated + coerced payload produced by the route's `.validate()`
|
|
166
|
+
* validator, or `undefined` when the route declares no validator. Prefer
|
|
167
|
+
* this over `body()` in a validated handler — it carries the sanitized,
|
|
168
|
+
* type-coerced values, not the raw input. Returns `unknown`; narrow it at
|
|
169
|
+
* the call site (the validator already guaranteed the shape).
|
|
170
|
+
*/
|
|
171
|
+
validated(): unknown;
|
|
159
172
|
}
|
|
160
173
|
//# sourceMappingURL=Request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,IAAI,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IAChC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,EAAE,CAAC,EAAE,MAAM,CAAA;IACX;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAC9C,KAAK,EAAE,KAAK,CAAC;YACX,SAAS,EAAE,MAAM,CAAA;YACjB,UAAU,EAAE,MAAM,CAAA;YAClB,WAAW,EAAE,MAAM,CAAA;YACnB,IAAI,EAAE,MAAM,CAAA;YACZ,UAAU,EAAE,MAAM,CAAA;SACnB,CAAC,CAAA;KACH,CAAA;IACD;;;;OAIG;IACH,OAAO,CAAC,EAAE,IAAI,CAAA;CACf;AAED,qBAAa,OAAO;;
|
|
1
|
+
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"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"}
|
package/dist/http/Request.js
CHANGED
|
@@ -13,6 +13,7 @@ export class Request {
|
|
|
13
13
|
#parsedQs;
|
|
14
14
|
#merged;
|
|
15
15
|
#files = new Map();
|
|
16
|
+
#validated;
|
|
16
17
|
/**
|
|
17
18
|
* CSRF token for this request (AdonisJS idiom: `request.csrfToken`). Seeded
|
|
18
19
|
* by the `@c9up/blackhole` middleware when CSRF is enabled; `undefined`
|
|
@@ -308,6 +309,23 @@ export class Request {
|
|
|
308
309
|
this.#parsedBody = body;
|
|
309
310
|
this.#merged = undefined; // reset merged cache
|
|
310
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* @internal Store the validated + transformed payload (called by the
|
|
314
|
+
* validation middleware after a route validator passes).
|
|
315
|
+
*/
|
|
316
|
+
setValidated(data) {
|
|
317
|
+
this.#validated = data;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* The validated + coerced payload produced by the route's `.validate()`
|
|
321
|
+
* validator, or `undefined` when the route declares no validator. Prefer
|
|
322
|
+
* this over `body()` in a validated handler — it carries the sanitized,
|
|
323
|
+
* type-coerced values, not the raw input. Returns `unknown`; narrow it at
|
|
324
|
+
* the call site (the validator already guaranteed the shape).
|
|
325
|
+
*/
|
|
326
|
+
validated() {
|
|
327
|
+
return this.#validated;
|
|
328
|
+
}
|
|
311
329
|
#ensureParsedBody() {
|
|
312
330
|
if (this.#parsedBody !== undefined)
|
|
313
331
|
return;
|