UNPKG

@api3/contracts

Version:

Contracts through which API3 services are delivered

81 lines 3.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dappSchema = exports.chainAlias = exports.aliasSchema = exports.chainSchema = exports.hardhatConfigOverrides = exports.chainProvidersSchema = exports.chainProviderSchema = exports.chainExplorerSchema = exports.chainExplorerAPISchema = exports.chainExplorerAPIKeySchema = void 0; const zod_1 = require("zod"); const chains_1 = require("./generated/chains"); const arrays_1 = require("./utils/arrays"); exports.chainExplorerAPIKeySchema = zod_1.z.object({ required: zod_1.z.boolean(), hardhatEtherscanAlias: zod_1.z.string().optional(), }); exports.chainExplorerAPISchema = zod_1.z.object({ key: exports.chainExplorerAPIKeySchema, url: zod_1.z.string().url(), }); exports.chainExplorerSchema = zod_1.z.object({ api: exports.chainExplorerAPISchema.optional(), browserUrl: zod_1.z.string().url(), }); exports.chainProviderSchema = zod_1.z .object({ alias: zod_1.z.string(), homepageUrl: zod_1.z.string().url().optional(), rpcUrl: zod_1.z.string().url().optional(), }) .refine( // Either rpcUrl or homepageUrl must be present (provider) => provider.rpcUrl ?? provider.homepageUrl, { message: 'rpcUrl or homepageUrl is required' }); exports.chainProvidersSchema = zod_1.z.array(exports.chainProviderSchema).superRefine((providers, ctx) => { if (!providers.some((p) => p.alias === 'default')) { ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, path: ['providers', 'alias'], message: "a provider with alias 'default' is required", }); } if (!(0, arrays_1.hasUniqueEntries)(providers, 'alias')) { ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, path: ['providers', 'alias'], message: "cannot contain duplicate 'alias' values", }); } providers.forEach((p) => { if ((p.alias === 'default' || p.alias === 'public') && !p.rpcUrl) { ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, path: ['providers', 'rpcUrl'], message: "providers with alias 'default' or 'public' must also have an 'rpcUrl'", }); } }); }); exports.hardhatConfigOverrides = zod_1.z.object({ networks: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).optional(), }); exports.chainSchema = zod_1.z.object({ alias: zod_1.z.string(), decimals: zod_1.z.number().positive(), explorer: exports.chainExplorerSchema, hardhatConfigOverrides: exports.hardhatConfigOverrides.optional(), // Most chain IDs are numbers, but to remain flexible this has purposefully been kept as a string // It can be adjusted if we want to support chains that don't use numbers. // See: https://github.com/api3dao/chains/pull/1#discussion_r1161102392 id: zod_1.z.string().regex(/^\d+$/), name: zod_1.z.string(), providers: exports.chainProvidersSchema, skipProviderCheck: zod_1.z.boolean().optional(), // For chains not supporting dAPIs symbol: zod_1.z.string().min(1).max(6), testnet: zod_1.z.boolean(), }); exports.aliasSchema = zod_1.z.string().regex(/^[\da-z-]+$/); exports.chainAlias = exports.aliasSchema.refine((value) => chains_1.CHAINS.some((chain) => chain.alias === value), (value) => ({ message: `Invalid chain alias: ${value}` })); exports.dappSchema = zod_1.z.strictObject({ aliases: zod_1.z.record(exports.aliasSchema, zod_1.z.strictObject({ chains: zod_1.z.array(exports.chainAlias), title: zod_1.z.string(), description: zod_1.z.string().optional(), })), homepageUrl: zod_1.z.string().url().optional(), }); //# sourceMappingURL=types.js.map