Skip to main content
[AVAILABLE]. packages/runtime. Wires together @parmana/policy, @parmana/crypto, @parmana/storage, and whichever ExecutionSystem you supply.

Purpose

Given a BusinessTransaction and an ExecutionSystem, runs the full pipeline: validate, evaluate policy, sign an authorization if approved, release execution, assemble and store the resulting Execution trust record.

Install

Key exports

Entry points, [AVAILABLE]

Advanced / lower-level, [AVAILABLE]

Services, [AVAILABLE]

business-transaction-service, execution-service, receipt-service (uses @parmana/crypto’s ReceiptCrypto, not @parmana/receipt, see that package’s reference page), verification-service.

Errors, [AVAILABLE]

RuntimeError (base, carries status and code), BusinessTransactionValidationError, DuplicateBusinessTransactionError, VerificationFailedError, ReceiptGenerationError. packages/api/src/middleware/error-handler.ts checks these by instanceof to pick an HTTP status, verified per-route on Error handling, including two gaps where a raw, uncaught error bypasses this entirely, see the Error catalog.

A rejected decision throws, it does not return

ExecutionTrustApplication.execute() throws a RuntimeError when the policy decision is REJECTED, it does not return an object with outcome: "REJECTED". Verified live in Write your first policy: the thrown message is the matched rule’s rejection reason, status: 500, code: "RUNTIME_ERROR". A caller that wants to handle rejection gracefully needs a try/catch.

Minimal example

Next

Authorize and execute an action end to end

See RuntimeContext.authorization directly, something the REST API never exposes.

@parmana/execution-system

The one interface the fourth RuntimeFactory.create() argument must implement.