
Product
Microsoft Teams Notifications Are Now Available in Socket
Socket can now send alerts and supply chain attack notifications to Microsoft Teams, with filters that route the right updates to each channel.
@decionis/sdk
Advanced tools
Node SDK and service-boundary middleware for policy-gated Decionis execution.
@decionis/sdkNode SDK for the canonical Decionis policy-evaluation route.
npm install @decionis/sdk
It includes:
POST /v1/protocol/evaluate-decisionPOST /v1/authority/enforce-and-bindAPPROVE, or deny on REJECT, REVIEW, and ESCALATE by default.dist/For repository-backed packaging and publish automation, use the workflow documented in
docs/package-distribution.md.
import { createDecionisNodeSdk, createExpressPolicyGate } from "@decionis/sdk";
const client = createDecionisNodeSdk({
baseUrl: process.env.DECIONIS_BASE_URL!,
apiKey: process.env.DECIONIS_API_KEY!,
defaultRequest: {
policy_version: "payments-v1",
objective_profile: "risk_conservative",
mode: "ENFORCEMENT",
},
});
app.post(
"/payments/release",
createExpressPolicyGate({
client,
buildDecisionRequest: (req) => ({
org_id: process.env.DECIONIS_ORG_ID!,
decision_type: "PAYMENT_RELEASE",
amount: Number(req.body.amount),
workflow_key: "payment_release",
vertical_pack: "finance",
context: {
route: req.originalUrl,
actor_id: req.user?.id,
},
}),
}),
releasePaymentHandler,
);
SDK code packages action intent and binds execution through Decionis. Policy rules stay in the Authority API, not in the agent process.
import { createDecionisExecutionClient } from "@decionis/sdk";
const decionis = createDecionisExecutionClient({
authorityBaseUrl: process.env.DECIONIS_AUTHORITY_URL!,
});
await decionis.enforceAndExecute({
request: {
tenant_id: "tenant_demo",
actor: { id: "research_agent", type: "AI_AGENT", runtime: "mcp" },
action: { type: "SEND_PAYMENT", resource: "wallet.usdc", amount: 0.25, currency: "USD" },
downstream_target: {
system: "payment_api",
operation: "send_payment",
endpoint: "POST /payments",
},
},
execute: ({ executionToken }) =>
paymentApi.sendPayment({
amount: 0.25,
token: executionToken,
}),
});
enforceAndExecuteStrict makes the single-use grant a hard precondition —
"no valid grant, no execution." It authorizes, then redeems the grant before
execute runs, and fails closed on every other path. Because the grant is redeemed
up front, a downstream failure requires a fresh decision rather than replaying an
ALLOW. Opt-in per surface — the default enforceAndExecute is unchanged.
const result = await decionis.enforceAndExecuteStrict({
request,
execute: ({ executionToken, grant }) =>
paymentApi.sendPayment({ amount: 0.25, token: executionToken }),
});
if (!result.executed) {
// result.reason: BLOCKED_BY_POLICY | NO_EXECUTION_GRANT | GRANT_NOT_REDEEMABLE | AUTHORITY_ERROR
return refuse(result.reason);
}
Downstream services should verify and consume the token before mutating state:
import { createExpressExecutionTokenVerifier } from "@decionis/sdk";
app.post(
"/payments",
createExpressExecutionTokenVerifier({
authorityBaseUrl: process.env.DECIONIS_AUTHORITY_URL!,
buildVerificationRequest: (req) => ({
actor_id: req.body.actor_id,
action_type: "SEND_PAYMENT",
resource: "wallet.usdc",
amount: Number(req.body.amount),
currency: "USD",
downstream_target: {
system: "payment_api",
operation: "send_payment",
endpoint: "POST /payments",
},
}),
}),
paymentHandler,
);
AgenticCheckoutGate is the in-process authorization primitive for agentic
commerce: it runs the deterministic gate against a pre-synced signed policy
snapshot (zero network on the hot path), mints a single-use, cart-bound Execution
Grant on ALLOW, and appends to the ledger off the hot path. authorizeAgenticCheckout
returns a flat ACP/AP2 accept/decline result.
import { authorizeAgenticCheckout } from "@decionis/sdk";
const auth = await authorizeAgenticCheckout(
{ snapshot, issueGrant },
{ request, signal: { cartTotal: 100, discountAmount: 0, estimatedCost: 20 } },
{ requireGrant: true }, // strict: an ALLOW without a bound grant is NOT authorized
);
if (!auth.authorized) return decline(auth.acp_status, auth.reasons);
proceedToPayment(auth.execution_grant); // single-use, action-bound
{ requireGrant: true } is the fail-closed posture that pairs with
enforceAndExecuteStrict — no bound grant, no authorization.
Use DecionisAgentTaskGateway before model traffic. It keeps the Decionis runtime key
separate from the provider credential and produces native base URLs and headers for the
OpenAI and Anthropic SDKs.
import OpenAI from "openai";
import { createDecionisAgentTaskGateway } from "@decionis/sdk";
const gateway = createDecionisAgentTaskGateway({
gatewayBaseUrl: process.env.DECIONIS_AGENT_GATEWAY_URL!,
apiKey: process.env.DECIONIS_API_KEY!,
});
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY!,
baseURL: gateway.providerBaseUrl("openai"),
defaultHeaders: gateway.providerHeaders({
orgId: process.env.DECIONIS_ORG_ID!,
userId: "developer@example.com",
sessionId: crypto.randomUUID(),
idempotencyKey: crypto.randomUUID(),
host: "codex",
}),
});
Direct embeddings can call reserve(), authorizeEgress(), reconcile(), and
release() instead. The complete boundary and rollout contract is documented in
AgentBoundaryGateway.md.
FAQs
Node SDK and service-boundary middleware for policy-gated Decionis execution.
We found that @decionis/sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Product
Socket can now send alerts and supply chain attack notifications to Microsoft Teams, with filters that route the right updates to each channel.

Security News
pnpm 12 rewrites the package manager in Rust, cutting install times by up to 90% while preserving pnpm 11 workflows and lockfiles.

Security News
Socket CTO Ahmad Nassri joins AppSec leaders at Black Hat to discuss active malware, package manager risks, and software supply chain defense.