@@ -439,6 +439,39 @@ function parseOpenClawPackageSpecVersion(spec: string): string {
|
439 | 439 | return resolveOpenClawRegistryVersion(value) || ""; |
440 | 440 | } |
441 | 441 | |
| 442 | +function readString(value: unknown): string { |
| 443 | +return typeof value === "string" ? value : ""; |
| 444 | +} |
| 445 | + |
| 446 | +function isRecord(value: unknown): value is Record<string, unknown> { |
| 447 | +return value !== null && typeof value === "object" && !Array.isArray(value); |
| 448 | +} |
| 449 | + |
| 450 | +export function parseRegistryPackageMetadata(raw: string): { |
| 451 | +gitHead: string; |
| 452 | +tarball: string; |
| 453 | +version: string; |
| 454 | +} { |
| 455 | +const value = raw.trim(); |
| 456 | +if (!value) { |
| 457 | +return { gitHead: "", tarball: "", version: "" }; |
| 458 | +} |
| 459 | +try { |
| 460 | +const parsed = JSON.parse(value) as unknown; |
| 461 | +if (!isRecord(parsed)) { |
| 462 | +return { gitHead: "", tarball: "", version: "" }; |
| 463 | +} |
| 464 | +const dist = isRecord(parsed.dist) ? parsed.dist : {}; |
| 465 | +return { |
| 466 | +gitHead: readString(parsed.gitHead), |
| 467 | +tarball: readString(parsed["dist.tarball"]) || readString(dist.tarball), |
| 468 | +version: readString(parsed.version), |
| 469 | +}; |
| 470 | +} catch { |
| 471 | +return { gitHead: "", tarball: "", version: "" }; |
| 472 | +} |
| 473 | +} |
| 474 | + |
442 | 475 | export class NpmUpdateSmoke { |
443 | 476 | private auth: ProviderAuth; |
444 | 477 | private windowsAuth: ProviderAuth; |
@@ -773,20 +806,7 @@ export class NpmUpdateSmoke {
|
773 | 806 | if (!output) { |
774 | 807 | return { gitHead: "", tarball: "", version: "" }; |
775 | 808 | } |
776 | | -try { |
777 | | -const parsed = JSON.parse(output) as { |
778 | | -dist?: { tarball?: string }; |
779 | | -gitHead?: string; |
780 | | -version?: string; |
781 | | -}; |
782 | | -return { |
783 | | -gitHead: parsed.gitHead ?? "", |
784 | | -tarball: parsed.dist?.tarball ?? "", |
785 | | -version: parsed.version ?? "", |
786 | | -}; |
787 | | -} catch { |
788 | | -return { gitHead: "", tarball: "", version: "" }; |
789 | | -} |
| 809 | +return parseRegistryPackageMetadata(output); |
790 | 810 | } |
791 | 811 | |
792 | 812 | private async runSameGuestUpdates(): Promise<void> { |
|