pub struct SeedApiRuntime { /* private fields */ }Expand description
The Seed runtime adapter.
Implementations§
Source§impl SeedApiRuntime
impl SeedApiRuntime
Sourcepub fn new(
cfg: SeedConfig,
transport: Arc<dyn SeedTransport>,
creds: Arc<dyn SeedCredentials>,
) -> Result<Self, RuntimeError>
pub fn new( cfg: SeedConfig, transport: Arc<dyn SeedTransport>, creds: Arc<dyn SeedCredentials>, ) -> Result<Self, RuntimeError>
New adapter. Refuses a malformed node id or pin.
Source§impl SeedApiRuntime
impl SeedApiRuntime
Sourcepub async fn installed(&self) -> Result<Vec<InstalledCog>, RuntimeError>
pub async fn installed(&self) -> Result<Vec<InstalledCog>, RuntimeError>
Installed cogs (GET /api/v1/apps).
Source§impl SeedApiRuntime
impl SeedApiRuntime
Sourcepub async fn pair(
&self,
client_name: &str,
bootstrap: &SecretString,
) -> Result<(), RuntimeError>
pub async fn pair( &self, client_name: &str, bootstrap: &SecretString, ) -> Result<(), RuntimeError>
Pair with the Seed: open the pairing window (authorized by
bootstrap, which may be empty over the trusted USB link), request a
client token, and store it in the operator secret store.
Sourcepub async fn writes_gated(&self) -> Result<bool, RuntimeError>
pub async fn writes_gated(&self) -> Result<bool, RuntimeError>
Current writes_gated flag from /api/v1/status.
Sourcepub async fn backup(&self, dir: &Path) -> Result<SeedBackup, RuntimeError>
pub async fn backup(&self, dir: &Path) -> Result<SeedBackup, RuntimeError>
Snapshot status, identity, installed apps, each app’s config and the
witness chain into a new private directory dir.
Sourcepub async fn check_backup(
&self,
backup: &SeedBackup,
same_firmware: bool,
) -> Result<String, RuntimeError>
pub async fn check_backup( &self, backup: &SeedBackup, same_firmware: bool, ) -> Result<String, RuntimeError>
Verify backup and check it was taken from this Seed: same operator
node id, and the Seed’s current identity has the same device id and
public key. With same_firmware, the firmware must also be unchanged
(the backup reflects the state about to be upgraded). Returns the
current firmware version.
Sourcepub async fn upgrade_firmware(
&self,
backup: &SeedBackup,
target_version: &str,
) -> Result<UpgradeOutcome, RuntimeError>
pub async fn upgrade_firmware( &self, backup: &SeedBackup, target_version: &str, ) -> Result<UpgradeOutcome, RuntimeError>
Apply the pending firmware upgrade, but only if it is the version
the operator pinned (target_version). Refuses without a verified
backup of this Seed at its current firmware, while writes are gated,
or when the Seed does not report which version is pending.
Sourcepub async fn recover_writes_gated(
&self,
backup: &SeedBackup,
) -> Result<(), RuntimeError>
pub async fn recover_writes_gated( &self, backup: &SeedBackup, ) -> Result<(), RuntimeError>
Recover the witness-chain writes_gated state. Only runs when the
Seed reports writes gated and backup still verifies.
Trait Implementations§
Source§impl WorkloadRuntime for SeedApiRuntime
impl WorkloadRuntime for SeedApiRuntime
Source§fn network_exposure(&self) -> NetworkPolicy
fn network_exposure(&self) -> NetworkPolicy
The Seed firmware, not WeftOS, decides what its cogs can reach; the
Seed has internet access, so the gate is told egress.
Source§fn console_preemptions<'life0, 'life1, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
) -> Pin<Box<dyn Future<Output = Result<Vec<Preemption>, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn console_preemptions<'life0, 'life1, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
) -> Pin<Box<dyn Future<Output = Result<Vec<Preemption>, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Every running cog, including ones WeftOS did not load (UDP 5006 contention: any listener on the Seed competes for the feed).
Source§fn provides(&self) -> Vec<Capability>
fn provides(&self) -> Vec<Capability>
Source§fn admit<'life0, 'life1, 'async_trait>(
&'life0 self,
w: &'life1 VerifiedWorkload,
) -> Pin<Box<dyn Future<Output = Result<Admission, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn admit<'life0, 'life1, 'async_trait>(
&'life0 self,
w: &'life1 VerifiedWorkload,
) -> Pin<Box<dyn Future<Output = Result<Admission, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
w? Reserves nothing it cannot undo.Source§fn load<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
w: &'life1 VerifiedWorkload,
cfg: &'life2 WorkloadConfig,
) -> Pin<Box<dyn Future<Output = Result<InstanceHandle, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn load<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
w: &'life1 VerifiedWorkload,
cfg: &'life2 WorkloadConfig,
) -> Pin<Box<dyn Future<Output = Result<InstanceHandle, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn adopt<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
w: &'life2 VerifiedWorkload,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn adopt<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
w: &'life2 VerifiedWorkload,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
stop / unload work again; it starts and
changes nothing on the device.Source§fn start<'life0, 'life1, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn start<'life0, 'life1, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn stop<'life0, 'life1, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
_grace: Duration,
) -> Pin<Box<dyn Future<Output = Result<RunEvidence, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn stop<'life0, 'life1, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
_grace: Duration,
) -> Pin<Box<dyn Future<Output = Result<RunEvidence, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
grace) and return evidence.Source§fn unload<'life0, 'async_trait>(
&'life0 self,
h: InstanceHandle,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn unload<'life0, 'async_trait>(
&'life0 self,
h: InstanceHandle,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn status<'life0, 'life1, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
) -> Pin<Box<dyn Future<Output = InstanceStatus> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn status<'life0, 'life1, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
) -> Pin<Box<dyn Future<Output = InstanceStatus> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn control_mode(&self) -> ControlMode
fn control_mode(&self) -> ControlMode
Source§fn link_security(&self) -> LinkSecurity
fn link_security(&self) -> LinkSecurity
Pinned.Source§fn preempt<'life0, 'life1, 'async_trait>(
&'life0 self,
p: &'life1 Preemption,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn preempt<'life0, 'life1, 'async_trait>(
&'life0 self,
p: &'life1 Preemption,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn resume<'life0, 'life1, 'async_trait>(
&'life0 self,
p: &'life1 Preemption,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn resume<'life0, 'life1, 'async_trait>(
&'life0 self,
p: &'life1 Preemption,
) -> Pin<Box<dyn Future<Output = Result<(), RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn console<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
command: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<RunEvidence, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn console<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
h: &'life1 InstanceHandle,
command: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<RunEvidence, RuntimeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
[console] limits apply). command must be
one of the cog’s [console].allowed_commands.Source§fn staged_payload<'life0, 'life1, 'async_trait>(
&'life0 self,
_h: &'life1 InstanceHandle,
) -> Pin<Box<dyn Future<Output = Option<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn staged_payload<'life0, 'life1, 'async_trait>(
&'life0 self,
_h: &'life1 InstanceHandle,
) -> Pin<Box<dyn Future<Output = Option<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
None:
not run from a file this node can read (a container image is tagged
by the binary’s BLAKE3; a remote device holds its own copy).Auto Trait Implementations§
impl !Freeze for SeedApiRuntime
impl !RefUnwindSafe for SeedApiRuntime
impl !UnwindSafe for SeedApiRuntime
impl Send for SeedApiRuntime
impl Sync for SeedApiRuntime
impl Unpin for SeedApiRuntime
impl UnsafeUnpin for SeedApiRuntime
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more