SeoDomFirstRuntimeArtifact.verify constructor
SeoDomFirstRuntimeArtifact.verify({
- required SeoDomFirstApplicationRuntime reference,
- required SeoDomFirstRuntimeManifest manifest,
- 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,
);
}