fromBundle method

AppMetadata fromBundle(
  1. McpBundle bundle,
  2. BundleUriResolver uriResolver
)

FR-META-003 — extract metadata from a bundle manifest.

Implementation

AppMetadata fromBundle(McpBundle bundle, BundleUriResolver uriResolver) {
  String? resolveUri(String? raw) {
    if (raw == null) return null;
    if (!raw.startsWith('bundle://')) return raw;
    try {
      return uriResolver.resolve(raw).target.toString();
    } catch (e) {
      _logger.warn('metadata.bundle.uri.miss', {'uri': raw});
      return raw;
    }
  }

  final m = bundle.manifest;
  return AppMetadata(
    appId: m.id,
    sourceKind: 'localBundle',
    name: m.name,
    version: m.version,
    description: m.description,
    iconUri: resolveUri(m.icon),
    splashUri: resolveUri(m.splash?.image),
    screenshots:
        m.screenshots.map((s) => resolveUri(s) ?? s).toList(growable: false),
    category: m.category?.name,
    publisher: m.publisher?.name,
    homepage: m.homepage,
    privacyPolicy: m.privacyPolicy,
    extra: m.metadata,
  );
}