@@ -2,6 +2,7 @@ import { createEnv } from "@t3-oss/env-core";
2
2
import * as dotenv from "dotenv" ;
3
3
import type { ZodError } from "zod" ;
4
4
import { z } from "zod" ;
5
+ import { WalletType } from "../src/schema/wallet" ;
5
6
6
7
dotenv . config ( {
7
8
debug : true ,
@@ -23,17 +24,36 @@ export const env = createEnv({
23
24
NODE_ENV : z
24
25
. enum ( [ "production" , "development" , "testing" , "local" ] )
25
26
. default ( "development" ) ,
26
- AWS_KMS_KEY_ID : z . string ( ) . min ( 1 ) . optional ( ) ,
27
- GOOGLE_KMS_KEY_ID : z . string ( ) . min ( 1 ) . optional ( ) ,
28
- AWS_ACCESS_KEY_ID : z . string ( ) . min ( 1 ) . optional ( ) ,
29
- AWS_SECRET_ACCESS_KEY : z . string ( ) . min ( 1 ) . optional ( ) ,
30
- AWS_REGION : z . string ( ) . min ( 1 ) . optional ( ) ,
31
27
THIRDWEB_API_SECRET_KEY : z . string ( ) . min ( 1 ) ,
32
28
POSTGRES_CONNECTION_URL : z
33
29
. string ( )
34
30
. default (
35
31
"postgresql://postgres:postgres@localhost:5432/postgres?sslmode=disable" ,
36
32
) ,
33
+ WALLET_CONFIGURATION : z . string ( ) . transform ( ( config ) =>
34
+ z
35
+ . union ( [
36
+ z . object ( {
37
+ type : z . literal ( WalletType . local ) ,
38
+ } ) ,
39
+ z . object ( {
40
+ type : z . literal ( WalletType . awsKms ) ,
41
+ awsAccessKeyId : z . string ( ) . min ( 1 ) ,
42
+ awsSecretAccessKey : z . string ( ) . min ( 1 ) ,
43
+ awsRegion : z . string ( ) . min ( 1 ) ,
44
+ } ) ,
45
+ z . object ( {
46
+ type : z . literal ( WalletType . gcpKms ) ,
47
+ gcpApplicationProjectId : z . string ( ) . min ( 1 ) ,
48
+ gcpKmsLocationId : z . string ( ) . min ( 1 ) ,
49
+ gcpKmsKeyRingId : z . string ( ) . min ( 1 ) ,
50
+ // TODO: Are these optional?
51
+ gcpApplicationCredentialEmail : z . string ( ) . min ( 1 ) ,
52
+ gcpApplicationCredentialPrivateKey : z . string ( ) . min ( 1 ) ,
53
+ } ) ,
54
+ ] )
55
+ . parse ( JSON . parse ( config ) ) ,
56
+ ) ,
37
57
OPENAPI_BASE_ORIGIN : z . string ( ) . default ( "http://localhost:3005" ) ,
38
58
PORT : z . coerce . number ( ) . default ( 3005 ) ,
39
59
HOST : z . string ( ) . default ( "0.0.0.0" ) ,
@@ -44,11 +64,6 @@ export const env = createEnv({
44
64
MINED_TX_CRON_ENABLED : boolSchema ( "true" ) ,
45
65
MINED_TX_CRON_SCHEDULE : z . string ( ) . default ( "*/5 * * * * *" ) ,
46
66
MIN_TX_TO_CHECK_FOR_MINED_STATUS : z . coerce . number ( ) . default ( 50 ) ,
47
- GOOGLE_APPLICATION_PROJECT_ID : z . string ( ) . min ( 1 ) . optional ( ) ,
48
- GOOGLE_KMS_KEY_RING_ID : z . string ( ) . min ( 1 ) . optional ( ) ,
49
- GOOGLE_KMS_LOCATION_ID : z . string ( ) . min ( 1 ) . optional ( ) ,
50
- GOOGLE_APPLICATION_CREDENTIAL_EMAIL : z . string ( ) . min ( 1 ) . optional ( ) ,
51
- GOOGLE_APPLICATION_CREDENTIAL_PRIVATE_KEY : z . string ( ) . min ( 1 ) . optional ( ) ,
52
67
RETRY_TX_ENABLED : boolSchema ( "true" ) ,
53
68
MAX_FEE_PER_GAS_FOR_RETRY : z . string ( ) . default ( "55000000000" ) ,
54
69
MAX_PRIORITY_FEE_PER_GAS_FOR_RETRY : z . string ( ) . default ( "55000000000" ) ,
@@ -62,13 +77,36 @@ export const env = createEnv({
62
77
isServer : true ,
63
78
runtimeEnvStrict : {
64
79
NODE_ENV : process . env . NODE_ENV ,
65
- AWS_KMS_KEY_ID : process . env . AWS_KMS_KEY_ID ,
66
- GOOGLE_KMS_KEY_ID : process . env . GOOGLE_KMS_KEY_ID ,
67
- AWS_ACCESS_KEY_ID : process . env . AWS_ACCESS_KEY_ID ,
68
- AWS_SECRET_ACCESS_KEY : process . env . AWS_SECRET_ACCESS_KEY ,
69
- AWS_REGION : process . env . AWS_REGION ,
70
80
THIRDWEB_API_SECRET_KEY : process . env . THIRDWEB_API_SECRET_KEY ,
71
81
POSTGRES_CONNECTION_URL : process . env . POSTGRES_CONNECTION_URL ,
82
+ WALLET_CONFIGURATION :
83
+ process . env . AWS_ACCESS_KEY_ID ||
84
+ process . env . AWS_SECRET_ACCESS_KEY ||
85
+ process . env . AWS_REGION
86
+ ? JSON . stringify ( {
87
+ type : WalletType . awsKms ,
88
+ awsAccessKeyId : process . env . AWS_ACCESS_KEY_ID ,
89
+ awsSecretAccessKey : process . env . AWS_SECRET_ACCESS_KEY ,
90
+ awsRegion : process . env . AWS_REGION ,
91
+ } )
92
+ : process . env . GOOGLE_APPLICATION_PROJECT_ID ||
93
+ process . env . GOOGLE_KMS_LOCATION_ID ||
94
+ process . env . GOOGLE_KMS_KEY_RING_ID ||
95
+ process . env . GOOGLE_APPLICATION_CREDENTIAL_EMAIL ||
96
+ process . env . GOOGLE_APPLICATION_CREDENTIAL_PRIVATE_KEY
97
+ ? JSON . stringify ( {
98
+ type : WalletType . gcpKms ,
99
+ gcpApplicationProjectId : process . env . GOOGLE_APPLICATION_PROJECT_ID ,
100
+ gcpKmsLocationId : process . env . GOOGLE_KMS_LOCATION_ID ,
101
+ gcpKmsKeyRingId : process . env . GOOGLE_KMS_KEY_RING_ID ,
102
+ gcpApplicationCredentialEmail :
103
+ process . env . GOOGLE_APPLICATION_CREDENTIAL_EMAIL ,
104
+ gcpApplicationCredentialPrivateKey :
105
+ process . env . GOOGLE_APPLICATION_CREDENTIAL_PRIVATE_KEY ,
106
+ } )
107
+ : JSON . stringify ( {
108
+ type : WalletType . local ,
109
+ } ) ,
72
110
PORT : process . env . PORT ,
73
111
HOST : process . env . HOST ,
74
112
OPENAPI_BASE_ORIGIN : process . env . OPENAPI_BASE_ORIGIN ,
@@ -80,13 +118,6 @@ export const env = createEnv({
80
118
MINED_TX_CRON_SCHEDULE : process . env . MINED_TX_CRON_SCHEDULE ,
81
119
MIN_TX_TO_CHECK_FOR_MINED_STATUS :
82
120
process . env . MIN_TX_TO_CHECK_FOR_MINED_STATUS ,
83
- GOOGLE_APPLICATION_PROJECT_ID : process . env . GOOGLE_APPLICATION_PROJECT_ID ,
84
- GOOGLE_KMS_KEY_RING_ID : process . env . GOOGLE_KMS_KEY_RING_ID ,
85
- GOOGLE_KMS_LOCATION_ID : process . env . GOOGLE_KMS_LOCATION_ID ,
86
- GOOGLE_APPLICATION_CREDENTIAL_EMAIL :
87
- process . env . GOOGLE_APPLICATION_CREDENTIAL_EMAIL ,
88
- GOOGLE_APPLICATION_CREDENTIAL_PRIVATE_KEY :
89
- process . env . GOOGLE_APPLICATION_CREDENTIAL_PRIVATE_KEY ,
90
121
RETRY_TX_ENABLED : process . env . RETRY_TX_ENABLED ,
91
122
MAX_FEE_PER_GAS_FOR_RETRY : process . env . MAX_FEE_PER_GAS_FOR_RETRY ,
92
123
MAX_PRIORITY_FEE_PER_GAS_FOR_RETRY :
0 commit comments