@yiaany/ghostapi 0.1.7 → 0.1.9
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/CHANGELOG.md +42 -2
- package/CONTRIBUTING.md +119 -117
- package/LICENSE +21 -21
- package/README.md +208 -181
- package/SECURITY.md +53 -37
- package/dist/actions/gateway.d.ts +179 -0
- package/dist/actions/gateway.js +514 -0
- package/dist/actions/gateway.js.map +1 -0
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.js +2 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/ai/aiClient.js +4 -4
- package/dist/ai/aiClient.js.map +1 -1
- package/dist/ai/aiGenerator.d.ts +2 -2
- package/dist/ai/aiGenerator.js +21 -72
- package/dist/ai/aiGenerator.js.map +1 -1
- package/dist/ai/prompts.js +51 -51
- package/dist/ai/prompts.js.map +1 -1
- package/dist/approvals/approvalInbox.d.ts +150 -0
- package/dist/approvals/approvalInbox.js +412 -0
- package/dist/approvals/approvalInbox.js.map +1 -0
- package/dist/approvals/index.d.ts +2 -0
- package/dist/approvals/index.js +2 -0
- package/dist/approvals/index.js.map +1 -0
- package/dist/behavior/behaviorStore.d.ts +2 -0
- package/dist/behavior/behaviorStore.js +50 -46
- package/dist/behavior/behaviorStore.js.map +1 -1
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.js +58 -14
- package/dist/cache/index.js.map +1 -1
- package/dist/cli/index.js +438 -58
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/openUrl.d.ts +10 -0
- package/dist/cli/openUrl.js +31 -0
- package/dist/cli/openUrl.js.map +1 -0
- package/dist/cli/parser.d.ts +155 -0
- package/dist/cli/parser.js +504 -2
- package/dist/cli/parser.js.map +1 -1
- package/dist/config/dataPaths.d.ts +31 -0
- package/dist/config/dataPaths.js +45 -0
- package/dist/config/dataPaths.js.map +1 -0
- package/dist/config/localConfig.d.ts +1 -2
- package/dist/config/localConfig.js +27 -21
- package/dist/config/localConfig.js.map +1 -1
- package/dist/config/serverConfig.d.ts +2 -0
- package/dist/config/serverConfig.js +8 -1
- package/dist/config/serverConfig.js.map +1 -1
- package/dist/contracts/contract.d.ts +76 -0
- package/dist/contracts/contract.js +603 -0
- package/dist/contracts/contract.js.map +1 -0
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/credentials/credentialBroker.d.ts +207 -0
- package/dist/credentials/credentialBroker.js +588 -0
- package/dist/credentials/credentialBroker.js.map +1 -0
- package/dist/credentials/index.d.ts +2 -0
- package/dist/credentials/index.js +2 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/dashboard/app.js +685 -615
- package/dist/dashboard/index.html +13 -7
- package/dist/dashboard/styles.css +349 -349
- package/dist/egress/capabilities.d.ts +32 -0
- package/dist/egress/capabilities.js +165 -0
- package/dist/egress/capabilities.js.map +1 -0
- package/dist/egress/linuxBootstrap.d.ts +1 -0
- package/dist/egress/linuxBootstrap.js +121 -0
- package/dist/egress/linuxBootstrap.js.map +1 -0
- package/dist/egress/run.d.ts +18 -0
- package/dist/egress/run.js +305 -0
- package/dist/egress/run.js.map +1 -0
- package/dist/errors/errorEngine.d.ts +2 -2
- package/dist/errors/errorEngine.js +3 -40
- package/dist/errors/errorEngine.js.map +1 -1
- package/dist/evals/evals.d.ts +126 -0
- package/dist/evals/evals.js +466 -0
- package/dist/evals/evals.js.map +1 -0
- package/dist/evals/index.d.ts +2 -0
- package/dist/evals/index.js +2 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evidence/index.d.ts +2 -0
- package/dist/evidence/index.js +2 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/report.d.ts +143 -0
- package/dist/evidence/report.js +556 -0
- package/dist/evidence/report.js.map +1 -0
- package/dist/fault/faultLab.d.ts +5 -4
- package/dist/fault/faultLab.js +66 -24
- package/dist/fault/faultLab.js.map +1 -1
- package/dist/index.d.ts +46 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/dist/inventory/analysis.d.ts +12 -0
- package/dist/inventory/analysis.js +457 -0
- package/dist/inventory/analysis.js.map +1 -0
- package/dist/inventory/index.d.ts +5 -0
- package/dist/inventory/index.js +4 -0
- package/dist/inventory/index.js.map +1 -0
- package/dist/inventory/inventoryController.d.ts +53 -0
- package/dist/inventory/inventoryController.js +1044 -0
- package/dist/inventory/inventoryController.js.map +1 -0
- package/dist/inventory/types.d.ts +579 -0
- package/dist/inventory/types.js +787 -0
- package/dist/inventory/types.js.map +1 -0
- package/dist/landing/assets/index-CxWsopzP.css +1 -0
- package/dist/landing/assets/index-DZlpyhqd.js +55 -0
- package/dist/landing/assets/index-Dk-Xezs3.js +55 -0
- package/dist/landing/index.html +15 -15
- package/dist/ledger/actionLedger.d.ts +125 -0
- package/dist/ledger/actionLedger.js +594 -0
- package/dist/ledger/actionLedger.js.map +1 -0
- package/dist/ledger/index.d.ts +2 -0
- package/dist/ledger/index.js +2 -0
- package/dist/ledger/index.js.map +1 -0
- package/dist/mcp/server.js +4 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/policy/index.d.ts +3 -0
- package/dist/policy/index.js +2 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/policy.d.ts +14 -0
- package/dist/policy/policy.js +282 -0
- package/dist/policy/policy.js.map +1 -0
- package/dist/policy/types.d.ts +52 -0
- package/dist/policy/types.js +2 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/productTelemetry/index.d.ts +16 -0
- package/dist/productTelemetry/index.js +142 -0
- package/dist/productTelemetry/index.js.map +1 -0
- package/dist/providers/conformance.d.ts +7 -0
- package/dist/providers/conformance.js +48 -0
- package/dist/providers/conformance.js.map +1 -0
- package/dist/providers/index.d.ts +4 -2
- package/dist/providers/index.js +3 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/packs/resendPack.d.ts +2 -0
- package/dist/providers/packs/resendPack.js +147 -0
- package/dist/providers/packs/resendPack.js.map +1 -0
- package/dist/providers/packs/stripePack.d.ts +2 -0
- package/dist/providers/packs/stripePack.js +852 -0
- package/dist/providers/packs/stripePack.js.map +1 -0
- package/dist/providers/registry.d.ts +7 -3
- package/dist/providers/registry.js +55 -4
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/resend.js +2 -11
- package/dist/providers/resend.js.map +1 -1
- package/dist/providers/runtime.d.ts +8 -0
- package/dist/providers/runtime.js +48 -0
- package/dist/providers/runtime.js.map +1 -0
- package/dist/providers/stripeWebhook.d.ts +13 -0
- package/dist/providers/stripeWebhook.js +50 -0
- package/dist/providers/stripeWebhook.js.map +1 -0
- package/dist/providers/types.d.ts +153 -0
- package/dist/proxy/cacheKey.js +3 -3
- package/dist/proxy/cacheKey.js.map +1 -1
- package/dist/proxy/providerDetector.d.ts +2 -7
- package/dist/proxy/providerDetector.js +4 -4
- package/dist/proxy/providerDetector.js.map +1 -1
- package/dist/proxy/proxyHandler.js +116 -12
- package/dist/proxy/proxyHandler.js.map +1 -1
- package/dist/proxy/requestNormalizer.d.ts +0 -1
- package/dist/proxy/requestNormalizer.js +2 -5
- package/dist/proxy/requestNormalizer.js.map +1 -1
- package/dist/reliability/costGovernance.d.ts +175 -0
- package/dist/reliability/costGovernance.js +515 -0
- package/dist/reliability/costGovernance.js.map +1 -0
- package/dist/reliability/index.d.ts +8 -0
- package/dist/reliability/index.js +5 -0
- package/dist/reliability/index.js.map +1 -0
- package/dist/reliability/reconciliation.d.ts +157 -0
- package/dist/reliability/reconciliation.js +522 -0
- package/dist/reliability/reconciliation.js.map +1 -0
- package/dist/reliability/runtimeHealth.d.ts +60 -0
- package/dist/reliability/runtimeHealth.js +356 -0
- package/dist/reliability/runtimeHealth.js.map +1 -0
- package/dist/reliability/slo.d.ts +131 -0
- package/dist/reliability/slo.js +375 -0
- package/dist/reliability/slo.js.map +1 -0
- package/dist/report/safetyReport.js +7 -3
- package/dist/report/safetyReport.js.map +1 -1
- package/dist/safety/index.d.ts +2 -0
- package/dist/safety/index.js +2 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/safety/safetyController.d.ts +187 -0
- package/dist/safety/safetyController.js +477 -0
- package/dist/safety/safetyController.js.map +1 -0
- package/dist/scenarios/scenarioBundle.d.ts +75 -0
- package/dist/scenarios/scenarioBundle.js +750 -0
- package/dist/scenarios/scenarioBundle.js.map +1 -0
- package/dist/scenarios/scenarioStore.d.ts +1 -0
- package/dist/scenarios/scenarioStore.js +47 -32
- package/dist/scenarios/scenarioStore.js.map +1 -1
- package/dist/security/headerSanitizer.d.ts +2 -0
- package/dist/security/headerSanitizer.js +36 -1
- package/dist/security/headerSanitizer.js.map +1 -1
- package/dist/security/secrets.js +24 -4
- package/dist/security/secrets.js.map +1 -1
- package/dist/server/accessControl.d.ts +5 -0
- package/dist/server/accessControl.js +100 -0
- package/dist/server/accessControl.js.map +1 -0
- package/dist/server/createServer.d.ts +0 -5
- package/dist/server/createServer.js +9 -29
- package/dist/server/createServer.js.map +1 -1
- package/dist/server/eventsStore.d.ts +6 -1
- package/dist/server/eventsStore.js +83 -15
- package/dist/server/eventsStore.js.map +1 -1
- package/dist/server/routes.js +42 -10
- package/dist/server/routes.js.map +1 -1
- package/dist/server/sse.d.ts +2 -1
- package/dist/server/sse.js +15 -3
- package/dist/server/sse.js.map +1 -1
- package/dist/setup/setupGenerator.js +53 -6
- package/dist/setup/setupGenerator.js.map +1 -1
- package/dist/state/stateStore.d.ts +5 -0
- package/dist/state/stateStore.js +48 -62
- package/dist/state/stateStore.js.map +1 -1
- package/dist/storage/fileStore.d.ts +10 -0
- package/dist/storage/fileStore.js +131 -0
- package/dist/storage/fileStore.js.map +1 -0
- package/dist/teamControl/controlPlane.d.ts +255 -0
- package/dist/teamControl/controlPlane.js +918 -0
- package/dist/teamControl/controlPlane.js.map +1 -0
- package/dist/teamControl/deployment.d.ts +33 -0
- package/dist/teamControl/deployment.js +67 -0
- package/dist/teamControl/deployment.js.map +1 -0
- package/dist/teamControl/index.d.ts +4 -0
- package/dist/teamControl/index.js +3 -0
- package/dist/teamControl/index.js.map +1 -0
- package/dist/tests/testGenerator.js +4 -1
- package/dist/tests/testGenerator.js.map +1 -1
- package/dist/trust/index.d.ts +2 -0
- package/dist/trust/index.js +2 -0
- package/dist/trust/index.js.map +1 -0
- package/dist/trust/trustLadder.d.ts +182 -0
- package/dist/trust/trustLadder.js +560 -0
- package/dist/trust/trustLadder.js.map +1 -0
- package/dist/worlds/index.d.ts +2 -0
- package/dist/worlds/index.js +2 -0
- package/dist/worlds/index.js.map +1 -0
- package/dist/worlds/worlds.d.ts +160 -0
- package/dist/worlds/worlds.js +491 -0
- package/dist/worlds/worlds.js.map +1 -0
- package/docs/assets/dashboard.png +0 -0
- package/docs/ci.md +49 -0
- package/docs/commercial/README.md +29 -0
- package/docs/commercial/data-inventory.md +36 -0
- package/docs/commercial/manual-invoicing.md +44 -0
- package/docs/commercial/metrics.md +51 -0
- package/docs/commercial/pricing.md +103 -0
- package/docs/commercial/privacy-policy-draft.md +41 -0
- package/docs/commercial/terms-topics-for-counsel.md +51 -0
- package/docs/design-partners/README.md +52 -0
- package/docs/design-partners/demo-narratives.md +33 -0
- package/docs/design-partners/design-partner-offer.md +39 -0
- package/docs/design-partners/discovery-questions.md +28 -0
- package/docs/design-partners/feedback-capture-template.md +48 -0
- package/docs/design-partners/icp-one-pager.md +43 -0
- package/docs/design-partners/onboarding-checklist.md +33 -0
- package/docs/design-partners/pilot-success-criteria.md +27 -0
- package/docs/design-partners/pricing-interview-script.md +18 -0
- package/docs/design-partners/telemetry-plan.md +48 -0
- package/docs/development/baseline.md +114 -0
- package/docs/development/onboarding-smoke.md +37 -0
- package/docs/development/verification-0.1.8.md +25 -0
- package/docs/enterprise-product-roadmap-ru.md +1879 -0
- package/docs/fundraising/README.md +87 -0
- package/docs/fundraising/data-room-checklist.md +72 -0
- package/docs/fundraising/demo-script.md +52 -0
- package/docs/fundraising/design-partners-50.md +74 -0
- package/docs/fundraising/launch-posts.md +37 -0
- package/docs/fundraising/metrics-and-evidence.md +30 -0
- package/docs/fundraising/roadmap-12-month.md +25 -0
- package/docs/fundraising/technical-due-diligence-index.md +37 -0
- package/docs/fundraising/yc-application.md +25 -0
- package/docs/github-actions.md +84 -0
- package/docs/hosted-pilot.md +111 -0
- package/docs/mcp.md +52 -50
- package/docs/operations/disaster-recovery-runbook.md +81 -0
- package/docs/operations/kill-switch-runbook.md +32 -0
- package/docs/policy.md +61 -0
- package/docs/providers/authoring-packs.md +175 -0
- package/docs/providers/stripe-core-pack.md +82 -0
- package/docs/release-checklist.md +83 -71
- package/docs/release-migration-and-rollback.md +63 -0
- package/docs/release-readiness.md +39 -0
- package/docs/security/action-gateway-threat-model.md +34 -0
- package/docs/security/action-ledger-incident-replay-threat-model.md +42 -0
- package/docs/security/approval-inbox-threat-model.md +35 -0
- package/docs/security/credential-broker-threat-model.md +52 -0
- package/docs/security/egress-threat-model.md +126 -0
- package/docs/security/inventory-threat-model.md +104 -0
- package/docs/security/kill-switch-budgets-threat-model.md +37 -0
- package/docs/security/reliability-threat-model.md +111 -0
- package/docs/security/trust-ladder-threat-model.md +33 -0
- package/docs/team-control-plane.md +72 -0
- package/docs/usage.md +571 -57
- package/examples/README.md +10 -0
- package/examples/agent-instructions/README.md +39 -39
- package/examples/ci-smoke/README.md +21 -0
- package/examples/ci-smoke/ghostapi.policy.yaml +22 -0
- package/examples/ci-smoke/package.json +9 -0
- package/examples/ci-smoke/production-egress.mjs +2 -0
- package/examples/ci-smoke/safe.mjs +17 -0
- package/examples/evals/README.md +24 -0
- package/examples/evals/retry-after.eval.json +52 -0
- package/examples/generic-rest/README.md +27 -27
- package/examples/github-fetch/README.md +35 -35
- package/examples/openai-streaming/README.md +16 -0
- package/examples/openai-streaming/streaming-tool-call.mjs +31 -0
- package/examples/policy/ghostapi.policy.yaml +27 -0
- package/examples/record-replay/README.md +19 -0
- package/examples/record-replay/replay-requests.json +22 -0
- package/examples/record-replay/stripe-checkout.har.json +30 -0
- package/examples/resend-node/README.md +22 -22
- package/examples/stripe-node/README.md +35 -29
- package/examples/stripe-node/checkout-flow.mjs +61 -0
- package/examples/twilio-node/README.md +21 -21
- package/examples/worlds/README.md +19 -0
- package/examples/worlds/subscription-recovery.mjs +12 -0
- package/package.json +27 -12
- package/dist/providers/stripe.d.ts +0 -2
- package/dist/providers/stripe.js +0 -15
- package/dist/providers/stripe.js.map +0 -1
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstat, readFile } from "node:fs/promises";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { getDataPaths } from "../config/dataPaths.js";
|
|
5
|
+
import { sanitizeSecretString } from "../security/secrets.js";
|
|
6
|
+
import { atomicWriteJson, ensurePrivateDirectory, withFileLock } from "../storage/fileStore.js";
|
|
7
|
+
const SCHEMA_VERSION = 1;
|
|
8
|
+
const MAX_STORE_BYTES = 1024 * 1024;
|
|
9
|
+
const MAX_TARGETS = 1_000;
|
|
10
|
+
const MAX_AUDIT = 10_000;
|
|
11
|
+
const MAX_EVALS = 100;
|
|
12
|
+
const IDENTIFIER = /^[a-z0-9][a-z0-9._-]{0,127}$/;
|
|
13
|
+
const HASH = /^[a-f0-9]{64}$/;
|
|
14
|
+
const MAX_FRESHNESS_MS = 30 * 24 * 60 * 60 * 1000;
|
|
15
|
+
export const TRUST_LEVELS = ["simulate", "shadow", "dry-run", "approve", "bounded-auto", "trusted"];
|
|
16
|
+
export class TrustLadderError extends Error {
|
|
17
|
+
constructor(message) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = "TrustLadderError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function createLocalSyntheticTrustCapabilities() {
|
|
23
|
+
return {
|
|
24
|
+
schemaVersion: 1,
|
|
25
|
+
kind: "ghostapi.trust-capabilities",
|
|
26
|
+
provider: "ghostapi-synthetic",
|
|
27
|
+
environment: "synthetic",
|
|
28
|
+
levels: [
|
|
29
|
+
{ level: "simulate", status: "supported", externalSideEffects: false },
|
|
30
|
+
{ level: "shadow", status: "supported", externalSideEffects: false, requiresActualContext: true },
|
|
31
|
+
{ level: "dry-run", status: "unsupported", externalSideEffects: false, requiresOfficialProviderSemantics: true, reason: "ghostapi-synthetic has no provider-official dry-run semantic." },
|
|
32
|
+
{ level: "approve", status: "supported", externalSideEffects: false, requiresApproval: true },
|
|
33
|
+
{ level: "bounded-auto", status: "supported", externalSideEffects: false, requiresCanary: true, requiresOutcomeComparison: true },
|
|
34
|
+
{ level: "trusted", status: "unsupported", externalSideEffects: false, reason: "The local synthetic runtime is not production authorization." }
|
|
35
|
+
]
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function createLocalTrustLadder(options) {
|
|
39
|
+
return new LocalTrustLadder(options);
|
|
40
|
+
}
|
|
41
|
+
export class LocalTrustLadder {
|
|
42
|
+
path;
|
|
43
|
+
now;
|
|
44
|
+
ownerVerifier;
|
|
45
|
+
capabilities;
|
|
46
|
+
constructor(options) {
|
|
47
|
+
this.path = options.path ?? getDataPaths().trustLadder;
|
|
48
|
+
this.now = options.now ?? (() => new Date());
|
|
49
|
+
this.ownerVerifier = options.ownerVerifier;
|
|
50
|
+
this.capabilities = validateCapabilities(createLocalSyntheticTrustCapabilities());
|
|
51
|
+
}
|
|
52
|
+
getCapabilities() {
|
|
53
|
+
return clone(this.capabilities);
|
|
54
|
+
}
|
|
55
|
+
async inspect(targetValue) {
|
|
56
|
+
const target = validateTarget(targetValue);
|
|
57
|
+
return this.mutate((state, now) => clone(findOrCreateTarget(state, target, now)));
|
|
58
|
+
}
|
|
59
|
+
async assignCanary(targetValue, policyValue) {
|
|
60
|
+
const target = validateTarget(targetValue);
|
|
61
|
+
const policy = validatePolicy(policyValue);
|
|
62
|
+
return this.mutate((state, now) => {
|
|
63
|
+
const current = findOrCreateTarget(state, target, now);
|
|
64
|
+
if (current.circuitBreaker === "open")
|
|
65
|
+
throw new TrustLadderError("Canary circuit breaker is open; no further canary action is allowed.");
|
|
66
|
+
return canaryDecision(target, policy);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async promote(input) {
|
|
70
|
+
const target = validateTarget(input.target);
|
|
71
|
+
const policy = validatePolicy(input.policy);
|
|
72
|
+
const evidence = validateEvidence(input.evidence);
|
|
73
|
+
const requestedLevel = trustLevel(input.level, "Trust promotion level");
|
|
74
|
+
const owner = await this.ownerVerifier.authenticate(input.ownerIdentity);
|
|
75
|
+
const verifiedOwner = validateOwner(owner);
|
|
76
|
+
if (verifiedOwner.principalId !== policy.ownerPrincipalId)
|
|
77
|
+
throw new TrustLadderError("Trust promotion requires the configured verified owner decision.");
|
|
78
|
+
return this.mutate((state, now) => {
|
|
79
|
+
const current = findOrCreateTarget(state, target, now);
|
|
80
|
+
if (current.circuitBreaker === "open")
|
|
81
|
+
throw new TrustLadderError("Trust promotion is blocked by an open circuit breaker.");
|
|
82
|
+
const capability = capabilityFor(this.capabilities, requestedLevel);
|
|
83
|
+
if (capability.status !== "supported")
|
|
84
|
+
throw new TrustLadderError(`Trust level ${requestedLevel} is unsupported: ${capability.reason ?? "provider capability is unavailable"}`);
|
|
85
|
+
if (requestedLevel !== nextSupportedLevel(this.capabilities, current.level))
|
|
86
|
+
throw new TrustLadderError("Trust promotion must move to the next supported level; automatic promotion is disabled.");
|
|
87
|
+
assertPromotionEvidence(evidence, policy, now);
|
|
88
|
+
if (capability.requiresCanary) {
|
|
89
|
+
const decision = canaryDecision(target, policy);
|
|
90
|
+
if (!decision.assigned)
|
|
91
|
+
throw new TrustLadderError(`Canary scope denies promotion: ${decision.reason}`);
|
|
92
|
+
}
|
|
93
|
+
const previous = current.level;
|
|
94
|
+
current.level = requestedLevel;
|
|
95
|
+
current.updatedAt = now;
|
|
96
|
+
appendAudit(state, "trust.promoted", current, previous, requestedLevel, `verified owner ${verifiedOwner.principalId} approved promotion`, now);
|
|
97
|
+
return clone(current);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async compareShadow(input) {
|
|
101
|
+
const prediction = validateObservation(input.prediction);
|
|
102
|
+
const actual = validateObservation(input.actual);
|
|
103
|
+
if (!sameTarget(prediction.target, actual.target))
|
|
104
|
+
throw new TrustLadderError("Shadow comparison cannot mix synthetic identities.");
|
|
105
|
+
return this.mutate((state, now) => {
|
|
106
|
+
const current = findOrCreateTarget(state, prediction.target, now);
|
|
107
|
+
assertActiveLevel(current, "shadow");
|
|
108
|
+
const evidence = comparisonEvidence(prediction.target, "shadow", observationHash(prediction), observationHash(actual), now);
|
|
109
|
+
appendAudit(state, "shadow.compared", current, undefined, undefined, evidence.matched ? "predicted action matches actual input context" : "predicted action differs from actual input context", now);
|
|
110
|
+
return evidence;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async compareBoundedOutcome(input) {
|
|
114
|
+
const prediction = validateOutcomeObservation(input.prediction);
|
|
115
|
+
const actual = validateOutcomeObservation(input.actual);
|
|
116
|
+
if (!sameTarget(prediction.target, actual.target))
|
|
117
|
+
throw new TrustLadderError("Bounded outcome comparison cannot mix synthetic identities.");
|
|
118
|
+
return this.mutate((state, now) => {
|
|
119
|
+
const current = findOrCreateTarget(state, prediction.target, now);
|
|
120
|
+
assertActiveLevel(current, "bounded-auto");
|
|
121
|
+
const evidence = comparisonEvidence(prediction.target, "bounded-auto", outcomeHash(prediction), outcomeHash(actual), now);
|
|
122
|
+
appendAudit(state, "bounded.outcome_compared", current, undefined, undefined, evidence.matched ? "predicted and actual bounded outcomes match" : "predicted and actual bounded outcomes differ", now);
|
|
123
|
+
return evidence;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async recordCanaryOutcome(input) {
|
|
127
|
+
const target = validateTarget(input.target);
|
|
128
|
+
const policy = validatePolicy(input.policy);
|
|
129
|
+
const outcome = canaryOutcome(input.outcome);
|
|
130
|
+
const reason = text(input.reason, "Canary outcome reason", 200);
|
|
131
|
+
return this.mutate((state, now) => {
|
|
132
|
+
const current = findOrCreateTarget(state, target, now);
|
|
133
|
+
if (current.circuitBreaker === "open")
|
|
134
|
+
throw new TrustLadderError("Canary circuit breaker is open; no further canary action is allowed.");
|
|
135
|
+
if (current.level !== "bounded-auto")
|
|
136
|
+
throw new TrustLadderError("Canary outcomes require bounded-auto trust.");
|
|
137
|
+
const decision = canaryDecision(target, policy);
|
|
138
|
+
if (!decision.assigned)
|
|
139
|
+
throw new TrustLadderError(`Canary scope denies outcome recording: ${decision.reason}`);
|
|
140
|
+
current.canary.observed += 1;
|
|
141
|
+
if (outcome === "violation")
|
|
142
|
+
current.canary.violations += 1;
|
|
143
|
+
if (outcome === "error")
|
|
144
|
+
current.canary.errors += 1;
|
|
145
|
+
current.updatedAt = now;
|
|
146
|
+
appendAudit(state, "canary.outcome", current, undefined, undefined, reason, now);
|
|
147
|
+
if (outcome === "violation" && policy.violationResponse === "demote_to_approve") {
|
|
148
|
+
const previous = current.level;
|
|
149
|
+
current.level = "approve";
|
|
150
|
+
appendAudit(state, "trust.auto_demoted", current, previous, "approve", "policy violation automatically returned trust to approval mode", now);
|
|
151
|
+
}
|
|
152
|
+
if ((outcome === "violation" && policy.violationResponse === "open_circuit_breaker") || (current.canary.violations > 0 && current.canary.violations >= policy.stopConditions.maxViolations) || (current.canary.errors > 0 && current.canary.errors >= policy.stopConditions.maxErrors)) {
|
|
153
|
+
current.circuitBreaker = "open";
|
|
154
|
+
appendAudit(state, "canary.circuit_opened", current, undefined, undefined, outcome === "violation" && policy.violationResponse === "open_circuit_breaker" ? "policy violation opened the configured circuit breaker" : "configured canary stop condition was breached", now);
|
|
155
|
+
}
|
|
156
|
+
return clone(current);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
async rollbackToApproval(input) {
|
|
160
|
+
const target = validateTarget(input.target);
|
|
161
|
+
const policy = validatePolicy(input.policy);
|
|
162
|
+
const owner = validateOwner(await this.ownerVerifier.authenticate(input.ownerIdentity));
|
|
163
|
+
const reason = text(input.reason, "Trust rollback reason", 200);
|
|
164
|
+
if (owner.principalId !== policy.ownerPrincipalId)
|
|
165
|
+
throw new TrustLadderError("Trust rollback requires the configured verified owner decision.");
|
|
166
|
+
return this.mutate((state, now) => {
|
|
167
|
+
const current = findOrCreateTarget(state, target, now);
|
|
168
|
+
const previous = current.level;
|
|
169
|
+
current.level = "approve";
|
|
170
|
+
current.updatedAt = now;
|
|
171
|
+
appendAudit(state, "trust.rollback_to_approval", current, previous, "approve", reason, now);
|
|
172
|
+
return clone(current);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
async readStateForTesting() {
|
|
176
|
+
return this.read();
|
|
177
|
+
}
|
|
178
|
+
async read() {
|
|
179
|
+
await ensurePrivateDirectory(dirname(this.path));
|
|
180
|
+
const info = await lstat(this.path).catch((error) => isErrorCode(error, "ENOENT") ? null : Promise.reject(error));
|
|
181
|
+
if (info === null)
|
|
182
|
+
return emptyState();
|
|
183
|
+
if (!info.isFile() || info.isSymbolicLink())
|
|
184
|
+
throw new TrustLadderError("Trust ladder store must be a regular non-symlink file.");
|
|
185
|
+
const source = await readFile(this.path, "utf8");
|
|
186
|
+
if (Buffer.byteLength(source, "utf8") > MAX_STORE_BYTES)
|
|
187
|
+
throw new TrustLadderError("Trust ladder store exceeds its size limit.");
|
|
188
|
+
try {
|
|
189
|
+
return validateState(JSON.parse(source));
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
if (error instanceof TrustLadderError)
|
|
193
|
+
throw error;
|
|
194
|
+
throw new TrustLadderError("Trust ladder store is not valid JSON.");
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async mutate(operation) {
|
|
198
|
+
return withFileLock(this.path, async () => {
|
|
199
|
+
const state = await this.read();
|
|
200
|
+
const result = operation(state, this.timestamp());
|
|
201
|
+
await atomicWriteJson(this.path, validateState(state));
|
|
202
|
+
return result;
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
timestamp() {
|
|
206
|
+
const value = this.now();
|
|
207
|
+
if (!(value instanceof Date) || !Number.isFinite(value.getTime()))
|
|
208
|
+
throw new TrustLadderError("Trust ladder clock is invalid.");
|
|
209
|
+
return value.toISOString();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
export function createTestTrustOwnerVerifier() {
|
|
213
|
+
const issued = new WeakSet();
|
|
214
|
+
return {
|
|
215
|
+
verifier: {
|
|
216
|
+
async authenticate(identity) {
|
|
217
|
+
if (identity === null || typeof identity !== "object" || !issued.has(identity))
|
|
218
|
+
throw new TrustLadderError("Trust owner identity is not authenticated.");
|
|
219
|
+
return validateOwner(identity);
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
issue(input) {
|
|
223
|
+
const owner = Object.freeze(validateOwner({ ...input, principalId: input.principalId ?? input.id }));
|
|
224
|
+
issued.add(owner);
|
|
225
|
+
return owner;
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
function validateCapabilities(value) {
|
|
230
|
+
const capabilities = object(value, "Trust capabilities are invalid.");
|
|
231
|
+
exactKeys(capabilities, ["schemaVersion", "kind", "provider", "environment", "levels"], "Trust capabilities");
|
|
232
|
+
if (capabilities.schemaVersion !== SCHEMA_VERSION || capabilities.kind !== "ghostapi.trust-capabilities" || capabilities.provider !== "ghostapi-synthetic" || capabilities.environment !== "synthetic")
|
|
233
|
+
throw new TrustLadderError("Only local synthetic trust capabilities are available.");
|
|
234
|
+
const levels = array(capabilities.levels, "Trust level capabilities", TRUST_LEVELS.length).map(validateCapability);
|
|
235
|
+
if (levels.length !== TRUST_LEVELS.length || levels.some((capability, index) => capability.level !== TRUST_LEVELS[index]))
|
|
236
|
+
throw new TrustLadderError("Trust capabilities must define every level in stable order.");
|
|
237
|
+
if (levels.some((capability) => capability.externalSideEffects))
|
|
238
|
+
throw new TrustLadderError("Local trust capabilities cannot enable external side effects.");
|
|
239
|
+
return { schemaVersion: 1, kind: "ghostapi.trust-capabilities", provider: "ghostapi-synthetic", environment: "synthetic", levels };
|
|
240
|
+
}
|
|
241
|
+
function validateCapability(value) {
|
|
242
|
+
const capability = object(value, "Trust level capability is invalid.");
|
|
243
|
+
exactKeys(capability, ["level", "status", "externalSideEffects", "requiresActualContext", "requiresOfficialProviderSemantics", "requiresApproval", "requiresCanary", "requiresOutcomeComparison", "reason"], "Trust level capability", ["requiresActualContext", "requiresOfficialProviderSemantics", "requiresApproval", "requiresCanary", "requiresOutcomeComparison", "reason"]);
|
|
244
|
+
const level = trustLevel(capability.level, "Trust capability level");
|
|
245
|
+
if (capability.status !== "supported" && capability.status !== "unsupported")
|
|
246
|
+
throw new TrustLadderError("Trust capability status is invalid.");
|
|
247
|
+
if (capability.externalSideEffects !== false)
|
|
248
|
+
throw new TrustLadderError("Trust capability external side effects are invalid.");
|
|
249
|
+
const requiresActualContext = booleanFlag(capability.requiresActualContext, "Trust capability flag");
|
|
250
|
+
const requiresOfficialProviderSemantics = booleanFlag(capability.requiresOfficialProviderSemantics, "Trust capability flag");
|
|
251
|
+
const requiresApproval = booleanFlag(capability.requiresApproval, "Trust capability flag");
|
|
252
|
+
const requiresCanary = booleanFlag(capability.requiresCanary, "Trust capability flag");
|
|
253
|
+
const requiresOutcomeComparison = booleanFlag(capability.requiresOutcomeComparison, "Trust capability flag");
|
|
254
|
+
const reason = capability.reason === undefined ? undefined : text(capability.reason, "Trust capability reason", 200);
|
|
255
|
+
if (capability.status === "unsupported" && reason === undefined)
|
|
256
|
+
throw new TrustLadderError("Unsupported trust capability requires a reason.");
|
|
257
|
+
return { level, status: capability.status, externalSideEffects: false, ...(requiresActualContext === undefined ? {} : { requiresActualContext }), ...(requiresOfficialProviderSemantics === undefined ? {} : { requiresOfficialProviderSemantics }), ...(requiresApproval === undefined ? {} : { requiresApproval }), ...(requiresCanary === undefined ? {} : { requiresCanary }), ...(requiresOutcomeComparison === undefined ? {} : { requiresOutcomeComparison }), ...(reason === undefined ? {} : { reason }) };
|
|
258
|
+
}
|
|
259
|
+
function validatePolicy(value) {
|
|
260
|
+
const policy = object(value, "Trust promotion policy is invalid.");
|
|
261
|
+
exactKeys(policy, ["schemaVersion", "kind", "id", "ownerPrincipalId", "automaticPromotion", "minimumRuns", "requiredEvalIds", "maxViolationRateBps", "maxErrorRateBps", "evidenceFreshnessMs", "canary", "stopConditions", "violationResponse"], "Trust promotion policy");
|
|
262
|
+
if (policy.schemaVersion !== SCHEMA_VERSION || policy.kind !== "ghostapi.trust-promotion-policy" || policy.automaticPromotion !== false)
|
|
263
|
+
throw new TrustLadderError("Automatic trust promotion is disabled.");
|
|
264
|
+
const canary = object(policy.canary, "Trust canary scope is invalid.");
|
|
265
|
+
exactKeys(canary, ["tenantIds", "resourceIds", "percentageBps"], "Trust canary scope");
|
|
266
|
+
const stopConditions = object(policy.stopConditions, "Trust canary stop conditions are invalid.");
|
|
267
|
+
exactKeys(stopConditions, ["maxViolations", "maxErrors"], "Trust canary stop conditions");
|
|
268
|
+
if (policy.violationResponse !== "demote_to_approve" && policy.violationResponse !== "open_circuit_breaker")
|
|
269
|
+
throw new TrustLadderError("Trust violation response is invalid.");
|
|
270
|
+
return {
|
|
271
|
+
schemaVersion: 1,
|
|
272
|
+
kind: "ghostapi.trust-promotion-policy",
|
|
273
|
+
id: identifier(policy.id, "Trust policy id"),
|
|
274
|
+
ownerPrincipalId: identifier(policy.ownerPrincipalId, "Trust owner principal id"),
|
|
275
|
+
automaticPromotion: false,
|
|
276
|
+
minimumRuns: positive(policy.minimumRuns, "Trust minimum runs", 1_000_000),
|
|
277
|
+
requiredEvalIds: identifiers(policy.requiredEvalIds, "Trust required eval ids", MAX_EVALS),
|
|
278
|
+
maxViolationRateBps: bps(policy.maxViolationRateBps, "Trust maximum violation rate"),
|
|
279
|
+
maxErrorRateBps: bps(policy.maxErrorRateBps, "Trust maximum error rate"),
|
|
280
|
+
evidenceFreshnessMs: positive(policy.evidenceFreshnessMs, "Trust evidence freshness", MAX_FRESHNESS_MS),
|
|
281
|
+
canary: { tenantIds: identifiers(canary.tenantIds, "Trust canary tenant ids", MAX_TARGETS, true), resourceIds: identifiers(canary.resourceIds, "Trust canary resource ids", MAX_TARGETS, true), percentageBps: bps(canary.percentageBps, "Trust canary percentage") },
|
|
282
|
+
stopConditions: { maxViolations: nonNegative(stopConditions.maxViolations, "Trust canary maximum violations", 1_000_000), maxErrors: nonNegative(stopConditions.maxErrors, "Trust canary maximum errors", 1_000_000) },
|
|
283
|
+
violationResponse: policy.violationResponse
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function validateEvidence(value) {
|
|
287
|
+
const evidence = object(value, "Trust promotion evidence is invalid.");
|
|
288
|
+
exactKeys(evidence, ["runCount", "violations", "errors", "evals", "observedAt"], "Trust promotion evidence");
|
|
289
|
+
const runCount = nonNegative(evidence.runCount, "Trust evidence run count", 1_000_000);
|
|
290
|
+
const violations = nonNegative(evidence.violations, "Trust evidence violation count", runCount);
|
|
291
|
+
const errors = nonNegative(evidence.errors, "Trust evidence error count", runCount);
|
|
292
|
+
const evals = array(evidence.evals, "Trust evidence evals", MAX_EVALS).map((entry) => {
|
|
293
|
+
const evaluation = object(entry, "Trust evidence eval is invalid.");
|
|
294
|
+
exactKeys(evaluation, ["id", "status", "completedAt"], "Trust evidence eval");
|
|
295
|
+
if (evaluation.status !== "passed" && evaluation.status !== "failed")
|
|
296
|
+
throw new TrustLadderError("Trust evidence eval status is invalid.");
|
|
297
|
+
return { id: identifier(evaluation.id, "Trust evidence eval id"), status: evaluation.status, completedAt: timestamp(evaluation.completedAt, "Trust evidence eval completion") };
|
|
298
|
+
});
|
|
299
|
+
unique(evals.map((evaluation) => evaluation.id), "Trust evidence eval ids");
|
|
300
|
+
return { runCount, violations, errors, evals, observedAt: timestamp(evidence.observedAt, "Trust evidence observation time") };
|
|
301
|
+
}
|
|
302
|
+
function validateTarget(value) {
|
|
303
|
+
const target = object(value, "Trust target is invalid.");
|
|
304
|
+
exactKeys(target, ["provider", "environment", "tenantId", "resourceId"], "Trust target");
|
|
305
|
+
if (target.provider !== "ghostapi-synthetic" || target.environment !== "synthetic")
|
|
306
|
+
throw new TrustLadderError("Local trust preparation accepts synthetic identities only; production identities are unsupported.");
|
|
307
|
+
return { provider: "ghostapi-synthetic", environment: "synthetic", tenantId: identifier(target.tenantId, "Trust target tenant id"), resourceId: identifier(target.resourceId, "Trust target resource id") };
|
|
308
|
+
}
|
|
309
|
+
function validateObservation(value) {
|
|
310
|
+
const observation = object(value, "Shadow observation is invalid.");
|
|
311
|
+
exactKeys(observation, ["target", "actionHash", "operation", "contextHash"], "Shadow observation");
|
|
312
|
+
return { target: validateTarget(observation.target), actionHash: hash(observation.actionHash, "Shadow action hash"), operation: identifier(observation.operation, "Shadow operation"), contextHash: hash(observation.contextHash, "Shadow context hash") };
|
|
313
|
+
}
|
|
314
|
+
function validateOutcomeObservation(value) {
|
|
315
|
+
const observation = object(value, "Bounded outcome observation is invalid.");
|
|
316
|
+
exactKeys(observation, ["target", "actionHash", "outcomeHash", "executionReceiptHash"], "Bounded outcome observation");
|
|
317
|
+
return { target: validateTarget(observation.target), actionHash: hash(observation.actionHash, "Bounded action hash"), outcomeHash: hash(observation.outcomeHash, "Bounded outcome hash"), executionReceiptHash: hash(observation.executionReceiptHash, "Bounded execution receipt hash") };
|
|
318
|
+
}
|
|
319
|
+
function validateOwner(value) {
|
|
320
|
+
const owner = object(value, "Trust owner identity is invalid.");
|
|
321
|
+
exactKeys(owner, ["id", "principalId"], "Trust owner identity");
|
|
322
|
+
return { id: identifier(owner.id, "Trust owner id"), principalId: identifier(owner.principalId, "Trust owner principal id") };
|
|
323
|
+
}
|
|
324
|
+
function validateState(value) {
|
|
325
|
+
const state = object(value, "Trust ladder store must be an object.");
|
|
326
|
+
exactKeys(state, ["schemaVersion", "targets", "auditAnchor", "audit"], "Trust ladder store");
|
|
327
|
+
if (state.schemaVersion !== SCHEMA_VERSION)
|
|
328
|
+
throw new TrustLadderError("Unsupported trust ladder schema version.");
|
|
329
|
+
const targets = array(state.targets, "Trust targets", MAX_TARGETS).map(validateTargetState);
|
|
330
|
+
unique(targets.map((target) => targetKey(target.target)), "Trust targets");
|
|
331
|
+
const auditAnchor = hash(state.auditAnchor, "Trust audit anchor");
|
|
332
|
+
const audit = array(state.audit, "Trust audit", MAX_AUDIT).map(validateAudit);
|
|
333
|
+
validateAuditChain(auditAnchor, audit);
|
|
334
|
+
return { schemaVersion: 1, targets, auditAnchor, audit };
|
|
335
|
+
}
|
|
336
|
+
function validateTargetState(value) {
|
|
337
|
+
const state = object(value, "Trust target state is invalid.");
|
|
338
|
+
exactKeys(state, ["target", "level", "circuitBreaker", "canary", "updatedAt"], "Trust target state");
|
|
339
|
+
const canary = object(state.canary, "Trust target canary state is invalid.");
|
|
340
|
+
exactKeys(canary, ["observed", "violations", "errors"], "Trust target canary state");
|
|
341
|
+
const observed = nonNegative(canary.observed, "Trust canary observed count", 1_000_000);
|
|
342
|
+
const violations = nonNegative(canary.violations, "Trust canary violation count", observed);
|
|
343
|
+
const errors = nonNegative(canary.errors, "Trust canary error count", observed);
|
|
344
|
+
if (state.circuitBreaker !== "closed" && state.circuitBreaker !== "open")
|
|
345
|
+
throw new TrustLadderError("Trust circuit breaker state is invalid.");
|
|
346
|
+
return { target: validateTarget(state.target), level: trustLevel(state.level, "Trust target level"), circuitBreaker: state.circuitBreaker, canary: { observed, violations, errors }, updatedAt: timestamp(state.updatedAt, "Trust target update time") };
|
|
347
|
+
}
|
|
348
|
+
function validateAudit(value) {
|
|
349
|
+
const record = object(value, "Trust audit record is invalid.");
|
|
350
|
+
exactKeys(record, ["sequence", "event", "targetKey", "fromLevel", "toLevel", "reason", "timestamp", "previousHash", "recordHash"], "Trust audit record", ["fromLevel", "toLevel"]);
|
|
351
|
+
const base = {
|
|
352
|
+
sequence: positive(record.sequence, "Trust audit sequence", MAX_AUDIT),
|
|
353
|
+
event: text(record.event, "Trust audit event", 80),
|
|
354
|
+
targetKey: identifier(record.targetKey, "Trust audit target key"),
|
|
355
|
+
...(record.fromLevel === undefined ? {} : { fromLevel: trustLevel(record.fromLevel, "Trust audit from level") }),
|
|
356
|
+
...(record.toLevel === undefined ? {} : { toLevel: trustLevel(record.toLevel, "Trust audit to level") }),
|
|
357
|
+
reason: text(record.reason, "Trust audit reason", 200),
|
|
358
|
+
timestamp: timestamp(record.timestamp, "Trust audit timestamp"),
|
|
359
|
+
previousHash: hash(record.previousHash, "Trust audit previous hash")
|
|
360
|
+
};
|
|
361
|
+
if (hash(record.recordHash, "Trust audit record hash") !== sha256(canonical(base)))
|
|
362
|
+
throw new TrustLadderError("Trust audit record hash is invalid.");
|
|
363
|
+
return { ...base, recordHash: record.recordHash };
|
|
364
|
+
}
|
|
365
|
+
function validateAuditChain(anchor, records) {
|
|
366
|
+
let previous = anchor;
|
|
367
|
+
let sequence = 1;
|
|
368
|
+
for (const record of records) {
|
|
369
|
+
if (record.sequence !== sequence || record.previousHash !== previous)
|
|
370
|
+
throw new TrustLadderError("Trust audit chain is invalid.");
|
|
371
|
+
previous = record.recordHash;
|
|
372
|
+
sequence += 1;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
function emptyState() {
|
|
376
|
+
return { schemaVersion: 1, targets: [], auditAnchor: sha256("ghostapi.trust.audit.v1"), audit: [] };
|
|
377
|
+
}
|
|
378
|
+
function findOrCreateTarget(state, target, now) {
|
|
379
|
+
const existing = state.targets.find((candidate) => sameTarget(candidate.target, target));
|
|
380
|
+
if (existing !== undefined)
|
|
381
|
+
return existing;
|
|
382
|
+
if (state.targets.length >= MAX_TARGETS)
|
|
383
|
+
throw new TrustLadderError("Trust target limit was reached.");
|
|
384
|
+
const created = { target: clone(target), level: "simulate", circuitBreaker: "closed", canary: { observed: 0, violations: 0, errors: 0 }, updatedAt: now };
|
|
385
|
+
state.targets.push(created);
|
|
386
|
+
return created;
|
|
387
|
+
}
|
|
388
|
+
function assertPromotionEvidence(evidence, policy, now) {
|
|
389
|
+
if (evidence.runCount < policy.minimumRuns)
|
|
390
|
+
throw new TrustLadderError("Trust promotion evidence has too few runs.");
|
|
391
|
+
if (Date.parse(evidence.observedAt) > Date.parse(now))
|
|
392
|
+
throw new TrustLadderError("Trust promotion evidence is from the future.");
|
|
393
|
+
if (Date.parse(now) - Date.parse(evidence.observedAt) > policy.evidenceFreshnessMs)
|
|
394
|
+
throw new TrustLadderError("Trust promotion evidence is stale.");
|
|
395
|
+
for (const required of policy.requiredEvalIds) {
|
|
396
|
+
const evaluation = evidence.evals.find((candidate) => candidate.id === required);
|
|
397
|
+
if (evaluation === undefined || evaluation.status !== "passed")
|
|
398
|
+
throw new TrustLadderError(`Trust promotion requires passing eval: ${required}`);
|
|
399
|
+
if (Date.parse(evaluation.completedAt) > Date.parse(now))
|
|
400
|
+
throw new TrustLadderError(`Trust promotion eval is from the future: ${required}`);
|
|
401
|
+
if (Date.parse(now) - Date.parse(evaluation.completedAt) > policy.evidenceFreshnessMs)
|
|
402
|
+
throw new TrustLadderError(`Trust promotion eval is stale: ${required}`);
|
|
403
|
+
}
|
|
404
|
+
if (rateBps(evidence.violations, evidence.runCount) > policy.maxViolationRateBps)
|
|
405
|
+
throw new TrustLadderError("Trust promotion violation rate exceeds policy.");
|
|
406
|
+
if (rateBps(evidence.errors, evidence.runCount) > policy.maxErrorRateBps)
|
|
407
|
+
throw new TrustLadderError("Trust promotion error rate exceeds policy.");
|
|
408
|
+
}
|
|
409
|
+
function nextSupportedLevel(capabilities, current) {
|
|
410
|
+
const index = TRUST_LEVELS.indexOf(current);
|
|
411
|
+
for (const level of TRUST_LEVELS.slice(index + 1))
|
|
412
|
+
if (capabilityFor(capabilities, level).status === "supported")
|
|
413
|
+
return level;
|
|
414
|
+
return undefined;
|
|
415
|
+
}
|
|
416
|
+
function capabilityFor(capabilities, level) {
|
|
417
|
+
const capability = capabilities.levels.find((candidate) => candidate.level === level);
|
|
418
|
+
if (capability === undefined)
|
|
419
|
+
throw new TrustLadderError("Trust capability is missing.");
|
|
420
|
+
return capability;
|
|
421
|
+
}
|
|
422
|
+
function canaryDecision(target, policy) {
|
|
423
|
+
if (policy.canary.tenantIds.length > 0 && !policy.canary.tenantIds.includes(target.tenantId))
|
|
424
|
+
return { target: clone(target), assigned: false, bucket: deterministicBucket(policy.id, target), reason: "tenant is outside the configured canary scope" };
|
|
425
|
+
if (policy.canary.resourceIds.length > 0 && !policy.canary.resourceIds.includes(target.resourceId))
|
|
426
|
+
return { target: clone(target), assigned: false, bucket: deterministicBucket(policy.id, target), reason: "resource is outside the configured canary scope" };
|
|
427
|
+
const bucket = deterministicBucket(policy.id, target);
|
|
428
|
+
return bucket < policy.canary.percentageBps
|
|
429
|
+
? { target: clone(target), assigned: true, bucket, reason: "target is inside deterministic canary scope" }
|
|
430
|
+
: { target: clone(target), assigned: false, bucket, reason: "target is outside the configured canary percentage" };
|
|
431
|
+
}
|
|
432
|
+
function deterministicBucket(policyId, target) {
|
|
433
|
+
return createHash("sha256").update(`ghostapi.trust.canary.v1:${policyId}:${targetKey(target)}`, "utf8").digest().readUInt32BE(0) % 10_000;
|
|
434
|
+
}
|
|
435
|
+
function comparisonEvidence(target, level, predictedHash, actualHash, observedAt) {
|
|
436
|
+
return { schemaVersion: 1, kind: "ghostapi.trust-comparison", target: clone(target), level, matched: predictedHash === actualHash, predictedHash, actualHash, observedAt };
|
|
437
|
+
}
|
|
438
|
+
function observationHash(value) {
|
|
439
|
+
return sha256(canonical(value));
|
|
440
|
+
}
|
|
441
|
+
function outcomeHash(value) {
|
|
442
|
+
return sha256(canonical(value));
|
|
443
|
+
}
|
|
444
|
+
function appendAudit(state, event, target, fromLevel, toLevel, reason, timestampValue) {
|
|
445
|
+
if (state.audit.length >= MAX_AUDIT)
|
|
446
|
+
throw new TrustLadderError("Trust audit limit was reached.");
|
|
447
|
+
const previousHash = state.audit.at(-1)?.recordHash ?? state.auditAnchor;
|
|
448
|
+
const base = { sequence: state.audit.length + 1, event: text(event, "Trust audit event", 80), targetKey: targetKey(target.target), ...(fromLevel === undefined ? {} : { fromLevel }), ...(toLevel === undefined ? {} : { toLevel }), reason: text(reason, "Trust audit reason", 200), timestamp: timestampValue, previousHash };
|
|
449
|
+
state.audit.push({ ...base, recordHash: sha256(canonical(base)) });
|
|
450
|
+
}
|
|
451
|
+
function assertActiveLevel(state, level) {
|
|
452
|
+
if (state.circuitBreaker === "open")
|
|
453
|
+
throw new TrustLadderError("Canary circuit breaker is open; comparisons cannot continue.");
|
|
454
|
+
if (state.level !== level)
|
|
455
|
+
throw new TrustLadderError(`Trust target is not active at ${level}.`);
|
|
456
|
+
}
|
|
457
|
+
function sameTarget(left, right) {
|
|
458
|
+
return left.provider === right.provider && left.environment === right.environment && left.tenantId === right.tenantId && left.resourceId === right.resourceId;
|
|
459
|
+
}
|
|
460
|
+
function targetKey(target) {
|
|
461
|
+
return `target-${sha256(canonical(target)).slice(0, 32)}`;
|
|
462
|
+
}
|
|
463
|
+
function trustLevel(value, label) {
|
|
464
|
+
if (typeof value !== "string" || !TRUST_LEVELS.includes(value))
|
|
465
|
+
throw new TrustLadderError(`${label} is invalid.`);
|
|
466
|
+
return value;
|
|
467
|
+
}
|
|
468
|
+
function canaryOutcome(value) {
|
|
469
|
+
if (value !== "success" && value !== "violation" && value !== "error")
|
|
470
|
+
throw new TrustLadderError("Trust canary outcome is invalid.");
|
|
471
|
+
return value;
|
|
472
|
+
}
|
|
473
|
+
function identifier(value, label) {
|
|
474
|
+
if (typeof value !== "string" || !IDENTIFIER.test(value) || sanitizeSecretString(value) !== value)
|
|
475
|
+
throw new TrustLadderError(`${label} must be a safe identifier.`);
|
|
476
|
+
return value;
|
|
477
|
+
}
|
|
478
|
+
function identifiers(value, label, max, allowEmpty = false) {
|
|
479
|
+
const values = array(value, label, max).map((entry) => identifier(entry, label));
|
|
480
|
+
if (!allowEmpty && values.length === 0)
|
|
481
|
+
throw new TrustLadderError(`${label} must not be empty.`);
|
|
482
|
+
unique(values, label);
|
|
483
|
+
return values.sort();
|
|
484
|
+
}
|
|
485
|
+
function hash(value, label) {
|
|
486
|
+
if (typeof value !== "string" || !HASH.test(value))
|
|
487
|
+
throw new TrustLadderError(`${label} must be a SHA-256 hash.`);
|
|
488
|
+
return value;
|
|
489
|
+
}
|
|
490
|
+
function timestamp(value, label) {
|
|
491
|
+
if (typeof value !== "string" || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value) || !Number.isFinite(Date.parse(value)))
|
|
492
|
+
throw new TrustLadderError(`${label} must be an ISO UTC timestamp.`);
|
|
493
|
+
return value;
|
|
494
|
+
}
|
|
495
|
+
function positive(value, label, max) {
|
|
496
|
+
if (typeof value !== "number" || !Number.isInteger(value) || value < 1 || value > max)
|
|
497
|
+
throw new TrustLadderError(`${label} is invalid.`);
|
|
498
|
+
return value;
|
|
499
|
+
}
|
|
500
|
+
function nonNegative(value, label, max) {
|
|
501
|
+
if (typeof value !== "number" || !Number.isInteger(value) || value < 0 || value > max)
|
|
502
|
+
throw new TrustLadderError(`${label} is invalid.`);
|
|
503
|
+
return value;
|
|
504
|
+
}
|
|
505
|
+
function bps(value, label) {
|
|
506
|
+
return nonNegative(value, label, 10_000);
|
|
507
|
+
}
|
|
508
|
+
function booleanFlag(value, label) {
|
|
509
|
+
if (value === undefined)
|
|
510
|
+
return undefined;
|
|
511
|
+
if (typeof value !== "boolean")
|
|
512
|
+
throw new TrustLadderError(`${label} is invalid.`);
|
|
513
|
+
return value;
|
|
514
|
+
}
|
|
515
|
+
function rateBps(count, total) {
|
|
516
|
+
return total === 0 ? 10_000 : Math.floor((count * 10_000) / total);
|
|
517
|
+
}
|
|
518
|
+
function text(value, label, maxLength) {
|
|
519
|
+
if (typeof value !== "string" || value.trim() === "" || value.length > maxLength || /[\u0000-\u001f]/.test(value) || sanitizeSecretString(value) !== value)
|
|
520
|
+
throw new TrustLadderError(`${label} is invalid.`);
|
|
521
|
+
return value.trim();
|
|
522
|
+
}
|
|
523
|
+
function object(value, message) {
|
|
524
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
525
|
+
throw new TrustLadderError(message);
|
|
526
|
+
return value;
|
|
527
|
+
}
|
|
528
|
+
function array(value, label, max) {
|
|
529
|
+
if (!Array.isArray(value) || value.length > max)
|
|
530
|
+
throw new TrustLadderError(`${label} is invalid.`);
|
|
531
|
+
return value;
|
|
532
|
+
}
|
|
533
|
+
function exactKeys(value, keys, label, optional = []) {
|
|
534
|
+
for (const key of Object.keys(value))
|
|
535
|
+
if (!keys.includes(key) || (value[key] === undefined && !optional.includes(key)))
|
|
536
|
+
throw new TrustLadderError(`${label} contains unsupported field: ${key}`);
|
|
537
|
+
}
|
|
538
|
+
function unique(values, label) {
|
|
539
|
+
if (new Set(values).size !== values.length)
|
|
540
|
+
throw new TrustLadderError(`${label} must be unique.`);
|
|
541
|
+
}
|
|
542
|
+
function canonical(value) {
|
|
543
|
+
if (value === null || typeof value === "boolean" || typeof value === "string" || typeof value === "number")
|
|
544
|
+
return JSON.stringify(value);
|
|
545
|
+
if (Array.isArray(value))
|
|
546
|
+
return `[${value.map(canonical).join(",")}]`;
|
|
547
|
+
if (typeof value === "object")
|
|
548
|
+
return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`).join(",")}}`;
|
|
549
|
+
throw new TrustLadderError("Trust data must be JSON.");
|
|
550
|
+
}
|
|
551
|
+
function sha256(value) {
|
|
552
|
+
return createHash("sha256").update(value, "utf8").digest("hex");
|
|
553
|
+
}
|
|
554
|
+
function clone(value) {
|
|
555
|
+
return structuredClone(value);
|
|
556
|
+
}
|
|
557
|
+
function isErrorCode(error, code) {
|
|
558
|
+
return error instanceof Error && "code" in error && error.code === code;
|
|
559
|
+
}
|
|
560
|
+
//# sourceMappingURL=trustLadder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trustLadder.js","sourceRoot":"","sources":["../../src/trust/trustLadder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { SyntheticWorldError, createSyntheticWorld, createWorld, forkWorld, formatWorld, getWorldPath, inspectWorld, resetWorld, runSubscriptionFailureWorkflow, validateSyntheticWorld } from "./worlds.js";
|
|
2
|
+
export type { CreateWorldOptions, SyntheticWorld, SyntheticWorldManifest, SyntheticWorldState, WorldScenarioReference, WorldWorkflowReceipt } from "./worlds.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worlds/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,aAAa,CAAC"}
|