@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
59 lines • 1.91 kB
JavaScript
import { z } from "zod";
/**
* Zod schema for legacy string address format (backward compatibility)
* Migrates old string-only addresses to the new format with metadata
*/
export const LegacyStringAddressSchema = z.string().transform((address) => ({
address,
lastUsed: Date.now(),
ensName: undefined,
}));
/**
* Zod schema for correct recent address format
*/
export const CorrectAddressSchema = z.object({
address: z.string(),
lastUsed: z.number(),
ensName: z.string().optional(),
});
/**
* Zod schema for corrupted nested address format
* Handles data corruption from previous migration issues
* Expected corrupted format: { address: { address: string, lastUsed?: number, ensName?: string }, index?: number }
*/
export const CorruptedNestedAddressSchema = z
.object({
address: z.object({
address: z.string(),
lastUsed: z.number().optional(),
ensName: z.string().optional(),
}),
index: z.number().optional(),
})
.transform((entry) => ({
address: entry.address.address,
lastUsed: entry.address.lastUsed ?? Date.now(),
ensName: entry.address.ensName,
}));
/**
* Union schema for all recent address formats
* Supports: legacy strings, correct format, and corrupted nested format
*/
export const RecentAddressSchema = z.union([
LegacyStringAddressSchema,
CorrectAddressSchema,
CorruptedNestedAddressSchema,
]);
/**
* Schema for array of recent addresses with sanitization
* Filters out invalid entries while preserving valid addresses
*/
export const RecentAddressesArraySchema = z.array(z.unknown()).transform(entries => {
return entries
.map(entry => {
const result = RecentAddressSchema.safeParse(entry);
return result.success ? result.data : null;
})
.filter((entry) => entry !== null && entry.address.length > 0);
});
//# sourceMappingURL=recentAddresses.js.map