-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathdevnet-schema.js
More file actions
93 lines (83 loc) · 2.7 KB
/
devnet-schema.js
File metadata and controls
93 lines (83 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
* Zod schema for validating DevNet info exports.
*
* This schema ensures strict type checking and validates that all required
* fields are present with correct types. It's used by CI and examples to
* validate the exported devnet-info.json file.
*/
import { z } from "zod";
const YugabyteInfo = z.object({
web_ui_url: z.string().url(),
master_rpc_port: z.number().int().positive(),
ysql_port: z.number().int().positive(),
});
const CurioInfo = z.object({
provider_id: z.number().int().positive(),
eth_addr: z.string().startsWith("0x"),
native_addr: z.string().min(1),
pdp_service_url: z.string().url(),
container_id: z.string().min(1),
container_name: z.string().min(1),
is_approved: z.boolean(),
is_endorsed: z.boolean(),
yugabyte: YugabyteInfo,
});
const ContractsInfo = z.object({
multicall3_addr: z.string().startsWith("0x"),
mockusdfc_addr: z.string().startsWith("0x"),
fwss_service_proxy_addr: z.string().startsWith("0x"),
fwss_state_view_addr: z.string().startsWith("0x"),
fwss_impl_addr: z.string().startsWith("0x"),
pdp_verifier_proxy_addr: z.string().startsWith("0x"),
pdp_verifier_impl_addr: z.string().startsWith("0x"),
service_provider_registry_proxy_addr: z.string().startsWith("0x"),
service_provider_registry_impl_addr: z.string().startsWith("0x"),
filecoin_pay_v1_addr: z.string().startsWith("0x"),
endorsements_addr: z.string().startsWith("0x"),
session_key_registry_addr: z.string().startsWith("0x"),
});
const UserInfo = z.object({
name: z.string().regex(/^USER_\d+$/),
evm_addr: z.string().startsWith("0x"),
native_addr: z.string().min(1),
private_key_hex: z.string().startsWith("0x"),
});
const LotusInfo = z.object({
host_rpc_url: z.string().url(),
container_id: z.string().min(1),
container_name: z.string().min(1),
});
const LotusMinerInfo = z.object({
container_id: z.string().min(1),
container_name: z.string().min(1),
api_port: z.number().int().positive(),
});
const DevnetInfoV1 = z.object({
run_id: z.string().min(1),
start_time: z.string(),
startup_duration: z.string().min(1),
users: z.array(UserInfo).min(1),
contracts: ContractsInfo,
lotus: LotusInfo,
lotus_miner: LotusMinerInfo,
pdp_sps: z.array(CurioInfo).min(1),
});
export const VersionedDevnetInfo = z.object({
version: z.literal(1),
info: DevnetInfoV1,
});
/**
* Validate DevNet info against schema.
* @param {object} data - The parsed JSON data to validate
* @returns {object} The validated data if successful
* @throws {Error} If validation fails
*/
export function validateDevnetInfo(data) {
try {
return VersionedDevnetInfo.parse(data);
} catch (error) {
throw new Error(
`DevNet info schema validation failed: ${error.message}`
);
}
}