@theokit/http 1.1.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -1
- package/dist/app.d.ts +31 -0
- package/dist/app.js +2 -2
- package/dist/{chunk-ELVQOG52.js → chunk-6HVQHSPX.js} +43 -3
- package/dist/chunk-6HVQHSPX.js.map +1 -0
- package/dist/{chunk-6CFF7Q4Z.js → chunk-BXJBQ4EH.js} +2 -2
- package/dist/chunk-R72YKDQ4.js +321 -0
- package/dist/chunk-R72YKDQ4.js.map +1 -0
- package/dist/index.d.ts +56 -2
- package/dist/index.js +147 -201
- package/dist/index.js.map +1 -1
- package/dist/route-access-Bq7eKXIc.d.ts +77 -0
- package/dist/theokit-plugin.d.ts +10 -0
- package/dist/theokit-plugin.js +21 -4
- package/dist/theokit-plugin.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-ELVQOG52.js.map +0 -1
- package/dist/chunk-X7Q5HPLK.js +0 -152
- package/dist/chunk-X7Q5HPLK.js.map +0 -1
- /package/dist/{chunk-6CFF7Q4Z.js.map → chunk-BXJBQ4EH.js.map} +0 -0
package/README.md
CHANGED
|
@@ -31,11 +31,16 @@ form — `@Body(schema)` — works without it.
|
|
|
31
31
|
## Quick start
|
|
32
32
|
|
|
33
33
|
```typescript
|
|
34
|
-
import { Controller, Get, Post, Body, Param } from '@theokit/http'
|
|
34
|
+
import { Controller, Get, Post, Body, Param, Public } from '@theokit/http'
|
|
35
35
|
import { z } from 'zod'
|
|
36
36
|
|
|
37
37
|
// Convention: @Controller() on CatsController infers the prefix "api/cats".
|
|
38
38
|
// Pass a string to override: @Controller('api/v2/cats').
|
|
39
|
+
//
|
|
40
|
+
// `@Public()` is the access decision "anyone may call this". Every route needs one — a guard or
|
|
41
|
+
// this — because a route that declares neither is refused with 403 rather than served. See
|
|
42
|
+
// "Every route declares who may call it" below.
|
|
43
|
+
@Public()
|
|
39
44
|
@Controller()
|
|
40
45
|
export class CatsController {
|
|
41
46
|
@Get()
|
|
@@ -55,6 +60,40 @@ export class CatsController {
|
|
|
55
60
|
}
|
|
56
61
|
```
|
|
57
62
|
|
|
63
|
+
## Every route declares who may call it
|
|
64
|
+
|
|
65
|
+
A route says one of two things, and saying neither is not a third option:
|
|
66
|
+
|
|
67
|
+
| | how it is said |
|
|
68
|
+
|---|---|
|
|
69
|
+
| anyone may call it | `@Public()` — on the method, or on the class to cover every route under it |
|
|
70
|
+
| someone decides | `@UseGuards(SomeGuard)` — likewise on either |
|
|
71
|
+
|
|
72
|
+
A route that declares neither is **refused with 403** at dispatch, in every dispatcher this package
|
|
73
|
+
ships, and `theokit build` fails on it before that. The reason is that `guards: []` used to mean
|
|
74
|
+
both *"open on purpose"* and *"nobody said"*, so the dispatcher took the permissive reading — and a
|
|
75
|
+
route nobody thought about is the one that ships open.
|
|
76
|
+
|
|
77
|
+
`undeclaredRoutes: 'warn'` restores the old behaviour while you migrate, with one warning per route:
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
TheoApp.create({ controllers, undeclaredRoutes: 'warn' }) // also on createDecoratorHandler(...)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Guards still run on a `@Public()` route — the decorator answers *who may call it*, not *what else
|
|
84
|
+
happens on the way in*. For "any signed-in caller", `theokit/server/auth` exports the guard rather
|
|
85
|
+
than leaving every app to write it:
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { createSessionManagerWeb, Authenticated } from 'theokit/server/auth'
|
|
89
|
+
|
|
90
|
+
const sessions = createSessionManagerWeb<{ userId: string }>({ secret: process.env.SESSION_SECRET! })
|
|
91
|
+
|
|
92
|
+
@Controller('api/tasks')
|
|
93
|
+
@UseGuards(Authenticated(sessions))
|
|
94
|
+
export class TasksController { … }
|
|
95
|
+
```
|
|
96
|
+
|
|
58
97
|
## Validation — Zod is the single source of truth
|
|
59
98
|
|
|
60
99
|
Pass the schema to `@Body` directly. The bridge validates the request against it and feeds the same
|
package/dist/app.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { S as ServerHandle } from './types-CGthbcon.js';
|
|
2
|
+
import { A as AccessDecision, U as UndeclaredRoutePolicy } from './route-access-Bq7eKXIc.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* TheoApp — NestJS/Spring Boot-style application bootstrap.
|
|
@@ -30,6 +31,15 @@ interface AgentAppEntry {
|
|
|
30
31
|
readonly compiled: unknown;
|
|
31
32
|
/** Guards to run before the agent routes (same shape the controller pipeline uses). */
|
|
32
33
|
readonly guards?: Function[];
|
|
34
|
+
/**
|
|
35
|
+
* The access decision for this agent's routes, said explicitly (#576).
|
|
36
|
+
*
|
|
37
|
+
* Omit it and a non-empty `guards` still counts as a declaration. Omit BOTH and the route is
|
|
38
|
+
* `'undeclared'` — which used to be indistinguishable from open, because both arrived as
|
|
39
|
+
* `guards: []`. Agent routes need this most: they are auto-wired, so the app never wrote a file a
|
|
40
|
+
* reviewer could read, and a capability-authored agent has no class to hang `@UseGuards` on.
|
|
41
|
+
*/
|
|
42
|
+
readonly access?: Exclude<AccessDecision, 'undeclared'>;
|
|
33
43
|
/** Method name reported for this agent's route (default `'run'`). */
|
|
34
44
|
readonly methodName?: string;
|
|
35
45
|
/** Optional owning class, kept only for guard resolution parity with controllers. */
|
|
@@ -85,6 +95,16 @@ interface AgentRuntime {
|
|
|
85
95
|
interface TheoAppOptions {
|
|
86
96
|
/** Controller classes decorated with @Controller. */
|
|
87
97
|
controllers: Function[];
|
|
98
|
+
/**
|
|
99
|
+
* What to do with a route that declared no access decision (#576).
|
|
100
|
+
*
|
|
101
|
+
* `'deny'` (default) refuses with 403. `'warn'` serves it after saying so once — the migration
|
|
102
|
+
* escape for an app whose agent endpoints are open today, and nothing else.
|
|
103
|
+
*
|
|
104
|
+
* The default was `'warn'` in 1.2.0 so the flip did not land inside a patch. This is the major
|
|
105
|
+
* that release bought.
|
|
106
|
+
*/
|
|
107
|
+
undeclaredRoutes?: UndeclaredRoutePolicy;
|
|
88
108
|
/**
|
|
89
109
|
* Agents to auto-wire (routes + SSE + tools). M53 — these are prepared ENTRIES, not decorated
|
|
90
110
|
* classes: the app no longer reads agent metadata, so authoring is free to be capability-based
|
|
@@ -164,6 +184,17 @@ declare class TheoApp {
|
|
|
164
184
|
getServerHandle(): ServerHandle;
|
|
165
185
|
close(): Promise<void>;
|
|
166
186
|
private agentRoutes;
|
|
187
|
+
/**
|
|
188
|
+
* Paths already warned about (#576).
|
|
189
|
+
*
|
|
190
|
+
* Controller routes are classified at dispatch rather than at mount — the app builds its route
|
|
191
|
+
* table from walked metadata and the public marker lives on the class, so the cheapest place to
|
|
192
|
+
* ask is where both are already in hand. The set is what keeps it to one line per route instead
|
|
193
|
+
* of one per request.
|
|
194
|
+
*/
|
|
195
|
+
private readonly warnedUndeclared;
|
|
196
|
+
/** #576 — how this app answers a route nobody declared. Set once, at create. */
|
|
197
|
+
private readonly undeclaredRoutes;
|
|
167
198
|
/**
|
|
168
199
|
* Synchronous since B-M67-21: the only `await` here was the dynamic `import('@theokit/agents')`
|
|
169
200
|
* that the inversion removed, and `AgentRuntime.generateAgentRoutes` returns routes directly.
|
package/dist/app.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
HttpDecoratorsConfigError,
|
|
3
|
+
classifyAccess,
|
|
3
4
|
createExecutionContext,
|
|
5
|
+
undeclaredRouteRefusal,
|
|
6
|
+
undeclaredRouteWarning,
|
|
4
7
|
walkControllerMetadata
|
|
5
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-R72YKDQ4.js";
|
|
6
9
|
import {
|
|
7
10
|
ForbiddenException,
|
|
8
11
|
HttpException
|
|
@@ -324,6 +327,7 @@ var TheoApp = class _TheoApp {
|
|
|
324
327
|
readyPath;
|
|
325
328
|
readinessChecks;
|
|
326
329
|
constructor(opts) {
|
|
330
|
+
this.undeclaredRoutes = opts?.undeclaredRoutes ?? "deny";
|
|
327
331
|
const hp = opts?.healthPath ?? "/__theo/health";
|
|
328
332
|
const rp = opts?.readyPath ?? "/__theo/ready";
|
|
329
333
|
if (hp.startsWith("/api/")) throw new Error(`[TheoApp] healthPath "${hp}" must not start with /api/ \u2014 would collide with user routes`);
|
|
@@ -446,6 +450,17 @@ var TheoApp = class _TheoApp {
|
|
|
446
450
|
// ── Auto-wire agents (the "SpringApplication.run()" moment) ──
|
|
447
451
|
agentRoutes = [];
|
|
448
452
|
/**
|
|
453
|
+
* Paths already warned about (#576).
|
|
454
|
+
*
|
|
455
|
+
* Controller routes are classified at dispatch rather than at mount — the app builds its route
|
|
456
|
+
* table from walked metadata and the public marker lives on the class, so the cheapest place to
|
|
457
|
+
* ask is where both are already in hand. The set is what keeps it to one line per route instead
|
|
458
|
+
* of one per request.
|
|
459
|
+
*/
|
|
460
|
+
warnedUndeclared = /* @__PURE__ */ new Set();
|
|
461
|
+
/** #576 — how this app answers a route nobody declared. Set once, at create. */
|
|
462
|
+
undeclaredRoutes;
|
|
463
|
+
/**
|
|
449
464
|
* Synchronous since B-M67-21: the only `await` here was the dynamic `import('@theokit/agents')`
|
|
450
465
|
* that the inversion removed, and `AgentRuntime.generateAgentRoutes` returns routes directly.
|
|
451
466
|
*
|
|
@@ -475,6 +490,7 @@ var TheoApp = class _TheoApp {
|
|
|
475
490
|
}
|
|
476
491
|
const agentIdentity = entry.agentClass ?? /* @__PURE__ */ __name(function agent() {
|
|
477
492
|
}, "agent");
|
|
493
|
+
const access = classifyAccess(entry);
|
|
478
494
|
const routes = runtime.generateAgentRoutes({
|
|
479
495
|
walkResult: {
|
|
480
496
|
route: entry.route
|
|
@@ -495,9 +511,19 @@ var TheoApp = class _TheoApp {
|
|
|
495
511
|
handler: route.handler,
|
|
496
512
|
guards: entry.guards ?? [],
|
|
497
513
|
agentClass: agentIdentity,
|
|
498
|
-
methodName: entry.methodName ?? "run"
|
|
514
|
+
methodName: entry.methodName ?? "run",
|
|
515
|
+
access
|
|
499
516
|
});
|
|
500
517
|
}
|
|
518
|
+
if (access === "undeclared") {
|
|
519
|
+
for (const route of routes) {
|
|
520
|
+
if (this.undeclaredRoutes === "deny") {
|
|
521
|
+
console.error(`[theokit] ${undeclaredRouteRefusal("agent", route.path)}`);
|
|
522
|
+
} else {
|
|
523
|
+
console.warn(undeclaredRouteWarning("agent", route.path));
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
501
527
|
console.log(` \u{1F916} Agent "${entry.name}" mounted at ${entry.route}/chat (${compiled.tools.length} tools)`);
|
|
502
528
|
}
|
|
503
529
|
}
|
|
@@ -611,6 +637,10 @@ var TheoApp = class _TheoApp {
|
|
|
611
637
|
}
|
|
612
638
|
for (const route of this.agentRoutes) {
|
|
613
639
|
if (request.method.toUpperCase() === route.method && route.pattern.test(pathname)) {
|
|
640
|
+
if (route.access === "undeclared" && this.undeclaredRoutes === "deny") {
|
|
641
|
+
const ex = new ForbiddenException(undeclaredRouteRefusal("agent", pathname));
|
|
642
|
+
return jsonResponse(ex.statusCode, ex.toJSON());
|
|
643
|
+
}
|
|
614
644
|
if (route.guards.length > 0) {
|
|
615
645
|
const ctx = createExecutionContext(request, route.agentClass, route.methodName);
|
|
616
646
|
for (const GuardCtor of route.guards) {
|
|
@@ -636,6 +666,16 @@ var TheoApp = class _TheoApp {
|
|
|
636
666
|
});
|
|
637
667
|
}
|
|
638
668
|
const { entry, params } = match;
|
|
669
|
+
if (entry.walk.access === "undeclared") {
|
|
670
|
+
if (this.undeclaredRoutes === "deny") {
|
|
671
|
+
const ex = new ForbiddenException(undeclaredRouteRefusal("controller", url.pathname));
|
|
672
|
+
return jsonResponse(ex.statusCode, ex.toJSON());
|
|
673
|
+
}
|
|
674
|
+
if (!this.warnedUndeclared.has(url.pathname)) {
|
|
675
|
+
this.warnedUndeclared.add(url.pathname);
|
|
676
|
+
console.warn(undeclaredRouteWarning("controller", url.pathname));
|
|
677
|
+
}
|
|
678
|
+
}
|
|
639
679
|
try {
|
|
640
680
|
const ctx = createExecutionContext(request, entry.instance.constructor, entry.walk.propertyKey);
|
|
641
681
|
for (const GuardCtor of entry.walk.guards) {
|
|
@@ -799,4 +839,4 @@ export {
|
|
|
799
839
|
streamToResponse,
|
|
800
840
|
TheoApp
|
|
801
841
|
};
|
|
802
|
-
//# sourceMappingURL=chunk-
|
|
842
|
+
//# sourceMappingURL=chunk-6HVQHSPX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app.ts","../src/request-context.ts","../src/static.ts","../src/stream-renderer.ts"],"mappings":"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","names":["AsyncLocalStorage","storage","AsyncLocalStorage","getRequestContext","ctx","getStore","Error","tryGetRequestContext","runWithRequestContext","fn","run","MIME_TYPES","UNSAFE_PATH_RE","getMimeType","filePath","dot","lastIndexOf","ext","slice","toLowerCase","isSafePath","pathname","test","readFileBun","fullPath","g","globalThis","BunRT","Bun","file","exists","buf","arrayBuffer","content","Uint8Array","size","byteLength","readFileDeno","DenoRT","Deno","stat","isDirectory","readFile","readFileNode","fs","handle","open","close","containedRealPath","root","sep","realPath","realpath","realRoot","startsWith","safePath","resolveRoot","join","cwd","resolve","createStaticHandler","options","maxAge","resolvedRoot","request","method","toUpperCase","url","URL","decodeURIComponent","result","endsWith","includes","contentType","headers","String","Response","status","DOCTYPE","encoder","TextEncoder","renderToStream","options","root","waitForAll","reactDomServer","renderToReadableStream","renderWithReadableStream","renderToString","console","warn","renderWithString","Error","renderFn","reactStream","allReady","doctypeStream","prependDoctype","stream","html","bytes","encode","ReadableStream","start","controller","enqueue","close","Promise","resolve","source","reader","getReader","doctypeSent","pull","value","done","read","cancel","streamToResponse","result","Response","status","headers","TheoApp","serverHandle","routes","frontendHtml","streamingRoot","staticHandler","startTime","Date","now","healthPath","readyPath","readinessChecks","opts","undeclaredRoutes","hp","rp","startsWith","Error","adapter","createNodeAdapter","createServer","request","handleRequest","create","app","registry","Map","module","moduleMeta","Reflect","getMetadata","allModules","imports","Mod","meta","Prov","providers","has","set","Controller","controllers","paramTypes","args","map","pt","dep","get","name","instance","postConstruct","result","Promise","walks","walkControllerMetadata","w","push","walk","sort","a","b","aP","fullPath","includes","bP","entry","paramNames","regexStr","replace","_m","compiledPattern","RegExp","compiledParamNames","needsBody","paramEntries","some","p","source","root","streaming","renderToString","html","staticDir","createStaticHandler","agents","length","autoWireAgents","listen","port","resolve","console","log","getServerHandle","close","agentRoutes","warnedUndeclared","Set","entries","_registry","runtime","agentRuntime","undefined","HttpDecoratorsConfigError","apiKey","llmApiKey","process","env","OPENROUTER_API_KEY","compiled","createRun","agentStreamFactory","tools","model","llmModel","createSdkAgentStream","createFallbackStream","agentIdentity","agentClass","agent","access","classifyAccess","generateAgentRoutes","walkResult","route","compiledOptions","path","method","pattern","handler","guards","methodName","error","undeclaredRouteRefusal","warn","undeclaredRouteWarning","handleReadinessCheck","jsonResponse","status","checks","results","all","check","race","setTimeout","healthy","message","err","allHealthy","every","r","agentName","msg","_message","_sessionId","events","type","runId","code","retryable","Symbol","asyncIterator","i","next","value","done","pathname","URL","url","reqCtx","params","startedAt","runWithRequestContext","handleRequestInContext","_reqCtx","uptime","timestamp","renderToStream","streamToResponse","Response","headers","staticResponse","toUpperCase","test","ex","ForbiddenException","statusCode","toJSON","ctx","createExecutionContext","GuardCtor","guard","canActivate","match","findRoute","add","propertyKey","body","text","clone","JSON","parse","bodySchema","safeParse","success","issues","data","buildArgs","Object","fromEntries","searchParams","redirect","location","handlerFn","interceptors","runInterceptors","apply","buildResponse","filters","runExceptionFilters","HttpException","verb","exec","forEach","query","max","Math","index","Array","from","key","toLowerCase","stringify","n","v"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
HttpDecoratorsConfigError
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-R72YKDQ4.js";
|
|
4
4
|
import {
|
|
5
5
|
resolveOrNew
|
|
6
6
|
} from "./chunk-JP4J23TV.js";
|
|
@@ -285,4 +285,4 @@ export {
|
|
|
285
285
|
isControllerClass,
|
|
286
286
|
resolveBody
|
|
287
287
|
};
|
|
288
|
-
//# sourceMappingURL=chunk-
|
|
288
|
+
//# sourceMappingURL=chunk-BXJBQ4EH.js.map
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CONTROLLER_PREFIX,
|
|
3
|
+
EXPOSE_AGENT,
|
|
4
|
+
ROUTE_HEADERS,
|
|
5
|
+
ROUTE_METHODS,
|
|
6
|
+
ROUTE_PARAMS,
|
|
7
|
+
ROUTE_REDIRECT,
|
|
8
|
+
ROUTE_STATUS,
|
|
9
|
+
USE_FILTERS,
|
|
10
|
+
USE_GUARDS,
|
|
11
|
+
USE_INTERCEPTORS,
|
|
12
|
+
getMeta
|
|
13
|
+
} from "./chunk-AJOJXZRY.js";
|
|
14
|
+
import {
|
|
15
|
+
__name
|
|
16
|
+
} from "./chunk-Z4QWC7IK.js";
|
|
17
|
+
|
|
18
|
+
// src/bridge/errors.ts
|
|
19
|
+
var HttpDecoratorsConfigError = class extends Error {
|
|
20
|
+
static {
|
|
21
|
+
__name(this, "HttpDecoratorsConfigError");
|
|
22
|
+
}
|
|
23
|
+
name = "HttpDecoratorsConfigError";
|
|
24
|
+
constructor(message) {
|
|
25
|
+
super(message);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/bridge/execution-context.ts
|
|
30
|
+
function createExecutionContext(request, controllerClass, methodName) {
|
|
31
|
+
const url = new URL(request.url);
|
|
32
|
+
return {
|
|
33
|
+
getRequest: /* @__PURE__ */ __name(() => request, "getRequest"),
|
|
34
|
+
getUrl: /* @__PURE__ */ __name(() => url, "getUrl"),
|
|
35
|
+
getClass: /* @__PURE__ */ __name(() => controllerClass, "getClass"),
|
|
36
|
+
getMethodName: /* @__PURE__ */ __name(() => methodName, "getMethodName")
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
__name(createExecutionContext, "createExecutionContext");
|
|
40
|
+
|
|
41
|
+
// src/decorators/set-metadata.ts
|
|
42
|
+
import "reflect-metadata";
|
|
43
|
+
var decoratorKeyCounter = 0;
|
|
44
|
+
function createDecorator() {
|
|
45
|
+
const key = /* @__PURE__ */ Symbol.for(`theokit:custom:${++decoratorKeyCounter}`);
|
|
46
|
+
const decorator = /* @__PURE__ */ __name((value) => {
|
|
47
|
+
return (target, propertyKey) => {
|
|
48
|
+
const metaTarget = propertyKey !== void 0 ? target.constructor : target;
|
|
49
|
+
Reflect.defineMetadata(key, value, metaTarget, propertyKey);
|
|
50
|
+
};
|
|
51
|
+
}, "decorator");
|
|
52
|
+
decorator.key = key;
|
|
53
|
+
return decorator;
|
|
54
|
+
}
|
|
55
|
+
__name(createDecorator, "createDecorator");
|
|
56
|
+
function SetMetadata(metaKey, value) {
|
|
57
|
+
return (target, propertyKey) => {
|
|
58
|
+
const metaTarget = propertyKey !== void 0 ? target.constructor : target;
|
|
59
|
+
Reflect.defineMetadata(metaKey, value, metaTarget, propertyKey);
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
__name(SetMetadata, "SetMetadata");
|
|
63
|
+
var Reflector = class {
|
|
64
|
+
static {
|
|
65
|
+
__name(this, "Reflector");
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Read metadata set by a typed decorator created via createDecorator<T>().
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* const Roles = createDecorator<string[]>()
|
|
73
|
+
* const reflector = new Reflector()
|
|
74
|
+
* const roles = reflector.get(Roles, handlerFn) // string[] | undefined
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
get(decorator, target, propertyKey) {
|
|
78
|
+
const key = decorator.key;
|
|
79
|
+
if (!key) return void 0;
|
|
80
|
+
if (propertyKey !== void 0) {
|
|
81
|
+
return Reflect.getMetadata(key, target, propertyKey);
|
|
82
|
+
}
|
|
83
|
+
return Reflect.getMetadata(key, target);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Read metadata set by @SetMetadata(key, value).
|
|
87
|
+
*/
|
|
88
|
+
getByKey(key, target, propertyKey) {
|
|
89
|
+
if (propertyKey !== void 0) {
|
|
90
|
+
return Reflect.getMetadata(key, target, propertyKey);
|
|
91
|
+
}
|
|
92
|
+
return Reflect.getMetadata(key, target);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Read metadata checking method-level first, then class-level.
|
|
96
|
+
* Returns the first non-undefined value found.
|
|
97
|
+
*
|
|
98
|
+
* NestJS equivalent: `reflector.getAllAndOverride(ROLES_KEY, [context.getHandler(), context.getClass()])`
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* const Roles = createDecorator<string[]>()
|
|
103
|
+
* // In a guard:
|
|
104
|
+
* const roles = reflector.getAllAndOverride(Roles, context.getClass(), context.getMethodName())
|
|
105
|
+
* // Checks method-level @Roles first, falls back to class-level @Roles
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
getAllAndOverride(decorator, target, propertyKey) {
|
|
109
|
+
if (propertyKey !== void 0) {
|
|
110
|
+
const methodLevel = this.get(decorator, target, propertyKey);
|
|
111
|
+
if (methodLevel !== void 0) return methodLevel;
|
|
112
|
+
}
|
|
113
|
+
return this.get(decorator, target);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Read metadata checking method-level first, then class-level, by raw key.
|
|
117
|
+
* Returns the first non-undefined value found.
|
|
118
|
+
*/
|
|
119
|
+
getAllAndOverrideByKey(key, target, propertyKey) {
|
|
120
|
+
if (propertyKey !== void 0) {
|
|
121
|
+
const methodLevel = this.getByKey(key, target, propertyKey);
|
|
122
|
+
if (methodLevel !== void 0) return methodLevel;
|
|
123
|
+
}
|
|
124
|
+
return this.getByKey(key, target);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Read metadata from both method-level and class-level, merging arrays.
|
|
128
|
+
* Returns all found values as a flat array.
|
|
129
|
+
*
|
|
130
|
+
* NestJS equivalent: `reflector.getAllAndMerge(ROLES_KEY, [context.getHandler(), context.getClass()])`
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```ts
|
|
134
|
+
* const Tags = createDecorator<string[]>()
|
|
135
|
+
*
|
|
136
|
+
* @Tags(['api'])
|
|
137
|
+
* @Controller('cats')
|
|
138
|
+
* class CatsCtrl {
|
|
139
|
+
* @Tags(['read'])
|
|
140
|
+
* @Get()
|
|
141
|
+
* findAll() {}
|
|
142
|
+
* }
|
|
143
|
+
*
|
|
144
|
+
* reflector.getAllAndMerge(Tags, CatsCtrl, 'findAll')
|
|
145
|
+
* // → ['read', 'api'] (method + class merged)
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
getAllAndMerge(decorator, target, propertyKey) {
|
|
149
|
+
const result = [];
|
|
150
|
+
if (propertyKey !== void 0) {
|
|
151
|
+
const methodLevel = this.get(decorator, target, propertyKey);
|
|
152
|
+
if (methodLevel !== void 0) {
|
|
153
|
+
if (Array.isArray(methodLevel)) result.push(...methodLevel);
|
|
154
|
+
else result.push(methodLevel);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const classLevel = this.get(decorator, target);
|
|
158
|
+
if (classLevel !== void 0) {
|
|
159
|
+
if (Array.isArray(classLevel)) result.push(...classLevel);
|
|
160
|
+
else result.push(classLevel);
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// src/decorators/public.ts
|
|
167
|
+
var PUBLIC_ROUTE_METADATA = "theokit:public";
|
|
168
|
+
var Public = /* @__PURE__ */ __name(() => SetMetadata(PUBLIC_ROUTE_METADATA, true), "Public");
|
|
169
|
+
|
|
170
|
+
// src/route-access.ts
|
|
171
|
+
function classifyAccess(declared) {
|
|
172
|
+
if (declared.access !== void 0) return declared.access;
|
|
173
|
+
return declared.guards !== void 0 && declared.guards.length > 0 ? "guarded" : "undeclared";
|
|
174
|
+
}
|
|
175
|
+
__name(classifyAccess, "classifyAccess");
|
|
176
|
+
var declareOpen = /* @__PURE__ */ __name((kind) => kind === "agent" ? "`access: 'public'`" : "`@Public()`", "declareOpen");
|
|
177
|
+
function undeclaredRouteWarning(kind, route) {
|
|
178
|
+
return `[theokit] ${kind} route ${route} declares no access decision and is served to anyone because \`undeclaredRoutes: 'warn'\` is set. Declare one: attach a guard, or say it is open on purpose (${declareOpen(kind)}). Dropping the option refuses it with 403.`;
|
|
179
|
+
}
|
|
180
|
+
__name(undeclaredRouteWarning, "undeclaredRouteWarning");
|
|
181
|
+
function undeclaredRouteRefusal(kind, route) {
|
|
182
|
+
return `${kind === "agent" ? "Agent" : "Controller"} route ${route} declares no access decision, so it is refused. Attach a guard, or say it is open on purpose (${declareOpen(kind)}). \`undeclaredRoutes: 'warn'\` serves it with a warning while you migrate.`;
|
|
183
|
+
}
|
|
184
|
+
__name(undeclaredRouteRefusal, "undeclaredRouteRefusal");
|
|
185
|
+
|
|
186
|
+
// src/bridge/dto-zod.ts
|
|
187
|
+
function resolveDtoSchema(dtoClass) {
|
|
188
|
+
if (typeof dtoClass !== "function") return void 0;
|
|
189
|
+
const maybe = dtoClass.schema;
|
|
190
|
+
if (maybe !== null && maybe !== void 0 && typeof maybe.safeParse === "function") {
|
|
191
|
+
return maybe;
|
|
192
|
+
}
|
|
193
|
+
return void 0;
|
|
194
|
+
}
|
|
195
|
+
__name(resolveDtoSchema, "resolveDtoSchema");
|
|
196
|
+
|
|
197
|
+
// src/bridge/walk-metadata.ts
|
|
198
|
+
import "reflect-metadata";
|
|
199
|
+
function joinPath(prefix, path) {
|
|
200
|
+
return ("/" + prefix + "/" + path).replace(/\/+/g, "/").replace(/\/$/, "") || "/";
|
|
201
|
+
}
|
|
202
|
+
__name(joinPath, "joinPath");
|
|
203
|
+
function resolveBodySchema(paramEntries, ControllerClass, propertyKey) {
|
|
204
|
+
const bodyParam = paramEntries.find((p) => p.source === "body" && !p.key);
|
|
205
|
+
if (!bodyParam) return void 0;
|
|
206
|
+
if (bodyParam.schema) return bodyParam.schema;
|
|
207
|
+
const paramTypes = Reflect.getMetadata("design:paramtypes", ControllerClass.prototype, propertyKey) ?? [];
|
|
208
|
+
if (paramTypes.length > 0) {
|
|
209
|
+
return resolveDtoSchema(paramTypes[bodyParam.index]);
|
|
210
|
+
}
|
|
211
|
+
console.warn(`[@theokit/http] method ${String(propertyKey)} on ${ControllerClass.name}: @Body() without explicit schema and emitDecoratorMetadata is not active. Body will be passed raw (no validation). Fix: use @Body(zodSchema) for validation without metadata emission.`);
|
|
212
|
+
return void 0;
|
|
213
|
+
}
|
|
214
|
+
__name(resolveBodySchema, "resolveBodySchema");
|
|
215
|
+
function declaredAccess(ControllerClass, propertyKey, guards) {
|
|
216
|
+
const isPublic = Reflect.getMetadata(PUBLIC_ROUTE_METADATA, ControllerClass) === true || Reflect.getMetadata(PUBLIC_ROUTE_METADATA, ControllerClass, propertyKey) === true;
|
|
217
|
+
return classifyAccess({
|
|
218
|
+
access: isPublic ? "public" : void 0,
|
|
219
|
+
guards
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
__name(declaredAccess, "declaredAccess");
|
|
223
|
+
var walkCache = /* @__PURE__ */ new WeakMap();
|
|
224
|
+
function walkControllerMetadata(ControllerClass) {
|
|
225
|
+
const cached = walkCache.get(ControllerClass);
|
|
226
|
+
if (cached) return cached;
|
|
227
|
+
const controllerMeta = getMeta(CONTROLLER_PREFIX, ControllerClass);
|
|
228
|
+
if (!controllerMeta) {
|
|
229
|
+
throw new HttpDecoratorsConfigError(`Controller class ${ControllerClass.name} is missing @Controller() decorator. Add @Controller('prefix') to the class declaration.`);
|
|
230
|
+
}
|
|
231
|
+
const { prefix, host } = controllerMeta;
|
|
232
|
+
if (host) {
|
|
233
|
+
console.warn(`[@theokit/http] @Controller host '${host}' captured but enforcement deferred to v0.2.0`);
|
|
234
|
+
}
|
|
235
|
+
const methods = getMeta(ROUTE_METHODS, ControllerClass) ?? [];
|
|
236
|
+
const paramsMap = getMeta(ROUTE_PARAMS, ControllerClass) ?? /* @__PURE__ */ new Map();
|
|
237
|
+
const classGuards = getMeta(USE_GUARDS, ControllerClass) ?? [];
|
|
238
|
+
const classInterceptors = getMeta(USE_INTERCEPTORS, ControllerClass) ?? [];
|
|
239
|
+
const classFilters = getMeta(USE_FILTERS, ControllerClass) ?? [];
|
|
240
|
+
const result = methods.map((m) => {
|
|
241
|
+
const paramEntries = paramsMap.get(m.propertyKey) ?? [];
|
|
242
|
+
const bodySchema = resolveBodySchema(paramEntries, ControllerClass, m.propertyKey);
|
|
243
|
+
const methodGuards = getMeta(USE_GUARDS, ControllerClass, m.propertyKey) ?? [];
|
|
244
|
+
const methodInterceptors = getMeta(USE_INTERCEPTORS, ControllerClass, m.propertyKey) ?? [];
|
|
245
|
+
return {
|
|
246
|
+
verb: m.verb,
|
|
247
|
+
fullPath: joinPath(prefix, m.path),
|
|
248
|
+
propertyKey: m.propertyKey,
|
|
249
|
+
bodySchema,
|
|
250
|
+
paramEntries: [
|
|
251
|
+
...paramEntries
|
|
252
|
+
].sort((a, b) => a.index - b.index),
|
|
253
|
+
status: getMeta(ROUTE_STATUS, ControllerClass, m.propertyKey),
|
|
254
|
+
headers: getMeta(ROUTE_HEADERS, ControllerClass, m.propertyKey) ?? [],
|
|
255
|
+
redirect: getMeta(ROUTE_REDIRECT, ControllerClass, m.propertyKey),
|
|
256
|
+
guards: [
|
|
257
|
+
...classGuards,
|
|
258
|
+
...methodGuards
|
|
259
|
+
],
|
|
260
|
+
interceptors: [
|
|
261
|
+
...classInterceptors,
|
|
262
|
+
...methodInterceptors
|
|
263
|
+
],
|
|
264
|
+
filters: getMeta(USE_FILTERS, ControllerClass, m.propertyKey) ?? classFilters,
|
|
265
|
+
access: declaredAccess(ControllerClass, m.propertyKey, [
|
|
266
|
+
...classGuards,
|
|
267
|
+
...methodGuards
|
|
268
|
+
])
|
|
269
|
+
};
|
|
270
|
+
});
|
|
271
|
+
const exposeEntries = getMeta(EXPOSE_AGENT, ControllerClass) ?? [];
|
|
272
|
+
const agentResults = exposeEntries.map((e) => {
|
|
273
|
+
const memberGuards = getMeta(USE_GUARDS, ControllerClass, e.propertyKey) ?? [];
|
|
274
|
+
const verb = "POST";
|
|
275
|
+
return {
|
|
276
|
+
verb,
|
|
277
|
+
fullPath: joinPath(prefix, String(e.propertyKey)),
|
|
278
|
+
propertyKey: e.propertyKey,
|
|
279
|
+
paramEntries: [],
|
|
280
|
+
headers: [],
|
|
281
|
+
guards: [
|
|
282
|
+
...classGuards,
|
|
283
|
+
...memberGuards
|
|
284
|
+
],
|
|
285
|
+
interceptors: [],
|
|
286
|
+
filters: classFilters,
|
|
287
|
+
access: declaredAccess(ControllerClass, e.propertyKey, [
|
|
288
|
+
...classGuards,
|
|
289
|
+
...memberGuards
|
|
290
|
+
]),
|
|
291
|
+
agent: {
|
|
292
|
+
module: e.agent,
|
|
293
|
+
opts: e.opts
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
});
|
|
297
|
+
const all = [
|
|
298
|
+
...result,
|
|
299
|
+
...agentResults
|
|
300
|
+
];
|
|
301
|
+
walkCache.set(ControllerClass, all);
|
|
302
|
+
return all;
|
|
303
|
+
}
|
|
304
|
+
__name(walkControllerMetadata, "walkControllerMetadata");
|
|
305
|
+
|
|
306
|
+
export {
|
|
307
|
+
HttpDecoratorsConfigError,
|
|
308
|
+
createExecutionContext,
|
|
309
|
+
createDecorator,
|
|
310
|
+
SetMetadata,
|
|
311
|
+
Reflector,
|
|
312
|
+
PUBLIC_ROUTE_METADATA,
|
|
313
|
+
Public,
|
|
314
|
+
classifyAccess,
|
|
315
|
+
undeclaredRouteWarning,
|
|
316
|
+
undeclaredRouteRefusal,
|
|
317
|
+
resolveDtoSchema,
|
|
318
|
+
joinPath,
|
|
319
|
+
walkControllerMetadata
|
|
320
|
+
};
|
|
321
|
+
//# sourceMappingURL=chunk-R72YKDQ4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bridge/errors.ts","../src/bridge/execution-context.ts","../src/decorators/set-metadata.ts","../src/decorators/public.ts","../src/route-access.ts","../src/bridge/dto-zod.ts","../src/bridge/walk-metadata.ts"],"mappings":"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","names":["HttpDecoratorsConfigError","Error","name","message","createExecutionContext","request","controllerClass","methodName","url","URL","getRequest","getUrl","getClass","getMethodName","decoratorKeyCounter","createDecorator","key","Symbol","for","decorator","value","target","propertyKey","metaTarget","undefined","Reflect","defineMetadata","SetMetadata","metaKey","Reflector","get","getMetadata","getByKey","getAllAndOverride","methodLevel","getAllAndOverrideByKey","getAllAndMerge","result","Array","isArray","push","classLevel","PUBLIC_ROUTE_METADATA","Public","SetMetadata","classifyAccess","declared","access","undefined","guards","length","declareOpen","kind","undeclaredRouteWarning","route","undeclaredRouteRefusal","resolveDtoSchema","dtoClass","undefined","maybe","schema","safeParse","joinPath","prefix","path","replace","resolveBodySchema","paramEntries","ControllerClass","propertyKey","bodyParam","find","p","source","key","undefined","schema","paramTypes","Reflect","getMetadata","prototype","length","resolveDtoSchema","index","console","warn","String","name","declaredAccess","guards","isPublic","PUBLIC_ROUTE_METADATA","classifyAccess","access","walkCache","WeakMap","walkControllerMetadata","cached","get","controllerMeta","getMeta","CONTROLLER_PREFIX","HttpDecoratorsConfigError","host","methods","ROUTE_METHODS","paramsMap","ROUTE_PARAMS","Map","classGuards","USE_GUARDS","classInterceptors","USE_INTERCEPTORS","classFilters","USE_FILTERS","result","map","m","bodySchema","methodGuards","methodInterceptors","verb","fullPath","sort","a","b","status","ROUTE_STATUS","headers","ROUTE_HEADERS","redirect","ROUTE_REDIRECT","interceptors","filters","exposeEntries","EXPOSE_AGENT","agentResults","e","memberGuards","agent","module","opts","all","set"]}
|