@peac/control 0.10.8 → 0.10.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/enforcement.d.ts.map +1 -1
- package/dist/index.cjs +466 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs +416 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +19 -6
- package/dist/adapter.js +0 -74
- package/dist/adapter.js.map +0 -1
- package/dist/constraints.js +0 -14
- package/dist/constraints.js.map +0 -1
- package/dist/enforcement.js +0 -201
- package/dist/enforcement.js.map +0 -1
- package/dist/index.js +0 -57
- package/dist/index.js.map +0 -1
- package/dist/state.js +0 -139
- package/dist/state.js.map +0 -1
- package/dist/types.js +0 -6
- package/dist/types.js.map +0 -1
- package/dist/validators.js +0 -159
- package/dist/validators.js.map +0 -1
package/dist/enforcement.js
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* PEAC Control Abstraction Layer (CAL) Enforcement
|
|
4
|
-
*
|
|
5
|
-
* Enforcement logic for mandates and control blocks.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.enforceTemporalConstraint = enforceTemporalConstraint;
|
|
9
|
-
exports.enforceUsageConstraint = enforceUsageConstraint;
|
|
10
|
-
exports.enforceBudgetConstraint = enforceBudgetConstraint;
|
|
11
|
-
exports.enforceCombinedConstraint = enforceCombinedConstraint;
|
|
12
|
-
exports.enforceConstraint = enforceConstraint;
|
|
13
|
-
exports.enforceControlBlock = enforceControlBlock;
|
|
14
|
-
/**
|
|
15
|
-
* Enforce temporal mandate
|
|
16
|
-
*/
|
|
17
|
-
function enforceTemporalConstraint(mandate, currentTime = Math.floor(Date.now() / 1000)) {
|
|
18
|
-
// Check valid_from
|
|
19
|
-
if (mandate.valid_from !== undefined && currentTime < mandate.valid_from) {
|
|
20
|
-
const remaining = mandate.valid_from - currentTime;
|
|
21
|
-
return {
|
|
22
|
-
allowed: false,
|
|
23
|
-
reason: `Access not yet valid (starts in ${remaining}s)`,
|
|
24
|
-
remaining: { seconds: remaining },
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
// Check valid_until
|
|
28
|
-
if (mandate.valid_until !== undefined && currentTime > mandate.valid_until) {
|
|
29
|
-
return {
|
|
30
|
-
allowed: false,
|
|
31
|
-
reason: 'Access has expired',
|
|
32
|
-
remaining: { seconds: 0 },
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
// Calculate remaining time
|
|
36
|
-
let remainingSeconds;
|
|
37
|
-
if (mandate.valid_until !== undefined) {
|
|
38
|
-
remainingSeconds = mandate.valid_until - currentTime;
|
|
39
|
-
}
|
|
40
|
-
else if (mandate.duration !== undefined && mandate.valid_from !== undefined) {
|
|
41
|
-
const expiresAt = mandate.valid_from + mandate.duration;
|
|
42
|
-
remainingSeconds = expiresAt - currentTime;
|
|
43
|
-
}
|
|
44
|
-
return {
|
|
45
|
-
allowed: true,
|
|
46
|
-
remaining: remainingSeconds !== undefined ? { seconds: remainingSeconds } : undefined,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Enforce usage mandate
|
|
51
|
-
*/
|
|
52
|
-
function enforceUsageConstraint(mandate, state) {
|
|
53
|
-
const currentUses = state?.usage_count ?? mandate.current_uses ?? 0;
|
|
54
|
-
// Check if max uses exceeded
|
|
55
|
-
if (currentUses >= mandate.max_uses) {
|
|
56
|
-
return {
|
|
57
|
-
allowed: false,
|
|
58
|
-
reason: `Usage limit exceeded (${currentUses}/${mandate.max_uses})`,
|
|
59
|
-
remaining: { uses: 0 },
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
// Check usage window if specified
|
|
63
|
-
if (mandate.window !== undefined && state?.first_use !== undefined) {
|
|
64
|
-
const currentTime = Math.floor(Date.now() / 1000);
|
|
65
|
-
const windowExpiry = state.first_use + mandate.window;
|
|
66
|
-
if (currentTime > windowExpiry) {
|
|
67
|
-
return {
|
|
68
|
-
allowed: false,
|
|
69
|
-
reason: 'Usage window expired',
|
|
70
|
-
remaining: { uses: 0 },
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
const remainingUses = mandate.max_uses - currentUses;
|
|
75
|
-
return {
|
|
76
|
-
allowed: true,
|
|
77
|
-
remaining: { uses: remainingUses },
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Enforce budget mandate
|
|
82
|
-
*/
|
|
83
|
-
function enforceBudgetConstraint(mandate, state, requestedAmount) {
|
|
84
|
-
const currentAmount = state?.spent_amount ?? mandate.current_amount ?? 0;
|
|
85
|
-
// Check if budget exceeded
|
|
86
|
-
if (currentAmount >= mandate.max_amount) {
|
|
87
|
-
return {
|
|
88
|
-
allowed: false,
|
|
89
|
-
reason: `Budget limit exceeded (${currentAmount}/${mandate.max_amount} ${mandate.currency})`,
|
|
90
|
-
remaining: { amount: 0 },
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
// Check if requested amount would exceed budget
|
|
94
|
-
if (requestedAmount !== undefined) {
|
|
95
|
-
if (currentAmount + requestedAmount > mandate.max_amount) {
|
|
96
|
-
const remaining = mandate.max_amount - currentAmount;
|
|
97
|
-
return {
|
|
98
|
-
allowed: false,
|
|
99
|
-
reason: `Requested amount would exceed budget (${requestedAmount} > ${remaining} ${mandate.currency} remaining)`,
|
|
100
|
-
remaining: { amount: remaining },
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Check budget window if specified
|
|
105
|
-
if (mandate.window !== undefined && state?.first_use !== undefined) {
|
|
106
|
-
const currentTime = Math.floor(Date.now() / 1000);
|
|
107
|
-
const windowExpiry = state.first_use + mandate.window;
|
|
108
|
-
if (currentTime > windowExpiry) {
|
|
109
|
-
return {
|
|
110
|
-
allowed: false,
|
|
111
|
-
reason: 'Budget window expired',
|
|
112
|
-
remaining: { amount: 0 },
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const remainingAmount = mandate.max_amount - currentAmount;
|
|
117
|
-
return {
|
|
118
|
-
allowed: true,
|
|
119
|
-
remaining: { amount: remainingAmount },
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Enforce combined mandate
|
|
124
|
-
*/
|
|
125
|
-
function enforceCombinedConstraint(mandate, state, requestedAmount, currentTime) {
|
|
126
|
-
const results = [];
|
|
127
|
-
// Check temporal constraints
|
|
128
|
-
if (mandate.temporal !== undefined) {
|
|
129
|
-
const temporalConstraint = {
|
|
130
|
-
type: 'temporal',
|
|
131
|
-
...mandate.temporal,
|
|
132
|
-
};
|
|
133
|
-
const result = enforceTemporalConstraint(temporalConstraint, currentTime);
|
|
134
|
-
results.push(result);
|
|
135
|
-
}
|
|
136
|
-
// Check usage constraints
|
|
137
|
-
if (mandate.usage !== undefined) {
|
|
138
|
-
const usageConstraint = {
|
|
139
|
-
type: 'usage',
|
|
140
|
-
...mandate.usage,
|
|
141
|
-
};
|
|
142
|
-
const result = enforceUsageConstraint(usageConstraint, state);
|
|
143
|
-
results.push(result);
|
|
144
|
-
}
|
|
145
|
-
// Check budget constraints
|
|
146
|
-
if (mandate.budget !== undefined) {
|
|
147
|
-
const budgetConstraint = {
|
|
148
|
-
type: 'budget',
|
|
149
|
-
...mandate.budget,
|
|
150
|
-
};
|
|
151
|
-
const result = enforceBudgetConstraint(budgetConstraint, state, requestedAmount);
|
|
152
|
-
results.push(result);
|
|
153
|
-
}
|
|
154
|
-
// All constraints must be satisfied
|
|
155
|
-
const failedResult = results.find((r) => !r.allowed);
|
|
156
|
-
if (failedResult) {
|
|
157
|
-
return failedResult;
|
|
158
|
-
}
|
|
159
|
-
// Merge remaining information
|
|
160
|
-
const remaining = {};
|
|
161
|
-
for (const result of results) {
|
|
162
|
-
if (result.remaining) {
|
|
163
|
-
Object.assign(remaining, result.remaining);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return {
|
|
167
|
-
allowed: true,
|
|
168
|
-
remaining: Object.keys(remaining).length > 0 ? remaining : undefined,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Enforce mandate (dispatcher)
|
|
173
|
-
*/
|
|
174
|
-
function enforceConstraint(mandate, state, requestedAmount, currentTime) {
|
|
175
|
-
switch (mandate.type) {
|
|
176
|
-
case 'temporal':
|
|
177
|
-
return enforceTemporalConstraint(mandate, currentTime);
|
|
178
|
-
case 'usage':
|
|
179
|
-
return enforceUsageConstraint(mandate, state);
|
|
180
|
-
case 'budget':
|
|
181
|
-
return enforceBudgetConstraint(mandate, state, requestedAmount);
|
|
182
|
-
case 'combined':
|
|
183
|
-
return enforceCombinedConstraint(mandate, state, requestedAmount, currentTime);
|
|
184
|
-
default:
|
|
185
|
-
// TypeScript exhaustiveness check
|
|
186
|
-
const _exhaustive = mandate;
|
|
187
|
-
return {
|
|
188
|
-
allowed: false,
|
|
189
|
-
reason: `Unknown mandate type: ${_exhaustive.type}`,
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Enforce control block
|
|
195
|
-
*
|
|
196
|
-
* @deprecated Use enforceConstraint directly. This function is maintained for backward compatibility.
|
|
197
|
-
*/
|
|
198
|
-
function enforceControlBlock(constraint, state, requestedAmount, currentTime) {
|
|
199
|
-
return enforceConstraint(constraint, state, requestedAmount, currentTime);
|
|
200
|
-
}
|
|
201
|
-
//# sourceMappingURL=enforcement.js.map
|
package/dist/enforcement.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enforcement.js","sourceRoot":"","sources":["../src/enforcement.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* PEAC Control
|
|
4
|
-
*
|
|
5
|
-
* Control engine interfaces, generic constraint helpers, and validation.
|
|
6
|
-
*
|
|
7
|
-
* @packageDocumentation
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.getStateSummary = exports.resetState = exports.isStateExpired = exports.updateStateAfterUse = exports.createControlState = exports.enforceMandate = exports.enforceCombinedMandate = exports.enforceBudgetMandate = exports.enforceUsageMandate = exports.enforceTemporalMandate = exports.enforceControlBlock = exports.enforceConstraint = exports.enforceCombinedConstraint = exports.enforceBudgetConstraint = exports.enforceUsageConstraint = exports.enforceTemporalConstraint = exports.MandateSchema = exports.CombinedMandateSchema = exports.BudgetMandateSchema = exports.UsageMandateSchema = exports.TemporalMandateSchema = exports.ChainControlBlockSchema = exports.ControlStepSchema = exports.ControlDecisionSchema = exports.ControlLicensingModeSchema = exports.ControlPurposeSchema = exports.ControlStateSchema = exports.ControlBlockSchema = exports.ConstraintSchema = exports.CombinedConstraintSchema = exports.BudgetConstraintSchema = exports.UsageConstraintSchema = exports.TemporalConstraintSchema = exports.ControlEngineRegistry = void 0;
|
|
11
|
-
var adapter_1 = require("./adapter");
|
|
12
|
-
Object.defineProperty(exports, "ControlEngineRegistry", { enumerable: true, get: function () { return adapter_1.ControlEngineRegistry; } });
|
|
13
|
-
// Validators
|
|
14
|
-
var validators_1 = require("./validators");
|
|
15
|
-
Object.defineProperty(exports, "TemporalConstraintSchema", { enumerable: true, get: function () { return validators_1.TemporalConstraintSchema; } });
|
|
16
|
-
Object.defineProperty(exports, "UsageConstraintSchema", { enumerable: true, get: function () { return validators_1.UsageConstraintSchema; } });
|
|
17
|
-
Object.defineProperty(exports, "BudgetConstraintSchema", { enumerable: true, get: function () { return validators_1.BudgetConstraintSchema; } });
|
|
18
|
-
Object.defineProperty(exports, "CombinedConstraintSchema", { enumerable: true, get: function () { return validators_1.CombinedConstraintSchema; } });
|
|
19
|
-
Object.defineProperty(exports, "ConstraintSchema", { enumerable: true, get: function () { return validators_1.ConstraintSchema; } });
|
|
20
|
-
Object.defineProperty(exports, "ControlBlockSchema", { enumerable: true, get: function () { return validators_1.ControlBlockSchema; } });
|
|
21
|
-
Object.defineProperty(exports, "ControlStateSchema", { enumerable: true, get: function () { return validators_1.ControlStateSchema; } });
|
|
22
|
-
// CAL semantic validators (v0.9.16+)
|
|
23
|
-
Object.defineProperty(exports, "ControlPurposeSchema", { enumerable: true, get: function () { return validators_1.ControlPurposeSchema; } });
|
|
24
|
-
Object.defineProperty(exports, "ControlLicensingModeSchema", { enumerable: true, get: function () { return validators_1.ControlLicensingModeSchema; } });
|
|
25
|
-
Object.defineProperty(exports, "ControlDecisionSchema", { enumerable: true, get: function () { return validators_1.ControlDecisionSchema; } });
|
|
26
|
-
Object.defineProperty(exports, "ControlStepSchema", { enumerable: true, get: function () { return validators_1.ControlStepSchema; } });
|
|
27
|
-
Object.defineProperty(exports, "ChainControlBlockSchema", { enumerable: true, get: function () { return validators_1.ChainControlBlockSchema; } });
|
|
28
|
-
// Deprecated validator aliases (will be removed in v0.9.17)
|
|
29
|
-
var validators_2 = require("./validators");
|
|
30
|
-
Object.defineProperty(exports, "TemporalMandateSchema", { enumerable: true, get: function () { return validators_2.TemporalConstraintSchema; } });
|
|
31
|
-
Object.defineProperty(exports, "UsageMandateSchema", { enumerable: true, get: function () { return validators_2.UsageConstraintSchema; } });
|
|
32
|
-
Object.defineProperty(exports, "BudgetMandateSchema", { enumerable: true, get: function () { return validators_2.BudgetConstraintSchema; } });
|
|
33
|
-
Object.defineProperty(exports, "CombinedMandateSchema", { enumerable: true, get: function () { return validators_2.CombinedConstraintSchema; } });
|
|
34
|
-
Object.defineProperty(exports, "MandateSchema", { enumerable: true, get: function () { return validators_2.ConstraintSchema; } });
|
|
35
|
-
// Enforcement
|
|
36
|
-
var enforcement_1 = require("./enforcement");
|
|
37
|
-
Object.defineProperty(exports, "enforceTemporalConstraint", { enumerable: true, get: function () { return enforcement_1.enforceTemporalConstraint; } });
|
|
38
|
-
Object.defineProperty(exports, "enforceUsageConstraint", { enumerable: true, get: function () { return enforcement_1.enforceUsageConstraint; } });
|
|
39
|
-
Object.defineProperty(exports, "enforceBudgetConstraint", { enumerable: true, get: function () { return enforcement_1.enforceBudgetConstraint; } });
|
|
40
|
-
Object.defineProperty(exports, "enforceCombinedConstraint", { enumerable: true, get: function () { return enforcement_1.enforceCombinedConstraint; } });
|
|
41
|
-
Object.defineProperty(exports, "enforceConstraint", { enumerable: true, get: function () { return enforcement_1.enforceConstraint; } });
|
|
42
|
-
Object.defineProperty(exports, "enforceControlBlock", { enumerable: true, get: function () { return enforcement_1.enforceControlBlock; } });
|
|
43
|
-
// Deprecated enforcement aliases (will be removed in v0.9.17)
|
|
44
|
-
var enforcement_2 = require("./enforcement");
|
|
45
|
-
Object.defineProperty(exports, "enforceTemporalMandate", { enumerable: true, get: function () { return enforcement_2.enforceTemporalConstraint; } });
|
|
46
|
-
Object.defineProperty(exports, "enforceUsageMandate", { enumerable: true, get: function () { return enforcement_2.enforceUsageConstraint; } });
|
|
47
|
-
Object.defineProperty(exports, "enforceBudgetMandate", { enumerable: true, get: function () { return enforcement_2.enforceBudgetConstraint; } });
|
|
48
|
-
Object.defineProperty(exports, "enforceCombinedMandate", { enumerable: true, get: function () { return enforcement_2.enforceCombinedConstraint; } });
|
|
49
|
-
Object.defineProperty(exports, "enforceMandate", { enumerable: true, get: function () { return enforcement_2.enforceConstraint; } });
|
|
50
|
-
// State management
|
|
51
|
-
var state_1 = require("./state");
|
|
52
|
-
Object.defineProperty(exports, "createControlState", { enumerable: true, get: function () { return state_1.createControlState; } });
|
|
53
|
-
Object.defineProperty(exports, "updateStateAfterUse", { enumerable: true, get: function () { return state_1.updateStateAfterUse; } });
|
|
54
|
-
Object.defineProperty(exports, "isStateExpired", { enumerable: true, get: function () { return state_1.isStateExpired; } });
|
|
55
|
-
Object.defineProperty(exports, "resetState", { enumerable: true, get: function () { return state_1.resetState; } });
|
|
56
|
-
Object.defineProperty(exports, "getStateSummary", { enumerable: true, get: function () { return state_1.getStateSummary; } });
|
|
57
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAIH,qCAAkD;AAAzC,gHAAA,qBAAqB,OAAA;AAoC9B,aAAa;AACb,2CAcsB;AAbpB,sHAAA,wBAAwB,OAAA;AACxB,mHAAA,qBAAqB,OAAA;AACrB,oHAAA,sBAAsB,OAAA;AACtB,sHAAA,wBAAwB,OAAA;AACxB,8GAAA,gBAAgB,OAAA;AAChB,gHAAA,kBAAkB,OAAA;AAClB,gHAAA,kBAAkB,OAAA;AAClB,qCAAqC;AACrC,kHAAA,oBAAoB,OAAA;AACpB,wHAAA,0BAA0B,OAAA;AAC1B,mHAAA,qBAAqB,OAAA;AACrB,+GAAA,iBAAiB,OAAA;AACjB,qHAAA,uBAAuB,OAAA;AAGzB,4DAA4D;AAC5D,2CAMsB;AALpB,mHAAA,wBAAwB,OAAyB;AACjD,gHAAA,qBAAqB,OAAsB;AAC3C,iHAAA,sBAAsB,OAAuB;AAC7C,mHAAA,wBAAwB,OAAyB;AACjD,2GAAA,gBAAgB,OAAiB;AAGnC,cAAc;AACd,6CAOuB;AANrB,wHAAA,yBAAyB,OAAA;AACzB,qHAAA,sBAAsB,OAAA;AACtB,sHAAA,uBAAuB,OAAA;AACvB,wHAAA,yBAAyB,OAAA;AACzB,gHAAA,iBAAiB,OAAA;AACjB,kHAAA,mBAAmB,OAAA;AAGrB,8DAA8D;AAC9D,6CAMuB;AALrB,qHAAA,yBAAyB,OAA0B;AACnD,kHAAA,sBAAsB,OAAuB;AAC7C,mHAAA,uBAAuB,OAAwB;AAC/C,qHAAA,yBAAyB,OAA0B;AACnD,6GAAA,iBAAiB,OAAkB;AAGrC,mBAAmB;AACnB,iCAMiB;AALf,2GAAA,kBAAkB,OAAA;AAClB,4GAAA,mBAAmB,OAAA;AACnB,uGAAA,cAAc,OAAA;AACd,mGAAA,UAAU,OAAA;AACV,wGAAA,eAAe,OAAA"}
|
package/dist/state.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* PEAC Control Abstraction Layer (CAL) State Management
|
|
4
|
-
*
|
|
5
|
-
* State tracking and updates for control blocks.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.createControlState = createControlState;
|
|
9
|
-
exports.updateStateAfterUse = updateStateAfterUse;
|
|
10
|
-
exports.isStateExpired = isStateExpired;
|
|
11
|
-
exports.resetState = resetState;
|
|
12
|
-
exports.getStateSummary = getStateSummary;
|
|
13
|
-
/**
|
|
14
|
-
* Create initial control state
|
|
15
|
-
*/
|
|
16
|
-
function createControlState(receiptId, constraint) {
|
|
17
|
-
return {
|
|
18
|
-
receipt_id: receiptId,
|
|
19
|
-
constraint,
|
|
20
|
-
usage_count: 0,
|
|
21
|
-
spent_amount: 0,
|
|
22
|
-
metadata: {},
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Update state after usage
|
|
27
|
-
*/
|
|
28
|
-
function updateStateAfterUse(state, amount) {
|
|
29
|
-
const currentTime = Math.floor(Date.now() / 1000);
|
|
30
|
-
const usageCount = (state.usage_count ?? 0) + 1;
|
|
31
|
-
const spentAmount = (state.spent_amount ?? 0) + (amount ?? 0);
|
|
32
|
-
return {
|
|
33
|
-
...state,
|
|
34
|
-
usage_count: usageCount,
|
|
35
|
-
spent_amount: spentAmount,
|
|
36
|
-
first_use: state.first_use ?? currentTime,
|
|
37
|
-
last_use: currentTime,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Check if state is expired
|
|
42
|
-
*/
|
|
43
|
-
function isStateExpired(state) {
|
|
44
|
-
const { constraint: mandate } = state;
|
|
45
|
-
const currentTime = Math.floor(Date.now() / 1000);
|
|
46
|
-
// Check temporal expiry
|
|
47
|
-
if (mandate.type === 'temporal') {
|
|
48
|
-
if (mandate.valid_until !== undefined && currentTime > mandate.valid_until) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
if (mandate.duration !== undefined && state.first_use !== undefined) {
|
|
52
|
-
const expiresAt = state.first_use + mandate.duration;
|
|
53
|
-
if (currentTime > expiresAt) {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// Check combined mandate temporal expiry
|
|
59
|
-
if (mandate.type === 'combined' && mandate.temporal) {
|
|
60
|
-
if (mandate.temporal.valid_until !== undefined && currentTime > mandate.temporal.valid_until) {
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
if (mandate.temporal.duration !== undefined && state.first_use !== undefined) {
|
|
64
|
-
const expiresAt = state.first_use + mandate.temporal.duration;
|
|
65
|
-
if (currentTime > expiresAt) {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
// Check window expiry for usage mandates
|
|
71
|
-
if (mandate.type === 'usage' && mandate.window !== undefined && state.first_use !== undefined) {
|
|
72
|
-
const windowExpiry = state.first_use + mandate.window;
|
|
73
|
-
if (currentTime > windowExpiry) {
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Check window expiry for budget mandates
|
|
78
|
-
if (mandate.type === 'budget' && mandate.window !== undefined && state.first_use !== undefined) {
|
|
79
|
-
const windowExpiry = state.first_use + mandate.window;
|
|
80
|
-
if (currentTime > windowExpiry) {
|
|
81
|
-
return true;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Check window expiry for combined mandates
|
|
85
|
-
if (mandate.type === 'combined') {
|
|
86
|
-
if (mandate.usage?.window !== undefined && state.first_use !== undefined) {
|
|
87
|
-
const windowExpiry = state.first_use + mandate.usage.window;
|
|
88
|
-
if (currentTime > windowExpiry) {
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (mandate.budget?.window !== undefined && state.first_use !== undefined) {
|
|
93
|
-
const windowExpiry = state.first_use + mandate.budget.window;
|
|
94
|
-
if (currentTime > windowExpiry) {
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Reset state (for windowed mandates)
|
|
103
|
-
*/
|
|
104
|
-
function resetState(state) {
|
|
105
|
-
return {
|
|
106
|
-
...state,
|
|
107
|
-
usage_count: 0,
|
|
108
|
-
spent_amount: 0,
|
|
109
|
-
first_use: undefined,
|
|
110
|
-
last_use: undefined,
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Get state summary for debugging
|
|
115
|
-
*/
|
|
116
|
-
function getStateSummary(state) {
|
|
117
|
-
const parts = [];
|
|
118
|
-
if (state.usage_count !== undefined && state.usage_count > 0) {
|
|
119
|
-
parts.push(`uses: ${state.usage_count}`);
|
|
120
|
-
}
|
|
121
|
-
if (state.spent_amount !== undefined && state.spent_amount > 0) {
|
|
122
|
-
const currency = state.constraint.type === 'budget'
|
|
123
|
-
? state.constraint.currency
|
|
124
|
-
: state.constraint.type === 'combined' && state.constraint.budget
|
|
125
|
-
? state.constraint.budget.currency
|
|
126
|
-
: 'units';
|
|
127
|
-
parts.push(`spent: ${state.spent_amount} ${currency}`);
|
|
128
|
-
}
|
|
129
|
-
if (state.first_use !== undefined) {
|
|
130
|
-
const date = new Date(state.first_use * 1000).toISOString();
|
|
131
|
-
parts.push(`first: ${date}`);
|
|
132
|
-
}
|
|
133
|
-
if (state.last_use !== undefined) {
|
|
134
|
-
const date = new Date(state.last_use * 1000).toISOString();
|
|
135
|
-
parts.push(`last: ${date}`);
|
|
136
|
-
}
|
|
137
|
-
return parts.join(', ');
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=state.js.map
|
package/dist/state.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAOH,gDAQC;AAKD,kDAYC;AAKD,wCA+DC;AAKD,gCAQC;AAKD,0CA4BC;AA9ID;;GAEG;AACH,SAAgB,kBAAkB,CAAC,SAAiB,EAAE,UAAsB;IAC1E,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,UAAU;QACV,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,KAAmB,EAAE,MAAe;IACtE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAE9D,OAAO;QACL,GAAG,KAAK;QACR,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,WAAW;QACzB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,WAAW;QACzC,QAAQ,EAAE,WAAW;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAmB;IAChD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAElD,wBAAwB;IACxB,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;YACrD,IAAI,WAAW,GAAG,SAAS,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACpD,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC7F,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC9D,IAAI,WAAW,GAAG,SAAS,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC9F,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;QACtD,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC/F,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;QACtD,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACzE,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YAC5D,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1E,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7D,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,KAAmB;IAC5C,OAAO;QACL,GAAG,KAAK;QACR,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,SAAS;KACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAmB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,QAAQ,GACZ,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,QAAQ;YAChC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ;YAC3B,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM;gBAC/D,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ;gBAClC,CAAC,CAAC,OAAO,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,YAAY,IAAI,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/dist/validators.js
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* PEAC Control Abstraction Layer (CAL) Validators
|
|
4
|
-
*
|
|
5
|
-
* Validation logic for control blocks and mandates.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.ChainControlBlockSchema = exports.ControlStepSchema = exports.ControlDecisionSchema = exports.ControlLicensingModeSchema = exports.ControlPurposeSchema = exports.ControlStateSchema = exports.ControlBlockSchema = exports.ConstraintSchema = exports.CombinedConstraintSchema = exports.BudgetConstraintSchema = exports.UsageConstraintSchema = exports.TemporalConstraintSchema = void 0;
|
|
9
|
-
const zod_1 = require("zod");
|
|
10
|
-
/**
|
|
11
|
-
* Base temporal mandate schema (without refinements)
|
|
12
|
-
*/
|
|
13
|
-
const TemporalConstraintBaseSchema = zod_1.z.object({
|
|
14
|
-
type: zod_1.z.literal('temporal'),
|
|
15
|
-
valid_from: zod_1.z.number().int().positive().optional(),
|
|
16
|
-
valid_until: zod_1.z.number().int().positive().optional(),
|
|
17
|
-
duration: zod_1.z.number().int().positive().optional(),
|
|
18
|
-
});
|
|
19
|
-
/**
|
|
20
|
-
* Base usage mandate schema (without refinements)
|
|
21
|
-
*/
|
|
22
|
-
const UsageConstraintBaseSchema = zod_1.z.object({
|
|
23
|
-
type: zod_1.z.literal('usage'),
|
|
24
|
-
max_uses: zod_1.z.number().int().positive(),
|
|
25
|
-
current_uses: zod_1.z.number().int().nonnegative().optional(),
|
|
26
|
-
window: zod_1.z.number().int().positive().optional(),
|
|
27
|
-
});
|
|
28
|
-
/**
|
|
29
|
-
* Base budget mandate schema (without refinements)
|
|
30
|
-
*/
|
|
31
|
-
const BudgetConstraintBaseSchema = zod_1.z.object({
|
|
32
|
-
type: zod_1.z.literal('budget'),
|
|
33
|
-
max_amount: zod_1.z.number().int().positive(),
|
|
34
|
-
current_amount: zod_1.z.number().int().nonnegative().optional(),
|
|
35
|
-
window: zod_1.z.number().int().positive().optional(),
|
|
36
|
-
currency: zod_1.z.string().length(3).toUpperCase(),
|
|
37
|
-
});
|
|
38
|
-
/**
|
|
39
|
-
* Base combined mandate schema (without refinements)
|
|
40
|
-
*/
|
|
41
|
-
const CombinedConstraintBaseSchema = zod_1.z.object({
|
|
42
|
-
type: zod_1.z.literal('combined'),
|
|
43
|
-
temporal: zod_1.z
|
|
44
|
-
.object({
|
|
45
|
-
valid_from: zod_1.z.number().int().positive().optional(),
|
|
46
|
-
valid_until: zod_1.z.number().int().positive().optional(),
|
|
47
|
-
duration: zod_1.z.number().int().positive().optional(),
|
|
48
|
-
})
|
|
49
|
-
.optional(),
|
|
50
|
-
usage: zod_1.z
|
|
51
|
-
.object({
|
|
52
|
-
max_uses: zod_1.z.number().int().positive(),
|
|
53
|
-
current_uses: zod_1.z.number().int().nonnegative().optional(),
|
|
54
|
-
window: zod_1.z.number().int().positive().optional(),
|
|
55
|
-
})
|
|
56
|
-
.optional(),
|
|
57
|
-
budget: zod_1.z
|
|
58
|
-
.object({
|
|
59
|
-
max_amount: zod_1.z.number().int().positive(),
|
|
60
|
-
current_amount: zod_1.z.number().int().nonnegative().optional(),
|
|
61
|
-
window: zod_1.z.number().int().positive().optional(),
|
|
62
|
-
currency: zod_1.z.string().length(3).toUpperCase(),
|
|
63
|
-
})
|
|
64
|
-
.optional(),
|
|
65
|
-
});
|
|
66
|
-
/**
|
|
67
|
-
* Temporal mandate schema (with validation)
|
|
68
|
-
*/
|
|
69
|
-
exports.TemporalConstraintSchema = TemporalConstraintBaseSchema.refine((data) => {
|
|
70
|
-
// At least one temporal constraint must be specified
|
|
71
|
-
return (data.valid_from !== undefined || data.valid_until !== undefined || data.duration !== undefined);
|
|
72
|
-
}, {
|
|
73
|
-
message: 'At least one temporal constraint (valid_from, valid_until, duration) must be specified',
|
|
74
|
-
}).refine((data) => {
|
|
75
|
-
// If both valid_from and valid_until are specified, valid_until must be after valid_from
|
|
76
|
-
if (data.valid_from !== undefined && data.valid_until !== undefined) {
|
|
77
|
-
return data.valid_until > data.valid_from;
|
|
78
|
-
}
|
|
79
|
-
return true;
|
|
80
|
-
}, {
|
|
81
|
-
message: 'valid_until must be after valid_from',
|
|
82
|
-
});
|
|
83
|
-
/**
|
|
84
|
-
* Usage mandate schema (with validation)
|
|
85
|
-
*/
|
|
86
|
-
exports.UsageConstraintSchema = UsageConstraintBaseSchema.refine((data) => {
|
|
87
|
-
// current_uses cannot exceed max_uses
|
|
88
|
-
if (data.current_uses !== undefined) {
|
|
89
|
-
return data.current_uses <= data.max_uses;
|
|
90
|
-
}
|
|
91
|
-
return true;
|
|
92
|
-
}, {
|
|
93
|
-
message: 'current_uses cannot exceed max_uses',
|
|
94
|
-
});
|
|
95
|
-
/**
|
|
96
|
-
* Budget mandate schema (with validation)
|
|
97
|
-
*/
|
|
98
|
-
exports.BudgetConstraintSchema = BudgetConstraintBaseSchema.refine((data) => {
|
|
99
|
-
// current_amount cannot exceed max_amount
|
|
100
|
-
if (data.current_amount !== undefined) {
|
|
101
|
-
return data.current_amount <= data.max_amount;
|
|
102
|
-
}
|
|
103
|
-
return true;
|
|
104
|
-
}, {
|
|
105
|
-
message: 'current_amount cannot exceed max_amount',
|
|
106
|
-
});
|
|
107
|
-
/**
|
|
108
|
-
* Combined mandate schema (with validation)
|
|
109
|
-
*/
|
|
110
|
-
exports.CombinedConstraintSchema = CombinedConstraintBaseSchema.refine((data) => {
|
|
111
|
-
// At least one mandate type must be specified
|
|
112
|
-
return data.temporal !== undefined || data.usage !== undefined || data.budget !== undefined;
|
|
113
|
-
}, {
|
|
114
|
-
message: 'At least one mandate (temporal, usage, budget) must be specified in combined type',
|
|
115
|
-
});
|
|
116
|
-
/**
|
|
117
|
-
* Constraint schema (discriminated union using base schemas)
|
|
118
|
-
*/
|
|
119
|
-
exports.ConstraintSchema = zod_1.z.discriminatedUnion('type', [
|
|
120
|
-
TemporalConstraintBaseSchema,
|
|
121
|
-
UsageConstraintBaseSchema,
|
|
122
|
-
BudgetConstraintBaseSchema,
|
|
123
|
-
CombinedConstraintBaseSchema,
|
|
124
|
-
]);
|
|
125
|
-
/**
|
|
126
|
-
* Control block schema
|
|
127
|
-
*/
|
|
128
|
-
exports.ControlBlockSchema = zod_1.z.object({
|
|
129
|
-
mandate: exports.ConstraintSchema,
|
|
130
|
-
scope: zod_1.z.string().url().optional(),
|
|
131
|
-
metadata: zod_1.z.record(zod_1.z.unknown()).optional(),
|
|
132
|
-
});
|
|
133
|
-
/**
|
|
134
|
-
* Control state schema
|
|
135
|
-
*/
|
|
136
|
-
exports.ControlStateSchema = zod_1.z.object({
|
|
137
|
-
receipt_id: zod_1.z.string().uuid(),
|
|
138
|
-
constraint: exports.ConstraintSchema,
|
|
139
|
-
usage_count: zod_1.z.number().int().nonnegative().optional(),
|
|
140
|
-
spent_amount: zod_1.z.number().int().nonnegative().optional(),
|
|
141
|
-
first_use: zod_1.z.number().int().positive().optional(),
|
|
142
|
-
last_use: zod_1.z.number().int().positive().optional(),
|
|
143
|
-
metadata: zod_1.z.record(zod_1.z.unknown()).optional(),
|
|
144
|
-
});
|
|
145
|
-
// -----------------------------------------------------------------------------
|
|
146
|
-
// CAL Semantic Validators (v0.9.16+)
|
|
147
|
-
// Re-exported from @peac/schema for convenience
|
|
148
|
-
// -----------------------------------------------------------------------------
|
|
149
|
-
var schema_1 = require("@peac/schema");
|
|
150
|
-
Object.defineProperty(exports, "ControlPurposeSchema", { enumerable: true, get: function () { return schema_1.ControlPurposeSchema; } });
|
|
151
|
-
Object.defineProperty(exports, "ControlLicensingModeSchema", { enumerable: true, get: function () { return schema_1.ControlLicensingModeSchema; } });
|
|
152
|
-
Object.defineProperty(exports, "ControlDecisionSchema", { enumerable: true, get: function () { return schema_1.ControlDecisionSchema; } });
|
|
153
|
-
Object.defineProperty(exports, "ControlStepSchema", { enumerable: true, get: function () { return schema_1.ControlStepSchema; } });
|
|
154
|
-
// Note: ControlBlockSchema from @peac/schema validates chain-based governance blocks
|
|
155
|
-
// (chain/decision/combinator), while the ControlBlockSchema above validates
|
|
156
|
-
// constraint-based blocks (mandate/scope/metadata). We export the chain-based
|
|
157
|
-
// one with a distinct name to avoid confusion.
|
|
158
|
-
Object.defineProperty(exports, "ChainControlBlockSchema", { enumerable: true, get: function () { return schema_1.ControlBlockSchema; } });
|
|
159
|
-
//# sourceMappingURL=validators.js.map
|
package/dist/validators.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|