raffel 1.1.5-next.86b4dca → 1.1.5-next.eebede0
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/core/registry.d.ts +5 -0
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +1 -0
- package/dist/core/registry.js.map +1 -1
- package/dist/middleware/policy/bootstrap.d.ts +33 -2
- package/dist/middleware/policy/bootstrap.d.ts.map +1 -1
- package/dist/middleware/policy/bootstrap.js +40 -9
- package/dist/middleware/policy/bootstrap.js.map +1 -1
- package/dist/middleware/policy/co-located/loader.d.ts +33 -0
- package/dist/middleware/policy/co-located/loader.d.ts.map +1 -0
- package/dist/middleware/policy/co-located/loader.js +110 -0
- package/dist/middleware/policy/co-located/loader.js.map +1 -0
- package/dist/middleware/policy/co-located/resolver.d.ts +83 -0
- package/dist/middleware/policy/co-located/resolver.d.ts.map +1 -0
- package/dist/middleware/policy/co-located/resolver.js +122 -0
- package/dist/middleware/policy/co-located/resolver.js.map +1 -0
- package/dist/middleware/policy/engine/compile.d.ts.map +1 -1
- package/dist/middleware/policy/engine/compile.js +9 -0
- package/dist/middleware/policy/engine/compile.js.map +1 -1
- package/dist/middleware/policy/engine/evaluate.d.ts.map +1 -1
- package/dist/middleware/policy/engine/evaluate.js +20 -0
- package/dist/middleware/policy/engine/evaluate.js.map +1 -1
- package/dist/middleware/policy/engine/index.d.ts.map +1 -1
- package/dist/middleware/policy/engine/index.js +19 -2
- package/dist/middleware/policy/engine/index.js.map +1 -1
- package/dist/middleware/policy/index.d.ts +4 -0
- package/dist/middleware/policy/index.d.ts.map +1 -1
- package/dist/middleware/policy/index.js +3 -0
- package/dist/middleware/policy/index.js.map +1 -1
- package/dist/middleware/policy/interceptor.d.ts.map +1 -1
- package/dist/middleware/policy/interceptor.js +11 -2
- package/dist/middleware/policy/interceptor.js.map +1 -1
- package/dist/middleware/policy/types.d.ts +41 -0
- package/dist/middleware/policy/types.d.ts.map +1 -1
- package/dist/ports/outbound/policy-engine.d.ts +7 -0
- package/dist/ports/outbound/policy-engine.d.ts.map +1 -1
- package/dist/server/builder/execution-http-resources.d.ts.map +1 -1
- package/dist/server/builder/execution-http-resources.js +1 -0
- package/dist/server/builder/execution-http-resources.js.map +1 -1
- package/dist/server/builder/execution-types.d.ts +1 -0
- package/dist/server/builder/execution-types.d.ts.map +1 -1
- package/dist/server/builder/execution-web-protocols.d.ts.map +1 -1
- package/dist/server/builder/execution-web-protocols.js +2 -2
- package/dist/server/builder/execution-web-protocols.js.map +1 -1
- package/dist/server/builder/lifecycle.d.ts +1 -0
- package/dist/server/builder/lifecycle.d.ts.map +1 -1
- package/dist/server/builder/lifecycle.js +2 -1
- package/dist/server/builder/lifecycle.js.map +1 -1
- package/dist/server/builder/operation-registrar.d.ts +1 -0
- package/dist/server/builder/operation-registrar.d.ts.map +1 -1
- package/dist/server/builder/operation-registrar.js +2 -1
- package/dist/server/builder/operation-registrar.js.map +1 -1
- package/dist/server/builder.d.ts.map +1 -1
- package/dist/server/builder.js +46 -4
- package/dist/server/builder.js.map +1 -1
- package/dist/server/channel-utils.d.ts +3 -1
- package/dist/server/channel-utils.d.ts.map +1 -1
- package/dist/server/channel-utils.js +6 -1
- package/dist/server/channel-utils.js.map +1 -1
- package/dist/server/discovery-bootstrap.d.ts +3 -2
- package/dist/server/discovery-bootstrap.d.ts.map +1 -1
- package/dist/server/discovery-bootstrap.js +2 -1
- package/dist/server/discovery-bootstrap.js.map +1 -1
- package/dist/server/discovery-utils.d.ts +11 -1
- package/dist/server/discovery-utils.d.ts.map +1 -1
- package/dist/server/discovery-utils.js +31 -2
- package/dist/server/discovery-utils.js.map +1 -1
- package/dist/server/fs-routes/loader.d.ts.map +1 -1
- package/dist/server/fs-routes/loader.js +77 -2
- package/dist/server/fs-routes/loader.js.map +1 -1
- package/dist/server/fs-routes/resources/types.d.ts +5 -0
- package/dist/server/fs-routes/resources/types.d.ts.map +1 -1
- package/dist/server/fs-routes/rest/types.d.ts +5 -0
- package/dist/server/fs-routes/rest/types.d.ts.map +1 -1
- package/dist/server/fs-routes/types.d.ts +22 -0
- package/dist/server/fs-routes/types.d.ts.map +1 -1
- package/dist/server/http-lifecycle/index.d.ts.map +1 -1
- package/dist/server/http-lifecycle/index.js +2 -2
- package/dist/server/http-lifecycle/index.js.map +1 -1
- package/dist/server/orchestration/registration.d.ts +12 -0
- package/dist/server/orchestration/registration.d.ts.map +1 -1
- package/dist/server/orchestration/registration.js +24 -3
- package/dist/server/orchestration/registration.js.map +1 -1
- package/dist/server/rest-middleware.d.ts +1 -0
- package/dist/server/rest-middleware.d.ts.map +1 -1
- package/dist/server/rest-middleware.js +41 -3
- package/dist/server/rest-middleware.js.map +1 -1
- package/dist/server/types/lifecycle-types.d.ts +8 -0
- package/dist/server/types/lifecycle-types.d.ts.map +1 -1
- package/dist/server/types/protocol-namespace-types.d.ts +6 -0
- package/dist/server/types/protocol-namespace-types.d.ts.map +1 -1
- package/dist/types/handlers.d.ts +5 -0
- package/dist/types/handlers.d.ts.map +1 -1
- package/dist/ui/core/registry.d.ts +5 -0
- package/dist/ui/core/registry.d.ts.map +1 -1
- package/dist/ui/middleware/policy/co-located/loader.d.ts +33 -0
- package/dist/ui/middleware/policy/co-located/loader.d.ts.map +1 -0
- package/dist/ui/middleware/policy/co-located/resolver.d.ts +83 -0
- package/dist/ui/middleware/policy/co-located/resolver.d.ts.map +1 -0
- package/dist/ui/middleware/policy/types.d.ts +41 -0
- package/dist/ui/middleware/policy/types.d.ts.map +1 -1
- package/dist/ui/ports/outbound/policy-engine.d.ts +7 -0
- package/dist/ui/ports/outbound/policy-engine.d.ts.map +1 -1
- package/dist/ui/server/fs-routes/loader.d.ts.map +1 -1
- package/dist/ui/server/fs-routes/resources/types.d.ts +5 -0
- package/dist/ui/server/fs-routes/resources/types.d.ts.map +1 -1
- package/dist/ui/server/fs-routes/rest/types.d.ts +5 -0
- package/dist/ui/server/fs-routes/rest/types.d.ts.map +1 -1
- package/dist/ui/server/fs-routes/types.d.ts +22 -0
- package/dist/ui/server/fs-routes/types.d.ts.map +1 -1
- package/dist/ui/types/handlers.d.ts +5 -0
- package/dist/ui/types/handlers.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/core/registry.d.ts
CHANGED
|
@@ -24,6 +24,11 @@ export interface ProcedureOptions {
|
|
|
24
24
|
graphql?: GraphQLMeta;
|
|
25
25
|
httpPath?: string;
|
|
26
26
|
httpMethod?: HttpMethod;
|
|
27
|
+
/**
|
|
28
|
+
* HTTP success status applied by REST/HTTP-override middlewares when the
|
|
29
|
+
* handler completes without error. Defaults to `200`.
|
|
30
|
+
*/
|
|
31
|
+
httpSuccessStatus?: number;
|
|
27
32
|
jsonrpc?: JsonRpcMeta;
|
|
28
33
|
grpc?: GrpcMeta;
|
|
29
34
|
policies?: ContractPolicies;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/core/registry.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAwHhE;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+C,CAAA;IACzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4C,CAAA;IACnE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2C,CAAA;IAEjE,OAAO;QACL,uBAAuB;QAEvB,SAAS,CACP,IAAY,EACZ,OAA0C,EAC1C,UAA4B,EAAE;YAE9B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,sBAAsB,CAAC,CAAA;YACzD,CAAC;YAED,MAAM,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC5D,MAAM,YAAY,GAAG;gBACnB,GAAG,wBAAwB,CAAC,QAAQ,CAAC;gBACrC,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;aAChC,CAAA;YAED,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;gBACnB,OAAO,EAAE,OAA2B;gBACpC,IAAI,EAAE;oBACJ,IAAI,EAAE,WAAW;oBACjB,IAAI;oBACJ,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;oBAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,QAAQ;oBACR,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB;gBACD,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aACjE,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,CACJ,IAAY,EACZ,OAAuC,EACvC,UAAiC,EAAE;YAEnC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,sBAAsB,CAAC,CAAA;YACzD,CAAC;YAED,MAAM,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC5D,MAAM,YAAY,GAAG;gBACnB,GAAG,wBAAwB,CAAC,QAAQ,CAAC;gBACrC,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;aAChC,CAAA;YAED,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;gBAChB,OAAO,EAAE,OAAwB;gBACjC,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI;oBACJ,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,eAAe,EAAE,OAAO,CAAC,SAAS,IAAI,QAAQ;oBAC9C,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,QAAQ;iBACT;gBACD,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aACjE,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CACH,IAAY,EACZ,OAA+B,EAC/B,UAAwB,EAAE;YAE1B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,sBAAsB,CAAC,CAAA;YACzD,CAAC;YAED,MAAM,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC5D,MAAM,YAAY,GAAG;gBACnB,GAAG,wBAAwB,CAAC,QAAQ,CAAC;gBACrC,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;aAChC,CAAA;YAED,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;gBACf,OAAO,EAAE,OAAuB;gBAChC,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO;oBACb,IAAI;oBACJ,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,aAAa;oBAC3C,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;oBAChD,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,QAAQ;iBACT;gBACD,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aACjE,CAAC,CAAA;QACJ,CAAC;QAED,iBAAiB;QAEjB,YAAY,CAAC,IAAY;YACvB,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;QAED,SAAS,CAAC,IAAY;YACpB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QAED,QAAQ,CAAC,IAAY;YACnB,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QAED,GAAG,CAAC,IAAY;YACd,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACtE,CAAC;QAED,wBAAwB;QAExB,IAAI;YACF,MAAM,OAAO,GAAkB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YACtF,IAAI,KAAK,GAAG,CAAC,CAAA;YAEb,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3C,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;YACzB,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;YACzB,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;YACzB,CAAC;YAED,OAAO,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACrE,CAAC;QAED,cAAc;YACZ,MAAM,OAAO,GAAkB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACzD,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3C,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;YACzB,CAAC;YACD,OAAO,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACrE,CAAC;QAED,WAAW;YACT,MAAM,OAAO,GAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACtD,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;YACzB,CAAC;YACD,OAAO,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACrE,CAAC;QAED,UAAU;YACR,MAAM,OAAO,GAAkB,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACrD,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;YACzB,CAAC;YACD,OAAO,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACrE,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -9,9 +9,28 @@
|
|
|
9
9
|
* Slice 10 of the architecture-deepening initiative (PRD #6 / issue #13).
|
|
10
10
|
*/
|
|
11
11
|
import type { LoggerPort } from '../../ports/outbound/logger.js';
|
|
12
|
-
import type { Interceptor } from '../../types/index.js';
|
|
12
|
+
import type { Context, Interceptor } from '../../types/index.js';
|
|
13
13
|
import type { PolicyEnginePort } from '../../ports/outbound/policy-engine.js';
|
|
14
|
-
import type { PolicyConfig, ProcedurePolicyConfig } from './types.js';
|
|
14
|
+
import type { PolicyConfig, Principal, ProcedurePolicyConfig } from './types.js';
|
|
15
|
+
export interface PolicyCoverageEntry {
|
|
16
|
+
/** Operation/channel name as registered in the registry. */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Source kind for diagnostics (e.g. 'procedure', 'channel', 'rest-resource'). */
|
|
19
|
+
kind: string;
|
|
20
|
+
/** Optional file path or other origin marker for the entry. */
|
|
21
|
+
location?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface PolicyCoverageReport {
|
|
24
|
+
defaultMode: 'allow' | 'deny';
|
|
25
|
+
/** Total operations/channels considered. */
|
|
26
|
+
total: number;
|
|
27
|
+
/** Names with at least one policy interceptor attached. */
|
|
28
|
+
covered: number;
|
|
29
|
+
/** Names explicitly marked `public: true` via builder authz. */
|
|
30
|
+
public: number;
|
|
31
|
+
/** Names with neither a policy nor a public marker. Empty when fully covered. */
|
|
32
|
+
gaps: PolicyCoverageEntry[];
|
|
33
|
+
}
|
|
15
34
|
export interface PolicyBootstrap {
|
|
16
35
|
/** The resolved engine (user-supplied or createDefaultEngine). */
|
|
17
36
|
engine: PolicyEnginePort;
|
|
@@ -21,6 +40,18 @@ export interface PolicyBootstrap {
|
|
|
21
40
|
interceptorFactory: (procedureName: string, config: ProcedurePolicyConfig) => Interceptor;
|
|
22
41
|
/** Build the "no policy declared" interceptor for a procedure. */
|
|
23
42
|
noPolicyDeclaredFactory: (procedureName: string) => Interceptor;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the current principal from a request context. Exposed for
|
|
45
|
+
* non-procedure code paths (channels, custom integrations) that need to
|
|
46
|
+
* evaluate the engine outside of the procedure interceptor pipeline.
|
|
47
|
+
*/
|
|
48
|
+
resolvePrincipal: (ctx: Context) => Promise<Principal>;
|
|
49
|
+
/**
|
|
50
|
+
* Compute a structured coverage report against a list of currently
|
|
51
|
+
* registered operations/channels. Useful as a CI assertion or runtime
|
|
52
|
+
* audit when `defaultMode: 'deny'` is configured.
|
|
53
|
+
*/
|
|
54
|
+
getCoverage: (registered: readonly PolicyCoverageEntry[]) => PolicyCoverageReport;
|
|
24
55
|
}
|
|
25
56
|
export interface CreatePolicyBootstrapOptions {
|
|
26
57
|
/** Fallback logger if `policy.logger` is not provided. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/middleware/policy/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/middleware/policy/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAM7E,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEhF,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAA;IACZ,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,OAAO,GAAG,MAAM,CAAA;IAC7B,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;IACd,iFAAiF;IACjF,IAAI,EAAE,mBAAmB,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,MAAM,EAAE,gBAAgB,CAAA;IACxB,gEAAgE;IAChE,WAAW,EAAE,OAAO,GAAG,MAAM,CAAA;IAC7B,uEAAuE;IACvE,kBAAkB,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,KAAK,WAAW,CAAA;IACzF,kEAAkE;IAClE,uBAAuB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,WAAW,CAAA;IAC/D;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IACtD;;;;OAIG;IACH,WAAW,EAAE,CAAC,UAAU,EAAE,SAAS,mBAAmB,EAAE,KAAK,oBAAoB,CAAA;CAClF;AAED,MAAM,WAAW,4BAA4B;IAC3C,0DAA0D;IAC1D,MAAM,EAAE,UAAU,CAAA;IAClB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,OAAO,EAAE,4BAA4B,GACpC,eAAe,GAAG,IAAI,CAyFxB"}
|
|
@@ -41,15 +41,39 @@ export function createPolicyBootstrap(config, options) {
|
|
|
41
41
|
const productionErrorBody = process.env.NODE_ENV === 'production';
|
|
42
42
|
const defaultMode = config.defaultMode ?? 'allow';
|
|
43
43
|
const policyLogger = config.logger ?? fallbackLogger;
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
const coveredNames = new Set();
|
|
45
|
+
const publicNames = new Set();
|
|
46
|
+
const interceptorFactory = (procedureName, procConfig) => {
|
|
47
|
+
coveredNames.add(procedureName);
|
|
48
|
+
if (procConfig.public)
|
|
49
|
+
publicNames.add(procedureName);
|
|
50
|
+
return createPolicyInterceptor({
|
|
51
|
+
engine,
|
|
52
|
+
defaultAction: procedureName,
|
|
53
|
+
config: procConfig,
|
|
54
|
+
principalResolver,
|
|
55
|
+
productionErrorBody,
|
|
56
|
+
logger: policyLogger,
|
|
57
|
+
});
|
|
58
|
+
};
|
|
52
59
|
const noPolicyDeclaredFactory = (procedureName) => createNoPolicyDeclaredInterceptor(procedureName, productionErrorBody);
|
|
60
|
+
const getCoverage = (registered) => {
|
|
61
|
+
const gaps = [];
|
|
62
|
+
let covered = 0;
|
|
63
|
+
let pub = 0;
|
|
64
|
+
for (const entry of registered) {
|
|
65
|
+
if (publicNames.has(entry.name)) {
|
|
66
|
+
pub++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (coveredNames.has(entry.name)) {
|
|
70
|
+
covered++;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
gaps.push(entry);
|
|
74
|
+
}
|
|
75
|
+
return { defaultMode, total: registered.length, covered, public: pub, gaps };
|
|
76
|
+
};
|
|
53
77
|
if (registerMcpProvider) {
|
|
54
78
|
// Sanitised snapshot for MCP discovery — strip `condition` (function,
|
|
55
79
|
// non-serialisable) and emit `hasCondition: boolean` instead.
|
|
@@ -64,6 +88,13 @@ export function createPolicyBootstrap(config, options) {
|
|
|
64
88
|
...(p.match ? { match: p.match } : {}),
|
|
65
89
|
})));
|
|
66
90
|
}
|
|
67
|
-
return {
|
|
91
|
+
return {
|
|
92
|
+
engine,
|
|
93
|
+
defaultMode,
|
|
94
|
+
interceptorFactory,
|
|
95
|
+
noPolicyDeclaredFactory,
|
|
96
|
+
resolvePrincipal: async (ctx) => principalResolver(ctx),
|
|
97
|
+
getCoverage,
|
|
98
|
+
};
|
|
68
99
|
}
|
|
69
100
|
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/middleware/policy/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/middleware/policy/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Co-located policy loader.
|
|
3
|
+
*
|
|
4
|
+
* Walks an FS-discovery tree and reads sibling `<handler>.policy.{yaml,yml,
|
|
5
|
+
* json}` files. The parsed policies are validated against the same JSON schema
|
|
6
|
+
* the root `loadFromDir` loader uses, so authors get identical error messages
|
|
7
|
+
* regardless of where a policy lives.
|
|
8
|
+
*
|
|
9
|
+
* Pure validation lives in the JSON schema — the loader only adds I/O.
|
|
10
|
+
*/
|
|
11
|
+
import type { PolicyCondition } from '../types.js';
|
|
12
|
+
import type { DiscoverySource } from '../../../server/fs-routes/discovery-source.js';
|
|
13
|
+
import { type PolicyFileDescriptor } from './resolver.js';
|
|
14
|
+
export interface CoLocatedLoadOptions {
|
|
15
|
+
source: DiscoverySource;
|
|
16
|
+
handlerFilePaths: readonly string[];
|
|
17
|
+
customConditions?: Record<string, PolicyCondition>;
|
|
18
|
+
/**
|
|
19
|
+
* Discovery root. When provided, folder-cascade scanning stops here so we
|
|
20
|
+
* never read `_policy.*` files outside the discovered tree.
|
|
21
|
+
*/
|
|
22
|
+
rootDir?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface CoLocatedLoadResult {
|
|
25
|
+
files: PolicyFileDescriptor[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Look up sibling policy files for each handler. Reads + parses + validates
|
|
29
|
+
* eagerly; throws on the first malformed file so authors fix issues at
|
|
30
|
+
* startup rather than at request time.
|
|
31
|
+
*/
|
|
32
|
+
export declare function loadCoLocatedPolicies(options: CoLocatedLoadOptions): Promise<CoLocatedLoadResult>;
|
|
33
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/middleware/policy/co-located/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAA;AACpF,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,eAAe,CAAA;AAsBtB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,CAAA;IACvB,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAClD;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAC9B;AAiDD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA0C9B"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Co-located policy loader.
|
|
3
|
+
*
|
|
4
|
+
* Walks an FS-discovery tree and reads sibling `<handler>.policy.{yaml,yml,
|
|
5
|
+
* json}` files. The parsed policies are validated against the same JSON schema
|
|
6
|
+
* the root `loadFromDir` loader uses, so authors get identical error messages
|
|
7
|
+
* regardless of where a policy lives.
|
|
8
|
+
*
|
|
9
|
+
* Pure validation lives in the JSON schema — the loader only adds I/O.
|
|
10
|
+
*/
|
|
11
|
+
import { readFileSync } from 'node:fs';
|
|
12
|
+
import { extname } from 'node:path';
|
|
13
|
+
import { Ajv } from 'ajv';
|
|
14
|
+
import { load as parseYaml } from 'js-yaml';
|
|
15
|
+
import { ancestorDirs, folderPolicyCandidates, siblingPolicyCandidates, } from './resolver.js';
|
|
16
|
+
let validator;
|
|
17
|
+
function getValidator() {
|
|
18
|
+
if (validator)
|
|
19
|
+
return validator;
|
|
20
|
+
const schemaPath = new URL('../schema.json', import.meta.url);
|
|
21
|
+
const schema = JSON.parse(readFileSync(schemaPath, 'utf-8'));
|
|
22
|
+
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
23
|
+
validator = ajv.compile(schema);
|
|
24
|
+
return validator;
|
|
25
|
+
}
|
|
26
|
+
function formatAjvErrors(errors, file) {
|
|
27
|
+
if (!errors || errors.length === 0)
|
|
28
|
+
return `${file}: invalid (no error detail)`;
|
|
29
|
+
return errors
|
|
30
|
+
.map((e) => `${file}${e.instancePath || '/'}: ${e.message ?? '?'} (${e.keyword})`)
|
|
31
|
+
.join('\n ');
|
|
32
|
+
}
|
|
33
|
+
function parsePolicyText(file, raw) {
|
|
34
|
+
const ext = extname(file).toLowerCase();
|
|
35
|
+
try {
|
|
36
|
+
if (ext === '.json')
|
|
37
|
+
return JSON.parse(raw);
|
|
38
|
+
return parseYaml(raw);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
throw new Error(`co-located policy loader: ${file}: invalid ${ext === '.json' ? 'JSON' : 'YAML'} — ${err.message}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function materializePolicy(file, index, raw, customConditions) {
|
|
45
|
+
const validate = getValidator();
|
|
46
|
+
if (!validate(raw)) {
|
|
47
|
+
throw new Error(`co-located policy loader: schema validation failed:\n ${formatAjvErrors(validate.errors, `${file}[${index}]`)}`);
|
|
48
|
+
}
|
|
49
|
+
const json = raw;
|
|
50
|
+
let condition;
|
|
51
|
+
if (json.customCondition) {
|
|
52
|
+
const fn = customConditions[json.customCondition];
|
|
53
|
+
if (!fn) {
|
|
54
|
+
throw new Error(`co-located policy loader: ${file}[${index}] policy "${json.id}" references customCondition "${json.customCondition}" which is not registered.`);
|
|
55
|
+
}
|
|
56
|
+
condition = fn;
|
|
57
|
+
}
|
|
58
|
+
const { customCondition: _drop, match, ...rest } = json;
|
|
59
|
+
return {
|
|
60
|
+
...rest,
|
|
61
|
+
...(condition ? { condition } : {}),
|
|
62
|
+
...(match ? { match } : {}),
|
|
63
|
+
_source: file,
|
|
64
|
+
_index: index,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Look up sibling policy files for each handler. Reads + parses + validates
|
|
69
|
+
* eagerly; throws on the first malformed file so authors fix issues at
|
|
70
|
+
* startup rather than at request time.
|
|
71
|
+
*/
|
|
72
|
+
export async function loadCoLocatedPolicies(options) {
|
|
73
|
+
const { source, handlerFilePaths, rootDir } = options;
|
|
74
|
+
const customConditions = options.customConditions ?? {};
|
|
75
|
+
const files = [];
|
|
76
|
+
for (const handlerPath of handlerFilePaths) {
|
|
77
|
+
for (const candidate of siblingPolicyCandidates(handlerPath)) {
|
|
78
|
+
if (!(await source.exists(candidate)))
|
|
79
|
+
continue;
|
|
80
|
+
const text = await source.readText(candidate);
|
|
81
|
+
const parsed = parsePolicyText(candidate, text);
|
|
82
|
+
const items = Array.isArray(parsed) ? parsed : [parsed];
|
|
83
|
+
const policies = items.map((item, i) => materializePolicy(candidate, i, item, customConditions));
|
|
84
|
+
files.push({ filePath: candidate, policies, kind: 'sibling' });
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const dirs = new Set();
|
|
89
|
+
for (const handlerPath of handlerFilePaths) {
|
|
90
|
+
for (const dir of ancestorDirs(handlerPath, rootDir)) {
|
|
91
|
+
if (rootDir !== undefined && dir !== rootDir && !dir.startsWith(`${rootDir}/`))
|
|
92
|
+
continue;
|
|
93
|
+
dirs.add(dir);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
for (const dir of dirs) {
|
|
97
|
+
for (const candidate of folderPolicyCandidates(dir)) {
|
|
98
|
+
if (!(await source.exists(candidate)))
|
|
99
|
+
continue;
|
|
100
|
+
const text = await source.readText(candidate);
|
|
101
|
+
const parsed = parsePolicyText(candidate, text);
|
|
102
|
+
const items = Array.isArray(parsed) ? parsed : [parsed];
|
|
103
|
+
const policies = items.map((item, i) => materializePolicy(candidate, i, item, customConditions));
|
|
104
|
+
files.push({ filePath: candidate, policies, kind: 'folder', dir });
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return { files };
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/middleware/policy/co-located/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,SAAS,CAAA;AAO3C,OAAO,EACL,YAAY,EACZ,sBAAsB,EAEtB,uBAAuB,GACxB,MAAM,eAAe,CAAA;AAEtB,IAAI,SAES,CAAA;AAEb,SAAS,YAAY;IACnB,IAAI,SAAS;QAAE,OAAO,SAAS,CAAA;IAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IACvD,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAgB,CAAgC,CAAA;IACxE,OAAO,SAAU,CAAA;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,MAAwC,EAAE,IAAY;IAC7E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,IAAI,6BAA6B,CAAA;IAC/E,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC;SACjF,IAAI,CAAC,MAAM,CAAC,CAAA;AACjB,CAAC;AAiBD,SAAS,eAAe,CAAC,IAAY,EAAE,GAAW;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IACvC,IAAI,CAAC;QACH,IAAI,GAAG,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC3C,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,aAAa,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAO,GAAa,CAAC,OAAO,EAAE,CAC9G,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAY,EACZ,KAAa,EACb,GAAY,EACZ,gBAAiD;IAEjD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,0DAA0D,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAClH,CAAA;IACH,CAAC;IACD,MAAM,IAAI,GAAG,GAAiB,CAAA;IAE9B,IAAI,SAAsC,CAAA;IAC1C,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACjD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,IAAI,KAAK,aAAa,IAAI,CAAC,EAAE,iCAAiC,IAAI,CAAC,eAAe,4BAA4B,CAChJ,CAAA;QACH,CAAC;QACD,SAAS,GAAG,EAAE,CAAA;IAChB,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IACvD,OAAO;QACL,GAAG,IAAI;QACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK;KACd,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAA6B;IAE7B,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IACrD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAA;IACvD,MAAM,KAAK,GAA2B,EAAE,CAAA;IAExC,KAAK,MAAM,WAAW,IAAI,gBAAgB,EAAE,CAAC;QAC3C,KAAK,MAAM,SAAS,IAAI,uBAAuB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAAE,SAAQ;YAC/C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACvD,MAAM,QAAQ,GAAa,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAC/C,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,CACxD,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;YAC9D,MAAK;QACP,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,WAAW,IAAI,gBAAgB,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;YACrD,IAAI,OAAO,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC;gBAAE,SAAQ;YACxF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACf,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,SAAS,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAAE,SAAQ;YAC/C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACvD,MAAM,QAAQ,GAAa,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAC/C,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,CACxD,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;YAClE,MAAK;QACP,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Co-located policy resolver — pure module, no I/O.
|
|
3
|
+
*
|
|
4
|
+
* Given a list of discovered route descriptors (handler file paths + procedure
|
|
5
|
+
* names) and a list of parsed policy file descriptors, return the ordered list
|
|
6
|
+
* of policies that apply to each route.
|
|
7
|
+
*
|
|
8
|
+
* Tracer-bullet (#92) supports only the `sibling` kind: a `<handler>.policy.*`
|
|
9
|
+
* file living next to a handler. Folder cascade (#93), resource (#94), channel
|
|
10
|
+
* (#95), and `match` patterns (#96) reuse the same descriptor shape and extend
|
|
11
|
+
* this resolver.
|
|
12
|
+
*/
|
|
13
|
+
import type { Policy } from '../types.js';
|
|
14
|
+
export interface RouteDescriptor {
|
|
15
|
+
/** Resolved procedure name (e.g. `users/:id/get`). */
|
|
16
|
+
name: string;
|
|
17
|
+
/** Absolute path of the handler file. */
|
|
18
|
+
filePath: string;
|
|
19
|
+
}
|
|
20
|
+
export type PolicyFileKind = 'sibling' | 'folder';
|
|
21
|
+
export interface PolicyFileDescriptor {
|
|
22
|
+
/** Absolute path of the policy file. */
|
|
23
|
+
filePath: string;
|
|
24
|
+
/** Parsed and validated policies from this file. */
|
|
25
|
+
policies: readonly Policy[];
|
|
26
|
+
/** Source kind for diagnostics and precedence. */
|
|
27
|
+
kind: PolicyFileKind;
|
|
28
|
+
/**
|
|
29
|
+
* For `folder` kind: the directory whose handlers (recursively) the file
|
|
30
|
+
* covers. Sibling files leave this undefined.
|
|
31
|
+
*/
|
|
32
|
+
dir?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface PolicySource {
|
|
35
|
+
filePath: string;
|
|
36
|
+
kind: PolicyFileKind;
|
|
37
|
+
}
|
|
38
|
+
export interface RoutePolicyDescriptor {
|
|
39
|
+
/** Procedure name this descriptor applies to. */
|
|
40
|
+
name: string;
|
|
41
|
+
/** Handler file path (1:1 with the route descriptor). */
|
|
42
|
+
filePath: string;
|
|
43
|
+
/** Policies in apply order. Tracer-bullet emits the sibling file's policies. */
|
|
44
|
+
policies: Policy[];
|
|
45
|
+
/** File paths contributing to this descriptor (diagnostics). */
|
|
46
|
+
sources: PolicySource[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Strip a `.policy.{yaml,yml,json}` suffix from a path. Returns null when the
|
|
50
|
+
* file is not a policy file.
|
|
51
|
+
*/
|
|
52
|
+
export declare function policyFileBaseKey(policyPath: string): string | null;
|
|
53
|
+
/**
|
|
54
|
+
* Strip the source extension from a handler path so it can be paired with a
|
|
55
|
+
* policy file. We compare on the extension-less prefix because handlers may
|
|
56
|
+
* be `.ts` or `.js` while sibling policies are `.yaml`/`.yml`/`.json`.
|
|
57
|
+
*/
|
|
58
|
+
export declare function handlerBaseKey(handlerPath: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Walk ancestor directories from a handler file up to (and including) the
|
|
61
|
+
* provided root, returning the chain in broader→closer order. The handler's
|
|
62
|
+
* own directory is the last entry. When `rootDir` is omitted the walk stops
|
|
63
|
+
* at the filesystem root (loop guard via `parent === cur`).
|
|
64
|
+
*/
|
|
65
|
+
export declare function ancestorDirs(handlerPath: string, rootDir?: string): string[];
|
|
66
|
+
/**
|
|
67
|
+
* Match policy files to routes. Resolves both sibling files (`<handler>.policy.*`)
|
|
68
|
+
* and folder cascades (`_policy.*` in any ancestor directory). Apply order
|
|
69
|
+
* inside each route descriptor is broader→closer, with the sibling (when
|
|
70
|
+
* present) appended last so deny semantics in the engine still bite.
|
|
71
|
+
*/
|
|
72
|
+
export declare function resolveCoLocatedPolicies(routes: readonly RouteDescriptor[], policyFiles: readonly PolicyFileDescriptor[]): RoutePolicyDescriptor[];
|
|
73
|
+
/**
|
|
74
|
+
* Helper for the loader: list every supported policy filename for a given
|
|
75
|
+
* handler. Caller checks each candidate against its discovery source.
|
|
76
|
+
*/
|
|
77
|
+
export declare function siblingPolicyCandidates(handlerPath: string): string[];
|
|
78
|
+
/**
|
|
79
|
+
* Helper for the loader: list every supported `_policy.*` filename inside a
|
|
80
|
+
* directory. Caller checks each candidate against its discovery source.
|
|
81
|
+
*/
|
|
82
|
+
export declare function folderPolicyCandidates(dir: string): string[];
|
|
83
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../src/middleware/policy/co-located/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;IACZ,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEjD,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,oDAAoD;IACpD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,kDAAkD;IAClD,IAAI,EAAE,cAAc,CAAA;IACpB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,gEAAgE;IAChE,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMnE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAW5E;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,WAAW,EAAE,SAAS,oBAAoB,EAAE,GAC3C,qBAAqB,EAAE,CAuCzB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAGrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Co-located policy resolver — pure module, no I/O.
|
|
3
|
+
*
|
|
4
|
+
* Given a list of discovered route descriptors (handler file paths + procedure
|
|
5
|
+
* names) and a list of parsed policy file descriptors, return the ordered list
|
|
6
|
+
* of policies that apply to each route.
|
|
7
|
+
*
|
|
8
|
+
* Tracer-bullet (#92) supports only the `sibling` kind: a `<handler>.policy.*`
|
|
9
|
+
* file living next to a handler. Folder cascade (#93), resource (#94), channel
|
|
10
|
+
* (#95), and `match` patterns (#96) reuse the same descriptor shape and extend
|
|
11
|
+
* this resolver.
|
|
12
|
+
*/
|
|
13
|
+
import { dirname, extname } from 'node:path';
|
|
14
|
+
const POLICY_EXTENSIONS = ['.yaml', '.yml', '.json'];
|
|
15
|
+
const POLICY_INFIX = '.policy';
|
|
16
|
+
const FOLDER_POLICY_BASENAME = '_policy';
|
|
17
|
+
/**
|
|
18
|
+
* Strip a `.policy.{yaml,yml,json}` suffix from a path. Returns null when the
|
|
19
|
+
* file is not a policy file.
|
|
20
|
+
*/
|
|
21
|
+
export function policyFileBaseKey(policyPath) {
|
|
22
|
+
const ext = extname(policyPath);
|
|
23
|
+
if (!POLICY_EXTENSIONS.includes(ext))
|
|
24
|
+
return null;
|
|
25
|
+
const stem = policyPath.slice(0, -ext.length);
|
|
26
|
+
if (!stem.endsWith(POLICY_INFIX))
|
|
27
|
+
return null;
|
|
28
|
+
return stem.slice(0, -POLICY_INFIX.length);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Strip the source extension from a handler path so it can be paired with a
|
|
32
|
+
* policy file. We compare on the extension-less prefix because handlers may
|
|
33
|
+
* be `.ts` or `.js` while sibling policies are `.yaml`/`.yml`/`.json`.
|
|
34
|
+
*/
|
|
35
|
+
export function handlerBaseKey(handlerPath) {
|
|
36
|
+
const ext = extname(handlerPath);
|
|
37
|
+
if (!ext)
|
|
38
|
+
return handlerPath;
|
|
39
|
+
return handlerPath.slice(0, -ext.length);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Walk ancestor directories from a handler file up to (and including) the
|
|
43
|
+
* provided root, returning the chain in broader→closer order. The handler's
|
|
44
|
+
* own directory is the last entry. When `rootDir` is omitted the walk stops
|
|
45
|
+
* at the filesystem root (loop guard via `parent === cur`).
|
|
46
|
+
*/
|
|
47
|
+
export function ancestorDirs(handlerPath, rootDir) {
|
|
48
|
+
const chain = [];
|
|
49
|
+
let cur = dirname(handlerPath);
|
|
50
|
+
while (true) {
|
|
51
|
+
chain.unshift(cur);
|
|
52
|
+
if (rootDir !== undefined && cur === rootDir)
|
|
53
|
+
break;
|
|
54
|
+
const parent = dirname(cur);
|
|
55
|
+
if (parent === cur)
|
|
56
|
+
break;
|
|
57
|
+
cur = parent;
|
|
58
|
+
}
|
|
59
|
+
return chain;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Match policy files to routes. Resolves both sibling files (`<handler>.policy.*`)
|
|
63
|
+
* and folder cascades (`_policy.*` in any ancestor directory). Apply order
|
|
64
|
+
* inside each route descriptor is broader→closer, with the sibling (when
|
|
65
|
+
* present) appended last so deny semantics in the engine still bite.
|
|
66
|
+
*/
|
|
67
|
+
export function resolveCoLocatedPolicies(routes, policyFiles) {
|
|
68
|
+
const siblingByKey = new Map();
|
|
69
|
+
const folderByDir = new Map();
|
|
70
|
+
for (const file of policyFiles) {
|
|
71
|
+
if (file.kind === 'sibling') {
|
|
72
|
+
const key = policyFileBaseKey(file.filePath);
|
|
73
|
+
if (key)
|
|
74
|
+
siblingByKey.set(key, file);
|
|
75
|
+
}
|
|
76
|
+
else if (file.kind === 'folder' && file.dir) {
|
|
77
|
+
folderByDir.set(file.dir, file);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const out = [];
|
|
81
|
+
for (const route of routes) {
|
|
82
|
+
const policies = [];
|
|
83
|
+
const sources = [];
|
|
84
|
+
for (const dir of ancestorDirs(route.filePath)) {
|
|
85
|
+
const folder = folderByDir.get(dir);
|
|
86
|
+
if (!folder)
|
|
87
|
+
continue;
|
|
88
|
+
policies.push(...folder.policies);
|
|
89
|
+
sources.push({ filePath: folder.filePath, kind: 'folder' });
|
|
90
|
+
}
|
|
91
|
+
const sibling = siblingByKey.get(handlerBaseKey(route.filePath));
|
|
92
|
+
if (sibling) {
|
|
93
|
+
policies.push(...sibling.policies);
|
|
94
|
+
sources.push({ filePath: sibling.filePath, kind: 'sibling' });
|
|
95
|
+
}
|
|
96
|
+
if (sources.length === 0)
|
|
97
|
+
continue;
|
|
98
|
+
out.push({
|
|
99
|
+
name: route.name,
|
|
100
|
+
filePath: route.filePath,
|
|
101
|
+
policies,
|
|
102
|
+
sources,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Helper for the loader: list every supported policy filename for a given
|
|
109
|
+
* handler. Caller checks each candidate against its discovery source.
|
|
110
|
+
*/
|
|
111
|
+
export function siblingPolicyCandidates(handlerPath) {
|
|
112
|
+
const key = handlerBaseKey(handlerPath);
|
|
113
|
+
return POLICY_EXTENSIONS.map((ext) => `${key}${POLICY_INFIX}${ext}`);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Helper for the loader: list every supported `_policy.*` filename inside a
|
|
117
|
+
* directory. Caller checks each candidate against its discovery source.
|
|
118
|
+
*/
|
|
119
|
+
export function folderPolicyCandidates(dir) {
|
|
120
|
+
return POLICY_EXTENSIONS.map((ext) => `${dir}/${FOLDER_POLICY_BASENAME}${ext}`);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../../src/middleware/policy/co-located/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../../src/middleware/policy/engine/compile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAA0B,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAI5E;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../../src/middleware/policy/engine/compile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAA0B,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAI5E;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAsB5D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAGjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,MAAM,EAAE,CAU3E"}
|
|
@@ -19,6 +19,15 @@ export function compilePolicyPatterns(policy) {
|
|
|
19
19
|
actions: policy.actions.map(compileGlob),
|
|
20
20
|
resources: policy.resources.map(compileGlob),
|
|
21
21
|
};
|
|
22
|
+
if (policy.scope?.routes && policy.scope.routes.length > 0) {
|
|
23
|
+
compiled.scopeRoutes = policy.scope.routes.map(compileGlob);
|
|
24
|
+
}
|
|
25
|
+
if (policy.scope?.channels && policy.scope.channels.length > 0) {
|
|
26
|
+
compiled.scopeChannels = policy.scope.channels.map(compileGlob);
|
|
27
|
+
}
|
|
28
|
+
if (policy.scope?.protocols && policy.scope.protocols.length > 0) {
|
|
29
|
+
compiled.scopeProtocols = policy.scope.protocols.map(compileGlob);
|
|
30
|
+
}
|
|
22
31
|
policy._compiled = compiled;
|
|
23
32
|
}
|
|
24
33
|
if (policy.match && !policy._compiledMatch) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../../src/middleware/policy/engine/compile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,QAAQ,GAA2B;YACvC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;YAC9C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;YACxC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;SAC7C,CAAA;QACD,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC7B,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3C,MAAM,CAAC,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAA2B;IAC5D,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAClD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,IAAI,SAAS,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC,YAAY,CAAA;IAEzD,MAAM,GAAG,GAAa,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IACjE,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAA;IAChE,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACjC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAA;IAC/B,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../../src/middleware/policy/engine/compile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,QAAQ,GAA2B;YACvC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;YAC9C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;YACxC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;SAC7C,CAAA;QACD,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC7D,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACjE,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,QAAQ,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACnE,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC7B,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3C,MAAM,CAAC,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAA2B;IAC5D,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAClD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,IAAI,SAAS,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC,YAAY,CAAA;IAEzD,MAAM,GAAG,GAAa,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IACjE,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAA;IAChE,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACjC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAA;IAC/B,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../../src/middleware/policy/engine/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,UAAU,EAEV,QAAQ,EACR,MAAM,EACP,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../../src/middleware/policy/engine/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,UAAU,EAEV,QAAQ,EACR,MAAM,EACP,MAAM,aAAa,CAAA;AAgFpB,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CAC5D;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,GAAE,eAAoB,GAC5B,QAAQ,CA4FV"}
|