// Jackson Coxson #pragma once #include #include #include #include #include #include namespace IdeviceFFI { using MisagentPtr = std::unique_ptr>; class Misagent { public: // Factory: connect via Provider static Result connect(Provider& provider); // Factory: connect via RSD tunnel static Result connect_rsd(AdapterHandle* adapter, RsdHandshakeHandle* handshake); // Ops Result install(const uint8_t* profile_data, size_t profile_len); Result remove(const std::string& profile_id); Result>, FfiError> copy_all(); // RAII / moves ~Misagent() noexcept = default; Misagent(Misagent&&) noexcept = default; Misagent& operator=(Misagent&&) noexcept = default; Misagent(const Misagent&) = delete; Misagent& operator=(const Misagent&) = delete; MisagentClientHandle* raw() const noexcept { return handle_.get(); } static Misagent adopt(MisagentClientHandle* h) noexcept { return Misagent(h); } private: explicit Misagent(MisagentClientHandle* h) noexcept : handle_(h) {} MisagentPtr handle_{}; }; } // namespace IdeviceFFI