1#![deny(missing_docs)]
4
5use std::sync::OnceLock;
6
7use tokio::runtime::Runtime;
8
9pub mod audit;
10pub mod builtin_roles;
11pub mod otel;
12pub mod outbox;
13pub mod permission;
14pub mod permission_check;
15pub mod principal;
16pub mod redaction;
17pub mod request_context;
18pub mod request_id;
19
20pub use permission::{
21 Action, BifrostPermissionScope, BifrostSchemaScope, BifrostTableScope, Permission,
22 PermissionScope, PermissionScopeError, PermissionSet, Resource, UnrepresentableIntersection,
23};
24pub use permission_check::{PermissionCheck, PermissionDenyReason, PermissionVerdict, RbacCheck};
25pub use principal::{
26 AuthContext, CardAttribution, InvalidRoleName, PlatformPrincipal, Principal, PrincipalId,
27 PrincipalKind, PrincipalRef, RoleRef,
28};
29pub use request_context::{
30 AcceptedAuthority, DelegationStep, RequestContext, TraceParent, audit_delegation_chain,
31 delegated_attribution, needs_root_resolution, owning_root,
32};
33pub use wyrd_spec::reference::CardRefScope;
34
35static RUNTIME: OnceLock<Runtime> = OnceLock::new();
36
37#[must_use]
46pub fn runtime() -> &'static Runtime {
47 RUNTIME.get_or_init(|| {
48 build_runtime().unwrap_or_else(|error| panic!("failed to build tokio runtime: {error}"))
49 })
50}
51
52fn build_runtime() -> std::io::Result<Runtime> {
53 Runtime::new()
54}