Files
NetMesh/domain/portForwardingPersistence.ts
zhaolei 3c72efcb7f
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
[Init] Initial commit - NetMesh terminal manager
2026-09-13 18:24:01 +08:00

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;
});
}