Composable permission, concurrency, and rate-limit policies for MUIX sessions and channels.
npm install @muix/policyimport { createPolicyEngine } from "@muix/policy";
import { createPermissionPolicy, createConcurrencyPolicy, createRateLimitPolicy } from "@muix/policy";
const engine = createPolicyEngine();
// Add policies — evaluated in order, first rejection wins
engine.add(createPermissionPolicy({ allowed: ["microphone", "camera"] }));
engine.add(createConcurrencyPolicy({ maxConcurrent: 3 }));
engine.add(createRateLimitPolicy({ maxPerSecond: 10 }));
// Evaluate before performing an operation
const result = await engine.evaluate({ resource: "microphone", action: "acquire" });
if (!result.allowed) {
console.error("denied:", result.reason);
}Allowlist/denylist for named resources.
import { createPermissionPolicy } from "@muix/policy";
const policy = createPermissionPolicy({
allowed: ["microphone", "camera"],
// denied: ["screen-capture"], // optional denylist
});Limits how many simultaneous operations may run against a resource.
import { createConcurrencyPolicy } from "@muix/policy";
const policy = createConcurrencyPolicy({ maxConcurrent: 2 });
// Tracks in-flight operations — call `release()` on each returned token
const token = await policy.acquire("microphone");
// ... do work ...
token.release();Token-bucket rate limiter; rejects when the bucket is empty.
import { createRateLimitPolicy } from "@muix/policy";
const policy = createRateLimitPolicy({
maxPerSecond: 5, // refill rate
burst: 10, // max bucket size
});import { createPolicyEngine, createPermissionPolicy, createConcurrencyPolicy } from "@muix/policy";
const engine = createPolicyEngine([
createPermissionPolicy({ allowed: ["microphone"] }),
createConcurrencyPolicy({ maxConcurrent: 1 }),
]);
const channel = session.addChannel("mic");
channel.observe().subscribe({
next: async (frame) => {
const check = await engine.evaluate({ resource: "microphone", action: "read" });
if (check.allowed) process(frame);
},
});| Export | Description |
|---|---|
createPolicyEngine(policies?) |
Engine factory |
createPermissionPolicy(options) |
Allow/deny by resource name |
createConcurrencyPolicy(options) |
Max-concurrent limiter |
createRateLimitPolicy(options) |
Token-bucket rate limiter |
MIT