@empire-builder-kit/runtime 1.0.0-beta.9 → 1.0.0-rc.2
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/NOTICE +6 -0
- package/package.json +93 -3
- package/src/api-contract/artifacts.d.ts +67 -0
- package/src/api-contract/artifacts.js +349 -0
- package/src/api-contract/artifacts.js.map +1 -0
- package/src/api-contract/client.d.ts +79 -0
- package/src/api-contract/client.js +561 -0
- package/src/api-contract/client.js.map +1 -0
- package/src/api-contract/errors.d.ts +7 -0
- package/src/api-contract/errors.js +11 -0
- package/src/api-contract/errors.js.map +1 -0
- package/src/api-contract/index.d.ts +9 -0
- package/src/api-contract/index.js +10 -0
- package/src/api-contract/index.js.map +1 -0
- package/src/api-contract/operation.d.ts +118 -0
- package/src/api-contract/operation.js +609 -0
- package/src/api-contract/operation.js.map +1 -0
- package/src/api-contract/schema.d.ts +81 -0
- package/src/api-contract/schema.js +313 -0
- package/src/api-contract/schema.js.map +1 -0
- package/src/api-contract/server.d.ts +77 -0
- package/src/api-contract/server.js +466 -0
- package/src/api-contract/server.js.map +1 -0
- package/src/async-work/contract.d.ts +17 -0
- package/src/async-work/contract.js +105 -0
- package/src/async-work/contract.js.map +1 -0
- package/src/async-work/idempotency.d.ts +123 -0
- package/src/async-work/idempotency.js +167 -0
- package/src/async-work/idempotency.js.map +1 -0
- package/src/async-work/index.d.ts +8 -0
- package/src/async-work/index.js +9 -0
- package/src/async-work/index.js.map +1 -0
- package/src/async-work/provider.d.ts +90 -0
- package/src/async-work/provider.js +155 -0
- package/src/async-work/provider.js.map +1 -0
- package/src/async-work/recovery.d.ts +103 -0
- package/src/async-work/recovery.js +291 -0
- package/src/async-work/recovery.js.map +1 -0
- package/src/async-work/schedule.d.ts +117 -0
- package/src/async-work/schedule.js +279 -0
- package/src/async-work/schedule.js.map +1 -0
- package/src/async-work/sqs.d.ts +133 -0
- package/src/async-work/sqs.js +280 -0
- package/src/async-work/sqs.js.map +1 -0
- package/src/async-work/webhook.d.ts +60 -0
- package/src/async-work/webhook.js +178 -0
- package/src/async-work/webhook.js.map +1 -0
- package/src/async-work/workflow.d.ts +98 -0
- package/src/async-work/workflow.js +225 -0
- package/src/async-work/workflow.js.map +1 -0
- package/src/auth-backend.d.ts +12 -2
- package/src/auth-backend.js +30 -18
- package/src/auth-backend.js.map +1 -1
- package/src/authorization/admission.d.ts +30 -0
- package/src/authorization/admission.js +87 -0
- package/src/authorization/admission.js.map +1 -0
- package/src/authorization/approval.d.ts +99 -0
- package/src/authorization/approval.js +249 -0
- package/src/authorization/approval.js.map +1 -0
- package/src/authorization/audit.d.ts +35 -0
- package/src/authorization/audit.js +35 -0
- package/src/authorization/audit.js.map +1 -0
- package/src/authorization/delegation.d.ts +149 -0
- package/src/authorization/delegation.js +401 -0
- package/src/authorization/delegation.js.map +1 -0
- package/src/authorization/errors.d.ts +32 -0
- package/src/authorization/errors.js +153 -0
- package/src/authorization/errors.js.map +1 -0
- package/src/authorization/evaluator.d.ts +39 -0
- package/src/authorization/evaluator.js +199 -0
- package/src/authorization/evaluator.js.map +1 -0
- package/src/authorization/index.d.ts +14 -0
- package/src/authorization/index.js +15 -0
- package/src/authorization/index.js.map +1 -0
- package/src/authorization/machine-token.d.ts +87 -0
- package/src/authorization/machine-token.js +201 -0
- package/src/authorization/machine-token.js.map +1 -0
- package/src/authorization/machine.d.ts +32 -0
- package/src/authorization/machine.js +41 -0
- package/src/authorization/machine.js.map +1 -0
- package/src/authorization/model.d.ts +112 -0
- package/src/authorization/model.js +112 -0
- package/src/authorization/model.js.map +1 -0
- package/src/canonical-json.cjs +157 -0
- package/src/canonical-json.d.cts +26 -0
- package/src/canonical-json.d.ts +18 -0
- package/src/canonical-json.js +125 -0
- package/src/canonical-json.js.map +1 -0
- package/src/configuration/contract.d.ts +107 -0
- package/src/configuration/contract.js +461 -0
- package/src/configuration/contract.js.map +1 -0
- package/src/configuration/index.d.ts +3 -0
- package/src/configuration/index.js +4 -0
- package/src/configuration/index.js.map +1 -0
- package/src/configuration/provider.d.ts +59 -0
- package/src/configuration/provider.js +198 -0
- package/src/configuration/provider.js.map +1 -0
- package/src/configuration/rollout-evaluator.cjs +54 -0
- package/src/configuration/rollout-evaluator.d.cts +26 -0
- package/src/configuration/rollout-evaluator.d.ts +18 -0
- package/src/configuration/rollout-evaluator.js +38 -0
- package/src/configuration/rollout-evaluator.js.map +1 -0
- package/src/configuration/rollout-key.cjs +38 -0
- package/src/configuration/rollout-key.d.cts +14 -0
- package/src/configuration/rollout-key.d.ts +10 -0
- package/src/configuration/rollout-key.js +26 -0
- package/src/configuration/rollout-key.js.map +1 -0
- package/src/configuration/rollout.d.ts +60 -0
- package/src/configuration/rollout.js +42 -0
- package/src/configuration/rollout.js.map +1 -0
- package/src/data-lifecycle/contract.d.ts +33 -0
- package/src/data-lifecycle/contract.js +118 -0
- package/src/data-lifecycle/contract.js.map +1 -0
- package/src/data-lifecycle/event.d.ts +28 -0
- package/src/data-lifecycle/event.js +76 -0
- package/src/data-lifecycle/event.js.map +1 -0
- package/src/data-lifecycle/evidence.d.ts +65 -0
- package/src/data-lifecycle/evidence.js +162 -0
- package/src/data-lifecycle/evidence.js.map +1 -0
- package/src/data-lifecycle/holds.d.ts +29 -0
- package/src/data-lifecycle/holds.js +124 -0
- package/src/data-lifecycle/holds.js.map +1 -0
- package/src/data-lifecycle/index.d.ts +8 -0
- package/src/data-lifecycle/index.js +9 -0
- package/src/data-lifecycle/index.js.map +1 -0
- package/src/data-lifecycle/policy.d.ts +16 -0
- package/src/data-lifecycle/policy.js +79 -0
- package/src/data-lifecycle/policy.js.map +1 -0
- package/src/data-lifecycle/restore.d.ts +90 -0
- package/src/data-lifecycle/restore.js +336 -0
- package/src/data-lifecycle/restore.js.map +1 -0
- package/src/data-lifecycle/retention.d.ts +57 -0
- package/src/data-lifecycle/retention.js +232 -0
- package/src/data-lifecycle/retention.js.map +1 -0
- package/src/data-lifecycle/rights.d.ts +171 -0
- package/src/data-lifecycle/rights.js +533 -0
- package/src/data-lifecycle/rights.js.map +1 -0
- package/src/database.d.ts +36 -0
- package/src/database.js +119 -0
- package/src/database.js.map +1 -0
- package/src/deterministic-order.cjs +16 -0
- package/src/deterministic-order.d.cts +9 -0
- package/src/deterministic-order.d.ts +7 -0
- package/src/deterministic-order.js +10 -0
- package/src/deterministic-order.js.map +1 -0
- package/src/events.d.ts +28 -19
- package/src/events.js +171 -66
- package/src/events.js.map +1 -1
- package/src/index.d.ts +7 -1
- package/src/index.js +24 -0
- package/src/index.js.map +1 -1
- package/src/lambda.d.ts +8 -2
- package/src/lambda.js +100 -39
- package/src/lambda.js.map +1 -1
- package/src/logging.d.ts +95 -36
- package/src/logging.js +460 -62
- package/src/logging.js.map +1 -1
- package/src/observability.d.ts +80 -18
- package/src/observability.js +252 -61
- package/src/observability.js.map +1 -1
- package/src/performance/index.d.ts +1 -0
- package/src/performance/index.js +2 -0
- package/src/performance/index.js.map +1 -0
- package/src/performance/protected-load-endpoint.d.ts +140 -0
- package/src/performance/protected-load-endpoint.js +462 -0
- package/src/performance/protected-load-endpoint.js.map +1 -0
- package/src/rds-global-ca-bundle.d.ts +1 -0
- package/src/rds-global-ca-bundle.js +2742 -0
- package/src/rds-global-ca-bundle.js.map +1 -0
- package/src/reliability/burn.d.ts +39 -0
- package/src/reliability/burn.js +102 -0
- package/src/reliability/burn.js.map +1 -0
- package/src/reliability/contract.d.ts +5 -0
- package/src/reliability/contract.js +317 -0
- package/src/reliability/contract.js.map +1 -0
- package/src/reliability/incident.d.ts +16 -0
- package/src/reliability/incident.js +562 -0
- package/src/reliability/incident.js.map +1 -0
- package/src/reliability/index.d.ts +5 -0
- package/src/reliability/index.js +6 -0
- package/src/reliability/index.js.map +1 -0
- package/src/reliability/model.d.ts +191 -0
- package/src/reliability/model.fixtures.d.ts +2 -0
- package/src/reliability/model.fixtures.js +57 -0
- package/src/reliability/model.fixtures.js.map +1 -0
- package/src/reliability/model.js +2 -0
- package/src/reliability/model.js.map +1 -0
- package/src/reliability/slo.d.ts +9 -0
- package/src/reliability/slo.js +74 -0
- package/src/reliability/slo.js.map +1 -0
- package/src/request-context.d.ts +57 -15
- package/src/request-context.js +116 -36
- package/src/request-context.js.map +1 -1
- package/src/safe-reference.cjs +57 -0
- package/src/safe-reference.d.cts +25 -0
- package/src/safe-reference.d.ts +11 -0
- package/src/safe-reference.js +46 -0
- package/src/safe-reference.js.map +1 -0
- package/src/secrets/contract.d.ts +99 -0
- package/src/secrets/contract.js +238 -0
- package/src/secrets/contract.js.map +1 -0
- package/src/secrets/index.d.ts +4 -0
- package/src/secrets/index.js +5 -0
- package/src/secrets/index.js.map +1 -0
- package/src/secrets/observability.d.ts +14 -0
- package/src/secrets/observability.js +100 -0
- package/src/secrets/observability.js.map +1 -0
- package/src/secrets/personal.d.ts +48 -0
- package/src/secrets/personal.js +332 -0
- package/src/secrets/personal.js.map +1 -0
- package/src/secrets/resolver.d.ts +125 -0
- package/src/secrets/resolver.js +602 -0
- package/src/secrets/resolver.js.map +1 -0
- package/src/secrets/sensitive-patterns.cjs +84 -0
- package/src/secrets/sensitive-patterns.d.cts +62 -0
- package/src/secrets/sensitive-patterns.d.ts +40 -0
- package/src/secrets/sensitive-patterns.js +60 -0
- package/src/secrets/sensitive-patterns.js.map +1 -0
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { createHash, randomBytes, randomUUID, timingSafeEqual, } from 'node:crypto';
|
|
3
|
+
import { isBoundedSafeReference } from '../safe-reference.js';
|
|
4
|
+
import { denyAuthorization, composeDelegatedAuthorizationPrincipalModel, } from './model.js';
|
|
5
|
+
export const DELEGATION_GRANT_SCHEMA_VERSION = 1;
|
|
6
|
+
export const DEFAULT_MAX_DELEGATION_TTL_SECONDS = 60 * 60;
|
|
7
|
+
export const MAX_DELEGATION_WRITE_ATTEMPTS = 4;
|
|
8
|
+
const SAFE_NAME = /^[a-z][a-z0-9-]{0,62}$/;
|
|
9
|
+
const CAPABILITY_PATTERN = /^[A-Za-z0-9_-]{43}$/;
|
|
10
|
+
function requiredReference(value, label) {
|
|
11
|
+
const normalized = value.trim();
|
|
12
|
+
if (!isBoundedSafeReference(normalized)) {
|
|
13
|
+
throw new Error(`[runtime/authorization] Delegation ${label} must be a bounded safe reference.`);
|
|
14
|
+
}
|
|
15
|
+
return normalized;
|
|
16
|
+
}
|
|
17
|
+
function parseInstant(value, label) {
|
|
18
|
+
const parsed = Date.parse(value);
|
|
19
|
+
if (!Number.isFinite(parsed)) {
|
|
20
|
+
throw new Error(`[runtime/authorization] Delegation ${label} must be a valid instant.`);
|
|
21
|
+
}
|
|
22
|
+
return parsed;
|
|
23
|
+
}
|
|
24
|
+
function positiveInteger(value, label) {
|
|
25
|
+
if (value !== undefined && (!Number.isSafeInteger(value) || value < 1)) {
|
|
26
|
+
throw new Error(`[runtime/authorization] Delegation ${label} must be a positive safe integer.`);
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
function normalizedUnique(values, label, allowEmpty = false) {
|
|
31
|
+
const normalized = values.map((value) => requiredReference(value, label));
|
|
32
|
+
if ((!allowEmpty && normalized.length === 0) ||
|
|
33
|
+
new Set(normalized).size !== normalized.length) {
|
|
34
|
+
throw new Error(`[runtime/authorization] Delegation ${label} must contain unique values.`);
|
|
35
|
+
}
|
|
36
|
+
return Object.freeze(normalized);
|
|
37
|
+
}
|
|
38
|
+
function normalizeBoundary(boundary) {
|
|
39
|
+
const resourceType = requiredReference(boundary.resourceType, 'resource type');
|
|
40
|
+
if (boundary.kind === 'exact') {
|
|
41
|
+
return Object.freeze({
|
|
42
|
+
kind: 'exact',
|
|
43
|
+
resourceIds: normalizedUnique(boundary.resourceIds, 'resource ids'),
|
|
44
|
+
resourceType,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (boundary.kind === 'constraint') {
|
|
48
|
+
return Object.freeze({
|
|
49
|
+
constraintId: requiredReference(boundary.constraintId, 'constraint id'),
|
|
50
|
+
kind: 'constraint',
|
|
51
|
+
resourceType,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
throw new Error('[runtime/authorization] Delegation resource boundary is invalid.');
|
|
55
|
+
}
|
|
56
|
+
function capabilityDigest(audience, capability) {
|
|
57
|
+
return createHash('sha256')
|
|
58
|
+
.update(audience, 'utf8')
|
|
59
|
+
.update('\0', 'utf8')
|
|
60
|
+
.update(capability, 'utf8')
|
|
61
|
+
.digest('hex');
|
|
62
|
+
}
|
|
63
|
+
function capabilityMatches(grant, audience, capability) {
|
|
64
|
+
if (audience !== grant.audience ||
|
|
65
|
+
!CAPABILITY_PATTERN.test(capability) ||
|
|
66
|
+
!/^[a-f0-9]{64}$/.test(grant.capabilityDigest)) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
const expected = Buffer.from(grant.capabilityDigest, 'hex');
|
|
70
|
+
const actual = Buffer.from(capabilityDigest(audience, capability), 'hex');
|
|
71
|
+
return expected.length === actual.length && timingSafeEqual(expected, actual);
|
|
72
|
+
}
|
|
73
|
+
function policyVersion(grant) {
|
|
74
|
+
var _a;
|
|
75
|
+
return (_a = grant === null || grant === void 0 ? void 0 : grant.issuedUnderPolicyVersion) !== null && _a !== void 0 ? _a : 'delegation-v1';
|
|
76
|
+
}
|
|
77
|
+
function cloneGrant(grant) {
|
|
78
|
+
return structuredClone(grant);
|
|
79
|
+
}
|
|
80
|
+
function createGrant(input, capability) {
|
|
81
|
+
var _a, _b, _c, _d;
|
|
82
|
+
if (input.delegator.actor.type !== 'user' ||
|
|
83
|
+
input.delegator.authority.mode !== 'direct') {
|
|
84
|
+
throw new Error('[runtime/authorization] Delegation must be issued by a direct authenticated human.');
|
|
85
|
+
}
|
|
86
|
+
if (input.agent.kind !== 'agent' ||
|
|
87
|
+
input.agent.actor.id === input.delegator.actor.id) {
|
|
88
|
+
throw new Error('[runtime/authorization] Delegation target must be a distinct PrincipalKind agent.');
|
|
89
|
+
}
|
|
90
|
+
if (!SAFE_NAME.test(input.slice)) {
|
|
91
|
+
throw new Error('[runtime/authorization] Delegation Slice must be a safe name.');
|
|
92
|
+
}
|
|
93
|
+
const now = parseInstant(input.now, 'issuedAt');
|
|
94
|
+
const expiresAt = parseInstant(input.expiresAt, 'expiresAt');
|
|
95
|
+
if (expiresAt <= now ||
|
|
96
|
+
expiresAt - now > DEFAULT_MAX_DELEGATION_TTL_SECONDS * 1000) {
|
|
97
|
+
throw new Error(`[runtime/authorization] Delegation lifetime must be positive and no longer than ${DEFAULT_MAX_DELEGATION_TTL_SECONDS} seconds.`);
|
|
98
|
+
}
|
|
99
|
+
const actions = normalizedUnique(input.actions, 'actions');
|
|
100
|
+
const nonDelegableApprovalActions = normalizedUnique((_a = input.nonDelegableApprovalActions) !== null && _a !== void 0 ? _a : [], 'non-delegable approval actions', true);
|
|
101
|
+
if (nonDelegableApprovalActions.some((action) => !actions.includes(action))) {
|
|
102
|
+
throw new Error('[runtime/authorization] Non-delegable approval actions must be included in the grant actions.');
|
|
103
|
+
}
|
|
104
|
+
const capabilityScopes = normalizedUnique((_b = input.capabilityScopes) !== null && _b !== void 0 ? _b : [], 'capability scopes', true);
|
|
105
|
+
const maxUses = positiveInteger(input.maxUses, 'maxUses');
|
|
106
|
+
const rateLimit = input.rateLimit
|
|
107
|
+
? {
|
|
108
|
+
maximumUses: (_c = positiveInteger(input.rateLimit.maximumUses, 'rateLimit.maximumUses')) !== null && _c !== void 0 ? _c : 0,
|
|
109
|
+
windowSeconds: (_d = positiveInteger(input.rateLimit.windowSeconds, 'rateLimit.windowSeconds')) !== null && _d !== void 0 ? _d : 0,
|
|
110
|
+
}
|
|
111
|
+
: undefined;
|
|
112
|
+
return Object.freeze(Object.assign(Object.assign(Object.assign(Object.assign({ actions, agent: Object.freeze({
|
|
113
|
+
id: requiredReference(input.agent.actor.id, 'agent id'),
|
|
114
|
+
type: input.agent.actor.type,
|
|
115
|
+
}), audience: requiredReference(input.audience, 'audience'), capabilityDigest: capabilityDigest(input.audience, capability), capabilityScopes, delegator: Object.freeze({
|
|
116
|
+
id: requiredReference(input.delegator.actor.id, 'delegator id'),
|
|
117
|
+
type: 'user',
|
|
118
|
+
}), expiresAt: new Date(expiresAt).toISOString(), id: randomUUID(), issuedAt: new Date(now).toISOString(), issuedUnderPolicyVersion: requiredReference(input.issuedUnderPolicyVersion, 'policy version') }, (maxUses ? { maxUses } : {})), { nonDelegableApprovalActions, purposeReference: requiredReference(input.purposeReference, 'purpose reference') }), (rateLimit ? { rateLimit: Object.freeze(rateLimit) } : {})), { resourceBoundary: normalizeBoundary(input.resourceBoundary), revision: 0, schemaVersion: DELEGATION_GRANT_SCHEMA_VERSION, slice: input.slice, status: 'active', usage: Object.freeze({ rateWindowUses: 0, totalUses: 0 }) }));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Issues and persists an attended grant. The operation caller must already
|
|
122
|
+
* have authorized the grant-creation action; this function enforces the
|
|
123
|
+
* structural delegation invariants and never persists the opaque capability.
|
|
124
|
+
*/
|
|
125
|
+
export function issueDelegation(store, input) {
|
|
126
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
127
|
+
const capability = randomBytes(32).toString('base64url');
|
|
128
|
+
const grant = createGrant(input, capability);
|
|
129
|
+
if (!(yield store.create(cloneGrant(grant)))) {
|
|
130
|
+
throw new Error('[runtime/authorization] Delegation grant could not be created.');
|
|
131
|
+
}
|
|
132
|
+
return { capability, grant };
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function boundaryMatches(grant, resource, context, matchesConstraint) {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
if (resource.type !== grant.resourceBoundary.resourceType)
|
|
138
|
+
return false;
|
|
139
|
+
if (grant.resourceBoundary.kind === 'exact') {
|
|
140
|
+
return (typeof resource.id === 'string' &&
|
|
141
|
+
grant.resourceBoundary.resourceIds.includes(resource.id));
|
|
142
|
+
}
|
|
143
|
+
if (!matchesConstraint)
|
|
144
|
+
return false;
|
|
145
|
+
try {
|
|
146
|
+
return ((yield matchesConstraint(grant.resourceBoundary.constraintId, resource, context)) === true);
|
|
147
|
+
}
|
|
148
|
+
catch (_a) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function currentRateUsage(grant, now) {
|
|
154
|
+
const startedAt = grant.usage.rateWindowStartedAt
|
|
155
|
+
? Date.parse(grant.usage.rateWindowStartedAt)
|
|
156
|
+
: Number.NaN;
|
|
157
|
+
if (!grant.rateLimit ||
|
|
158
|
+
!Number.isFinite(startedAt) ||
|
|
159
|
+
now >= startedAt + grant.rateLimit.windowSeconds * 1000) {
|
|
160
|
+
return { startedAt: new Date(now).toISOString(), uses: 0 };
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
startedAt: new Date(startedAt).toISOString(),
|
|
164
|
+
uses: grant.usage.rateWindowUses,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function usageDenial(grant, now) {
|
|
168
|
+
if (grant.maxUses !== undefined && grant.usage.totalUses >= grant.maxUses) {
|
|
169
|
+
return denyAuthorization('delegation-rate-limited', policyVersion(grant));
|
|
170
|
+
}
|
|
171
|
+
const rate = currentRateUsage(grant, now);
|
|
172
|
+
if (grant.rateLimit !== undefined &&
|
|
173
|
+
rate.uses >= grant.rateLimit.maximumUses) {
|
|
174
|
+
return denyAuthorization('delegation-rate-limited', policyVersion(grant));
|
|
175
|
+
}
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
function consumeGrant(grant, now) {
|
|
179
|
+
const rate = currentRateUsage(grant, now);
|
|
180
|
+
return Object.freeze(Object.assign(Object.assign({}, cloneGrant(grant)), { revision: grant.revision + 1, usage: Object.freeze({
|
|
181
|
+
lastUsedAt: new Date(now).toISOString(),
|
|
182
|
+
rateWindowStartedAt: rate.startedAt,
|
|
183
|
+
rateWindowUses: rate.uses + 1,
|
|
184
|
+
totalUses: grant.usage.totalUses + 1,
|
|
185
|
+
}) }));
|
|
186
|
+
}
|
|
187
|
+
function preflightDelegation(grant, input) {
|
|
188
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
189
|
+
var _a;
|
|
190
|
+
const version = policyVersion(grant);
|
|
191
|
+
const now = Date.parse(input.context.now);
|
|
192
|
+
if (!Number.isFinite(now)) {
|
|
193
|
+
return { decision: denyAuthorization('policy-input-invalid', version) };
|
|
194
|
+
}
|
|
195
|
+
if (grant.agent.id !== input.agent.actor.id ||
|
|
196
|
+
grant.agent.type !== input.agent.actor.type ||
|
|
197
|
+
input.agent.kind !== 'agent' ||
|
|
198
|
+
!capabilityMatches(grant, input.audience, input.capability) ||
|
|
199
|
+
!grant.actions.includes(input.action)) {
|
|
200
|
+
return {
|
|
201
|
+
decision: denyAuthorization('delegation-out-of-bounds', version),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
if (grant.status === 'revoked') {
|
|
205
|
+
return { decision: denyAuthorization('delegation-revoked', version) };
|
|
206
|
+
}
|
|
207
|
+
if (grant.status === 'expired' || now >= Date.parse(grant.expiresAt)) {
|
|
208
|
+
return { decision: denyAuthorization('delegation-expired', version) };
|
|
209
|
+
}
|
|
210
|
+
if (grant.status !== 'active') {
|
|
211
|
+
return {
|
|
212
|
+
decision: denyAuthorization('delegation-out-of-bounds', version),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const requiredScopes = (_a = input.requiredCapabilityScopes) !== null && _a !== void 0 ? _a : [];
|
|
216
|
+
if (new Set(requiredScopes).size !== requiredScopes.length ||
|
|
217
|
+
grant.capabilityScopes.some((scope) => !input.agent.scopes.includes(scope)) ||
|
|
218
|
+
requiredScopes.some((scope) => !grant.capabilityScopes.includes(scope) ||
|
|
219
|
+
!input.agent.scopes.includes(scope))) {
|
|
220
|
+
return {
|
|
221
|
+
decision: denyAuthorization('delegation-out-of-bounds', version),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
if (grant.issuedUnderPolicyVersion !== input.evaluator.policyVersion) {
|
|
225
|
+
return {
|
|
226
|
+
decision: denyAuthorization('policy-stale', input.evaluator.policyVersion),
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
if (!(yield boundaryMatches(grant, input.resource, input.context, input.matchesConstraint))) {
|
|
230
|
+
return {
|
|
231
|
+
decision: denyAuthorization('delegation-out-of-bounds', version),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
const limited = usageDenial(grant, now);
|
|
235
|
+
if (limited)
|
|
236
|
+
return { decision: limited };
|
|
237
|
+
let delegator;
|
|
238
|
+
try {
|
|
239
|
+
delegator = yield input.resolveDelegator({
|
|
240
|
+
context: input.context,
|
|
241
|
+
delegator: grant.delegator,
|
|
242
|
+
resource: input.resource,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
catch (_b) {
|
|
246
|
+
return {
|
|
247
|
+
decision: denyAuthorization('authorization-unavailable', version),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
if (!delegator ||
|
|
251
|
+
delegator.authority.mode !== 'direct' ||
|
|
252
|
+
delegator.actor.type !== 'user' ||
|
|
253
|
+
delegator.subject.type !== 'user' ||
|
|
254
|
+
delegator.actor.id !== grant.delegator.id ||
|
|
255
|
+
delegator.subject.id !== grant.delegator.id) {
|
|
256
|
+
return {
|
|
257
|
+
decision: denyAuthorization('delegation-out-of-bounds', version),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
let delegatorDecision;
|
|
261
|
+
try {
|
|
262
|
+
delegatorDecision = yield input.evaluator.evaluate({
|
|
263
|
+
action: input.action,
|
|
264
|
+
context: input.context,
|
|
265
|
+
principal: delegator,
|
|
266
|
+
resource: input.resource,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
catch (_c) {
|
|
270
|
+
return {
|
|
271
|
+
decision: denyAuthorization('authorization-unavailable', version),
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
if (delegatorDecision.decision !== 'allow') {
|
|
275
|
+
return {
|
|
276
|
+
decision: denyAuthorization('delegation-out-of-bounds', version),
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
const delegatedPrincipal = composeDelegatedAuthorizationPrincipalModel(input.agent, {
|
|
280
|
+
delegatedBy: grant.delegator,
|
|
281
|
+
delegationId: grant.id,
|
|
282
|
+
});
|
|
283
|
+
let policyDecision;
|
|
284
|
+
try {
|
|
285
|
+
policyDecision = yield input.evaluator.evaluate({
|
|
286
|
+
action: input.action,
|
|
287
|
+
context: input.context,
|
|
288
|
+
principal: delegatedPrincipal,
|
|
289
|
+
resource: input.resource,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
catch (_d) {
|
|
293
|
+
return {
|
|
294
|
+
decision: denyAuthorization('authorization-unavailable', version),
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
if (policyDecision.decision === 'deny') {
|
|
298
|
+
return { decision: policyDecision };
|
|
299
|
+
}
|
|
300
|
+
if (grant.nonDelegableApprovalActions.includes(input.action)) {
|
|
301
|
+
return { decision: denyAuthorization('approval-required', version) };
|
|
302
|
+
}
|
|
303
|
+
return { decision: policyDecision, now, principal: delegatedPrincipal };
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Re-reads the grant online and persists a rate/use transition before
|
|
308
|
+
* returning allow. The store's compare-and-set is the concurrency boundary;
|
|
309
|
+
* the protected business effect must run only after this function allows.
|
|
310
|
+
*/
|
|
311
|
+
export function useDelegation(input) {
|
|
312
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
313
|
+
for (let attempt = 0; attempt < MAX_DELEGATION_WRITE_ATTEMPTS; attempt += 1) {
|
|
314
|
+
let grant;
|
|
315
|
+
try {
|
|
316
|
+
grant = yield input.store.read(input.delegationId);
|
|
317
|
+
}
|
|
318
|
+
catch (_a) {
|
|
319
|
+
return {
|
|
320
|
+
decision: denyAuthorization('authorization-unavailable', 'delegation-v1'),
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
if (!grant || grant.id !== input.delegationId) {
|
|
324
|
+
return {
|
|
325
|
+
decision: denyAuthorization('delegation-out-of-bounds', 'delegation-v1'),
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
const preflight = yield preflightDelegation(grant, input);
|
|
329
|
+
if (!('now' in preflight)) {
|
|
330
|
+
return { decision: preflight.decision };
|
|
331
|
+
}
|
|
332
|
+
const next = consumeGrant(grant, preflight.now);
|
|
333
|
+
try {
|
|
334
|
+
if (yield input.store.write(grant.id, grant.revision, cloneGrant(next))) {
|
|
335
|
+
return {
|
|
336
|
+
decision: preflight.decision,
|
|
337
|
+
grant: next,
|
|
338
|
+
principal: preflight.principal,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
catch (_b) {
|
|
343
|
+
return {
|
|
344
|
+
decision: denyAuthorization('authorization-unavailable', policyVersion(grant)),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return {
|
|
349
|
+
decision: denyAuthorization('authorization-unavailable', 'delegation-v1'),
|
|
350
|
+
};
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
export function revokeDelegationGrant(grant, input) {
|
|
354
|
+
if (grant.status === 'revoked')
|
|
355
|
+
return grant;
|
|
356
|
+
const now = parseInstant(input.now, 'revokedAt');
|
|
357
|
+
return Object.freeze(Object.assign(Object.assign({}, cloneGrant(grant)), { revision: grant.revision + 1, revokedAt: new Date(now).toISOString(), revokedBy: Object.freeze({
|
|
358
|
+
id: requiredReference(input.revokedBy.actor.id, 'revoker id'),
|
|
359
|
+
type: input.revokedBy.actor.type,
|
|
360
|
+
}), status: 'revoked' }));
|
|
361
|
+
}
|
|
362
|
+
export function revokeDelegation(store, input) {
|
|
363
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
364
|
+
for (let attempt = 0; attempt < MAX_DELEGATION_WRITE_ATTEMPTS; attempt += 1) {
|
|
365
|
+
const grant = yield store.read(input.delegationId);
|
|
366
|
+
if (!grant)
|
|
367
|
+
return undefined;
|
|
368
|
+
if (grant.status === 'revoked')
|
|
369
|
+
return grant;
|
|
370
|
+
const next = revokeDelegationGrant(grant, input);
|
|
371
|
+
if (yield store.write(grant.id, grant.revision, cloneGrant(next))) {
|
|
372
|
+
return next;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
throw new Error('[runtime/authorization] Delegation revocation conflicted repeatedly.');
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
export function expireDelegationGrant(grant, now) {
|
|
379
|
+
const instant = parseInstant(now, 'expiry check');
|
|
380
|
+
if (grant.status !== 'active' || instant < Date.parse(grant.expiresAt)) {
|
|
381
|
+
return grant;
|
|
382
|
+
}
|
|
383
|
+
return Object.freeze(Object.assign(Object.assign({}, cloneGrant(grant)), { revision: grant.revision + 1, status: 'expired' }));
|
|
384
|
+
}
|
|
385
|
+
export function expireDelegation(store, delegationId, now) {
|
|
386
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
387
|
+
for (let attempt = 0; attempt < MAX_DELEGATION_WRITE_ATTEMPTS; attempt += 1) {
|
|
388
|
+
const grant = yield store.read(delegationId);
|
|
389
|
+
if (!grant)
|
|
390
|
+
return undefined;
|
|
391
|
+
const next = expireDelegationGrant(grant, now);
|
|
392
|
+
if (next === grant)
|
|
393
|
+
return grant;
|
|
394
|
+
if (yield store.write(grant.id, grant.revision, cloneGrant(next))) {
|
|
395
|
+
return next;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
throw new Error('[runtime/authorization] Delegation expiry conflicted repeatedly.');
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
//# sourceMappingURL=delegation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/authorization/delegation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { RuntimeError } from '../response.js';
|
|
2
|
+
import type { AuthorizationAllowDecision, AuthorizationDecision, AuthorizationDenialCategory, AuthorizationDenyDecision, AuthorizationObligation } from './model.js';
|
|
3
|
+
export declare const AUTHORIZATION_ERROR_CODES: {
|
|
4
|
+
readonly admissionRequired: "authorization_admission_required";
|
|
5
|
+
readonly approvalExpired: "authorization_approval_expired";
|
|
6
|
+
readonly approvalInvalid: "authorization_approval_invalid";
|
|
7
|
+
readonly approvalPending: "authorization_approval_pending";
|
|
8
|
+
readonly approvalRequired: "authorization_approval_required";
|
|
9
|
+
readonly denied: "authorization_denied";
|
|
10
|
+
readonly delegationExpired: "authorization_delegation_expired";
|
|
11
|
+
readonly delegationOutOfBounds: "authorization_delegation_out_of_bounds";
|
|
12
|
+
readonly delegationRateLimited: "authorization_delegation_rate_limited";
|
|
13
|
+
readonly delegationRevoked: "authorization_delegation_revoked";
|
|
14
|
+
readonly invalidAuthentication: "authorization_authentication_invalid";
|
|
15
|
+
readonly invalidInput: "authorization_input_invalid";
|
|
16
|
+
readonly policyStale: "authorization_policy_stale";
|
|
17
|
+
readonly requiredAuthentication: "authorization_authentication_required";
|
|
18
|
+
readonly unavailable: "authorization_unavailable";
|
|
19
|
+
};
|
|
20
|
+
export type AuthorizationErrorCode = (typeof AUTHORIZATION_ERROR_CODES)[keyof typeof AUTHORIZATION_ERROR_CODES];
|
|
21
|
+
/**
|
|
22
|
+
* A response-safe RuntimeError. The denial category and policy version remain
|
|
23
|
+
* server-side properties; they are intentionally not copied into details.
|
|
24
|
+
*/
|
|
25
|
+
export declare class AuthorizationError extends RuntimeError {
|
|
26
|
+
readonly category: AuthorizationDenialCategory;
|
|
27
|
+
readonly policyVersion: string;
|
|
28
|
+
constructor(decision: AuthorizationDenyDecision);
|
|
29
|
+
}
|
|
30
|
+
export declare function isAuthorizationError(error: unknown): error is AuthorizationError;
|
|
31
|
+
export declare function authorizationErrorFromDecision(decision: AuthorizationDenyDecision): AuthorizationError;
|
|
32
|
+
export declare function assertAuthorizationAllowed<Obligation extends AuthorizationObligation>(decision: AuthorizationDecision<Obligation>): asserts decision is AuthorizationAllowDecision<Obligation>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { RuntimeError } from '../response.js';
|
|
2
|
+
export const AUTHORIZATION_ERROR_CODES = {
|
|
3
|
+
admissionRequired: 'authorization_admission_required',
|
|
4
|
+
approvalExpired: 'authorization_approval_expired',
|
|
5
|
+
approvalInvalid: 'authorization_approval_invalid',
|
|
6
|
+
approvalPending: 'authorization_approval_pending',
|
|
7
|
+
approvalRequired: 'authorization_approval_required',
|
|
8
|
+
denied: 'authorization_denied',
|
|
9
|
+
delegationExpired: 'authorization_delegation_expired',
|
|
10
|
+
delegationOutOfBounds: 'authorization_delegation_out_of_bounds',
|
|
11
|
+
delegationRateLimited: 'authorization_delegation_rate_limited',
|
|
12
|
+
delegationRevoked: 'authorization_delegation_revoked',
|
|
13
|
+
invalidAuthentication: 'authorization_authentication_invalid',
|
|
14
|
+
invalidInput: 'authorization_input_invalid',
|
|
15
|
+
policyStale: 'authorization_policy_stale',
|
|
16
|
+
requiredAuthentication: 'authorization_authentication_required',
|
|
17
|
+
unavailable: 'authorization_unavailable',
|
|
18
|
+
};
|
|
19
|
+
const ERROR_PROJECTIONS = {
|
|
20
|
+
'admission-kind-denied': {
|
|
21
|
+
code: AUTHORIZATION_ERROR_CODES.admissionRequired,
|
|
22
|
+
message: 'Required operation admission is missing',
|
|
23
|
+
retryable: false,
|
|
24
|
+
status: 403,
|
|
25
|
+
},
|
|
26
|
+
'admission-role-denied': {
|
|
27
|
+
code: AUTHORIZATION_ERROR_CODES.admissionRequired,
|
|
28
|
+
message: 'Required operation admission is missing',
|
|
29
|
+
retryable: false,
|
|
30
|
+
status: 403,
|
|
31
|
+
},
|
|
32
|
+
'admission-scope-denied': {
|
|
33
|
+
code: AUTHORIZATION_ERROR_CODES.admissionRequired,
|
|
34
|
+
message: 'Required operation admission is missing',
|
|
35
|
+
retryable: false,
|
|
36
|
+
status: 403,
|
|
37
|
+
},
|
|
38
|
+
'approval-expired': {
|
|
39
|
+
code: AUTHORIZATION_ERROR_CODES.approvalExpired,
|
|
40
|
+
message: 'Approval has expired',
|
|
41
|
+
retryable: false,
|
|
42
|
+
status: 409,
|
|
43
|
+
},
|
|
44
|
+
'approval-invalid': {
|
|
45
|
+
code: AUTHORIZATION_ERROR_CODES.approvalInvalid,
|
|
46
|
+
message: 'Approval is not valid for this request',
|
|
47
|
+
retryable: false,
|
|
48
|
+
status: 409,
|
|
49
|
+
},
|
|
50
|
+
'approval-pending': {
|
|
51
|
+
code: AUTHORIZATION_ERROR_CODES.approvalPending,
|
|
52
|
+
message: 'Approval is pending',
|
|
53
|
+
retryable: false,
|
|
54
|
+
status: 409,
|
|
55
|
+
},
|
|
56
|
+
'approval-required': {
|
|
57
|
+
code: AUTHORIZATION_ERROR_CODES.approvalRequired,
|
|
58
|
+
message: 'Approval is required',
|
|
59
|
+
retryable: false,
|
|
60
|
+
status: 409,
|
|
61
|
+
},
|
|
62
|
+
'authentication-invalid': {
|
|
63
|
+
code: AUTHORIZATION_ERROR_CODES.invalidAuthentication,
|
|
64
|
+
message: 'Authentication is invalid',
|
|
65
|
+
retryable: false,
|
|
66
|
+
status: 401,
|
|
67
|
+
},
|
|
68
|
+
'authentication-missing': {
|
|
69
|
+
code: AUTHORIZATION_ERROR_CODES.requiredAuthentication,
|
|
70
|
+
message: 'Authentication is required',
|
|
71
|
+
retryable: false,
|
|
72
|
+
status: 401,
|
|
73
|
+
},
|
|
74
|
+
'authorization-unavailable': {
|
|
75
|
+
code: AUTHORIZATION_ERROR_CODES.unavailable,
|
|
76
|
+
message: 'Authorization is temporarily unavailable',
|
|
77
|
+
retryable: true,
|
|
78
|
+
status: 503,
|
|
79
|
+
},
|
|
80
|
+
'delegation-expired': {
|
|
81
|
+
code: AUTHORIZATION_ERROR_CODES.delegationExpired,
|
|
82
|
+
message: 'Delegated authority has expired',
|
|
83
|
+
retryable: false,
|
|
84
|
+
status: 403,
|
|
85
|
+
},
|
|
86
|
+
'delegation-out-of-bounds': {
|
|
87
|
+
code: AUTHORIZATION_ERROR_CODES.delegationOutOfBounds,
|
|
88
|
+
message: 'Delegated authority does not cover this request',
|
|
89
|
+
retryable: false,
|
|
90
|
+
status: 403,
|
|
91
|
+
},
|
|
92
|
+
'delegation-rate-limited': {
|
|
93
|
+
code: AUTHORIZATION_ERROR_CODES.delegationRateLimited,
|
|
94
|
+
message: 'Delegated authority use limit has been reached',
|
|
95
|
+
retryable: false,
|
|
96
|
+
status: 429,
|
|
97
|
+
},
|
|
98
|
+
'delegation-revoked': {
|
|
99
|
+
code: AUTHORIZATION_ERROR_CODES.delegationRevoked,
|
|
100
|
+
message: 'Delegated authority has been revoked',
|
|
101
|
+
retryable: false,
|
|
102
|
+
status: 403,
|
|
103
|
+
},
|
|
104
|
+
'domain-authorization-denied': {
|
|
105
|
+
code: AUTHORIZATION_ERROR_CODES.denied,
|
|
106
|
+
message: 'Authorization denied',
|
|
107
|
+
retryable: false,
|
|
108
|
+
status: 403,
|
|
109
|
+
},
|
|
110
|
+
'policy-input-invalid': {
|
|
111
|
+
code: AUTHORIZATION_ERROR_CODES.invalidInput,
|
|
112
|
+
message: 'Authorization input is invalid',
|
|
113
|
+
retryable: false,
|
|
114
|
+
status: 403,
|
|
115
|
+
},
|
|
116
|
+
'policy-stale': {
|
|
117
|
+
code: AUTHORIZATION_ERROR_CODES.policyStale,
|
|
118
|
+
message: 'Authorization policy is not current',
|
|
119
|
+
retryable: true,
|
|
120
|
+
status: 503,
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* A response-safe RuntimeError. The denial category and policy version remain
|
|
125
|
+
* server-side properties; they are intentionally not copied into details.
|
|
126
|
+
*/
|
|
127
|
+
export class AuthorizationError extends RuntimeError {
|
|
128
|
+
constructor(decision) {
|
|
129
|
+
const projection = ERROR_PROJECTIONS[decision.category];
|
|
130
|
+
super({
|
|
131
|
+
code: projection.code,
|
|
132
|
+
expose: true,
|
|
133
|
+
message: projection.message,
|
|
134
|
+
retryable: projection.retryable,
|
|
135
|
+
status: projection.status,
|
|
136
|
+
});
|
|
137
|
+
this.name = 'AuthorizationError';
|
|
138
|
+
this.category = decision.category;
|
|
139
|
+
this.policyVersion = decision.policyVersion;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function isAuthorizationError(error) {
|
|
143
|
+
return error instanceof AuthorizationError;
|
|
144
|
+
}
|
|
145
|
+
export function authorizationErrorFromDecision(decision) {
|
|
146
|
+
return new AuthorizationError(decision);
|
|
147
|
+
}
|
|
148
|
+
export function assertAuthorizationAllowed(decision) {
|
|
149
|
+
if (decision.decision === 'deny') {
|
|
150
|
+
throw authorizationErrorFromDecision(decision);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/authorization/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type CoarseAdmission } from './admission.js';
|
|
2
|
+
import { type AuthorizationAllowDecision, type AuthorizationDecision, type AuthorizationInput, type AuthorizationObligation, type AuthorizationPolicy } from './model.js';
|
|
3
|
+
export interface AuthorizationDecisionSinkInput<Input extends AuthorizationInput, Obligation extends AuthorizationObligation> {
|
|
4
|
+
decision: AuthorizationDecision<Obligation>;
|
|
5
|
+
input: Input;
|
|
6
|
+
}
|
|
7
|
+
export interface CreateAuthorizationEvaluatorOptions<Input extends AuthorizationInput, Obligation extends AuthorizationObligation> {
|
|
8
|
+
admission: CoarseAdmission;
|
|
9
|
+
/**
|
|
10
|
+
* An unavailable policy is a supported fail-closed state. This lets an
|
|
11
|
+
* optional external adapter preserve the same contract during outages.
|
|
12
|
+
*/
|
|
13
|
+
policy?: AuthorizationPolicy<Input, Obligation>;
|
|
14
|
+
/**
|
|
15
|
+
* When supplied, the exact policy version must match before evaluation.
|
|
16
|
+
*/
|
|
17
|
+
requiredPolicyVersion?: string;
|
|
18
|
+
/**
|
|
19
|
+
* An optional pre-effect decision sink. It receives the complete
|
|
20
|
+
* authorization input, which may contain protected identifiers, and is not
|
|
21
|
+
* itself a safe-persistence or redaction boundary. When supplied, sink
|
|
22
|
+
* failure converts an allow into an unavailable denial. Callers must
|
|
23
|
+
* sanitize any durable evidence and complete required persistence before
|
|
24
|
+
* beginning the protected effect.
|
|
25
|
+
*/
|
|
26
|
+
decisionSink?: (input: AuthorizationDecisionSinkInput<Input, Obligation>) => Promise<void> | void;
|
|
27
|
+
}
|
|
28
|
+
export interface AuthorizationEvaluator<Input extends AuthorizationInput = AuthorizationInput, Obligation extends AuthorizationObligation = AuthorizationObligation> {
|
|
29
|
+
authorize(input: Input): Promise<AuthorizationAllowDecision<Obligation>>;
|
|
30
|
+
evaluate(input: Input): Promise<AuthorizationDecision<Obligation>>;
|
|
31
|
+
readonly policyVersion: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function defineAuthorizationPolicy<Input extends AuthorizationInput, Obligation extends AuthorizationObligation = AuthorizationObligation>(policy: AuthorizationPolicy<Input, Obligation>): AuthorizationPolicy<Input, Obligation>;
|
|
34
|
+
/**
|
|
35
|
+
* Wraps Slice-owned policy with explicit admission and fail-closed behavior.
|
|
36
|
+
* Only the literal typed allow result authorizes; falsey, ambiguous, thrown,
|
|
37
|
+
* stale, or unavailable evaluation returns a stable denial.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createAuthorizationEvaluator<Input extends AuthorizationInput, Obligation extends AuthorizationObligation = AuthorizationObligation>(options: CreateAuthorizationEvaluatorOptions<Input, Obligation>): AuthorizationEvaluator<Input, Obligation>;
|