Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import type { PortForwardingRule } from './models/portForwarding';
|
|
|
|
/**
|
|
* Fields that describe a rule's configuration / user metadata.
|
|
* Runtime phase (`status`, `error`) is owned by the main-process registry
|
|
* and must not be treated as durable storage.
|
|
*/
|
|
export type PersistedPortForwardingRule = Omit<PortForwardingRule, 'status' | 'error'> & {
|
|
status: 'inactive';
|
|
error?: undefined;
|
|
};
|
|
|
|
/** Strip live runtime fields before writing localStorage / sync payloads. */
|
|
export function toPersistedPortForwardingRule(
|
|
rule: PortForwardingRule,
|
|
): PersistedPortForwardingRule {
|
|
return {
|
|
...rule,
|
|
status: 'inactive',
|
|
error: undefined,
|
|
};
|
|
}
|
|
|
|
export function toPersistedPortForwardingRules(
|
|
rules: readonly PortForwardingRule[],
|
|
): PersistedPortForwardingRule[] {
|
|
return rules.map(toPersistedPortForwardingRule);
|
|
}
|
|
|
|
/**
|
|
* Migrate legacy stored rules that still carry active/connecting phases.
|
|
* Historical `error` is kept as a disposable diagnostic until a successful
|
|
* backend snapshot proves the rule inactive (or a live connection overlays it).
|
|
*/
|
|
export function migratePortForwardingRulesFromStorage(
|
|
rules: readonly PortForwardingRule[],
|
|
): PortForwardingRule[] {
|
|
return rules.map((rule) => {
|
|
if (rule.status === 'active' || rule.status === 'connecting') {
|
|
return {
|
|
...rule,
|
|
status: 'inactive' as const,
|
|
error: undefined,
|
|
};
|
|
}
|
|
return rule;
|
|
});
|
|
}
|