Environment Variables

Environment Variables

Environment variables serve the purpose of storing secrets like the database password, the app secret, or an API key outside of your application codebase.

In addition, environment variables can be used to obtain different configurations depending on the environment, such as the use of a secret to use an API or database identifiers.

Introduction

Normally, environment variables are accessible via Dart's Platform class, but this is said to be immutable, so we can't add data relating to our application to it.

So we're providing an Environment class to access the various environment variables in your application.

The Environment class is a class built using the contents of your application's environment variables, accessible from the Platform class in the dart:io library.

The Environment class follows the following implementation contract.

abstract interface class EnvContract {
Map<String, String> get list;
T get<T>(EnvSchema variable);
void validate(List<EnvSchema> values);
}

We recommend that you use an .env environment file to store your environment variables as far as possible, although you can inject your variables using your CLI.

dart run src/main.dart --dart-define=MY_VARIABLE=Hello World

See more in Dart's documentation.

Minimal Configuration

DART_ENV=development
TOKEN=Nzg1ODgxOTk1NDc2ODYwOTc5.GW2skT._c5UijrPvZYNz-UU0_EfxTTPt2ZhCbFWxLk9N4
HTTP_VERSION=10
WSS_VERSION=10
INTENT=3276799
LOG_LEVEL=TRACE

token

The TOKEN variable is a secret key that is used to authenticate the application with the Discord API.

TOKEN is used for Discord Websocket and API authentications, read more.

TOKEN is private and should not be shared with anyone.


http_version

The HTTP_VERSION variable is the version of the HTTP protocol that the application will use to communicate with the Discord API.

HTTP_VERSION defines the version of the HTTP protocol that the application will use to communicate with the Discord API, read more.


wss_version

The WSS_VERSION variable is the version of the Websocket protocol that the application will use to communicate with the Discord API.

WSS_VERSION defines the version of the Websocket protocol that the application will use to communicate with the Discord API, read more.


intent

The INTENT variable is the intent that the application will use to receive events from the Discord API.

INTENT defines the intent that the application will use to receive events from the Discord API, read more.


log_level

The LOG_LEVEL variable is the level of logging that the application will use to log messages.

const logLevels = {
'TRACE': logging.Level.FINEST,
'FATAL': logging.Level.SHOUT,
'ERROR': logging.Level.SEVERE,
'WARN': logging.Level.WARNING,
'INFO': logging.Level.INFO,
};

The trace level is the lowest level, used in particular for debugging or log reporting by a third party such as loki.


dart_env

The DART_ENV variable is a string that determines whether the application will use partial reload.

Validate Environment

To validate your application's environment variables and ensure their integrity, you can use the validate method of the Environment class.

The validate function takes as parameters the values of an enum implementing the EnvSchema interface.

void main() {
env.validate(MyEnum.values);
}

Read Environment Variables

To read an environment variable, you can use the get method of the Environment class.

As explained above, the get method takes as a parameter an enum implementing the EnvSchema interface.

void main() {
final value = env.get(MyEnum.myVariable);
print(value); // print('Hello World');
}