@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
62 lines • 2.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RecentAddressesArraySchema = exports.RecentAddressSchema = exports.CorruptedNestedAddressSchema = exports.CorrectAddressSchema = exports.LegacyStringAddressSchema = void 0;
const zod_1 = require("zod");
/**
* Zod schema for legacy string address format (backward compatibility)
* Migrates old string-only addresses to the new format with metadata
*/
exports.LegacyStringAddressSchema = zod_1.z.string().transform((address) => ({
address,
lastUsed: Date.now(),
ensName: undefined,
}));
/**
* Zod schema for correct recent address format
*/
exports.CorrectAddressSchema = zod_1.z.object({
address: zod_1.z.string(),
lastUsed: zod_1.z.number(),
ensName: zod_1.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 }
*/
exports.CorruptedNestedAddressSchema = zod_1.z
.object({
address: zod_1.z.object({
address: zod_1.z.string(),
lastUsed: zod_1.z.number().optional(),
ensName: zod_1.z.string().optional(),
}),
index: zod_1.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
*/
exports.RecentAddressSchema = zod_1.z.union([
exports.LegacyStringAddressSchema,
exports.CorrectAddressSchema,
exports.CorruptedNestedAddressSchema,
]);
/**
* Schema for array of recent addresses with sanitization
* Filters out invalid entries while preserving valid addresses
*/
exports.RecentAddressesArraySchema = zod_1.z.array(zod_1.z.unknown()).transform(entries => {
return entries
.map(entry => {
const result = exports.RecentAddressSchema.safeParse(entry);
return result.success ? result.data : null;
})
.filter((entry) => entry !== null && entry.address.length > 0);
});
//# sourceMappingURL=recentAddresses.js.map