summarize($data[$field]); } if (is_array($data[$field])) { $data[$field] = json_encode( $this->sanitize($data[$field]), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR ); } } $data['created_at'] = gmdate('Y-m-d H:i:s'); $this->resource->getConnection()->insert( $this->resource->getTableName('esun_lingxing_sync_log'), $data ); } private function summarize(mixed $payload): array { $sanitized = is_array($payload) ? $this->sanitize($payload) : $payload; $encoded = json_encode( $sanitized, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR ); $summary = [ '_summary' => 'Success payload omitted by retention policy.', 'payload_sha256' => hash('sha256', $encoded), 'payload_bytes' => strlen($encoded), ]; if (!is_array($sanitized)) { return $summary; } $summary['top_level_keys'] = array_values(array_map('strval', array_keys($sanitized))); foreach ($sanitized as $key => $value) { $normalized = strtolower((string)$key); if (in_array($normalized, self::SUMMARY_SCALAR_KEYS, true) && is_scalar($value)) { $summary[$key] = $value; } elseif (is_array($value)) { $summary[$key . '_count'] = count($value); } } return $summary; } private function sanitize(array $data): array { foreach ($data as $key => $value) { $normalized = strtolower((string)$key); if (in_array($normalized, self::SENSITIVE_KEYS, true)) { $data[$key] = '[REDACTED]'; } elseif (is_array($value)) { $data[$key] = $this->sanitize($value); } } return $data; } }