@futdevpro/fsm-dynamo 1.20.60 → 1.20.64

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 (40) hide show
  1. package/build/_collections/utils/operation-authz.util.d.ts.map +1 -1
  2. package/build/_collections/utils/operation-authz.util.js +5 -1
  3. package/build/_collections/utils/operation-authz.util.js.map +1 -1
  4. package/build/_collections/utils/operation-guardrails.util.d.ts +46 -0
  5. package/build/_collections/utils/operation-guardrails.util.d.ts.map +1 -0
  6. package/build/_collections/utils/operation-guardrails.util.js +138 -0
  7. package/build/_collections/utils/operation-guardrails.util.js.map +1 -0
  8. package/build/_collections/utils/operation-run.util.d.ts +6 -0
  9. package/build/_collections/utils/operation-run.util.d.ts.map +1 -1
  10. package/build/_collections/utils/operation-run.util.js +18 -1
  11. package/build/_collections/utils/operation-run.util.js.map +1 -1
  12. package/build/_collections/utils/operation-schema.util.d.ts +46 -0
  13. package/build/_collections/utils/operation-schema.util.d.ts.map +1 -0
  14. package/build/_collections/utils/operation-schema.util.js +138 -0
  15. package/build/_collections/utils/operation-schema.util.js.map +1 -0
  16. package/build/_enums/operation-if-match.type-enum.d.ts +17 -0
  17. package/build/_enums/operation-if-match.type-enum.d.ts.map +1 -0
  18. package/build/_enums/operation-if-match.type-enum.js +21 -0
  19. package/build/_enums/operation-if-match.type-enum.js.map +1 -0
  20. package/build/_models/control-models/operation-settings.control-model.d.ts +3 -0
  21. package/build/_models/control-models/operation-settings.control-model.d.ts.map +1 -1
  22. package/build/_models/control-models/operation-settings.control-model.js +16 -0
  23. package/build/_models/control-models/operation-settings.control-model.js.map +1 -1
  24. package/build/_models/interfaces/operation-guardrails.interface.d.ts +28 -0
  25. package/build/_models/interfaces/operation-guardrails.interface.d.ts.map +1 -0
  26. package/build/_models/interfaces/operation-guardrails.interface.js +3 -0
  27. package/build/_models/interfaces/operation-guardrails.interface.js.map +1 -0
  28. package/build/_models/interfaces/operation-json-schema.interface.d.ts +27 -0
  29. package/build/_models/interfaces/operation-json-schema.interface.d.ts.map +1 -0
  30. package/build/_models/interfaces/operation-json-schema.interface.js +3 -0
  31. package/build/_models/interfaces/operation-json-schema.interface.js.map +1 -0
  32. package/build/_models/interfaces/operation-patch-result.interface.d.ts +14 -0
  33. package/build/_models/interfaces/operation-patch-result.interface.d.ts.map +1 -0
  34. package/build/_models/interfaces/operation-patch-result.interface.js +3 -0
  35. package/build/_models/interfaces/operation-patch-result.interface.js.map +1 -0
  36. package/build/index.d.ts +6 -0
  37. package/build/index.d.ts.map +1 -1
  38. package/build/index.js +6 -0
  39. package/build/index.js.map +1 -1
  40. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"operation-authz.util.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/operation-authz.util.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kCAAkC,EACnC,MAAM,8DAA8D,CAAC;AAEtE,OAAO,EACL,mCAAmC,EACpC,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2DAA2D,CAAC;AAGvG;;;;;;;;;;;;;GAaG;AACH,qBAAa,wBAAwB;IACnC;;;;OAIG;IACH,MAAM,CAAC,KAAK,CACV,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,GACtC,0BAA0B;IAyC7B;;;OAGG;IACH,MAAM,CAAC,MAAM,CACX,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,GACtC,0BAA0B;IAM7B;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CACnB,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,EACvC,MAAM,EAAE,MAAM,GACb,0BAA0B;IA6B7B,2FAA2F;IAC3F,MAAM,CAAC,eAAe,CACpB,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,EACvC,MAAM,EAAE,MAAM,GACb,0BAA0B;IAM7B,8BAA8B;IAC9B,OAAO,CAAC,MAAM,CAAC,IAAI;IAInB,8FAA8F;IAC9F,OAAO,CAAC,MAAM,CAAC,aAAa;CAoB7B"}
1
+ {"version":3,"file":"operation-authz.util.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/operation-authz.util.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kCAAkC,EACnC,MAAM,8DAA8D,CAAC;AAEtE,OAAO,EACL,mCAAmC,EACpC,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2DAA2D,CAAC;AAGvG;;;;;;;;;;;;;GAaG;AACH,qBAAa,wBAAwB;IACnC;;;;OAIG;IACH,MAAM,CAAC,KAAK,CACV,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,GACtC,0BAA0B;IA8C7B;;;OAGG;IACH,MAAM,CAAC,MAAM,CACX,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,GACtC,0BAA0B;IAM7B;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CACnB,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,EACvC,MAAM,EAAE,MAAM,GACb,0BAA0B;IA6B7B,2FAA2F;IAC3F,MAAM,CAAC,eAAe,CACpB,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,EACvC,MAAM,EAAE,MAAM,GACb,0BAA0B;IAM7B,8BAA8B;IAC9B,OAAO,CAAC,MAAM,CAAC,IAAI;IAInB,8FAA8F;IAC9F,OAAO,CAAC,MAAM,CAAC,aAAa;CAoB7B"}
@@ -40,7 +40,11 @@ class DyFM_OperationAuthz_Util {
40
40
  return { allowed: true, warning: 'legacy-api-key' };
41
41
  }
42
42
  const requiredScope = operation?.authz?.apiKeyScope;
43
- // least privilege: a scoped key can not reach an operation that belongs to no scope
43
+ // a public operation without scope is reachable anonymously, so a scoped key must not be worse off
44
+ if (!requiredScope && !issuerRequired) {
45
+ return { allowed: true };
46
+ }
47
+ // least privilege: a scoped key can not reach a protected operation that belongs to no scope
44
48
  if (!requiredScope) {
45
49
  return DyFM_OperationAuthz_Util.deny('DyFM-OPZ-NSC', 403, `operation "${operation?.name}" declares no apiKeyScope, a scoped API key can not call it`);
46
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"operation-authz.util.js","sourceRoot":"","sources":["../../../src/_collections/utils/operation-authz.util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operation-authz.util.js","sourceRoot":"","sources":["../../../src/_collections/utils/operation-authz.util.ts"],"names":[],"mappings":";;;AAAA,oFAAgF;AAChF,kHAEsE;AACtE,0FAA8E;AAO9E;;;;;;;;;;;;;GAaG;AACH,MAAa,wBAAwB;IACnC;;;;OAIG;IACH,MAAM,CAAC,KAAK,CACV,SAA2E,EAC3E,GAAuC;QAEvC,MAAM,cAAc,GAAY,SAAS,EAAE,KAAK,EAAE,cAAc,KAAK,KAAK,CAAC;QAC3E,MAAM,QAAQ,GAA4B,GAAG,EAAE,QAAQ,IAAI,kDAAuB,CAAC,IAAI,CAAC;QAExF,mEAAmE;QACnE,IAAI,cAAc,IAAI,CAAC,QAAQ,KAAK,kDAAuB,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;YAClF,OAAO,wBAAwB,CAAC,IAAI,CAClC,cAAc,EAAE,GAAG,EAAE,cAAc,SAAS,EAAE,IAAI,oCAAoC,CACvF,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,IAAI,QAAQ,KAAK,kDAAuB,CAAC,MAAM,EAAE,CAAC;YAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,4FAA4F;QAC5F,IAAI,oEAAkC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,aAAa,GAAuB,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC;QAExE,mGAAmG;QACnG,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,6FAA6F;QAC7F,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,wBAAwB,CAAC,IAAI,CAClC,cAAc,EAAE,GAAG,EACnB,cAAc,SAAS,EAAE,IAAI,6DAA6D,CAC3F,CAAC;QACJ,CAAC;QAED,kEAAkE;QAClE,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACtD,OAAO,wBAAwB,CAAC,IAAI,CAClC,cAAc,EAAE,GAAG,EAAE,wBAAwB,aAAa,oBAAoB,SAAS,EAAE,IAAI,GAAG,CACjG,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,CACX,SAA2E,EAC3E,GAAuC;QAEvC,OAAO,wBAAwB,CAAC,aAAa,CAC3C,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,CAC/D,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CACnB,SAA2E,EAC3E,GAAuC,EACvC,MAAc;QAEd,MAAM,cAAc,GAAuB,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;QAEvE,0CAA0C;QAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,kFAAkF;QAClF,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC;YACvB,OAAO,wBAAwB,CAAC,IAAI,CAClC,cAAc,EAAE,GAAG,EACnB,cAAc,SAAS,EAAE,IAAI,8DAA8D,CAC5F,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAY,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEhF,mEAAmE;QACnE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,YAAY,EAAE,CAAC;YAChF,OAAO,wBAAwB,CAAC,IAAI,CAClC,cAAc,EAAE,GAAG,EACnB,gDAAgD,SAAS,EAAE,IAAI,aAAa,cAAc,GAAG,CAC9F,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,2FAA2F;IAC3F,MAAM,CAAC,eAAe,CACpB,SAA2E,EAC3E,GAAuC,EACvC,MAAc;QAEd,OAAO,wBAAwB,CAAC,aAAa,CAC3C,wBAAwB,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,CAChF,CAAC;IACJ,CAAC;IAED,8BAA8B;IACtB,MAAM,CAAC,IAAI,CAAC,SAAiB,EAAE,MAAiB,EAAE,MAAc;QACtE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAClF,CAAC;IAED,8FAA8F;IACtF,MAAM,CAAC,aAAa,CAC1B,MAAkC,EAClC,SAA2E,EAC3E,GAAuC;QAEvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,gCAAU,CAAC;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,mCAAmC,MAAM,CAAC,MAAM,EAAE;YAC3D,iBAAiB,EAAE;gBACjB,SAAS,EAAE,SAAS,EAAE,IAAI;gBAC1B,SAAS,EAAE,GAAG,EAAE,SAAS;gBACzB,QAAQ,EAAE,GAAG,EAAE,QAAQ;aACxB;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAhJD,4DAgJC"}
@@ -0,0 +1,46 @@
1
+ import { DyFM_OperationContext_ControlModel } from '../../_models/control-models/operation-context.control-model';
2
+ import { DyFM_OperationSettings_ControlModel } from '../../_models/control-models/operation-settings.control-model';
3
+ import { DyFM_OperationPatch_Result } from '../../_models/interfaces/operation-patch-result.interface';
4
+ /**
5
+ * Transport-independent write guardrails of an operation (HP-DOPL MP-1.5, DMCP-009).
6
+ *
7
+ * Two phases, like the authorization:
8
+ * 1. `assertPreconditions` — before running (called by `DyFM_OperationRun_Util.execute`);
9
+ * 2. `assertIfMatch` / `filterPatch` — inside `run`, once the current entity is loaded.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const task: Task = await loadTask(id);
14
+ * DyFM_OperationGuardrails_Util.assertIfMatch(op, ctx, DyFM_OperationGuardrails_Util.buildEtag(task.__v));
15
+ * const { patch } = DyFM_OperationGuardrails_Util.filterPatch(op, input);
16
+ * if (!ctx.dryRun) await saveTask(id, patch);
17
+ * ```
18
+ */
19
+ export declare class DyFM_OperationGuardrails_Util {
20
+ /**
21
+ * Builds the etag of an entity from its document version (`__v`), as the organizer MCP does.
22
+ * @param version - the document version; a missing version counts as `0`
23
+ */
24
+ static buildEtag(version: number | undefined): string;
25
+ /**
26
+ * Checks what can be checked without the entity: dry-run support and the presence of a required `ifMatch`.
27
+ * @throws a coded `DyFM_Error` (400 `DyFM-OPG-DRY` · 428 `DyFM-OPG-IFM`)
28
+ */
29
+ static assertPreconditions(operation: DyFM_OperationSettings_ControlModel<unknown, unknown[], unknown>, ctx: DyFM_OperationContext_ControlModel): void;
30
+ /**
31
+ * Compares the caller's `ifMatch` with the entity's current etag.
32
+ * @param currentEtag - the etag of the entity as loaded now
33
+ * @throws 409 `DyFM-OPG-CNF` on mismatch (and 428 when a required `ifMatch` is missing)
34
+ */
35
+ static assertIfMatch(operation: DyFM_OperationSettings_ControlModel<unknown, unknown[], unknown>, ctx: DyFM_OperationContext_ControlModel, currentEtag: string): void;
36
+ /**
37
+ * Applies the patch whitelist of the operation.
38
+ * @param patch - the caller-provided patch object
39
+ * @returns the whitelisted patch and the dropped field names (unchanged patch without a whitelist)
40
+ * @throws 400 `DyFM-OPG-PTY` (not an object) · `DyFM-OPG-PFD` (rejected fields) · `DyFM-OPG-PEM` (nothing left)
41
+ */
42
+ static filterPatch(operation: DyFM_OperationSettings_ControlModel<unknown, unknown[], unknown>, patch: Record<string, unknown>, ctx?: DyFM_OperationContext_ControlModel): DyFM_OperationPatch_Result;
43
+ /** Builds a coded guardrail error carrying the operation, the requestId and the details. */
44
+ private static error;
45
+ }
46
+ //# sourceMappingURL=operation-guardrails.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-guardrails.util.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/operation-guardrails.util.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kCAAkC,EACnC,MAAM,8DAA8D,CAAC;AACtE,OAAO,EACL,mCAAmC,EACpC,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2DAA2D,CAAC;AAGvG;;;;;;;;;;;;;;GAcG;AACH,qBAAa,6BAA6B;IACxC;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;IAIrD;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CACxB,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,GACtC,IAAI;IAmBP;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAClB,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,GAAG,EAAE,kCAAkC,EACvC,WAAW,EAAE,MAAM,GAClB,IAAI;IAiCP;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAChB,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAC3E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,CAAC,EAAE,kCAAkC,GACvC,0BAA0B;IA6C7B,4FAA4F;IAC5F,OAAO,CAAC,MAAM,CAAC,KAAK;CAerB"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_OperationGuardrails_Util = void 0;
4
+ const operation_if_match_type_enum_1 = require("../../_enums/operation-if-match.type-enum");
5
+ const error_control_model_1 = require("../../_models/control-models/error.control-model");
6
+ /**
7
+ * Transport-independent write guardrails of an operation (HP-DOPL MP-1.5, DMCP-009).
8
+ *
9
+ * Two phases, like the authorization:
10
+ * 1. `assertPreconditions` — before running (called by `DyFM_OperationRun_Util.execute`);
11
+ * 2. `assertIfMatch` / `filterPatch` — inside `run`, once the current entity is loaded.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const task: Task = await loadTask(id);
16
+ * DyFM_OperationGuardrails_Util.assertIfMatch(op, ctx, DyFM_OperationGuardrails_Util.buildEtag(task.__v));
17
+ * const { patch } = DyFM_OperationGuardrails_Util.filterPatch(op, input);
18
+ * if (!ctx.dryRun) await saveTask(id, patch);
19
+ * ```
20
+ */
21
+ class DyFM_OperationGuardrails_Util {
22
+ /**
23
+ * Builds the etag of an entity from its document version (`__v`), as the organizer MCP does.
24
+ * @param version - the document version; a missing version counts as `0`
25
+ */
26
+ static buildEtag(version) {
27
+ return String(version || 0);
28
+ }
29
+ /**
30
+ * Checks what can be checked without the entity: dry-run support and the presence of a required `ifMatch`.
31
+ * @throws a coded `DyFM_Error` (400 `DyFM-OPG-DRY` · 428 `DyFM-OPG-IFM`)
32
+ */
33
+ static assertPreconditions(operation, ctx) {
34
+ // a caller asking for a dry run must never cause a real write
35
+ if (ctx?.dryRun === true && operation?.guardrails?.dryRun !== true) {
36
+ throw DyFM_OperationGuardrails_Util.error({
37
+ errorCode: 'DyFM-OPG-DRY', status: 400, operation: operation, ctx: ctx,
38
+ message: `operation "${operation?.name}" does not support dryRun`,
39
+ });
40
+ }
41
+ // a required precondition that is missing: the caller must fetch the entity first
42
+ if (operation?.guardrails?.ifMatch === operation_if_match_type_enum_1.DyFM_OperationIfMatch_Type.required && !ctx?.ifMatch) {
43
+ throw DyFM_OperationGuardrails_Util.error({
44
+ errorCode: 'DyFM-OPG-IFM', status: 428, operation: operation, ctx: ctx,
45
+ message: `operation "${operation?.name}" requires ifMatch (the etag of the entity)`,
46
+ details: { suggestion: 'Fetch the entity and send its current etag as ifMatch.' },
47
+ });
48
+ }
49
+ }
50
+ /**
51
+ * Compares the caller's `ifMatch` with the entity's current etag.
52
+ * @param currentEtag - the etag of the entity as loaded now
53
+ * @throws 409 `DyFM-OPG-CNF` on mismatch (and 428 when a required `ifMatch` is missing)
54
+ */
55
+ static assertIfMatch(operation, ctx, currentEtag) {
56
+ const mode = operation?.guardrails?.ifMatch ?? operation_if_match_type_enum_1.DyFM_OperationIfMatch_Type.none;
57
+ if (mode === operation_if_match_type_enum_1.DyFM_OperationIfMatch_Type.none) {
58
+ return;
59
+ }
60
+ // repeated here, so the check is complete even when run is called outside execute
61
+ if (!ctx?.ifMatch) {
62
+ if (mode === operation_if_match_type_enum_1.DyFM_OperationIfMatch_Type.required) {
63
+ throw DyFM_OperationGuardrails_Util.error({
64
+ errorCode: 'DyFM-OPG-IFM', status: 428, operation: operation, ctx: ctx,
65
+ message: `operation "${operation?.name}" requires ifMatch (the etag of the entity)`,
66
+ details: { suggestion: 'Fetch the entity and send its current etag as ifMatch.' },
67
+ });
68
+ }
69
+ return;
70
+ }
71
+ if (ctx.ifMatch !== currentEtag) {
72
+ throw DyFM_OperationGuardrails_Util.error({
73
+ errorCode: 'DyFM-OPG-CNF', status: 409, operation: operation, ctx: ctx,
74
+ message: `operation "${operation?.name}": etag mismatch (expected ${currentEtag}, got ${ctx.ifMatch})`,
75
+ details: {
76
+ expected: currentEtag,
77
+ received: ctx.ifMatch,
78
+ suggestion: 'Fetch the entity again and retry with its fresh etag.',
79
+ },
80
+ });
81
+ }
82
+ }
83
+ /**
84
+ * Applies the patch whitelist of the operation.
85
+ * @param patch - the caller-provided patch object
86
+ * @returns the whitelisted patch and the dropped field names (unchanged patch without a whitelist)
87
+ * @throws 400 `DyFM-OPG-PTY` (not an object) · `DyFM-OPG-PFD` (rejected fields) · `DyFM-OPG-PEM` (nothing left)
88
+ */
89
+ static filterPatch(operation, patch, ctx) {
90
+ if (!patch || typeof patch !== 'object' || Array.isArray(patch)) {
91
+ throw DyFM_OperationGuardrails_Util.error({
92
+ errorCode: 'DyFM-OPG-PTY', status: 400, operation: operation, ctx: ctx,
93
+ message: `operation "${operation?.name}": patch must be an object`,
94
+ });
95
+ }
96
+ const whitelist = operation?.guardrails?.patchWhitelist;
97
+ // no whitelist declared: the guardrail is not active for this operation
98
+ if (!whitelist) {
99
+ return { patch: { ...patch }, droppedFields: [] };
100
+ }
101
+ const filtered = {};
102
+ const droppedFields = [];
103
+ Object.keys(patch).forEach((field) => {
104
+ if (whitelist.includes(field)) {
105
+ filtered[field] = patch[field];
106
+ }
107
+ else {
108
+ droppedFields.push(field);
109
+ }
110
+ });
111
+ if (droppedFields.length && operation.guardrails?.unknownPatchFields === 'reject') {
112
+ throw DyFM_OperationGuardrails_Util.error({
113
+ errorCode: 'DyFM-OPG-PFD', status: 400, operation: operation, ctx: ctx,
114
+ message: `operation "${operation?.name}": patch fields not allowed: ${droppedFields.join(', ')}`,
115
+ details: { droppedFields: droppedFields, allowedFields: whitelist },
116
+ });
117
+ }
118
+ if (!Object.keys(filtered).length) {
119
+ throw DyFM_OperationGuardrails_Util.error({
120
+ errorCode: 'DyFM-OPG-PEM', status: 400, operation: operation, ctx: ctx,
121
+ message: `operation "${operation?.name}": the patch has no allowed field`,
122
+ details: { droppedFields: droppedFields, allowedFields: whitelist },
123
+ });
124
+ }
125
+ return { patch: filtered, droppedFields: droppedFields };
126
+ }
127
+ /** Builds a coded guardrail error carrying the operation, the requestId and the details. */
128
+ static error(set) {
129
+ return new error_control_model_1.DyFM_Error({
130
+ errorCode: set.errorCode,
131
+ status: set.status,
132
+ message: set.message,
133
+ additionalContent: { operation: set.operation?.name, requestId: set.ctx?.requestId, ...set.details },
134
+ });
135
+ }
136
+ }
137
+ exports.DyFM_OperationGuardrails_Util = DyFM_OperationGuardrails_Util;
138
+ //# sourceMappingURL=operation-guardrails.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-guardrails.util.js","sourceRoot":"","sources":["../../../src/_collections/utils/operation-guardrails.util.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,12 @@ export declare class DyFM_OperationRun_Util {
19
19
  * @returns the result and the non-fatal warnings; throws a coded `DyFM_Error` on any failure
20
20
  */
21
21
  static execute<T_Result, T_Inputs extends unknown[], T_Body>(operation: DyFM_OperationSettings_ControlModel<T_Result, T_Inputs, T_Body>, ctx: DyFM_OperationContext_ControlModel, inputs: T_Inputs): Promise<DyFM_OperationRun_Result<T_Result>>;
22
+ /**
23
+ * Collects the non-fatal warnings of a successful call.
24
+ * `if-match-ignored`: the caller sent `ifMatch`, but the operation does not check it — the caller must not
25
+ * believe the write was protected against concurrent changes.
26
+ */
27
+ private static warningsOf;
22
28
  /**
23
29
  * Transitional bridge (D-2): wraps an existing route `simpleTask` as a `run` implementation.
24
30
  * The context is ignored, because a `simpleTask` never received one; the wrapped operation still
@@ -1 +1 @@
1
- {"version":3,"file":"operation-run.util.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/operation-run.util.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kCAAkC,EACnC,MAAM,8DAA8D,CAAC;AACtE,OAAO,EACL,mCAAmC,EACpC,MAAM,+DAA+D,CAAC;AAEvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yDAAyD,CAAC;AAKnG;;;;;;;;GAQG;AACH,qBAAa,sBAAsB;IACjC;;;;;;OAMG;WACU,OAAO,CAAC,QAAQ,EAAE,QAAQ,SAAS,OAAO,EAAE,EAAE,MAAM,EAC/D,SAAS,EAAE,mCAAmC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAC1E,GAAG,EAAE,kCAAkC,EACvC,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAiC9C;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,SAAS,OAAO,EAAE,EACxD,UAAU,EAAE,CAAC,GAAG,MAAM,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,GACrD,CAAC,GAAG,EAAE,kCAAkC,EAAE,GAAG,MAAM,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;CAUvF"}
1
+ {"version":3,"file":"operation-run.util.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/operation-run.util.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kCAAkC,EACnC,MAAM,8DAA8D,CAAC;AACtE,OAAO,EACL,mCAAmC,EACpC,MAAM,+DAA+D,CAAC;AAEvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yDAAyD,CAAC;AAQnG;;;;;;;;GAQG;AACH,qBAAa,sBAAsB;IACjC;;;;;;OAMG;WACU,OAAO,CAAC,QAAQ,EAAE,QAAQ,SAAS,OAAO,EAAE,EAAE,MAAM,EAC/D,SAAS,EAAE,mCAAmC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAC1E,GAAG,EAAE,kCAAkC,EACvC,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAoC9C;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAgBzB;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,SAAS,OAAO,EAAE,EACxD,UAAU,EAAE,CAAC,GAAG,MAAM,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,GACrD,CAAC,GAAG,EAAE,kCAAkC,EAAE,GAAG,MAAM,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;CAUvF"}
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DyFM_OperationRun_Util = void 0;
4
4
  const error_control_model_1 = require("../../_models/control-models/error.control-model");
5
+ const operation_if_match_type_enum_1 = require("../../_enums/operation-if-match.type-enum");
5
6
  const operation_authz_util_1 = require("./operation-authz.util");
7
+ const operation_guardrails_util_1 = require("./operation-guardrails.util");
6
8
  /**
7
9
  * The single execution path of an operation (HP-DOPL MP-1.2, decision D-2): every transport adapter
8
10
  * calls `execute`, so authorization and error shaping can not diverge between REST, MCP and CLI.
@@ -32,9 +34,11 @@ class DyFM_OperationRun_Util {
32
34
  }
33
35
  // authorization happens before any work, on every transport alike
34
36
  const authz = operation_authz_util_1.DyFM_OperationAuthz_Util.assert(operation, ctx);
37
+ // guardrail preconditions after authorization, so an unauthorized caller learns nothing about them
38
+ operation_guardrails_util_1.DyFM_OperationGuardrails_Util.assertPreconditions(operation, ctx);
35
39
  try {
36
40
  const result = await operation.run(ctx, ...(inputs ?? []));
37
- return { result: result, warnings: authz.warning ? [authz.warning] : [] };
41
+ return { result: result, warnings: DyFM_OperationRun_Util.warningsOf(operation, ctx, authz) };
38
42
  }
39
43
  catch (error) {
40
44
  // a coded DyFM_Error is kept as-is, anything else is wrapped with the operation context
@@ -49,6 +53,19 @@ class DyFM_OperationRun_Util {
49
53
  });
50
54
  }
51
55
  }
56
+ /**
57
+ * Collects the non-fatal warnings of a successful call.
58
+ * `if-match-ignored`: the caller sent `ifMatch`, but the operation does not check it — the caller must not
59
+ * believe the write was protected against concurrent changes.
60
+ */
61
+ static warningsOf(operation, ctx, authz) {
62
+ const warnings = authz.warning ? [authz.warning] : [];
63
+ const ifMatchMode = operation.guardrails?.ifMatch ?? operation_if_match_type_enum_1.DyFM_OperationIfMatch_Type.none;
64
+ if (ctx?.ifMatch && ifMatchMode === operation_if_match_type_enum_1.DyFM_OperationIfMatch_Type.none) {
65
+ warnings.push('if-match-ignored');
66
+ }
67
+ return warnings;
68
+ }
52
69
  /**
53
70
  * Transitional bridge (D-2): wraps an existing route `simpleTask` as a `run` implementation.
54
71
  * The context is ignored, because a `simpleTask` never received one; the wrapped operation still
@@ -1 +1 @@
1
- {"version":3,"file":"operation-run.util.js","sourceRoot":"","sources":["../../../src/_collections/utils/operation-run.util.ts"],"names":[],"mappings":";;;AAAA,0FAA8E;AAU9E,iEAAkE;AAGlE;;;;;;;;GAQG;AACH,MAAa,sBAAsB;IACjC;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAClB,SAA0E,EAC1E,GAAuC,EACvC,MAAgB;QAEhB,oFAAoF;QACpF,IAAI,OAAO,SAAS,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC;YACzC,MAAM,IAAI,gCAAU,CAAC;gBACnB,SAAS,EAAE,cAAc;gBACzB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,cAAc,SAAS,EAAE,IAAI,6BAA6B;gBACnE,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;aAC7E,CAAC,CAAC;QACL,CAAC;QAED,kEAAkE;QAClE,MAAM,KAAK,GAA+B,+CAAwB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,MAAM,GAAa,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,IAAK,EAA4B,CAAC,CAAC,CAAC;YAEhG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,OAAO,CAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wFAAwF;YACxF,IAAI,KAAK,YAAY,gCAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,IAAI,gCAAU,CAAC;gBACnB,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,UAAU;gBAC/C,KAAK,EAAE,KAAK;gBACZ,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;aAC5E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CACnB,UAAsD;QAEtD,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,gCAAU,CAAC;gBACnB,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,+CAA+C;aACzD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAuC,EAAE,GAAG,MAAgB,EAAqB,EAAE,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC;IACpH,CAAC;CACF;AA/DD,wDA+DC"}
1
+ {"version":3,"file":"operation-run.util.js","sourceRoot":"","sources":["../../../src/_collections/utils/operation-run.util.ts"],"names":[],"mappings":";;;AAAA,0FAA8E;AAU9E,4FAAuF;AAEvF,iEAAkE;AAClE,2EAA4E;AAG5E;;;;;;;;GAQG;AACH,MAAa,sBAAsB;IACjC;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAClB,SAA0E,EAC1E,GAAuC,EACvC,MAAgB;QAEhB,oFAAoF;QACpF,IAAI,OAAO,SAAS,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC;YACzC,MAAM,IAAI,gCAAU,CAAC;gBACnB,SAAS,EAAE,cAAc;gBACzB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,cAAc,SAAS,EAAE,IAAI,6BAA6B;gBACnE,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;aAC7E,CAAC,CAAC;QACL,CAAC;QAED,kEAAkE;QAClE,MAAM,KAAK,GAA+B,+CAAwB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE1F,mGAAmG;QACnG,yDAA6B,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,MAAM,MAAM,GAAa,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,IAAK,EAA4B,CAAC,CAAC,CAAC;YAEhG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QAChG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wFAAwF;YACxF,IAAI,KAAK,YAAY,gCAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,IAAI,gCAAU,CAAC;gBACnB,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,UAAU;gBAC/C,KAAK,EAAE,KAAK;gBACZ,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;aAC5E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,UAAU,CACvB,SAA2E,EAC3E,GAAuC,EACvC,KAAiC;QAEjC,MAAM,QAAQ,GAAa,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,OAAO,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAElE,MAAM,WAAW,GAA+B,SAAS,CAAC,UAAU,EAAE,OAAO,IAAI,yDAA0B,CAAC,IAAI,CAAC;QAEjH,IAAI,GAAG,EAAE,OAAO,IAAI,WAAW,KAAK,yDAA0B,CAAC,IAAI,EAAE,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CACnB,UAAsD;QAEtD,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,gCAAU,CAAC;gBACnB,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,+CAA+C;aACzD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAuC,EAAE,GAAG,MAAgB,EAAqB,EAAE,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC;IACpH,CAAC;CACF;AAvFD,wDAuFC"}
@@ -0,0 +1,46 @@
1
+ import { DyFM_DataProperty_Params } from '../../_models/control-models/data-property-params.control-model';
2
+ import { DyFM_OperationSettings_ControlModel } from '../../_models/control-models/operation-settings.control-model';
3
+ import { DyFM_Operation_JsonSchema } from '../../_models/interfaces/operation-json-schema.interface';
4
+ /**
5
+ * Generates the input JSON-schema of an operation (HP-DOPL MP-1.6, DMCP-005) from the runtime data model
6
+ * description (`bodyParams.properties`) — TypeScript generics do not exist at runtime, the properties do.
7
+ * Explicit `inputs` are added on top and override a body property of the same name.
8
+ *
9
+ * Left out on purpose:
10
+ * - server-managed metadata (every key starting with `_`, e.g. `_id`, `__v`, `__created`);
11
+ * - `forbidden`, `readonly` and function-typed properties;
12
+ * - the `authz.ownership` field — ownership is resolved server-side, never taken from caller input.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const schema: DyFM_Operation_JsonSchema = DyFM_OperationSchema_Util.inputSchema(createTask);
17
+ * // { type: 'object', properties: { title: { type: 'string' } }, required: [ 'title' ], additionalProperties: false }
18
+ * ```
19
+ */
20
+ export declare class DyFM_OperationSchema_Util {
21
+ /**
22
+ * Builds the object schema of all inputs of the operation.
23
+ * @param operation - the operation description
24
+ */
25
+ static inputSchema(operation: DyFM_OperationSettings_ControlModel<unknown, unknown[], unknown>): DyFM_Operation_JsonSchema;
26
+ /**
27
+ * Maps one data property (recursively for objects) to a schema.
28
+ * @param property - the data property params
29
+ */
30
+ static propertySchema(property: DyFM_DataProperty_Params<unknown, unknown>): DyFM_Operation_JsonSchema;
31
+ /**
32
+ * Builds an object schema from data properties, leaving out the fields a caller must not set.
33
+ * @param dataProperties - the data model properties
34
+ * @param excludedKey - an additional field to leave out (the ownership field)
35
+ */
36
+ private static objectSchema;
37
+ /** Maps an explicit operation input to a schema. */
38
+ private static inputSettingsSchema;
39
+ /** Base schema of a basic type; dates travel as ISO strings. */
40
+ private static typeSchema;
41
+ /** A property is caller-settable unless it is metadata, forbidden, readonly or a function. */
42
+ private static isCallerSettable;
43
+ /** Normalizes a declared type text to a basic type; a missing type counts as `object`. */
44
+ private static basicTypeOf;
45
+ }
46
+ //# sourceMappingURL=operation-schema.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-schema.util.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/operation-schema.util.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACzB,MAAM,iEAAiE,CAAC;AACzE,OAAO,EACL,mCAAmC,EACpC,MAAM,+DAA+D,CAAC;AAEvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0DAA0D,CAAC;AAKrG;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,yBAAyB;IACpC;;;OAGG;IACH,MAAM,CAAC,WAAW,CAChB,SAAS,EAAE,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,GAC1E,yBAAyB;IAkC5B;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,yBAAyB;IAiCtG;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IA+B3B,oDAAoD;IACpD,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAkBlC,gEAAgE;IAChE,OAAO,CAAC,MAAM,CAAC,UAAU;IAQzB,8FAA8F;IAC9F,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAO/B,0FAA0F;IAC1F,OAAO,CAAC,MAAM,CAAC,WAAW;CAG3B"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_OperationSchema_Util = void 0;
4
+ const basic_property_type_enum_1 = require("../../_enums/basic-property-type.enum");
5
+ const utilities_util_1 = require("./utilities.util");
6
+ /**
7
+ * Generates the input JSON-schema of an operation (HP-DOPL MP-1.6, DMCP-005) from the runtime data model
8
+ * description (`bodyParams.properties`) — TypeScript generics do not exist at runtime, the properties do.
9
+ * Explicit `inputs` are added on top and override a body property of the same name.
10
+ *
11
+ * Left out on purpose:
12
+ * - server-managed metadata (every key starting with `_`, e.g. `_id`, `__v`, `__created`);
13
+ * - `forbidden`, `readonly` and function-typed properties;
14
+ * - the `authz.ownership` field — ownership is resolved server-side, never taken from caller input.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const schema: DyFM_Operation_JsonSchema = DyFM_OperationSchema_Util.inputSchema(createTask);
19
+ * // { type: 'object', properties: { title: { type: 'string' } }, required: [ 'title' ], additionalProperties: false }
20
+ * ```
21
+ */
22
+ class DyFM_OperationSchema_Util {
23
+ /**
24
+ * Builds the object schema of all inputs of the operation.
25
+ * @param operation - the operation description
26
+ */
27
+ static inputSchema(operation) {
28
+ // body properties first, so explicit inputs can override them
29
+ const body = DyFM_OperationSchema_Util.objectSchema(operation?.bodyParams?.properties, operation?.authz?.ownership);
30
+ const properties = body.properties ?? {};
31
+ const required = new Set(body.required ?? []);
32
+ Object.entries(operation?.inputs ?? {}).forEach(([key, input]) => {
33
+ properties[key] = DyFM_OperationSchema_Util.inputSettingsSchema(input);
34
+ // the explicit input decides alone whether the name is required
35
+ if (input.required === true) {
36
+ required.add(key);
37
+ }
38
+ else {
39
+ required.delete(key);
40
+ }
41
+ });
42
+ const schema = {
43
+ type: 'object',
44
+ properties: properties,
45
+ additionalProperties: false,
46
+ };
47
+ if (required.size) {
48
+ schema.required = [...required];
49
+ }
50
+ return schema;
51
+ }
52
+ /**
53
+ * Maps one data property (recursively for objects) to a schema.
54
+ * @param property - the data property params
55
+ */
56
+ static propertySchema(property) {
57
+ const basicType = DyFM_OperationSchema_Util.basicTypeOf(property?.type);
58
+ const schema = DyFM_OperationSchema_Util.typeSchema(basicType);
59
+ // the declared type text (e.g. `string[]`) is kept in nonBasicType once the params are constructed
60
+ const declaredType = String(property?.nonBasicType ?? property?.type ?? '');
61
+ // array element type
62
+ if (basicType === basic_property_type_enum_1.DyFM_BasicProperty_Type.array && declaredType.endsWith('[]')) {
63
+ schema.items = DyFM_OperationSchema_Util.typeSchema(DyFM_OperationSchema_Util.basicTypeOf(declaredType.slice(0, -2)));
64
+ }
65
+ // nested object properties
66
+ if (basicType === basic_property_type_enum_1.DyFM_BasicProperty_Type.object && property.subObjectParams) {
67
+ Object.assign(schema, DyFM_OperationSchema_Util.objectSchema(property.subObjectParams));
68
+ }
69
+ if (property?.default !== undefined) {
70
+ schema.default = property.default;
71
+ }
72
+ if (typeof property?.minlength === 'number') {
73
+ schema.minLength = property.minlength;
74
+ }
75
+ if (typeof property?.maxlength === 'number') {
76
+ schema.maxLength = property.maxlength;
77
+ }
78
+ return schema;
79
+ }
80
+ /**
81
+ * Builds an object schema from data properties, leaving out the fields a caller must not set.
82
+ * @param dataProperties - the data model properties
83
+ * @param excludedKey - an additional field to leave out (the ownership field)
84
+ */
85
+ static objectSchema(dataProperties, excludedKey) {
86
+ const properties = {};
87
+ const required = [];
88
+ Object.entries(dataProperties ?? {}).forEach(([key, property]) => {
89
+ if (key === excludedKey || !DyFM_OperationSchema_Util.isCallerSettable(key, property)) {
90
+ return;
91
+ }
92
+ properties[key] = DyFM_OperationSchema_Util.propertySchema(property);
93
+ // a default makes the field optional for the caller
94
+ if (property.required === true && property.default === undefined) {
95
+ required.push(key);
96
+ }
97
+ });
98
+ const schema = { type: 'object', properties: properties, additionalProperties: false };
99
+ if (required.length) {
100
+ schema.required = required;
101
+ }
102
+ return schema;
103
+ }
104
+ /** Maps an explicit operation input to a schema. */
105
+ static inputSettingsSchema(input) {
106
+ const schema = DyFM_OperationSchema_Util.typeSchema(input.type);
107
+ if (input.description) {
108
+ schema.description = input.description;
109
+ }
110
+ if (input.enum) {
111
+ schema.enum = [...input.enum];
112
+ }
113
+ if (input.default !== undefined) {
114
+ schema.default = input.default;
115
+ }
116
+ return schema;
117
+ }
118
+ /** Base schema of a basic type; dates travel as ISO strings. */
119
+ static typeSchema(type) {
120
+ if (type === basic_property_type_enum_1.DyFM_BasicProperty_Type.date) {
121
+ return { type: 'string', format: 'date-time' };
122
+ }
123
+ return { type: type };
124
+ }
125
+ /** A property is caller-settable unless it is metadata, forbidden, readonly or a function. */
126
+ static isCallerSettable(key, property) {
127
+ return !key.startsWith('_') &&
128
+ property?.forbidden !== true &&
129
+ property?.readonly !== true &&
130
+ DyFM_OperationSchema_Util.basicTypeOf(property?.type) !== basic_property_type_enum_1.DyFM_BasicProperty_Type.function;
131
+ }
132
+ /** Normalizes a declared type text to a basic type; a missing type counts as `object`. */
133
+ static basicTypeOf(type) {
134
+ return type ? (0, utilities_util_1.DyFM_getBasicPropertyType)(type) : basic_property_type_enum_1.DyFM_BasicProperty_Type.object;
135
+ }
136
+ }
137
+ exports.DyFM_OperationSchema_Util = DyFM_OperationSchema_Util;
138
+ //# sourceMappingURL=operation-schema.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-schema.util.js","sourceRoot":"","sources":["../../../src/_collections/utils/operation-schema.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Optimistic-concurrency mode of an operation (`guardrails.ifMatch`).
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * const guardrails: DyFM_Operation_Guardrails = { ifMatch: DyFM_OperationIfMatch_Type.required };
7
+ * ```
8
+ */
9
+ export declare enum DyFM_OperationIfMatch_Type {
10
+ /** A call without `ifMatch` is rejected with 428 before running. */
11
+ required = "required",
12
+ /** Checked only when the caller sends `ifMatch`. */
13
+ optional = "optional",
14
+ /** Never checked. */
15
+ none = "none"
16
+ }
17
+ //# sourceMappingURL=operation-if-match.type-enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-if-match.type-enum.d.ts","sourceRoot":"","sources":["../../src/_enums/operation-if-match.type-enum.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,oBAAY,0BAA0B;IACpC,oEAAoE;IACpE,QAAQ,aAAa;IACrB,oDAAoD;IACpD,QAAQ,aAAa;IACrB,qBAAqB;IACrB,IAAI,SAAS;CACd"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_OperationIfMatch_Type = void 0;
4
+ /**
5
+ * Optimistic-concurrency mode of an operation (`guardrails.ifMatch`).
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const guardrails: DyFM_Operation_Guardrails = { ifMatch: DyFM_OperationIfMatch_Type.required };
10
+ * ```
11
+ */
12
+ var DyFM_OperationIfMatch_Type;
13
+ (function (DyFM_OperationIfMatch_Type) {
14
+ /** A call without `ifMatch` is rejected with 428 before running. */
15
+ DyFM_OperationIfMatch_Type["required"] = "required";
16
+ /** Checked only when the caller sends `ifMatch`. */
17
+ DyFM_OperationIfMatch_Type["optional"] = "optional";
18
+ /** Never checked. */
19
+ DyFM_OperationIfMatch_Type["none"] = "none";
20
+ })(DyFM_OperationIfMatch_Type || (exports.DyFM_OperationIfMatch_Type = DyFM_OperationIfMatch_Type = {}));
21
+ //# sourceMappingURL=operation-if-match.type-enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-if-match.type-enum.js","sourceRoot":"","sources":["../../src/_enums/operation-if-match.type-enum.ts"],"names":[],"mappings":";;;AAEA;;;;;;;GAOG;AACH,IAAY,0BAOX;AAPD,WAAY,0BAA0B;IACpC,oEAAoE;IACpE,mDAAqB,CAAA;IACrB,oDAAoD;IACpD,mDAAqB,CAAA;IACrB,qBAAqB;IACrB,2CAAa,CAAA;AACf,CAAC,EAPW,0BAA0B,0CAA1B,0BAA0B,QAOrC"}
@@ -1,5 +1,6 @@
1
1
  import { DyFM_Operation_Authz } from '../interfaces/operation-authz.interface';
2
2
  import { DyFM_Operation_Exposure } from '../interfaces/operation-exposure.interface';
3
+ import { DyFM_Operation_Guardrails } from '../interfaces/operation-guardrails.interface';
3
4
  import { DyFM_OperationInput_Settings } from '../interfaces/operation-input-settings.interface';
4
5
  import { DyFM_DataModel_Params } from './data-model-params.control-model';
5
6
  import { DyFM_OperationContext_ControlModel } from './operation-context.control-model';
@@ -43,6 +44,8 @@ export declare class DyFM_OperationSettings_ControlModel<T_Result = unknown, T_I
43
44
  expose?: DyFM_Operation_Exposure;
44
45
  /** Declarative authorization; `issuerRequired` defaults to `true`. */
45
46
  authz?: DyFM_Operation_Authz;
47
+ /** Write-safety guardrails; defaults: `ifMatch: none`, `dryRun: false`, `unknownPatchFields: drop`. */
48
+ guardrails?: DyFM_Operation_Guardrails;
46
49
  /**
47
50
  * The implementation — the single execution source of the operation (D-2). Optional, because a
48
51
  * definition-only copy (e.g. for CLI generation) has none; run it through `DyFM_OperationRun_Util.execute`.
@@ -1 +1 @@
1
- {"version":3,"file":"operation-settings.control-model.d.ts","sourceRoot":"","sources":["../../../src/_models/control-models/operation-settings.control-model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAEhG,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AASvF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mCAAmC,CAC9C,QAAQ,GAAG,OAAO,EAClB,QAAQ,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,EACtC,MAAM,GAAG,SAAS;IAMlB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAM;IAC3D,oEAAoE;IACpE,UAAU,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACxC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,sEAAsE;IACtE,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B;;;;OAIG;IACH,GAAG,CAAC,CAAC,GAAG,EAAE,kCAAkC,EAAE,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACrF,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;gBAED,GAAG,EAAE,mCAAmC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;IAkHtE,mEAAmE;IACnE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKzC,4FAA4F;IAC5F,OAAO,CAAC,MAAM,CAAC,OAAO;CAOvB;AAED,OAAO,EACL,mCAAmC,IAAI,uBAAuB,EAC/D,CAAC"}
1
+ {"version":3,"file":"operation-settings.control-model.d.ts","sourceRoot":"","sources":["../../../src/_models/control-models/operation-settings.control-model.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAEhG,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AASvF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mCAAmC,CAC9C,QAAQ,GAAG,OAAO,EAClB,QAAQ,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,EACtC,MAAM,GAAG,SAAS;IAMlB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAM;IAC3D,oEAAoE;IACpE,UAAU,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACxC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,sEAAsE;IACtE,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,uGAAuG;IACvG,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC;;;;OAIG;IACH,GAAG,CAAC,CAAC,GAAG,EAAE,kCAAkC,EAAE,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACrF,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;gBAED,GAAG,EAAE,mCAAmC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;IAuItE,mEAAmE;IACnE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKzC,4FAA4F;IAC5F,OAAO,CAAC,MAAM,CAAC,OAAO;CAOvB;AAED,OAAO,EACL,mCAAmC,IAAI,uBAAuB,EAC/D,CAAC"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DyFM_Operation_Settings = exports.DyFM_OperationSettings_ControlModel = void 0;
4
4
  const stack_util_1 = require("../../_collections/utils/stack.util");
5
5
  const basic_property_type_enum_1 = require("../../_enums/basic-property-type.enum");
6
+ const operation_if_match_type_enum_1 = require("../../_enums/operation-if-match.type-enum");
6
7
  const error_control_model_1 = require("./error.control-model");
7
8
  /** Kebab-case segment: lowercase letters/digits, separated by single dashes. */
8
9
  const DyFM_operationKebabSegment = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
@@ -51,6 +52,8 @@ class DyFM_OperationSettings_ControlModel {
51
52
  expose;
52
53
  /** Declarative authorization; `issuerRequired` defaults to `true`. */
53
54
  authz;
55
+ /** Write-safety guardrails; defaults: `ifMatch: none`, `dryRun: false`, `unknownPatchFields: drop`. */
56
+ guardrails;
54
57
  /** Source location of the construction, for debugging duplicated or misconfigured operations. */
55
58
  stackLocation;
56
59
  /**
@@ -102,6 +105,18 @@ class DyFM_OperationSettings_ControlModel {
102
105
  if (authz.ownership !== undefined && authz.issuerRequired === false) {
103
106
  throw DyFM_OperationSettings_ControlModel.invalid('DyFM-OPS-AZO', `authz.ownership can not be combined with issuerRequired: false (${label})`, stackLocation);
104
107
  }
108
+ // guardrails: known modes, and a whitelist of usable field names
109
+ const guardrails = {
110
+ ifMatch: operation_if_match_type_enum_1.DyFM_OperationIfMatch_Type.none, dryRun: false, unknownPatchFields: 'drop', ...set.guardrails,
111
+ };
112
+ if (!Object.values(operation_if_match_type_enum_1.DyFM_OperationIfMatch_Type).includes(guardrails.ifMatch ?? operation_if_match_type_enum_1.DyFM_OperationIfMatch_Type.none) ||
113
+ !['drop', 'reject'].includes(guardrails.unknownPatchFields ?? 'drop') ||
114
+ typeof guardrails.dryRun !== 'boolean' ||
115
+ (guardrails.patchWhitelist !== undefined && (!Array.isArray(guardrails.patchWhitelist) ||
116
+ !guardrails.patchWhitelist.length ||
117
+ !guardrails.patchWhitelist.every((field) => DyFM_operationInputName.test(field))))) {
118
+ throw DyFM_OperationSettings_ControlModel.invalid('DyFM-OPS-GRD', `guardrails has an unknown mode or an invalid patchWhitelist (${label})`, stackLocation);
119
+ }
105
120
  // run: when given, it must be callable
106
121
  if (set.run !== undefined && typeof set.run !== 'function') {
107
122
  throw DyFM_OperationSettings_ControlModel.invalid('DyFM-OPS-RUN', `run must be a function (${label})`, stackLocation);
@@ -115,6 +130,7 @@ class DyFM_OperationSettings_ControlModel {
115
130
  // a missing expose flag means: exposed on that transport
116
131
  this.expose = { rest: true, mcp: true, cli: true, ...set.expose };
117
132
  this.authz = authz;
133
+ this.guardrails = guardrails;
118
134
  this.stackLocation = stackLocation;
119
135
  }
120
136
  /** Checks the `name` format: dot-separated kebab-case segments. */
@@ -1 +1 @@
1
- {"version":3,"file":"operation-settings.control-model.js","sourceRoot":"","sources":["../../../src/_models/control-models/operation-settings.control-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operation-settings.control-model.js","sourceRoot":"","sources":["../../../src/_models/control-models/operation-settings.control-model.ts"],"names":[],"mappings":";;;AAAA,oEAAwF;AACxF,oFAAgF;AAChF,4FAAuF;AAOvF,+DAAmD;AAInD,gFAAgF;AAChF,MAAM,0BAA0B,GAAW,+BAA+B,CAAC;AAE3E,6FAA6F;AAC7F,MAAM,uBAAuB,GAAW,wBAAwB,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAa,mCAAmC;IAK9C;QACE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAU;IACd,qDAAqD;IACrD,MAAM,CAAS;IACf,0FAA0F;IAC1F,MAAM,CAAS;IACf,wFAAwF;IACxF,WAAW,CAAS;IACpB,qDAAqD;IACrD,MAAM,GAAkD,EAAE,CAAC;IAC3D,oEAAoE;IACpE,UAAU,CAA8B;IACxC,+EAA+E;IAC/E,MAAM,CAA2B;IACjC,sEAAsE;IACtE,KAAK,CAAwB;IAC7B,uGAAuG;IACvG,UAAU,CAA6B;IAOvC,iGAAiG;IACjG,aAAa,CAAU;IAEvB;;;OAGG;IACH,YACE,GAAoE;QAEpE,0EAA0E;QAC1E,MAAM,aAAa,GAAW,GAAG,EAAE,aAAa,IAAI,IAAA,8CAAiC,GAAE,CAAC;QAExF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EAAE,4BAA4B,EAAE,aAAa,CAC5D,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAW,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAEhE,sCAAsC;QACtC,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACnF,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EACd,6CAA6C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,EACrF,aAAa,CACd,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,IACE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;YAC9B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAe,EAAW,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EACpG,CAAC;YACD,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EACd,0DAA0D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,EAClG,aAAa,CACd,CAAC;QACJ,CAAC;QAED,8EAA8E;QAC9E,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YACnE,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EAAE,4BAA4B,KAAK,GAAG,EAAE,aAAa,CACpE,CAAC;QACJ,CAAC;QAED,4EAA4E;QAC5E,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,mCAAmC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzF,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EACd,wDAAwD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EACnF,aAAa,CACd,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,MAAM,MAAM,GAAiD,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QAE9E,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,SAAS,EAAE,KAAK,CAA0C,EAAQ,EAAE;YACpG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EACd,mDAAmD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,GAAG,EAC1F,aAAa,CACd,CAAC;YACJ,CAAC;YAED,IACE,CAAC,KAAK;gBACN,CAAC,MAAM,CAAC,MAAM,CAAC,kDAAuB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5D,KAAK,CAAC,IAAI,KAAK,kDAAuB,CAAC,QAAQ,EAC/C,CAAC;gBACD,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EACd,UAAU,SAAS,+BAA+B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,KAAK,GAAG,EAC3F,aAAa,CACd,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,yFAAyF;QACzF,MAAM,KAAK,GAAyB,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAE3E,IACE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACjF,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EACzG,CAAC;YACD,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EAAE,kFAAkF,KAAK,GAAG,EAC1G,aAAa,CACd,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACpE,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EAAE,mEAAmE,KAAK,GAAG,EAAE,aAAa,CAC3G,CAAC;QACJ,CAAC;QAED,iEAAiE;QACjE,MAAM,UAAU,GAA8B;YAC5C,OAAO,EAAE,yDAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU;SACvG,CAAC;QAEF,IACE,CAAC,MAAM,CAAC,MAAM,CAAC,yDAA0B,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,IAAI,yDAA0B,CAAC,IAAI,CAAC;YAC1G,CAAC,CAAE,MAAM,EAAE,QAAQ,CAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,IAAI,MAAM,CAAC;YACvE,OAAO,UAAU,CAAC,MAAM,KAAK,SAAS;YACtC,CAAC,UAAU,CAAC,cAAc,KAAK,SAAS,IAAI,CAC1C,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;gBACzC,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM;gBACjC,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAa,EAAW,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAClG,CAAC,EACF,CAAC;YACD,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EAAE,gEAAgE,KAAK,GAAG,EAAE,aAAa,CACxG,CAAC;QACJ,CAAC;QAED,uCAAuC;QACvC,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YAC3D,MAAM,mCAAmC,CAAC,OAAO,CAC/C,cAAc,EAAE,2BAA2B,KAAK,GAAG,EAAE,aAAa,CACnE,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,yDAAyD;QACzD,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAClE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,mEAAmE;IACnE,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,OAAO,OAAO,IAAI,KAAK,QAAQ;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAe,EAAW,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,4FAA4F;IACpF,MAAM,CAAC,OAAO,CAAC,SAAiB,EAAE,MAAc,EAAE,aAAqB;QAC7E,OAAO,IAAI,gCAAU,CAAC;YACpB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,gDAAgD,MAAM,EAAE;YACjE,iBAAiB,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE;SACpD,CAAC,CAAC;IACL,CAAC;CACF;AA9LD,kFA8LC;AAGwC,sEAAuB"}
@@ -0,0 +1,28 @@
1
+ import { DyFM_OperationIfMatch_Type } from '../../_enums/operation-if-match.type-enum';
2
+ /**
3
+ * Write-safety guardrails of an operation (HP-DOPL MP-1.5, DMCP-009), lifted from the organizer MCP
4
+ * "safe write" pattern: optimistic concurrency, dry run, patch whitelist.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * const guardrails: DyFM_Operation_Guardrails = {
9
+ * ifMatch: DyFM_OperationIfMatch_Type.required,
10
+ * dryRun: true,
11
+ * patchWhitelist: [ 'title', 'dueDate' ],
12
+ * };
13
+ * ```
14
+ */
15
+ export interface DyFM_Operation_Guardrails {
16
+ /** Optimistic concurrency via `ctx.ifMatch` (default: `none`). */
17
+ ifMatch?: DyFM_OperationIfMatch_Type;
18
+ /**
19
+ * The operation honours `ctx.dryRun` (default: `false`). A dry-run call to an operation that does not
20
+ * support it is rejected, so a caller asking for a dry run can never cause a real write.
21
+ */
22
+ dryRun?: boolean;
23
+ /** Fields a patch may change; when set, `DyFM_OperationGuardrails_Util.filterPatch` enforces it. */
24
+ patchWhitelist?: string[];
25
+ /** What happens with non-whitelisted patch fields (default: `drop`, reported back as dropped). */
26
+ unknownPatchFields?: 'drop' | 'reject';
27
+ }
28
+ //# sourceMappingURL=operation-guardrails.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-guardrails.interface.d.ts","sourceRoot":"","sources":["../../../src/_models/interfaces/operation-guardrails.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAGvF;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,yBAAyB;IACxC,kEAAkE;IAClE,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oGAAoG;IACpG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kGAAkG;IAClG,kBAAkB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CACxC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=operation-guardrails.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-guardrails.interface.js","sourceRoot":"","sources":["../../../src/_models/interfaces/operation-guardrails.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * JSON-schema subset generated for an operation (HP-DOPL MP-1.6). Structurally compatible with the
3
+ * `nts-dynamo` MCP `DyNTS_Mcp_JsonSchema`, so it can be advertised as an MCP tool `inputSchema` as-is,
4
+ * and the CLI generator can derive its options from the same object.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * const schema: DyFM_Operation_JsonSchema = DyFM_OperationSchema_Util.inputSchema(operation);
9
+ * ```
10
+ */
11
+ export interface DyFM_Operation_JsonSchema {
12
+ type: string;
13
+ properties?: {
14
+ [key: string]: DyFM_Operation_JsonSchema;
15
+ };
16
+ required?: string[];
17
+ items?: DyFM_Operation_JsonSchema;
18
+ enum?: (string | number | boolean)[];
19
+ description?: string;
20
+ default?: unknown;
21
+ /** String format hint (e.g. `date-time`). */
22
+ format?: string;
23
+ minLength?: number;
24
+ maxLength?: number;
25
+ additionalProperties?: boolean;
26
+ }
27
+ //# sourceMappingURL=operation-json-schema.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-json-schema.interface.d.ts","sourceRoot":"","sources":["../../../src/_models/interfaces/operation-json-schema.interface.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,yBAAyB,CAAA;KAAE,CAAC;IAC1D,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=operation-json-schema.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-json-schema.interface.js","sourceRoot":"","sources":["../../../src/_models/interfaces/operation-json-schema.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Result of `DyFM_OperationGuardrails_Util.filterPatch`: the whitelisted patch and the fields that were
3
+ * dropped, so the adapter can tell the caller instead of ignoring them silently.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const { patch, droppedFields }: DyFM_OperationPatch_Result = DyFM_OperationGuardrails_Util.filterPatch(op, input);
8
+ * ```
9
+ */
10
+ export interface DyFM_OperationPatch_Result {
11
+ patch: Record<string, unknown>;
12
+ droppedFields: string[];
13
+ }
14
+ //# sourceMappingURL=operation-patch-result.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-patch-result.interface.d.ts","sourceRoot":"","sources":["../../../src/_models/interfaces/operation-patch-result.interface.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=operation-patch-result.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-patch-result.interface.js","sourceRoot":"","sources":["../../../src/_models/interfaces/operation-patch-result.interface.ts"],"names":[],"mappings":""}
package/build/index.d.ts CHANGED
@@ -20,7 +20,9 @@ export * from './_collections/utils/time.util';
20
20
  export * from './_collections/utils/type-cloning-facility.util';
21
21
  export * from './_collections/utils/utilities.util';
22
22
  export * from './_collections/utils/operation-authz.util';
23
+ export * from './_collections/utils/operation-guardrails.util';
23
24
  export * from './_collections/utils/operation-run.util';
25
+ export * from './_collections/utils/operation-schema.util';
24
26
  export * from './_collections/utils/uuid.util';
25
27
  export * from './_collections/utils/math/box-bounds.util';
26
28
  export * from './_collections/utils/math/math.util';
@@ -37,6 +39,7 @@ export * from './_enums/error-level.enum';
37
39
  export * from './_enums/error-status.enum';
38
40
  export * from './_enums/log-style.enum';
39
41
  export * from './_enums/operation-auth.type-enum';
42
+ export * from './_enums/operation-if-match.type-enum';
40
43
  export * from './_enums/server-connection-status.enum';
41
44
  export * from './_enums/http/http-call-type.enum';
42
45
  export * from './_enums/http/http-event-type.enum';
@@ -64,7 +67,10 @@ export * from './_models/interfaces/operation-authz-result.interface';
64
67
  export * from './_models/interfaces/operation-authz.interface';
65
68
  export * from './_models/interfaces/operation-run-result.interface';
66
69
  export * from './_models/interfaces/operation-exposure.interface';
70
+ export * from './_models/interfaces/operation-guardrails.interface';
67
71
  export * from './_models/interfaces/operation-input-settings.interface';
72
+ export * from './_models/interfaces/operation-json-schema.interface';
73
+ export * from './_models/interfaces/operation-patch-result.interface';
68
74
  export * from './_models/interfaces/paged.interface';
69
75
  export * from './_models/interfaces/random-weight.interface';
70
76
  export * from './_models/interfaces/route-settings.interface';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AACpD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC;AAI/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AAGvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AAKjD,cAAc,0DAA0D,CAAC;AACzE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0DAA0D,CAAC;AACzE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uEAAuE,CAAC;AAGtF,cAAc,iEAAiE,CAAC;AAChF,cAAc,0DAA0D,CAAC;AACzE,cAAc,wDAAwD,CAAC;AAGvE,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAG1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uDAAuD,CAAC;AACtE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,yDAAyD,CAAC;AACxE,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wDAAwD,CAAC;AACvE,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gEAAgE,CAAC;AAC/E,cAAc,4DAA4D,CAAC;AAG3E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AACpD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gCAAgC,CAAC;AAG/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC;AAI/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,wCAAwC,CAAC;AAGvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AAKjD,cAAc,0DAA0D,CAAC;AACzE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0DAA0D,CAAC;AACzE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uEAAuE,CAAC;AAGtF,cAAc,iEAAiE,CAAC;AAChF,cAAc,0DAA0D,CAAC;AACzE,cAAc,wDAAwD,CAAC;AAGvE,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAG1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uDAAuD,CAAC;AACtE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,qDAAqD,CAAC;AACpE,cAAc,yDAAyD,CAAC;AACxE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AACtE,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wDAAwD,CAAC;AACvE,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gEAAgE,CAAC;AAC/E,cAAc,4DAA4D,CAAC;AAG3E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC"}
package/build/index.js CHANGED
@@ -26,7 +26,9 @@ tslib_1.__exportStar(require("./_collections/utils/time.util"), exports);
26
26
  tslib_1.__exportStar(require("./_collections/utils/type-cloning-facility.util"), exports);
27
27
  tslib_1.__exportStar(require("./_collections/utils/utilities.util"), exports);
28
28
  tslib_1.__exportStar(require("./_collections/utils/operation-authz.util"), exports);
29
+ tslib_1.__exportStar(require("./_collections/utils/operation-guardrails.util"), exports);
29
30
  tslib_1.__exportStar(require("./_collections/utils/operation-run.util"), exports);
31
+ tslib_1.__exportStar(require("./_collections/utils/operation-schema.util"), exports);
30
32
  tslib_1.__exportStar(require("./_collections/utils/uuid.util"), exports);
31
33
  // collections/utils/MATH
32
34
  tslib_1.__exportStar(require("./_collections/utils/math/box-bounds.util"), exports);
@@ -46,6 +48,7 @@ tslib_1.__exportStar(require("./_enums/error-level.enum"), exports);
46
48
  tslib_1.__exportStar(require("./_enums/error-status.enum"), exports);
47
49
  tslib_1.__exportStar(require("./_enums/log-style.enum"), exports);
48
50
  tslib_1.__exportStar(require("./_enums/operation-auth.type-enum"), exports);
51
+ tslib_1.__exportStar(require("./_enums/operation-if-match.type-enum"), exports);
49
52
  tslib_1.__exportStar(require("./_enums/server-connection-status.enum"), exports);
50
53
  // enums/HTTP
51
54
  tslib_1.__exportStar(require("./_enums/http/http-call-type.enum"), exports);
@@ -80,7 +83,10 @@ tslib_1.__exportStar(require("./_models/interfaces/operation-authz-result.interf
80
83
  tslib_1.__exportStar(require("./_models/interfaces/operation-authz.interface"), exports);
81
84
  tslib_1.__exportStar(require("./_models/interfaces/operation-run-result.interface"), exports);
82
85
  tslib_1.__exportStar(require("./_models/interfaces/operation-exposure.interface"), exports);
86
+ tslib_1.__exportStar(require("./_models/interfaces/operation-guardrails.interface"), exports);
83
87
  tslib_1.__exportStar(require("./_models/interfaces/operation-input-settings.interface"), exports);
88
+ tslib_1.__exportStar(require("./_models/interfaces/operation-json-schema.interface"), exports);
89
+ tslib_1.__exportStar(require("./_models/interfaces/operation-patch-result.interface"), exports);
84
90
  tslib_1.__exportStar(require("./_models/interfaces/paged.interface"), exports);
85
91
  tslib_1.__exportStar(require("./_models/interfaces/random-weight.interface"), exports);
86
92
  tslib_1.__exportStar(require("./_models/interfaces/route-settings.interface"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,cAAc;AACd,wBAAwB;AACxB,oFAA0D;AAC1D,wFAA8D;AAC9D,yFAA+D;AAC/D,iFAAuD;AACvD,+EAAqD;AAErD,oBAAoB;AACpB,0EAAgD;AAChD,0EAAgD;AAChD,yEAA+C;AAC/C,0FAAgE;AAChE,sFAA4D;AAC5D,wEAA8C;AAC9C,+EAAqD;AACrD,gFAAsD;AACtD,2EAAiD;AACjD,gFAAsD;AACtD,0EAAgD;AAChD,2EAAiD;AACjD,gFAAsD;AACtD,yEAA+C;AAC/C,0FAAgE;AAChE,8EAAoD;AACpD,oFAA0D;AAC1D,kFAAwD;AACxD,yEAA+C;AAE/C,yBAAyB;AACzB,oFAA0D;AAC1D,8EAAoD;AACpD,gFAAsD;AACtD,sFAA4D;AAC5D,iFAAuD;AAEvD,2BAA2B;AAC3B,yFAA+D;AAC/D,gFAAsD;AACtD,yFAA+D;AAG/D,QAAQ;AACR,4EAAkD;AAClD,wEAA8C;AAC9C,yEAA+C;AAC/C,oEAA0C;AAC1C,qEAA2C;AAC3C,kEAAwC;AACxC,4EAAkD;AAClD,iFAAuD;AAEvD,aAAa;AACb,4EAAkD;AAClD,6EAAmD;AACnD,gFAAsD;AAEtD,aAAa;AACb,yEAA+C;AAC/C,mEAAyC;AACzC,2EAAiD;AAGjD,SAAS;AACT,wBAAwB;AACxB,mGAAyE;AACzE,sGAA4E;AAC5E,uFAA6D;AAC7D,mGAAyE;AACzE,oGAA0E;AAC1E,sFAA4D;AAC5D,6FAAmE;AACnE,+FAAqE;AACrE,gHAAsF;AAEtF,6BAA6B;AAC7B,0GAAgF;AAChF,mGAAyE;AACzE,iGAAuE;AAEvE,qBAAqB;AACrB,kFAAwD;AACxD,oFAA0D;AAE1D,oBAAoB;AACpB,oFAA0D;AAC1D,wFAA8D;AAC9D,gGAAsE;AACtE,yFAA+D;AAC/D,8FAAoE;AACpE,4FAAkE;AAClE,kGAAwE;AACxE,+EAAqD;AACrD,uFAA6D;AAC7D,wFAA8D;AAC9D,sFAA4D;AAC5D,uFAA6D;AAC7D,iGAAuE;AACvE,iFAAuD;AAEvD,gCAAgC;AAChC,yGAA+E;AAC/E,qGAA2E;AAE3E,eAAe;AACf,yEAA+C;AAC/C,uEAA6C;AAC7C,yEAA+C;AAC/C,uEAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,cAAc;AACd,wBAAwB;AACxB,oFAA0D;AAC1D,wFAA8D;AAC9D,yFAA+D;AAC/D,iFAAuD;AACvD,+EAAqD;AAErD,oBAAoB;AACpB,0EAAgD;AAChD,0EAAgD;AAChD,yEAA+C;AAC/C,0FAAgE;AAChE,sFAA4D;AAC5D,wEAA8C;AAC9C,+EAAqD;AACrD,gFAAsD;AACtD,2EAAiD;AACjD,gFAAsD;AACtD,0EAAgD;AAChD,2EAAiD;AACjD,gFAAsD;AACtD,yEAA+C;AAC/C,0FAAgE;AAChE,8EAAoD;AACpD,oFAA0D;AAC1D,yFAA+D;AAC/D,kFAAwD;AACxD,qFAA2D;AAC3D,yEAA+C;AAE/C,yBAAyB;AACzB,oFAA0D;AAC1D,8EAAoD;AACpD,gFAAsD;AACtD,sFAA4D;AAC5D,iFAAuD;AAEvD,2BAA2B;AAC3B,yFAA+D;AAC/D,gFAAsD;AACtD,yFAA+D;AAG/D,QAAQ;AACR,4EAAkD;AAClD,wEAA8C;AAC9C,yEAA+C;AAC/C,oEAA0C;AAC1C,qEAA2C;AAC3C,kEAAwC;AACxC,4EAAkD;AAClD,gFAAsD;AACtD,iFAAuD;AAEvD,aAAa;AACb,4EAAkD;AAClD,6EAAmD;AACnD,gFAAsD;AAEtD,aAAa;AACb,yEAA+C;AAC/C,mEAAyC;AACzC,2EAAiD;AAGjD,SAAS;AACT,wBAAwB;AACxB,mGAAyE;AACzE,sGAA4E;AAC5E,uFAA6D;AAC7D,mGAAyE;AACzE,oGAA0E;AAC1E,sFAA4D;AAC5D,6FAAmE;AACnE,+FAAqE;AACrE,gHAAsF;AAEtF,6BAA6B;AAC7B,0GAAgF;AAChF,mGAAyE;AACzE,iGAAuE;AAEvE,qBAAqB;AACrB,kFAAwD;AACxD,oFAA0D;AAE1D,oBAAoB;AACpB,oFAA0D;AAC1D,wFAA8D;AAC9D,gGAAsE;AACtE,yFAA+D;AAC/D,8FAAoE;AACpE,4FAAkE;AAClE,8FAAoE;AACpE,kGAAwE;AACxE,+FAAqE;AACrE,gGAAsE;AACtE,+EAAqD;AACrD,uFAA6D;AAC7D,wFAA8D;AAC9D,sFAA4D;AAC5D,uFAA6D;AAC7D,iGAAuE;AACvE,iFAAuD;AAEvD,gCAAgC;AAChC,yGAA+E;AAC/E,qGAA2E;AAE3E,eAAe;AACf,yEAA+C;AAC/C,uEAA6C;AAC7C,yEAA+C;AAC/C,uEAA6C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fsm-dynamo",
3
- "version": "1.20.60",
3
+ "version": "1.20.64",
4
4
  "description": "Full Stack Model Collection for Dynamic (NodeJS-Typescript) Framework called Dynamo, by Future Development Ltd.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "full-stack-package",