SeoDomFirstRuntimeArtifact.verify constructor

SeoDomFirstRuntimeArtifact.verify({
  1. required SeoDomFirstApplicationRuntime reference,
  2. required SeoDomFirstRuntimeManifest manifest,
  3. required String javascript,
})

Verifies identity and file consistency for a build-owned artifact.

The manifest hash detects stale, partial or accidentally changed files; it does not authenticate a coordinated replacement of both files. The build directory remains trusted deployment input.

Implementation

factory SeoDomFirstRuntimeArtifact.verify({
  required SeoDomFirstApplicationRuntime reference,
  required SeoDomFirstRuntimeManifest manifest,
  required String javascript,
}) {
  if (!isValidSeoApplicationRuntimeId(reference.id)) {
    throw StateError('Invalid application runtime id "${reference.id}".');
  }
  if (manifest.schemaVersion != seoDomFirstRuntimeManifestSchema) {
    throw StateError(
      'Unsupported runtime manifest schema ${manifest.schemaVersion} '
      'for "${reference.id}".',
    );
  }
  if (manifest.id != reference.id || manifest.kind != reference.kind) {
    throw StateError(
      'Runtime manifest identity does not match "${reference.id}" '
      '(${reference.kind}).',
    );
  }
  if (manifest.dartVersion.isEmpty ||
      manifest.dartVersion.length > 64 ||
      manifest.dartVersion.runes.any(_isControlCodePoint)) {
    throw StateError('Invalid Dart version in runtime "${reference.id}".');
  }
  if (!_sha256.hasMatch(manifest.sha256)) {
    throw StateError('Invalid SHA-256 in runtime "${reference.id}".');
  }
  if (manifest.bytes < 1 ||
      manifest.bytes > seoDomFirstRuntimeMaxBytes ||
      manifest.gzipBytes < 1 ||
      manifest.gzipBytes > seoDomFirstRuntimeMaxGzipBytes) {
    throw StateError('Runtime "${reference.id}" exceeds its size budget.');
  }
  final encoded = utf8.encode(javascript);
  if (encoded.length > seoDomFirstRuntimeMaxBytes) {
    throw StateError(
      'Runtime "${reference.id}" exceeds its uncompressed size budget.',
    );
  }
  final actualHash = sha256.convert(encoded).toString();
  final actualGzipBytes = GZipCodec(level: 9).encode(encoded).length;
  if (manifest.bytes != encoded.length ||
      manifest.gzipBytes != actualGzipBytes ||
      manifest.sha256 != actualHash) {
    throw StateError('Runtime "${reference.id}" failed integrity checks.');
  }
  final lower = javascript.toLowerCase();
  if (lower.contains('</script') ||
      javascript.contains('<!--') ||
      _eval.hasMatch(javascript) ||
      _functionConstructor.hasMatch(javascript)) {
    throw StateError('Runtime "${reference.id}" contains forbidden code.');
  }
  return SeoDomFirstRuntimeArtifact._(
    reference: reference,
    manifest: manifest,
    javascript: javascript,
  );
}