Documentation
¶
Overview ¶
Package hostapps connects Redeven's application catalog and owned sessions to native macOS applications or installed GIO and Xpra runtimes. Applications execute as the Runtime user.
Index ¶
- Constants
- Variables
- func LaunchFailureCode(code string) string
- type AddRequest
- type Application
- type Availability
- type Backend
- type Catalog
- type LaunchDiagnostic
- type LaunchRequest
- type Manager
- func (m *Manager) Add(ctx context.Context, req AddRequest) error
- func (m *Manager) CancelSetup(owner, id string) (SetupStatus, error)
- func (m *Manager) Catalog(ctx context.Context, owner, locale string) (Catalog, error)
- func (m *Manager) ClientAssets(owner, digest string) *nativeapps.ClientAssets
- func (m *Manager) Close() error
- func (m *Manager) CompleteSetup(owner, id string) (SetupStatus, error)
- func (m *Manager) Detach(ctx context.Context, owner, id string) error
- func (m *Manager) ForForward(id string) (Session, string, bool)
- func (m *Manager) ForTarget(target string) (Session, string, bool)
- func (m *Manager) Launch(ctx context.Context, owner string, req LaunchRequest) (Session, error)
- func (m *Manager) Password(id string) string
- func (m *Manager) Permissions(ctx context.Context, permission string) error
- func (m *Manager) PrepareBrowser(ctx context.Context, owner, installationID, nativeHost string) (Application, error)
- func (m *Manager) Quit(ctx context.Context, owner string, req QuitRequest) error
- func (m *Manager) Running(ctx context.Context, owner string) ([]RunningApplication, error)
- func (m *Manager) Sessions(owner string) []Session
- func (m *Manager) SetupPlan(ctx context.Context, _ string) (SetupTransferPlan, error)
- func (m *Manager) SetupStatus(owner string) (SetupStatus, error)
- func (m *Manager) StartSetup(owner, requestID, source string, size int64, digest string) (SetupStatus, error)
- func (m *Manager) Stop(ctx context.Context, owner, id string) error
- func (m *Manager) Terminate(ctx context.Context, owner string, req QuitRequest) error
- func (m *Manager) WatchSetup() (<-chan struct{}, func(), error)
- func (m *Manager) WriteSetup(owner, id string, offset int64, data []byte) (SetupStatus, error)
- type Presentation
- type QuitRequest
- type RunningApplication
- type Session
- type SetupPackage
- type SetupStatus
- type SetupTransferPlan
Constants ¶
const ClientAssetsPath = "/_redeven_proxy/host-application-assets/"
ClientAssetsPath is independent of the ephemeral sharing route. Only the authenticated appserver serves this namespace, never a port-forward backend.
Variables ¶
var ( ErrViewerPreparation = errors.New("host application viewer preparation failed") ErrNotFound = errors.New("application or session not found") ErrInvalid = errors.New("invalid application request") ErrQuitRejected = errors.New("application declined the quit request") ErrLimit = errors.New("host application session limit reached") )
Functions ¶
func LaunchFailureCode ¶
LaunchFailureCode maps released native diagnostics to product recovery actions. Unknown diagnostics stay failures; they never imply an application exit.
Types ¶
type AddRequest ¶
type Application ¶
type Availability ¶
type Availability struct {
Backend string `json:"backend,omitempty"`
NativeReady bool `json:"native_ready,omitempty"`
Permissions map[string]bool `json:"permissions,omitempty"`
Supported bool `json:"supported"`
Ready bool `json:"ready"`
Reason string `json:"reason,omitempty"`
Version string `json:"version,omitempty"`
Requirements []string `json:"requirements,omitempty"`
}
type Backend ¶
type Backend interface {
PrepareBrowser(context.Context, string, string, string) (Application, error)
ClientAssets(string, string) *nativeapps.ClientAssets
SetupStatus(string) (SetupStatus, error)
WatchSetup() (<-chan struct{}, func(), error)
SetupPlan(context.Context, string) (SetupTransferPlan, error)
StartSetup(string, string, string, int64, string) (SetupStatus, error)
CancelSetup(string, string) (SetupStatus, error)
WriteSetup(string, string, int64, []byte) (SetupStatus, error)
CompleteSetup(string, string) (SetupStatus, error)
Catalog(context.Context, string, string) (Catalog, error)
Sessions(string) []Session
Launch(context.Context, string, LaunchRequest) (Session, error)
Running(context.Context, string) ([]RunningApplication, error)
Quit(context.Context, string, QuitRequest) error
Terminate(context.Context, string, QuitRequest) error
Detach(context.Context, string, string) error
Stop(context.Context, string, string) error
Add(context.Context, AddRequest) error
ForTarget(string) (Session, string, bool)
ForForward(string) (Session, string, bool)
Password(string) string
Permissions(context.Context, string) error
}
type Catalog ¶
type Catalog struct {
Running []RunningApplication `json:"running,omitempty"`
Availability Availability `json:"availability"`
Applications []Application `json:"applications"`
Sessions []Session `json:"sessions"`
}
type LaunchDiagnostic ¶
type LaunchDiagnostic struct {
Stage string `json:"stage,omitempty"`
Code string `json:"code,omitempty"`
ExitCode *int `json:"exit_code,omitempty"`
}
LaunchDiagnostic contains bounded protocol identifiers and an observed exit status. Child output, environment and application contents are never included.
type LaunchRequest ¶
type LaunchRequest struct {
Mode string `json:"mode,omitempty"`
ApplicationID string `json:"application_id"`
Locale string `json:"locale"`
Presentation Presentation `json:"presentation"`
}
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
func (*Manager) CancelSetup ¶
func (m *Manager) CancelSetup(owner, id string) (SetupStatus, error)
func (*Manager) ClientAssets ¶
func (m *Manager) ClientAssets(owner, digest string) *nativeapps.ClientAssets
ClientAssets selects public bytes for an authenticated owner. The caller must separately authorize session documents and live control, even on cache hits.
func (*Manager) CompleteSetup ¶
func (m *Manager) CompleteSetup(owner, id string) (SetupStatus, error)
func (*Manager) ForForward ¶
ForForward keeps terminal presentation addressable after the network forward is released. Exact forward identity cannot reclaim a reused loopback address.
func (*Manager) Permissions ¶
func (*Manager) PrepareBrowser ¶
func (m *Manager) PrepareBrowser(ctx context.Context, owner, installationID, nativeHost string) (Application, error)
PrepareBrowser creates only a fixed, product-owned desktop entry and profile. Launch, graphical preparation, reconnection and shutdown use the ordinary host-application owner. Preparing this entry never starts a browser.
func (*Manager) Running ¶
Running is a lightweight OS snapshot, independent of viewer/session lifetime.
func (*Manager) SetupStatus ¶
func (m *Manager) SetupStatus(owner string) (SetupStatus, error)
func (*Manager) StartSetup ¶
func (*Manager) WatchSetup ¶
func (*Manager) WriteSetup ¶
type Presentation ¶
type Presentation struct {
NoWindow string `json:"noWindow,omitempty"`
NativePictureHint string `json:"nativePictureHint,omitempty"`
PictureUpgradeHint string `json:"pictureUpgradeHint,omitempty"`
PlanStale string `json:"planStale,omitempty"`
PackageUnsupported string `json:"packageUnsupported,omitempty"`
InputUnsupported string `json:"inputUnsupported,omitempty"`
InputUnsupportedHint string `json:"inputUnsupportedHint,omitempty"`
ViewerPreparationFailed string `json:"viewerPreparationFailed,omitempty"`
ViewerPreparationHint string `json:"viewerPreparationHint,omitempty"`
Keyboard string `json:"keyboard,omitempty"`
TouchHelp string `json:"touchHelp,omitempty"`
TouchHelpTitle string `json:"touchHelpTitle,omitempty"`
TouchHelpDescription string `json:"touchHelpDescription,omitempty"`
InputVersionUnsupported string `json:"inputVersionUnsupported,omitempty"`
InputVersionHint string `json:"inputVersionHint,omitempty"`
ShellTheme string `json:"shellTheme,omitempty"`
Quit string `json:"quit,omitempty"`
QuitTitle string `json:"quitTitle,omitempty"`
QuitDescription string `json:"quitDescription,omitempty"`
QuitPending string `json:"quitPending,omitempty"`
QuitFailed string `json:"quitFailed,omitempty"`
Cancel string `json:"cancel,omitempty"`
Checking string `json:"checking,omitempty"`
ApplicationExited string `json:"applicationExited,omitempty"`
ApplicationExitedHint string `json:"applicationExitedHint,omitempty"`
WindowsClosed string `json:"windowsClosed,omitempty"`
WindowsClosedHint string `json:"windowsClosedHint,omitempty"`
SharingStopped string `json:"sharingStopped,omitempty"`
SharingStoppedHint string `json:"sharingStoppedHint,omitempty"`
EndedHint string `json:"endedHint,omitempty"`
SessionMissing string `json:"sessionMissing,omitempty"`
SessionMissingHint string `json:"sessionMissingHint,omitempty"`
AccessRequired string `json:"accessRequired,omitempty"`
AccessHint string `json:"accessHint,omitempty"`
Dismiss string `json:"dismiss,omitempty"`
PermissionRequired string `json:"permissionRequired,omitempty"`
PermissionHint string `json:"permissionHint,omitempty"`
SessionHint string `json:"sessionHint,omitempty"`
SessionFailed string `json:"sessionFailed,omitempty"`
ReopenHint string `json:"reopenHint,omitempty"`
CaptureHint string `json:"captureHint,omitempty"`
Controls string `json:"controls,omitempty"`
PicturePixels string `json:"picturePixels,omitempty"`
Picture string `json:"picture,omitempty"`
PictureAuto string `json:"pictureAuto,omitempty"`
PictureClarity string `json:"pictureClarity,omitempty"`
PictureSmooth string `json:"pictureSmooth,omitempty"`
PictureData string `json:"pictureData,omitempty"`
PictureHint string `json:"pictureHint,omitempty"`
PictureBackendLimitHint string `json:"pictureBackendLimitHint,omitempty"`
PictureRenderResolution string `json:"pictureRenderResolution,omitempty"`
PictureLimited string `json:"pictureLimited,omitempty"`
PictureDisplayLimitHint string `json:"pictureDisplayLimitHint,omitempty"`
PictureDensityLimitHint string `json:"pictureDensityLimitHint,omitempty"`
PictureAdvanced string `json:"pictureAdvanced,omitempty"`
PictureResolution string `json:"pictureResolution,omitempty"`
PictureFrameRate string `json:"pictureFrameRate,omitempty"`
PictureActualRate string `json:"pictureActualRate,omitempty"`
PictureBandwidth string `json:"pictureBandwidth,omitempty"`
PictureTransport string `json:"pictureTransport,omitempty"`
PictureVideo string `json:"pictureVideo,omitempty"`
PictureImages string `json:"pictureImages,omitempty"`
VideoDecoding string `json:"videoDecoding,omitempty"`
VideoAvailable string `json:"videoAvailable,omitempty"`
HttpsPerformanceHint string `json:"httpsPerformanceHint,omitempty"`
OperationFailed string `json:"operationFailed,omitempty"`
WaitingHint string `json:"waitingHint,omitempty"`
Waiting string `json:"waiting,omitempty"`
Menu string `json:"menu,omitempty"`
Input string `json:"input,omitempty"`
Windows string `json:"windows,omitempty"`
CloseWindow string `json:"closeWindow,omitempty"`
Locale string `json:"locale"`
Connecting string `json:"connecting"`
Reconnecting string `json:"reconnecting"`
Disconnected string `json:"disconnected"`
ConnectionHint string `json:"connectionHint"`
Reconnect string `json:"reconnect"`
Starting string `json:"starting"`
Failed string `json:"failed"`
Ended string `json:"ended"`
Retry string `json:"retry"`
}
Presentation comes from the caller's explicit localized catalog. The window document renders these bounded strings as text, never as markup or script.
type QuitRequest ¶
type QuitRequest = RunningApplication
QuitRequest binds an explicit quit to the exact process generations displayed.
type RunningApplication ¶
type Session ¶
type Session struct {
ExistingApplication bool `json:"existing_application,omitempty"`
Backend string `json:"backend,omitempty"`
Mode string `json:"mode,omitempty"`
ID string `json:"id"`
Application Application `json:"application"`
State string `json:"state"`
EndReason string `json:"end_reason,omitempty"`
ErrorCode string `json:"error_code,omitempty"`
LaunchDiagnostic *LaunchDiagnostic `json:"launch_diagnostic,omitempty"`
StartedAt int64 `json:"started_at_unix_ms"`
Forward *portforward.ForwardSession `json:"forward,omitempty"`
Presentation Presentation `json:"presentation"`
}
type SetupPackage ¶
type SetupStatus ¶
type SetupStatus struct {
nativeapps.Status
Package *SetupPackage `json:"package,omitempty"`
}
type SetupTransferPlan ¶
type SetupTransferPlan = nativeapps.TransferPlan