@cloud-copilot/iam-policy 0.1.87 → 0.1.88

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.
@@ -7,6 +7,7 @@ export type { AccountPrincipal, AwsPrincipal, CanonicalUserPrincipal, FederatedP
7
7
  export type { Resource, ArnResource } from './resources/resource.js';
8
8
  export type { ActionStatement, NotActionStatement, NotPrincipalStatement, NotResourceStatement, PrincipalStatement, ResourceStatement, Statement } from './statements/statement.js';
9
9
  export { lintPolicy } from './lint/lint.js';
10
+ export { createValidatedPolicy, isValidatedPolicy, type ValidatedPolicy } from './validatedPolicy.js';
10
11
  export { validatePolicySyntax, type ValidationError } from './validate/validate.js';
11
12
  export { validateEndpointPolicy, validateIdentityPolicy, validateResourceControlPolicy, validateResourcePolicy, validateServiceControlPolicy, validateSessionPolicy, validateTrustPolicy } from './validate/validateTypes.js';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC5F,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACpE,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACV,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC5F,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACpE,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACV,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,6BAA6B,CAAA"}
package/dist/cjs/index.js CHANGED
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateTrustPolicy = exports.validateSessionPolicy = exports.validateServiceControlPolicy = exports.validateResourcePolicy = exports.validateResourceControlPolicy = exports.validateIdentityPolicy = exports.validateEndpointPolicy = exports.validatePolicySyntax = exports.lintPolicy = exports.loadPolicy = void 0;
3
+ exports.validateTrustPolicy = exports.validateSessionPolicy = exports.validateServiceControlPolicy = exports.validateResourcePolicy = exports.validateResourceControlPolicy = exports.validateIdentityPolicy = exports.validateEndpointPolicy = exports.validatePolicySyntax = exports.isValidatedPolicy = exports.createValidatedPolicy = exports.lintPolicy = exports.loadPolicy = void 0;
4
4
  var parser_js_1 = require("./parser.js");
5
5
  Object.defineProperty(exports, "loadPolicy", { enumerable: true, get: function () { return parser_js_1.loadPolicy; } });
6
6
  var lint_js_1 = require("./lint/lint.js");
7
7
  Object.defineProperty(exports, "lintPolicy", { enumerable: true, get: function () { return lint_js_1.lintPolicy; } });
8
+ var validatedPolicy_js_1 = require("./validatedPolicy.js");
9
+ Object.defineProperty(exports, "createValidatedPolicy", { enumerable: true, get: function () { return validatedPolicy_js_1.createValidatedPolicy; } });
10
+ Object.defineProperty(exports, "isValidatedPolicy", { enumerable: true, get: function () { return validatedPolicy_js_1.isValidatedPolicy; } });
8
11
  var validate_js_1 = require("./validate/validate.js");
9
12
  Object.defineProperty(exports, "validatePolicySyntax", { enumerable: true, get: function () { return validate_js_1.validatePolicySyntax; } });
10
13
  var validateTypes_js_1 = require("./validate/validateTypes.js");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAGA,yCAAwC;AAA/B,uGAAA,UAAU,OAAA;AAsBnB,0CAA2C;AAAlC,qGAAA,UAAU,OAAA;AACnB,sDAAmF;AAA1E,mHAAA,oBAAoB,OAAA;AAC7B,gEAQoC;AAPlC,0HAAA,sBAAsB,OAAA;AACtB,0HAAA,sBAAsB,OAAA;AACtB,iIAAA,6BAA6B,OAAA;AAC7B,0HAAA,sBAAsB,OAAA;AACtB,gIAAA,4BAA4B,OAAA;AAC5B,yHAAA,qBAAqB,OAAA;AACrB,uHAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAGA,yCAAwC;AAA/B,uGAAA,UAAU,OAAA;AAsBnB,0CAA2C;AAAlC,qGAAA,UAAU,OAAA;AACnB,2DAI6B;AAH3B,2HAAA,qBAAqB,OAAA;AACrB,uHAAA,iBAAiB,OAAA;AAGnB,sDAAmF;AAA1E,mHAAA,oBAAoB,OAAA;AAC7B,gEAQoC;AAPlC,0HAAA,sBAAsB,OAAA;AACtB,0HAAA,sBAAsB,OAAA;AACtB,iIAAA,6BAA6B,OAAA;AAC7B,0HAAA,sBAAsB,OAAA;AACtB,gIAAA,4BAA4B,OAAA;AAC5B,yHAAA,qBAAqB,OAAA;AACrB,uHAAA,mBAAmB,OAAA"}
@@ -1,8 +1,12 @@
1
1
  import { type Policy } from './policies/policy.js';
2
2
  /**
3
- * Load a Policy from a policy document
3
+ * Load a Policy from a policy document. If a {@link ValidatedPolicy} is passed,
4
+ * the raw document and metadata are extracted from it automatically. When both
5
+ * the ValidatedPolicy carries metadata and the caller supplies explicit metadata,
6
+ * the explicit metadata takes precedence.
4
7
  *
5
- * @param policyDocument the policy document JSON object
8
+ * @param policyDocument the policy document JSON object, or a ValidatedPolicy
9
+ * @param metadata optional metadata to attach to the loaded Policy
6
10
  * @returns the Policy object for the backing policy document
7
11
  */
8
12
  export declare function loadPolicy<T = undefined>(policyDocument: any, metadata?: T): Policy<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,sBAAsB,CAAA;AAE9D;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAEtF"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,sBAAsB,CAAA;AAG9D;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAKtF"}
@@ -2,13 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadPolicy = loadPolicy;
4
4
  const policy_js_1 = require("./policies/policy.js");
5
+ const validatedPolicy_js_1 = require("./validatedPolicy.js");
5
6
  /**
6
- * Load a Policy from a policy document
7
+ * Load a Policy from a policy document. If a {@link ValidatedPolicy} is passed,
8
+ * the raw document and metadata are extracted from it automatically. When both
9
+ * the ValidatedPolicy carries metadata and the caller supplies explicit metadata,
10
+ * the explicit metadata takes precedence.
7
11
  *
8
- * @param policyDocument the policy document JSON object
12
+ * @param policyDocument the policy document JSON object, or a ValidatedPolicy
13
+ * @param metadata optional metadata to attach to the loaded Policy
9
14
  * @returns the Policy object for the backing policy document
10
15
  */
11
16
  function loadPolicy(policyDocument, metadata) {
17
+ if ((0, validatedPolicy_js_1.isValidatedPolicy)(policyDocument)) {
18
+ return new policy_js_1.PolicyImpl(policyDocument.policyDocument, metadata ?? policyDocument.metadata);
19
+ }
12
20
  return new policy_js_1.PolicyImpl(policyDocument, metadata);
13
21
  }
14
22
  //# sourceMappingURL=parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":";;AAQA,gCAEC;AAVD,oDAA8D;AAE9D;;;;;GAKG;AACH,SAAgB,UAAU,CAAgB,cAAmB,EAAE,QAAY;IACzE,OAAO,IAAI,sBAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":";;AAaA,gCAKC;AAlBD,oDAA8D;AAC9D,6DAAwD;AAExD;;;;;;;;;GASG;AACH,SAAgB,UAAU,CAAgB,cAAmB,EAAE,QAAY;IACzE,IAAI,IAAA,sCAAiB,EAAC,cAAc,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,sBAAU,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC3F,CAAC;IACD,OAAO,IAAI,sBAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { ValidationError } from './validate/validate.js';
2
+ /**
3
+ * A policy document that has been validated. Carries the raw policy document,
4
+ * optional metadata, and the validation result so that downstream consumers
5
+ * can skip re-validation.
6
+ *
7
+ * Every field is a plain value — no class instances — so the entire object
8
+ * survives JSON serialization (e.g. through SharedArrayBuffer) unchanged.
9
+ */
10
+ export interface ValidatedPolicy<T = undefined> {
11
+ /** Discriminant for runtime detection via {@link isValidatedPolicy}. */
12
+ readonly __validated: true;
13
+ /** The raw policy JSON document. */
14
+ readonly policyDocument: any;
15
+ /** Optional metadata carried through to {@link loadPolicy} (e.g. `{ name: string }` for error reporting). */
16
+ readonly metadata?: T;
17
+ /** Validation errors. An empty array means the policy is valid. */
18
+ readonly errors: readonly ValidationError[];
19
+ }
20
+ /**
21
+ * Validates a policy document using the provided validation function and
22
+ * bundles the result with the raw document and optional metadata.
23
+ *
24
+ * The caller chooses the validation function, so this factory is agnostic
25
+ * to the policy type (identity, SCP, RCP, resource, trust, endpoint, etc.).
26
+ *
27
+ * @param policyDocument the raw policy JSON document
28
+ * @param validateFn a validation function that returns an array of errors (empty if valid)
29
+ * @param metadata optional metadata to carry with the validated policy
30
+ * @returns a ValidatedPolicy containing the raw document, metadata, and validation errors
31
+ */
32
+ export declare function createValidatedPolicy<T = undefined>(policyDocument: any, validateFn: (policy: any) => ValidationError[], metadata?: T): ValidatedPolicy<T>;
33
+ /**
34
+ * Type guard that checks whether a value is a {@link ValidatedPolicy}.
35
+ *
36
+ * @param value the value to check
37
+ * @returns true if the value is a ValidatedPolicy
38
+ */
39
+ export declare function isValidatedPolicy(value: any): value is ValidatedPolicy;
40
+ //# sourceMappingURL=validatedPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validatedPolicy.d.ts","sourceRoot":"","sources":["../../src/validatedPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,SAAS;IAC5C,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAA;IAE1B,oCAAoC;IACpC,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAA;IAE5B,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAErB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAC5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,GAAG,SAAS,EACjD,cAAc,EAAE,GAAG,EACnB,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,eAAe,EAAE,EAC9C,QAAQ,CAAC,EAAE,CAAC,GACX,eAAe,CAAC,CAAC,CAAC,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,eAAe,CAEtE"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createValidatedPolicy = createValidatedPolicy;
4
+ exports.isValidatedPolicy = isValidatedPolicy;
5
+ /**
6
+ * Validates a policy document using the provided validation function and
7
+ * bundles the result with the raw document and optional metadata.
8
+ *
9
+ * The caller chooses the validation function, so this factory is agnostic
10
+ * to the policy type (identity, SCP, RCP, resource, trust, endpoint, etc.).
11
+ *
12
+ * @param policyDocument the raw policy JSON document
13
+ * @param validateFn a validation function that returns an array of errors (empty if valid)
14
+ * @param metadata optional metadata to carry with the validated policy
15
+ * @returns a ValidatedPolicy containing the raw document, metadata, and validation errors
16
+ */
17
+ function createValidatedPolicy(policyDocument, validateFn, metadata) {
18
+ const errors = validateFn(policyDocument);
19
+ return { __validated: true, policyDocument, metadata, errors };
20
+ }
21
+ /**
22
+ * Type guard that checks whether a value is a {@link ValidatedPolicy}.
23
+ *
24
+ * @param value the value to check
25
+ * @returns true if the value is a ValidatedPolicy
26
+ */
27
+ function isValidatedPolicy(value) {
28
+ return !!value && value.__validated === true;
29
+ }
30
+ //# sourceMappingURL=validatedPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validatedPolicy.js","sourceRoot":"","sources":["../../src/validatedPolicy.ts"],"names":[],"mappings":";;AAoCA,sDAOC;AAQD,8CAEC;AA7BD;;;;;;;;;;;GAWG;AACH,SAAgB,qBAAqB,CACnC,cAAmB,EACnB,UAA8C,EAC9C,QAAY;IAEZ,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACzC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AAChE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,KAAU;IAC1C,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,CAAA;AAC9C,CAAC"}
@@ -7,6 +7,7 @@ export type { AccountPrincipal, AwsPrincipal, CanonicalUserPrincipal, FederatedP
7
7
  export type { Resource, ArnResource } from './resources/resource.js';
8
8
  export type { ActionStatement, NotActionStatement, NotPrincipalStatement, NotResourceStatement, PrincipalStatement, ResourceStatement, Statement } from './statements/statement.js';
9
9
  export { lintPolicy } from './lint/lint.js';
10
+ export { createValidatedPolicy, isValidatedPolicy, type ValidatedPolicy } from './validatedPolicy.js';
10
11
  export { validatePolicySyntax, type ValidationError } from './validate/validate.js';
11
12
  export { validateEndpointPolicy, validateIdentityPolicy, validateResourceControlPolicy, validateResourcePolicy, validateServiceControlPolicy, validateSessionPolicy, validateTrustPolicy } from './validate/validateTypes.js';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC5F,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACpE,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACV,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC5F,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACpE,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACV,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,6BAA6B,CAAA"}
package/dist/esm/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { loadPolicy } from './parser.js';
2
2
  export { lintPolicy } from './lint/lint.js';
3
+ export { createValidatedPolicy, isValidatedPolicy } from './validatedPolicy.js';
3
4
  export { validatePolicySyntax } from './validate/validate.js';
4
5
  export { validateEndpointPolicy, validateIdentityPolicy, validateResourceControlPolicy, validateResourcePolicy, validateServiceControlPolicy, validateSessionPolicy, validateTrustPolicy } from './validate/validateTypes.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAsBxC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAwB,MAAM,wBAAwB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAsBxC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EAElB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAAwB,MAAM,wBAAwB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,6BAA6B,CAAA"}
@@ -1,8 +1,12 @@
1
1
  import { type Policy } from './policies/policy.js';
2
2
  /**
3
- * Load a Policy from a policy document
3
+ * Load a Policy from a policy document. If a {@link ValidatedPolicy} is passed,
4
+ * the raw document and metadata are extracted from it automatically. When both
5
+ * the ValidatedPolicy carries metadata and the caller supplies explicit metadata,
6
+ * the explicit metadata takes precedence.
4
7
  *
5
- * @param policyDocument the policy document JSON object
8
+ * @param policyDocument the policy document JSON object, or a ValidatedPolicy
9
+ * @param metadata optional metadata to attach to the loaded Policy
6
10
  * @returns the Policy object for the backing policy document
7
11
  */
8
12
  export declare function loadPolicy<T = undefined>(policyDocument: any, metadata?: T): Policy<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,sBAAsB,CAAA;AAE9D;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAEtF"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,sBAAsB,CAAA;AAG9D;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAKtF"}
@@ -1,11 +1,19 @@
1
1
  import { PolicyImpl } from './policies/policy.js';
2
+ import { isValidatedPolicy } from './validatedPolicy.js';
2
3
  /**
3
- * Load a Policy from a policy document
4
+ * Load a Policy from a policy document. If a {@link ValidatedPolicy} is passed,
5
+ * the raw document and metadata are extracted from it automatically. When both
6
+ * the ValidatedPolicy carries metadata and the caller supplies explicit metadata,
7
+ * the explicit metadata takes precedence.
4
8
  *
5
- * @param policyDocument the policy document JSON object
9
+ * @param policyDocument the policy document JSON object, or a ValidatedPolicy
10
+ * @param metadata optional metadata to attach to the loaded Policy
6
11
  * @returns the Policy object for the backing policy document
7
12
  */
8
13
  export function loadPolicy(policyDocument, metadata) {
14
+ if (isValidatedPolicy(policyDocument)) {
15
+ return new PolicyImpl(policyDocument.policyDocument, metadata ?? policyDocument.metadata);
16
+ }
9
17
  return new PolicyImpl(policyDocument, metadata);
10
18
  }
11
19
  //# sourceMappingURL=parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAgB,cAAmB,EAAE,QAAY;IACzE,OAAO,IAAI,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAgB,cAAmB,EAAE,QAAY;IACzE,IAAI,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC3F,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { ValidationError } from './validate/validate.js';
2
+ /**
3
+ * A policy document that has been validated. Carries the raw policy document,
4
+ * optional metadata, and the validation result so that downstream consumers
5
+ * can skip re-validation.
6
+ *
7
+ * Every field is a plain value — no class instances — so the entire object
8
+ * survives JSON serialization (e.g. through SharedArrayBuffer) unchanged.
9
+ */
10
+ export interface ValidatedPolicy<T = undefined> {
11
+ /** Discriminant for runtime detection via {@link isValidatedPolicy}. */
12
+ readonly __validated: true;
13
+ /** The raw policy JSON document. */
14
+ readonly policyDocument: any;
15
+ /** Optional metadata carried through to {@link loadPolicy} (e.g. `{ name: string }` for error reporting). */
16
+ readonly metadata?: T;
17
+ /** Validation errors. An empty array means the policy is valid. */
18
+ readonly errors: readonly ValidationError[];
19
+ }
20
+ /**
21
+ * Validates a policy document using the provided validation function and
22
+ * bundles the result with the raw document and optional metadata.
23
+ *
24
+ * The caller chooses the validation function, so this factory is agnostic
25
+ * to the policy type (identity, SCP, RCP, resource, trust, endpoint, etc.).
26
+ *
27
+ * @param policyDocument the raw policy JSON document
28
+ * @param validateFn a validation function that returns an array of errors (empty if valid)
29
+ * @param metadata optional metadata to carry with the validated policy
30
+ * @returns a ValidatedPolicy containing the raw document, metadata, and validation errors
31
+ */
32
+ export declare function createValidatedPolicy<T = undefined>(policyDocument: any, validateFn: (policy: any) => ValidationError[], metadata?: T): ValidatedPolicy<T>;
33
+ /**
34
+ * Type guard that checks whether a value is a {@link ValidatedPolicy}.
35
+ *
36
+ * @param value the value to check
37
+ * @returns true if the value is a ValidatedPolicy
38
+ */
39
+ export declare function isValidatedPolicy(value: any): value is ValidatedPolicy;
40
+ //# sourceMappingURL=validatedPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validatedPolicy.d.ts","sourceRoot":"","sources":["../../src/validatedPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,SAAS;IAC5C,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAA;IAE1B,oCAAoC;IACpC,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAA;IAE5B,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAErB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAC5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,GAAG,SAAS,EACjD,cAAc,EAAE,GAAG,EACnB,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,eAAe,EAAE,EAC9C,QAAQ,CAAC,EAAE,CAAC,GACX,eAAe,CAAC,CAAC,CAAC,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,eAAe,CAEtE"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Validates a policy document using the provided validation function and
3
+ * bundles the result with the raw document and optional metadata.
4
+ *
5
+ * The caller chooses the validation function, so this factory is agnostic
6
+ * to the policy type (identity, SCP, RCP, resource, trust, endpoint, etc.).
7
+ *
8
+ * @param policyDocument the raw policy JSON document
9
+ * @param validateFn a validation function that returns an array of errors (empty if valid)
10
+ * @param metadata optional metadata to carry with the validated policy
11
+ * @returns a ValidatedPolicy containing the raw document, metadata, and validation errors
12
+ */
13
+ export function createValidatedPolicy(policyDocument, validateFn, metadata) {
14
+ const errors = validateFn(policyDocument);
15
+ return { __validated: true, policyDocument, metadata, errors };
16
+ }
17
+ /**
18
+ * Type guard that checks whether a value is a {@link ValidatedPolicy}.
19
+ *
20
+ * @param value the value to check
21
+ * @returns true if the value is a ValidatedPolicy
22
+ */
23
+ export function isValidatedPolicy(value) {
24
+ return !!value && value.__validated === true;
25
+ }
26
+ //# sourceMappingURL=validatedPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validatedPolicy.js","sourceRoot":"","sources":["../../src/validatedPolicy.ts"],"names":[],"mappings":"AAwBA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CACnC,cAAmB,EACnB,UAA8C,EAC9C,QAAY;IAEZ,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACzC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAU;IAC1C,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,CAAA;AAC9C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloud-copilot/iam-policy",
3
- "version": "0.1.87",
3
+ "version": "0.1.88",
4
4
  "description": "An ORM for AWS IAM policies",
5
5
  "repository": {
6
6
  "type": "git",