getMessage(), 0, 200); } } /** @param array $record */ private static function render(array $record): string { $status = self::textField($record, 'status'); $header = 'Canary interpretation reconstructed from checkpoint receipts -- ' . $status . " (JSON):\n"; $minimal = array( 'status' => $status, 'source' => self::textField($record, 'source'), 'session_key' => self::textField($record, 'session_key'), 'plugin_version' => self::textField($record, 'plugin_version'), 'missing_required_evidence' => is_array($record['missing_required_evidence'] ?? null) ? $record['missing_required_evidence'] : array(), 'interpretation' => is_array($record['interpretation'] ?? null) ? $record['interpretation'] : null, 'reduced' => 'over_budget', ); foreach (array($record, $minimal) as $candidate) { $line = json_encode(array(self::INTERPRETATION_KEY => $candidate)); if (is_string($line) && strlen($header) + strlen($line) <= self::MAX_CANARY_RECEIPT_INTERPRETATION_BYTES) { return $header . $line; } } return $header . 'The receipt interpretation record could not be encoded for this payload.'; } /** @param array $record */ private static function textField(array $record, string $field): string { $value = $record[$field] ?? null; return is_scalar($value) ? (string)$value : ''; } }