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.
Files changed (113) hide show
  1. package/dist/core/registry.d.ts +5 -0
  2. package/dist/core/registry.d.ts.map +1 -1
  3. package/dist/core/registry.js +1 -0
  4. package/dist/core/registry.js.map +1 -1
  5. package/dist/middleware/policy/bootstrap.d.ts +33 -2
  6. package/dist/middleware/policy/bootstrap.d.ts.map +1 -1
  7. package/dist/middleware/policy/bootstrap.js +40 -9
  8. package/dist/middleware/policy/bootstrap.js.map +1 -1
  9. package/dist/middleware/policy/co-located/loader.d.ts +33 -0
  10. package/dist/middleware/policy/co-located/loader.d.ts.map +1 -0
  11. package/dist/middleware/policy/co-located/loader.js +110 -0
  12. package/dist/middleware/policy/co-located/loader.js.map +1 -0
  13. package/dist/middleware/policy/co-located/resolver.d.ts +83 -0
  14. package/dist/middleware/policy/co-located/resolver.d.ts.map +1 -0
  15. package/dist/middleware/policy/co-located/resolver.js +122 -0
  16. package/dist/middleware/policy/co-located/resolver.js.map +1 -0
  17. package/dist/middleware/policy/engine/compile.d.ts.map +1 -1
  18. package/dist/middleware/policy/engine/compile.js +9 -0
  19. package/dist/middleware/policy/engine/compile.js.map +1 -1
  20. package/dist/middleware/policy/engine/evaluate.d.ts.map +1 -1
  21. package/dist/middleware/policy/engine/evaluate.js +20 -0
  22. package/dist/middleware/policy/engine/evaluate.js.map +1 -1
  23. package/dist/middleware/policy/engine/index.d.ts.map +1 -1
  24. package/dist/middleware/policy/engine/index.js +19 -2
  25. package/dist/middleware/policy/engine/index.js.map +1 -1
  26. package/dist/middleware/policy/index.d.ts +4 -0
  27. package/dist/middleware/policy/index.d.ts.map +1 -1
  28. package/dist/middleware/policy/index.js +3 -0
  29. package/dist/middleware/policy/index.js.map +1 -1
  30. package/dist/middleware/policy/interceptor.d.ts.map +1 -1
  31. package/dist/middleware/policy/interceptor.js +11 -2
  32. package/dist/middleware/policy/interceptor.js.map +1 -1
  33. package/dist/middleware/policy/types.d.ts +41 -0
  34. package/dist/middleware/policy/types.d.ts.map +1 -1
  35. package/dist/ports/outbound/policy-engine.d.ts +7 -0
  36. package/dist/ports/outbound/policy-engine.d.ts.map +1 -1
  37. package/dist/server/builder/execution-http-resources.d.ts.map +1 -1
  38. package/dist/server/builder/execution-http-resources.js +1 -0
  39. package/dist/server/builder/execution-http-resources.js.map +1 -1
  40. package/dist/server/builder/execution-types.d.ts +1 -0
  41. package/dist/server/builder/execution-types.d.ts.map +1 -1
  42. package/dist/server/builder/execution-web-protocols.d.ts.map +1 -1
  43. package/dist/server/builder/execution-web-protocols.js +2 -2
  44. package/dist/server/builder/execution-web-protocols.js.map +1 -1
  45. package/dist/server/builder/lifecycle.d.ts +1 -0
  46. package/dist/server/builder/lifecycle.d.ts.map +1 -1
  47. package/dist/server/builder/lifecycle.js +2 -1
  48. package/dist/server/builder/lifecycle.js.map +1 -1
  49. package/dist/server/builder/operation-registrar.d.ts +1 -0
  50. package/dist/server/builder/operation-registrar.d.ts.map +1 -1
  51. package/dist/server/builder/operation-registrar.js +2 -1
  52. package/dist/server/builder/operation-registrar.js.map +1 -1
  53. package/dist/server/builder.d.ts.map +1 -1
  54. package/dist/server/builder.js +46 -4
  55. package/dist/server/builder.js.map +1 -1
  56. package/dist/server/channel-utils.d.ts +3 -1
  57. package/dist/server/channel-utils.d.ts.map +1 -1
  58. package/dist/server/channel-utils.js +6 -1
  59. package/dist/server/channel-utils.js.map +1 -1
  60. package/dist/server/discovery-bootstrap.d.ts +3 -2
  61. package/dist/server/discovery-bootstrap.d.ts.map +1 -1
  62. package/dist/server/discovery-bootstrap.js +2 -1
  63. package/dist/server/discovery-bootstrap.js.map +1 -1
  64. package/dist/server/discovery-utils.d.ts +11 -1
  65. package/dist/server/discovery-utils.d.ts.map +1 -1
  66. package/dist/server/discovery-utils.js +31 -2
  67. package/dist/server/discovery-utils.js.map +1 -1
  68. package/dist/server/fs-routes/loader.d.ts.map +1 -1
  69. package/dist/server/fs-routes/loader.js +77 -2
  70. package/dist/server/fs-routes/loader.js.map +1 -1
  71. package/dist/server/fs-routes/resources/types.d.ts +5 -0
  72. package/dist/server/fs-routes/resources/types.d.ts.map +1 -1
  73. package/dist/server/fs-routes/rest/types.d.ts +5 -0
  74. package/dist/server/fs-routes/rest/types.d.ts.map +1 -1
  75. package/dist/server/fs-routes/types.d.ts +22 -0
  76. package/dist/server/fs-routes/types.d.ts.map +1 -1
  77. package/dist/server/http-lifecycle/index.d.ts.map +1 -1
  78. package/dist/server/http-lifecycle/index.js +2 -2
  79. package/dist/server/http-lifecycle/index.js.map +1 -1
  80. package/dist/server/orchestration/registration.d.ts +12 -0
  81. package/dist/server/orchestration/registration.d.ts.map +1 -1
  82. package/dist/server/orchestration/registration.js +24 -3
  83. package/dist/server/orchestration/registration.js.map +1 -1
  84. package/dist/server/rest-middleware.d.ts +1 -0
  85. package/dist/server/rest-middleware.d.ts.map +1 -1
  86. package/dist/server/rest-middleware.js +41 -3
  87. package/dist/server/rest-middleware.js.map +1 -1
  88. package/dist/server/types/lifecycle-types.d.ts +8 -0
  89. package/dist/server/types/lifecycle-types.d.ts.map +1 -1
  90. package/dist/server/types/protocol-namespace-types.d.ts +6 -0
  91. package/dist/server/types/protocol-namespace-types.d.ts.map +1 -1
  92. package/dist/types/handlers.d.ts +5 -0
  93. package/dist/types/handlers.d.ts.map +1 -1
  94. package/dist/ui/core/registry.d.ts +5 -0
  95. package/dist/ui/core/registry.d.ts.map +1 -1
  96. package/dist/ui/middleware/policy/co-located/loader.d.ts +33 -0
  97. package/dist/ui/middleware/policy/co-located/loader.d.ts.map +1 -0
  98. package/dist/ui/middleware/policy/co-located/resolver.d.ts +83 -0
  99. package/dist/ui/middleware/policy/co-located/resolver.d.ts.map +1 -0
  100. package/dist/ui/middleware/policy/types.d.ts +41 -0
  101. package/dist/ui/middleware/policy/types.d.ts.map +1 -1
  102. package/dist/ui/ports/outbound/policy-engine.d.ts +7 -0
  103. package/dist/ui/ports/outbound/policy-engine.d.ts.map +1 -1
  104. package/dist/ui/server/fs-routes/loader.d.ts.map +1 -1
  105. package/dist/ui/server/fs-routes/resources/types.d.ts +5 -0
  106. package/dist/ui/server/fs-routes/resources/types.d.ts.map +1 -1
  107. package/dist/ui/server/fs-routes/rest/types.d.ts +5 -0
  108. package/dist/ui/server/fs-routes/rest/types.d.ts.map +1 -1
  109. package/dist/ui/server/fs-routes/types.d.ts +22 -0
  110. package/dist/ui/server/fs-routes/types.d.ts.map +1 -1
  111. package/dist/ui/types/handlers.d.ts +5 -0
  112. package/dist/ui/types/handlers.d.ts.map +1 -1
  113. package/package.json +1 -1
@@ -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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"}
@@ -37,6 +37,7 @@ export function createRegistry() {
37
37
  graphql: options.graphql,
38
38
  httpPath: options.httpPath,
39
39
  httpMethod: options.httpMethod,
40
+ httpSuccessStatus: options.httpSuccessStatus,
40
41
  jsonrpc: options.jsonrpc,
41
42
  grpc: options.grpc,
42
43
  policies,
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
@@ -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;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAM7E,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAErE,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;CAChE;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,CA0DxB"}
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 interceptorFactory = (procedureName, procConfig) => createPolicyInterceptor({
45
- engine,
46
- defaultAction: procedureName,
47
- config: procConfig,
48
- principalResolver,
49
- productionErrorBody,
50
- logger: policyLogger,
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 { engine, defaultMode, interceptorFactory, noPolicyDeclaredFactory };
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":"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"}
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":"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"}
@@ -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,CAa5D;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"}
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;AA2DpB,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"}
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"}