xworkmate-app/lib/runtime/gateway_runtime_bootstrap.dart
2026-04-10 15:36:05 +08:00

44 lines
1.1 KiB
Dart

import 'dart:convert';
class BridgeBootstrapEnvelope {
const BridgeBootstrapEnvelope({
required this.ticket,
required this.bridgeOrigin,
});
final String ticket;
final String bridgeOrigin;
}
BridgeBootstrapEnvelope? decodeBridgeBootstrapEnvelope(String rawInput) {
final trimmed = rawInput.trim();
if (trimmed.isEmpty || !trimmed.startsWith('{')) {
return null;
}
try {
final json = jsonDecode(trimmed) as Map<String, dynamic>;
final scheme = _stringValue(json['scheme']);
if (scheme.trim() != 'xworkmate-bridge-bootstrap') {
return null;
}
final ticket = _stringValue(json['ticket']);
final bridge = _stringValue(json['bridge']);
if (ticket.trim().isEmpty || bridge.trim().isEmpty) {
return null;
}
return BridgeBootstrapEnvelope(
ticket: ticket.trim(),
bridgeOrigin: bridge.trim(),
);
} catch (_) {
return null;
}
}
bool isBridgeBootstrapShortCode(String rawInput) {
final trimmed = rawInput.trim();
return RegExp(r'^[A-Z0-9]{6,8}$', caseSensitive: false).hasMatch(trimmed);
}
String _stringValue(Object? value) => value?.toString().trim() ?? '';