Skip to main content

Launch handler

import * as mod from "jsr:@nzip/lofi/recipes/launch-handler";

Opt-in helpers for installed-app launch handling and safe client reuse.

installInstalledAppLaunchConsumer

function

function installInstalledAppLaunchConsumer(options: InstallLaunchConsumerOptions): InstalledLaunchConsumer

Feature-detect and install one early launch-queue consumer.

The most recently installed consumer owns the queue. Disposing an older development/HMR generation cannot replace the newer consumer; disposing the current owner installs a no-op consumer so stale callbacks stop handling launches.

installInstalledAppLaunchQueueConsumer

function

function installInstalledAppLaunchQueueConsumer(options: InstallLaunchQueueConsumerOptions): InstalledLaunchConsumer

Feature-detect and install one raw launch-queue consumer.

This is the composition seam used by recipes such as file handling. The most recently installed consumer owns the queue, including across different lofi launch recipes. Treat every delivered parameter as untrusted input.

parseInstalledAppLaunchTarget

function

function parseInstalledAppLaunchTarget(targetURL: string | undefined, scopeValue: string | URL): InstalledAppLaunchResult

Parse one browser-provided launch URL against an exact origin and path scope.

InstalledAppLaunchIssue

type

type InstalledAppLaunchIssue =
| "missing-target"
| "invalid-target"
| "credentialed-target"
| "outside-origin"
| "outside-scope";

Stable rejection that never contains the received launch URL.

InstalledAppLaunchParameters

type

type InstalledAppLaunchParameters = {
targetURL?: string;
files?: readonly FileSystemHandle[];
};

Launch data delivered by a browser LaunchQueue.

InstalledAppLaunchQueue

type

type InstalledAppLaunchQueue = {
setConsumer(consumer: (parameters: InstalledAppLaunchParameters) => void): void;
};

Minimal browser launch-queue seam used by the recipe.

InstalledAppLaunchResult

type

type InstalledAppLaunchResult = { ok: true; target: InstalledAppLaunchTarget } | { ok: false; issue: InstalledAppLaunchIssue };

Accepted in-scope launch target or value-free rejection.

InstalledAppLaunchTarget

type

type InstalledAppLaunchTarget = {
url: string;
};

A parsed launch URL proven to stay inside the configured application scope.

InstalledLaunchConsumer

type

type InstalledLaunchConsumer = {
supported: boolean;
dispose(): void;
};

Result of feature-detecting and registering the launch consumer.

InstallLaunchConsumerOptions

type

type InstallLaunchConsumerOptions = {
scope: string | URL;
queue?: InstalledAppLaunchQueue;
onLaunch(target: InstalledAppLaunchTarget): void;
onRejected?(issue: InstalledAppLaunchIssue): void;
};

Options for registering one launch-queue consumer.

InstallLaunchQueueConsumerOptions

type

type InstallLaunchQueueConsumerOptions = {
queue?: InstalledAppLaunchQueue;
onLaunch(parameters: InstalledAppLaunchParameters): void;
};

Options for registering one raw browser launch-queue consumer.