verifiedNativeInstallRequestFromStage function
Future<VerifiedNativeInstallRequest>
verifiedNativeInstallRequestFromStage({
- required UpdateClient session,
- required UpdateStageResult stageResult,
- required PersistedInstallTransaction receipt,
Claims a staged result and receipt for exactly one native dispatch.
Implementation
Future<VerifiedNativeInstallRequest> verifiedNativeInstallRequestFromStage({
required UpdateClient session,
required UpdateStageResult stageResult,
required PersistedInstallTransaction receipt,
}) async {
final retained = await claimRetainedVerifiedStageForDispatch(
stageResult: stageResult,
expectedPackageId: receipt.expectedPackageId,
ownerToken: session.ownerTokenForDispatch,
generation: stageResult.generationForDispatch,
);
final descriptor = stageResult.descriptor;
if (descriptor.packageId != receipt.expectedPackageId ||
descriptor.version != receipt.updateVersion ||
descriptor.buildNumber != receipt.updateBuildNumber ||
descriptor.platform != receipt.platform ||
descriptor.channel != receipt.channel) {
throw StateError(
"Persisted install transaction does not match the signed release "
"descriptor.",
);
}
if (retained.stagingPath != receipt.stagingPath ||
retained.state.markerSha256 != receipt.stageProvenanceSha256 ||
stageResult.stageProvenanceSha256 != receipt.stageProvenanceSha256 ||
retained.state.provenance.packageId != descriptor.packageId ||
retained.state.provenance.artifactSha256 != descriptor.artifact.sha256) {
throw StateError(
"Persisted install transaction does not match the verified stage.",
);
}
return _VerifiedNativeInstallRequest(
stagingPath: receipt.stagingPath,
expectedPackageId: receipt.expectedPackageId,
updateVersion: receipt.updateVersion,
updateBuildNumber: receipt.updateBuildNumber,
platform: receipt.platform,
channel: receipt.channel,
expectedArtifactSha256: descriptor.artifact.sha256,
stageProvenanceSha256: receipt.stageProvenanceSha256,
transactionId: receipt.transactionId,
);
}