
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
rescript-envsafe
Advanced tools
đź”’ Makes sure you don't accidentally deploy apps with missing or invalid environment variables
envsafe đź”’Validate access to environment variables and parse them to the right type. Makes sure you don't accidentally deploy apps with missing or invalid environment variables.
========================================
❌ Invalid environment variables:
API_URL ("http//example.com/graphql"): Invalid url
đź’¨ Missing environment variables:
MY_VAR: Disallowed empty string
PORT: Missing value
========================================
Heavily inspired by the great project envsafe, but designed with care for ReScript users:
%%private(let envSafe = EnvSafe.make())
let nodeEnv = envSafe->EnvSafe.get(
"NODE_ENV",
S.union([
S.literal(#production),
S.literal(#development),
S.literal(#test),
]),
~devFallback=#development,
)
let port = envSafe->EnvSafe.get("PORT", S.int->S.port, ~fallback=3000)
let apiUrl = envSafe->EnvSafe.get("API_URL", S.string->S.url, ~devFallback="https://example.com/graphql")
let auth0ClientId = envSafe->EnvSafe.get("AUTH0_CLIENT_ID", S.string)
let auth0Domain = envSafe->EnvSafe.get("AUTH0_DOMAIN", S.string)
// đź§ If you forget to close `envSafe` then invalid vars end up being `undefined` leading to an expected runtime error.
envSafe->EnvSafe.close
npm install rescript-envsafe rescript-schema
Then add rescript-envsafe and rescript-schema to bs-dependencies in your rescript.json:
{
...
+ "bs-dependencies": ["rescript-envsafe", "rescript-schema"],
+ "bsc-flags": ["-open RescriptSchema"],
}
EnvSafe.make(~env: EnvSafe.env=?) => EnvSafe.t
%%private(let envSafe = EnvSafe.make(~env=%raw("window.__ENVIRONMENT__")))
Creates envSafe to start working with environment variables. By default it uses process.env as a base for plucking the vars, but it can be overridden using the env argument.
EnvSafe.get(EnvSafe.t, string, S.t<'value>, ~allowEmpty: bool=?, ~fallback: 'value=?, ~devFallback: 'value=?, ~input: option<string>=?) => 'value
let port = envSafe->EnvSafe.get("PORT", S.int->S.port, ~fallback=3000)
Gets an environment variable from envSafe applying coercion and parsing logic of schema.
| Name | Type | Description |
|---|---|---|
name | string | Name of the environment variable |
schema | S.t<'value> | A schema created with rescript-schema. It's used for coercion and parsing. For bool schemas coerces "0", "1", "true", "false", "t", "f" to boolean values. For int, float and bigint schemas coerces string to number. For other non-string schemas the value is coerced using JSON.parse before being validated. |
fallback | 'value=? | A fallback value when the environment variable is missing. |
devFallback | 'value=? | A fallback value to use only when NODE_ENV is not production. This is handy for env vars that are required for production environments, but optional for development and testing. |
input | string=? | As some environments don't allow you to dynamically read env vars, we can manually put it in as well. Example: input=%raw("process.env.NEXT_PUBLIC_API_URL"). |
allowEmpty | bool=false | Default behavior is false which treats empty strings as the value is missing. if explicit empty strings are OK, pass in true. |
EnvSafe.close(EnvSafe.t) => unit
envSafe->EnvSafe.close
It makes a readable summary of your issues, console.error-log an error, window.alert() with information about the missing envrionment variable if you're in the browser, throws an error (will exit the process with a code 1 in node).
đź§ If you forget to close
envSafethen invalid vars end up beingundefinedleading to an expected runtime error.
FAQs
đź”’ Makes sure you don't accidentally deploy apps with missing or invalid environment variables
The npm package rescript-envsafe receives a total of 1,171 weekly downloads. As such, rescript-envsafe popularity was classified as popular.
We found that rescript-envsafe demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.