@@ -35,12 +35,21 @@ const envSchema = z.object({
3535 CORS_ORIGINS : z . string ( ) . default ( "http://localhost:3002,http://localhost:3003,http://localhost:3004,http://localhost:3005,http://localhost:3000" ) ,
3636 DEPLOYER_PRIVATE_KEY : z . string ( ) . default ( "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" ) ,
3737 RPC_URL : z . string ( ) . default ( "http://127.0.0.1:8545" ) ,
38- BUNDLER_URL : z . string ( ) . default ( "http://127.0.0.1:4337" ) ,
3938 FACTORY_ADDRESS : z . string ( ) . optional ( ) ,
4039 EOA_VALIDATOR_ADDRESS : z . string ( ) . optional ( ) ,
4140 WEBAUTHN_VALIDATOR_ADDRESS : z . string ( ) . optional ( ) ,
4241 SESSION_VALIDATOR_ADDRESS : z . string ( ) . optional ( ) ,
4342 GUARDIAN_EXECUTOR_ADDRESS : z . string ( ) . optional ( ) ,
43+ // Prividium Mode Configuration
44+ PRIVIDIUM_MODE : z . string ( ) . transform ( ( v ) => v === "true" ) . default ( "false" ) ,
45+ PRIVIDIUM_PERMISSIONS_BASE_URL : z . string ( ) . optional ( ) ,
46+ PRIVIDIUM_RPC_PROXY_BASE_URL : z . string ( ) . optional ( ) ,
47+ PRIVIDIUM_ADMIN_PRIVATE_KEY : z . string ( ) . optional ( ) ,
48+ PRIVIDIUM_TEMPLATE_KEY : z . string ( ) . optional ( ) ,
49+ SSO_AUTH_SERVER_BASE_URL : z . string ( ) . optional ( ) ,
50+ // Rate Limiting Configuration
51+ RATE_LIMIT_DEPLOY_MAX : z . string ( ) . default ( "20" ) ,
52+ RATE_LIMIT_DEPLOY_WINDOW_MS : z . string ( ) . default ( "3600000" ) , // 1 hour
4453} ) ;
4554
4655// Parse and validate environment variables
5261 process . exit ( 1 ) ;
5362}
5463
64+ // Validate Prividium configuration when enabled
65+ if ( env . PRIVIDIUM_MODE ) {
66+ const missingPrividiumVars : string [ ] = [ ] ;
67+ if ( ! env . PRIVIDIUM_PERMISSIONS_BASE_URL ) missingPrividiumVars . push ( "PRIVIDIUM_PERMISSIONS_BASE_URL" ) ;
68+ if ( ! env . PRIVIDIUM_RPC_PROXY_BASE_URL ) missingPrividiumVars . push ( "PRIVIDIUM_RPC_PROXY_BASE_URL" ) ;
69+ if ( ! env . PRIVIDIUM_ADMIN_PRIVATE_KEY ) missingPrividiumVars . push ( "PRIVIDIUM_ADMIN_PRIVATE_KEY" ) ;
70+ if ( ! env . PRIVIDIUM_TEMPLATE_KEY ) missingPrividiumVars . push ( "PRIVIDIUM_TEMPLATE_KEY" ) ;
71+ if ( ! env . SSO_AUTH_SERVER_BASE_URL ) missingPrividiumVars . push ( "SSO_AUTH_SERVER_BASE_URL" ) ;
72+
73+ if ( missingPrividiumVars . length > 0 ) {
74+ console . error ( "PRIVIDIUM_MODE is enabled but missing required configuration:" , missingPrividiumVars . join ( ", " ) ) ;
75+ process . exit ( 1 ) ;
76+ }
77+ }
78+
5579// Use env vars if provided, otherwise fall back to contracts.json
5680const FACTORY_ADDRESS = env . FACTORY_ADDRESS || contractsFromFile . factory ;
5781const EOA_VALIDATOR_ADDRESS = env . EOA_VALIDATOR_ADDRESS || contractsFromFile . eoaValidator ;
@@ -92,7 +116,21 @@ const zksyncOsTestnet = defineChain({
92116 } ,
93117 } ,
94118} ) ;
95- const SUPPORTED_CHAINS : Chain [ ] = [ localhost , zksyncOsTestnet ] ;
119+ const zksyncOsLocal = defineChain ( {
120+ id : 6565 ,
121+ name : "ZKsyncOS Local" ,
122+ nativeCurrency : {
123+ name : "Ether" ,
124+ symbol : "ETH" ,
125+ decimals : 18 ,
126+ } ,
127+ rpcUrls : {
128+ default : {
129+ http : [ "http://localhost:5050" ] ,
130+ } ,
131+ } ,
132+ } ) ;
133+ const SUPPORTED_CHAINS : Chain [ ] = [ localhost , zksyncOsTestnet , zksyncOsLocal ] ;
96134
97135function getChain ( chainId : number ) : Chain {
98136 const chain = SUPPORTED_CHAINS . find ( ( c ) => c . id === chainId ) ;
@@ -102,4 +140,29 @@ function getChain(chainId: number): Chain {
102140 return chain ;
103141}
104142
105- export { env , EOA_VALIDATOR_ADDRESS , FACTORY_ADDRESS , getChain , GUARDIAN_EXECUTOR_ADDRESS , SESSION_VALIDATOR_ADDRESS , SUPPORTED_CHAINS , WEBAUTHN_VALIDATOR_ADDRESS } ;
143+ // Prividium configuration object for services
144+ export interface PrividiumConfig {
145+ enabled : boolean ;
146+ permissionsApiUrl : string ;
147+ proxyUrl : string ;
148+ adminPrivateKey : string ;
149+ templateKey : string ;
150+ ssoAuthServerBaseUrl : string ;
151+ }
152+
153+ const prividiumConfig : PrividiumConfig = {
154+ enabled : env . PRIVIDIUM_MODE ,
155+ permissionsApiUrl : env . PRIVIDIUM_PERMISSIONS_BASE_URL || "" ,
156+ proxyUrl : env . PRIVIDIUM_RPC_PROXY_BASE_URL ? `${ env . PRIVIDIUM_RPC_PROXY_BASE_URL } /rpc` : "" ,
157+ adminPrivateKey : env . PRIVIDIUM_ADMIN_PRIVATE_KEY || "" ,
158+ templateKey : env . PRIVIDIUM_TEMPLATE_KEY || "" ,
159+ ssoAuthServerBaseUrl : env . SSO_AUTH_SERVER_BASE_URL || "" ,
160+ } ;
161+
162+ // Rate limiting configuration
163+ const rateLimitConfig = {
164+ deployMax : parseInt ( env . RATE_LIMIT_DEPLOY_MAX , 10 ) ,
165+ deployWindowMs : parseInt ( env . RATE_LIMIT_DEPLOY_WINDOW_MS , 10 ) ,
166+ } ;
167+
168+ export { env , EOA_VALIDATOR_ADDRESS , FACTORY_ADDRESS , getChain , GUARDIAN_EXECUTOR_ADDRESS , prividiumConfig , rateLimitConfig , SESSION_VALIDATOR_ADDRESS , SUPPORTED_CHAINS , WEBAUTHN_VALIDATOR_ADDRESS } ;
0 commit comments