@expo/env 2.3.1-canary-20260701-9100865 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,262 +1,272 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- 0 && (module.exports = {
6
- isIgnoredEnvKey: null,
7
- isLocalEnvKey: null,
8
- isUnsafeAllowedEnvKey: null
9
- });
10
- function _export(target, all) {
11
- for(var name in all)Object.defineProperty(target, name, {
12
- enumerable: true,
13
- get: Object.getOwnPropertyDescriptor(all, name).get
14
- });
15
- }
16
- _export(exports, {
17
- get isIgnoredEnvKey () {
18
- return isIgnoredEnvKey;
19
- },
20
- get isLocalEnvKey () {
21
- return isLocalEnvKey;
22
- },
23
- get isUnsafeAllowedEnvKey () {
24
- return isUnsafeAllowedEnvKey;
25
- }
26
- });
27
- function _nodeos() {
28
- const data = /*#__PURE__*/ _interop_require_default(require("node:os"));
29
- _nodeos = function() {
30
- return data;
31
- };
2
+
3
+ exports.__esModule = true;
4
+ exports.isIgnoredEnvKey = isIgnoredEnvKey;
5
+ exports.isLocalEnvKey = isLocalEnvKey;
6
+ exports.isUnsafeAllowedEnvKey = isUnsafeAllowedEnvKey;
7
+ function _nodeOs() {
8
+ const data = _interopRequireDefault(require("node:os"));
9
+ _nodeOs = function () {
32
10
  return data;
11
+ };
12
+ return data;
33
13
  }
34
- function _interop_require_default(obj) {
35
- return obj && obj.__esModule ? obj : {
36
- default: obj
37
- };
38
- }
39
- const platform = _nodeos().default.platform();
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const platform = _nodeOs().default.platform();
16
+
40
17
  // WARN(@kitten): We don't read this dynamically to ignore later modifications to this env var
41
- const safeKeys = new Set(process.env.EXPO_UNSAFE_DOTENV_KEYS?.split(',').filter((x)=>!!x));
18
+ const safeKeys = new Set(process.env.EXPO_UNSAFE_DOTENV_KEYS?.split(',').filter(x => !!x));
42
19
  function isUnsafeAllowedEnvKey(name) {
43
- return safeKeys.has(name);
20
+ return safeKeys.has(name);
44
21
  }
45
22
  function isIgnoredEnvKey(name) {
46
- if (platform === 'darwin' && name.startsWith('DYLD_')) {
47
- return true;
48
- } else if (platform === 'linux' && name.startsWith('LD_')) {
49
- return true;
50
- } else if (safeKeys.has(name)) {
51
- return false;
52
- }
53
- // NOTE(@kitten): Per-developer tool roots (ANDROID_HOME, JDK_HOME, DEVELOPER_DIR,
54
- // npm/pnpm/yarn/bun paths, etc) are not blocked here see `isLocalEnvKey`, which
55
- // restricts them to `.local` env files (gitignored by convention) so committed
56
- // `.env*` files cannot redirect them.
57
- switch(name){
58
- // NOTE: Expo internal env vars
59
- case '__EXPO_ENV_LOADED':
60
- case 'EXPO_NO_DOTENV':
61
- case 'EXPO_UNSAFE_DOTENV_KEYS':
62
- return true;
63
- // Linux dynamic-loader, can cause inconsistent calls
64
- case 'LD_PRELOAD':
65
- case 'LD_LIBRARY_PATH':
66
- case 'LD_AUDIT':
67
- return true;
68
- // macOS dynamic-loader, can cause inconsistent calls
69
- case 'DYLD_INSERT_LIBRARIES':
70
- case 'DYLD_LIBRARY_PATH':
71
- case 'DYLD_FRAMEWORK_PATH':
72
- case 'DYLD_FALLBACK_LIBRARY_PATH':
73
- case 'DYLD_FALLBACK_FRAMEWORK_PATH':
74
- return true;
75
- // OpenSSL
76
- case 'SSLKEYLOGFILE':
77
- return true;
78
- // Changes Node behaviour and shouldn't be set in dotenv
79
- case 'NODE_PATH':
80
- case 'NODE_OPTIONS':
81
- case 'NODE_EXTRA_CA_CERTS':
82
- case 'NODE_TLS_REJECT_UNAUTHORIZED':
83
- case 'NODE_COMPILE_CACHE':
84
- case 'NPM_CONFIG_NODE_OPTIONS':
85
- case 'NODE_REPL_EXTERNAL_MODULE':
86
- return true;
87
- // Changes Bun behaviour and shouldn't be set in dotenv
88
- case 'BUN_RUNTIME_TRANSPILER_CACHE_PATH':
89
- return true;
90
- // Shell startup hooks
91
- case 'BASH_ENV':
92
- case 'ENV':
93
- case 'ZDOTDIR':
94
- case 'IFS':
95
- case 'CDPATH':
96
- case 'PROMPT_COMMAND':
97
- case 'SHELLOPTS':
98
- case 'BASHOPTS':
99
- return true;
100
- // Special git/ssh/gpg args
101
- case 'GIT_SSH':
102
- case 'GIT_SSH_COMMAND':
103
- case 'GPG_TTY':
104
- case 'SSH_ASKPASS':
105
- case 'GIT_ASKPASS':
106
- case 'GIT_EXEC_PATH':
107
- return true;
108
- // Perl libs
109
- case 'PERL5OPT':
110
- case 'PERL5LIB':
111
- case 'PERLLIB':
112
- return true;
113
- // Python modules
114
- case 'PYTHONSTARTUP':
115
- case 'PYTHONPATH':
116
- case 'PYTHONHOME':
117
- case 'PYTHONINSPECT':
118
- case 'PYTHONUSERBASE':
119
- case 'PYTHONEXECUTABLE':
120
- case 'PYTHONSAFEPATH':
121
- case 'PYTJONNOUSERSITE':
122
- return true;
123
- // Ruby libs
124
- case 'RUBYOPT':
125
- case 'RUBYLIB':
126
- case 'BUNDLE_GEMFILE':
127
- case 'RUBYSHELL':
128
- case 'RUBYPATH':
129
- case 'GEM_HOME':
130
- case 'GEM_PATH':
131
- case 'BUNDLE_PATH':
132
- return true;
133
- // Java vars
134
- case '_JAVA_OPTIONS':
135
- case 'JAVA_TOOL_OPTIONS':
136
- case 'JDK_JAVA_OPTIONS':
137
- case 'CLASSPATH':
138
- return true;
139
- // User env vars
140
- case 'HOME':
141
- case 'USERPROFILE':
142
- case 'HOMEDRIVE':
143
- case 'HOMEPATH':
144
- case 'TMPDIR':
145
- case 'TMP':
146
- case 'TEMP':
147
- case 'USER':
148
- case 'SHELL':
149
- case 'PATH':
150
- case 'PATHEXT':
151
- case 'LANG':
152
- case 'PWD':
153
- case 'OLDPWD':
154
- case 'TERMINFO':
155
- return true;
156
- // Windows-owned
157
- case 'SYSTEMROOT':
158
- case 'SystemRoot':
159
- return true;
160
- // User tools
161
- case 'EDITOR':
162
- case 'VISUAL':
163
- case 'PAGER':
164
- case 'MANPAGER':
165
- return true;
166
- // XDG dirs
167
- case 'XDG_RUNTIME_DIR':
168
- case 'XDG_STATE_HOME':
169
- case 'XDG_DATA_HOME':
170
- case 'XDG_CONFIG_DIRS':
171
- case 'XDG_CACHE_HOME':
172
- case 'XDG_CONFIG_HOME':
173
- case 'XDG_BIN_HOME':
174
- return true;
175
- // direnv
176
- case 'DIRENV_DIR':
177
- case 'DIRENV_FILE':
178
- case 'DIRENV_WATCHES':
179
- case 'DIRENV_DIFF':
180
- return true;
181
- // Package-manager registry/install roots. No legitimate per-project `.env`
182
- // use case — the established mechanism for each is a dedicated config file
183
- // (`.npmrc`, `.yarnrc.yml`, `.bunfig.toml`) — and a malicious value is a
184
- // supply-chain RCE the moment the CLI shells out to npm/yarn/pnpm/bun.
185
- case 'NPM_CONFIG_REGISTRY':
186
- case 'NPM_CONFIG_PREFIX':
187
- case 'NPM_CONFIG_USERCONFIG':
188
- case 'NPM_CONFIG_GLOBALCONFIG':
189
- case 'NPM_CONFIG_CACHE':
190
- case 'YARN_REGISTRY':
191
- case 'YARN_CACHE_FOLDER':
192
- case 'YARN_GLOBAL_FOLDER':
193
- case 'PNPM_HOME':
194
- case 'BUN_INSTALL':
195
- case 'BUN_INSTALL_BIN':
196
- case 'COCOAPODS_HOME':
197
- case 'CMAKE_HOME':
198
- return true;
199
- default:
200
- return false;
201
- }
23
+ if (platform === 'darwin' && name.startsWith('DYLD_')) {
24
+ return true;
25
+ } else if (platform === 'linux' && name.startsWith('LD_')) {
26
+ return true;
27
+ } else if (safeKeys.has(name)) {
28
+ return false;
29
+ }
30
+
31
+ // NOTE(@kitten): Per-developer tool roots (ANDROID_HOME, JDK_HOME, DEVELOPER_DIR,
32
+ // npm/pnpm/yarn/bun paths, etc) are not blocked here see `isLocalEnvKey`, which
33
+ // restricts them to `.local` env files (gitignored by convention) so committed
34
+ // `.env*` files cannot redirect them.
35
+ switch (name) {
36
+ // NOTE: Expo internal env vars
37
+ case '__EXPO_ENV_LOADED':
38
+ case 'EXPO_NO_DOTENV':
39
+ case 'EXPO_UNSAFE_DOTENV_KEYS':
40
+ return true;
41
+
42
+ // Linux dynamic-loader, can cause inconsistent calls
43
+ case 'LD_PRELOAD':
44
+ case 'LD_LIBRARY_PATH':
45
+ case 'LD_AUDIT':
46
+ return true;
47
+
48
+ // macOS dynamic-loader, can cause inconsistent calls
49
+ case 'DYLD_INSERT_LIBRARIES':
50
+ case 'DYLD_LIBRARY_PATH':
51
+ case 'DYLD_FRAMEWORK_PATH':
52
+ case 'DYLD_FALLBACK_LIBRARY_PATH':
53
+ case 'DYLD_FALLBACK_FRAMEWORK_PATH':
54
+ return true;
55
+
56
+ // OpenSSL
57
+ case 'SSLKEYLOGFILE':
58
+ return true;
59
+
60
+ // Changes Node behaviour and shouldn't be set in dotenv
61
+ case 'NODE_PATH':
62
+ case 'NODE_OPTIONS':
63
+ case 'NODE_EXTRA_CA_CERTS':
64
+ case 'NODE_TLS_REJECT_UNAUTHORIZED':
65
+ case 'NODE_COMPILE_CACHE':
66
+ case 'NPM_CONFIG_NODE_OPTIONS':
67
+ case 'NODE_REPL_EXTERNAL_MODULE':
68
+ return true;
69
+
70
+ // Changes Bun behaviour and shouldn't be set in dotenv
71
+ case 'BUN_RUNTIME_TRANSPILER_CACHE_PATH':
72
+ return true;
73
+
74
+ // Shell startup hooks
75
+ case 'BASH_ENV':
76
+ case 'ENV':
77
+ case 'ZDOTDIR':
78
+ case 'IFS':
79
+ case 'CDPATH':
80
+ case 'PROMPT_COMMAND':
81
+ case 'SHELLOPTS':
82
+ case 'BASHOPTS':
83
+ return true;
84
+
85
+ // Special git/ssh/gpg args
86
+ case 'GIT_SSH':
87
+ case 'GIT_SSH_COMMAND':
88
+ case 'GPG_TTY':
89
+ case 'SSH_ASKPASS':
90
+ case 'GIT_ASKPASS':
91
+ case 'GIT_EXEC_PATH':
92
+ return true;
93
+
94
+ // Perl libs
95
+ case 'PERL5OPT':
96
+ case 'PERL5LIB':
97
+ case 'PERLLIB':
98
+ return true;
99
+
100
+ // Python modules
101
+ case 'PYTHONSTARTUP':
102
+ case 'PYTHONPATH':
103
+ case 'PYTHONHOME':
104
+ case 'PYTHONINSPECT':
105
+ case 'PYTHONUSERBASE':
106
+ case 'PYTHONEXECUTABLE':
107
+ case 'PYTHONSAFEPATH':
108
+ case 'PYTJONNOUSERSITE':
109
+ return true;
110
+
111
+ // Ruby libs
112
+ case 'RUBYOPT':
113
+ case 'RUBYLIB':
114
+ case 'BUNDLE_GEMFILE':
115
+ case 'RUBYSHELL':
116
+ case 'RUBYPATH':
117
+ case 'GEM_HOME':
118
+ case 'GEM_PATH':
119
+ case 'BUNDLE_PATH':
120
+ return true;
121
+
122
+ // Java vars
123
+ case '_JAVA_OPTIONS':
124
+ case 'JAVA_TOOL_OPTIONS':
125
+ case 'JDK_JAVA_OPTIONS':
126
+ case 'CLASSPATH':
127
+ return true;
128
+
129
+ // User env vars
130
+ case 'HOME':
131
+ case 'USERPROFILE':
132
+ case 'HOMEDRIVE':
133
+ case 'HOMEPATH':
134
+ case 'TMPDIR':
135
+ case 'TMP':
136
+ case 'TEMP':
137
+ case 'USER':
138
+ case 'SHELL':
139
+ case 'PATH':
140
+ case 'PATHEXT':
141
+ case 'LANG':
142
+ case 'PWD':
143
+ case 'OLDPWD':
144
+ case 'TERMINFO':
145
+ return true;
146
+
147
+ // Windows-owned
148
+ case 'SYSTEMROOT':
149
+ case 'SystemRoot':
150
+ return true;
151
+
152
+ // User tools
153
+ case 'EDITOR':
154
+ case 'VISUAL':
155
+ case 'PAGER':
156
+ case 'MANPAGER':
157
+ return true;
158
+
159
+ // XDG dirs
160
+ case 'XDG_RUNTIME_DIR':
161
+ case 'XDG_STATE_HOME':
162
+ case 'XDG_DATA_HOME':
163
+ case 'XDG_CONFIG_DIRS':
164
+ case 'XDG_CACHE_HOME':
165
+ case 'XDG_CONFIG_HOME':
166
+ case 'XDG_BIN_HOME':
167
+ return true;
168
+
169
+ // direnv
170
+ case 'DIRENV_DIR':
171
+ case 'DIRENV_FILE':
172
+ case 'DIRENV_WATCHES':
173
+ case 'DIRENV_DIFF':
174
+ return true;
175
+
176
+ // Package-manager registry/install roots. No legitimate per-project `.env`
177
+ // use case — the established mechanism for each is a dedicated config file
178
+ // (`.npmrc`, `.yarnrc.yml`, `.bunfig.toml`) — and a malicious value is a
179
+ // supply-chain RCE the moment the CLI shells out to npm/yarn/pnpm/bun.
180
+ case 'NPM_CONFIG_REGISTRY':
181
+ case 'NPM_CONFIG_PREFIX':
182
+ case 'NPM_CONFIG_USERCONFIG':
183
+ case 'NPM_CONFIG_GLOBALCONFIG':
184
+ case 'NPM_CONFIG_CACHE':
185
+ case 'YARN_REGISTRY':
186
+ case 'YARN_CACHE_FOLDER':
187
+ case 'YARN_GLOBAL_FOLDER':
188
+ case 'PNPM_HOME':
189
+ case 'BUN_INSTALL':
190
+ case 'BUN_INSTALL_BIN':
191
+ case 'COCOAPODS_HOME':
192
+ case 'CMAKE_HOME':
193
+ return true;
194
+ default:
195
+ return false;
196
+ }
202
197
  }
198
+
199
+ /**
200
+ * Whether a dotenv key represents per-developer/per-machine configuration that
201
+ * should only be loaded from `.local` env files (e.g. `.env.local`,
202
+ * `.env.development.local`). Committed `.env*` files cannot set these — that
203
+ * prevents a malicious project from redirecting developer-tool roots (e.g.
204
+ * `ANDROID_HOME`) via a supply-chain attack, while still letting developers
205
+ * pin them in their gitignored `.local` overrides.
206
+ *
207
+ * Honors `EXPO_UNSAFE_DOTENV_KEYS`: opt-in keys are allowed in any env file.
208
+ */
203
209
  function isLocalEnvKey(name) {
204
- if (safeKeys.has(name)) return false;
205
- switch(name){
206
- // Android tooling
207
- case 'ANDROID_HOME':
208
- case 'ANDROID_SDK_ROOT':
209
- case 'ANDROID_NDK_HOME':
210
- case 'ANDROID_NDK_ROOT':
211
- case 'ANDROID_AVD_HOME':
212
- case 'ANDROID_EMULATOR_HOME':
213
- case 'GRADLE_HOME':
214
- case 'GRADLE_USER_HOME':
215
- case 'KOTLIN_HOME':
216
- return true;
217
- // JVM tooling
218
- case 'JAVA_HOME':
219
- case 'JDK_HOME':
220
- case 'JRE_HOME':
221
- return true;
222
- // Apple tooling
223
- case 'DEVELOPER_DIR':
224
- case 'XCODE_DEVELOPER_DIR_PATH':
225
- return true;
226
- // CocoaPods / Fastlane (secrets and non-exec config)
227
- case 'COCOAPODS_DISABLE_STATS':
228
- case 'FASTLANE_USER':
229
- case 'FASTLANE_PASSWORD':
230
- case 'FASTLANE_SESSION':
231
- case 'FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD':
232
- return true;
233
- // Android NDK (per-project NDK version pinning is common)
234
- case 'NDK_HOME':
235
- case 'NDK_ROOT':
236
- return true;
237
- // Per-developer preferences and per-machine setup
238
- case 'BROWSER':
239
- case 'BROWSER_ARGS':
240
- case 'HTTP_PROXY':
241
- case 'http_proxy':
242
- case 'HTTPS_PROXY':
243
- case 'https_proxy':
244
- case 'ALL_PROXY':
245
- case 'all_proxy':
246
- case 'NO_PROXY':
247
- case 'no_proxy':
248
- case 'FTP_PROXY':
249
- case 'ftp_proxy':
250
- case 'SSL_CRT_FILE':
251
- case 'SSL_KEY_FILE':
252
- case 'REACT_NATIVE_PACKAGER_HOSTNAME':
253
- return true;
254
- // NOTE(@kitten): Used to override where hermesc is found, not safe to read from .env
255
- case 'REACT_NATIVE_OVERRIDE_HERMES_DIR':
256
- return true;
257
- default:
258
- return false;
259
- }
260
- }
210
+ if (safeKeys.has(name)) return false;
211
+ switch (name) {
212
+ // Android tooling
213
+ case 'ANDROID_HOME':
214
+ case 'ANDROID_SDK_ROOT':
215
+ case 'ANDROID_NDK_HOME':
216
+ case 'ANDROID_NDK_ROOT':
217
+ case 'ANDROID_AVD_HOME':
218
+ case 'ANDROID_EMULATOR_HOME':
219
+ case 'GRADLE_HOME':
220
+ case 'GRADLE_USER_HOME':
221
+ case 'KOTLIN_HOME':
222
+ return true;
223
+
224
+ // JVM tooling
225
+ case 'JAVA_HOME':
226
+ case 'JDK_HOME':
227
+ case 'JRE_HOME':
228
+ return true;
229
+
230
+ // Apple tooling
231
+ case 'DEVELOPER_DIR':
232
+ case 'XCODE_DEVELOPER_DIR_PATH':
233
+ return true;
261
234
 
262
- //# sourceMappingURL=constants.js.map
235
+ // CocoaPods / Fastlane (secrets and non-exec config)
236
+ case 'COCOAPODS_DISABLE_STATS':
237
+ case 'FASTLANE_USER':
238
+ case 'FASTLANE_PASSWORD':
239
+ case 'FASTLANE_SESSION':
240
+ case 'FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD':
241
+ return true;
242
+
243
+ // Android NDK (per-project NDK version pinning is common)
244
+ case 'NDK_HOME':
245
+ case 'NDK_ROOT':
246
+ return true;
247
+
248
+ // Per-developer preferences and per-machine setup
249
+ case 'BROWSER':
250
+ case 'BROWSER_ARGS':
251
+ case 'HTTP_PROXY':
252
+ case 'http_proxy':
253
+ case 'HTTPS_PROXY':
254
+ case 'https_proxy':
255
+ case 'ALL_PROXY':
256
+ case 'all_proxy':
257
+ case 'NO_PROXY':
258
+ case 'no_proxy':
259
+ case 'FTP_PROXY':
260
+ case 'ftp_proxy':
261
+ case 'SSL_CRT_FILE':
262
+ case 'SSL_KEY_FILE':
263
+ case 'REACT_NATIVE_PACKAGER_HOSTNAME':
264
+ return true;
265
+ // NOTE(@kitten): Used to override where hermesc is found, not safe to read from .env
266
+ case 'REACT_NATIVE_OVERRIDE_HERMES_DIR':
267
+ return true;
268
+ default:
269
+ return false;
270
+ }
271
+ }
272
+ //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["constants.ts"],"sourcesContent":[null],"names":["isIgnoredEnvKey","isLocalEnvKey","isUnsafeAllowedEnvKey","platform","os","safeKeys","Set","process","env","EXPO_UNSAFE_DOTENV_KEYS","split","filter","x","name","has","startsWith"],"mappings":";;;;;;;;;;;;;;;;QAWgBA;eAAAA;;QA4LAC;eAAAA;;QAhMAC;eAAAA;;;;gEAPD;;;;;;;;;;;AAEf,MAAMC,WAAWC,iBAAE,CAACD,QAAQ;AAE5B,8FAA8F;AAC9F,MAAME,WAAW,IAAIC,IAAIC,QAAQC,GAAG,CAACC,uBAAuB,EAAEC,MAAM,KAAKC,OAAO,CAACC,IAAM,CAAC,CAACA;AAElF,SAASV,sBAAsBW,IAAY;IAChD,OAAOR,SAASS,GAAG,CAACD;AACtB;AAEO,SAASb,gBAAgBa,IAAY;IAC1C,IAAIV,aAAa,YAAYU,KAAKE,UAAU,CAAC,UAAU;QACrD,OAAO;IACT,OAAO,IAAIZ,aAAa,WAAWU,KAAKE,UAAU,CAAC,QAAQ;QACzD,OAAO;IACT,OAAO,IAAIV,SAASS,GAAG,CAACD,OAAO;QAC7B,OAAO;IACT;IAEA,kFAAkF;IAClF,kFAAkF;IAClF,+EAA+E;IAC/E,sCAAsC;IACtC,OAAQA;QACN,+BAA+B;QAC/B,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,qDAAqD;QACrD,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,qDAAqD;QACrD,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,UAAU;QACV,KAAK;YACH,OAAO;QAET,wDAAwD;QACxD,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,uDAAuD;QACvD,KAAK;YACH,OAAO;QAET,sBAAsB;QACtB,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,2BAA2B;QAC3B,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,YAAY;QACZ,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,iBAAiB;QACjB,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,YAAY;QACZ,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,YAAY;QACZ,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,gBAAgB;QAChB,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,gBAAgB;QAChB,KAAK;QACL,KAAK;YACH,OAAO;QAET,aAAa;QACb,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,WAAW;QACX,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,SAAS;QACT,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,2EAA2E;QAC3E,2EAA2E;QAC3E,yEAAyE;QACzE,uEAAuE;QACvE,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET;YACE,OAAO;IACX;AACF;AAYO,SAASZ,cAAcY,IAAY;IACxC,IAAIR,SAASS,GAAG,CAACD,OAAO,OAAO;IAC/B,OAAQA;QACN,kBAAkB;QAClB,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,cAAc;QACd,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,gBAAgB;QAChB,KAAK;QACL,KAAK;YACH,OAAO;QAET,qDAAqD;QACrD,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QAET,0DAA0D;QAC1D,KAAK;QACL,KAAK;YACH,OAAO;QAET,kDAAkD;QAClD,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QACT,qFAAqF;QACrF,KAAK;YACH,OAAO;QAET;YACE,OAAO;IACX;AACF"}
1
+ {"version":3,"file":"constants.js","names":["_nodeOs","data","_interopRequireDefault","require","e","__esModule","default","platform","os","safeKeys","Set","process","env","EXPO_UNSAFE_DOTENV_KEYS","split","filter","x","isUnsafeAllowedEnvKey","name","has","isIgnoredEnvKey","startsWith","isLocalEnvKey"],"sources":["../src/constants.ts"],"sourcesContent":["import os from 'node:os';\n\nconst platform = os.platform();\n\n// WARN(@kitten): We don't read this dynamically to ignore later modifications to this env var\nconst safeKeys = new Set(process.env.EXPO_UNSAFE_DOTENV_KEYS?.split(',').filter((x) => !!x));\n\nexport function isUnsafeAllowedEnvKey(name: string): boolean {\n return safeKeys.has(name);\n}\n\nexport function isIgnoredEnvKey(name: string) {\n if (platform === 'darwin' && name.startsWith('DYLD_')) {\n return true;\n } else if (platform === 'linux' && name.startsWith('LD_')) {\n return true;\n } else if (safeKeys.has(name)) {\n return false;\n }\n\n // NOTE(@kitten): Per-developer tool roots (ANDROID_HOME, JDK_HOME, DEVELOPER_DIR,\n // npm/pnpm/yarn/bun paths, etc) are not blocked here — see `isLocalEnvKey`, which\n // restricts them to `.local` env files (gitignored by convention) so committed\n // `.env*` files cannot redirect them.\n switch (name) {\n // NOTE: Expo internal env vars\n case '__EXPO_ENV_LOADED':\n case 'EXPO_NO_DOTENV':\n case 'EXPO_UNSAFE_DOTENV_KEYS':\n return true;\n\n // Linux dynamic-loader, can cause inconsistent calls\n case 'LD_PRELOAD':\n case 'LD_LIBRARY_PATH':\n case 'LD_AUDIT':\n return true;\n\n // macOS dynamic-loader, can cause inconsistent calls\n case 'DYLD_INSERT_LIBRARIES':\n case 'DYLD_LIBRARY_PATH':\n case 'DYLD_FRAMEWORK_PATH':\n case 'DYLD_FALLBACK_LIBRARY_PATH':\n case 'DYLD_FALLBACK_FRAMEWORK_PATH':\n return true;\n\n // OpenSSL\n case 'SSLKEYLOGFILE':\n return true;\n\n // Changes Node behaviour and shouldn't be set in dotenv\n case 'NODE_PATH':\n case 'NODE_OPTIONS':\n case 'NODE_EXTRA_CA_CERTS':\n case 'NODE_TLS_REJECT_UNAUTHORIZED':\n case 'NODE_COMPILE_CACHE':\n case 'NPM_CONFIG_NODE_OPTIONS':\n case 'NODE_REPL_EXTERNAL_MODULE':\n return true;\n\n // Changes Bun behaviour and shouldn't be set in dotenv\n case 'BUN_RUNTIME_TRANSPILER_CACHE_PATH':\n return true;\n\n // Shell startup hooks\n case 'BASH_ENV':\n case 'ENV':\n case 'ZDOTDIR':\n case 'IFS':\n case 'CDPATH':\n case 'PROMPT_COMMAND':\n case 'SHELLOPTS':\n case 'BASHOPTS':\n return true;\n\n // Special git/ssh/gpg args\n case 'GIT_SSH':\n case 'GIT_SSH_COMMAND':\n case 'GPG_TTY':\n case 'SSH_ASKPASS':\n case 'GIT_ASKPASS':\n case 'GIT_EXEC_PATH':\n return true;\n\n // Perl libs\n case 'PERL5OPT':\n case 'PERL5LIB':\n case 'PERLLIB':\n return true;\n\n // Python modules\n case 'PYTHONSTARTUP':\n case 'PYTHONPATH':\n case 'PYTHONHOME':\n case 'PYTHONINSPECT':\n case 'PYTHONUSERBASE':\n case 'PYTHONEXECUTABLE':\n case 'PYTHONSAFEPATH':\n case 'PYTJONNOUSERSITE':\n return true;\n\n // Ruby libs\n case 'RUBYOPT':\n case 'RUBYLIB':\n case 'BUNDLE_GEMFILE':\n case 'RUBYSHELL':\n case 'RUBYPATH':\n case 'GEM_HOME':\n case 'GEM_PATH':\n case 'BUNDLE_PATH':\n return true;\n\n // Java vars\n case '_JAVA_OPTIONS':\n case 'JAVA_TOOL_OPTIONS':\n case 'JDK_JAVA_OPTIONS':\n case 'CLASSPATH':\n return true;\n\n // User env vars\n case 'HOME':\n case 'USERPROFILE':\n case 'HOMEDRIVE':\n case 'HOMEPATH':\n case 'TMPDIR':\n case 'TMP':\n case 'TEMP':\n case 'USER':\n case 'SHELL':\n case 'PATH':\n case 'PATHEXT':\n case 'LANG':\n case 'PWD':\n case 'OLDPWD':\n case 'TERMINFO':\n return true;\n\n // Windows-owned\n case 'SYSTEMROOT':\n case 'SystemRoot':\n return true;\n\n // User tools\n case 'EDITOR':\n case 'VISUAL':\n case 'PAGER':\n case 'MANPAGER':\n return true;\n\n // XDG dirs\n case 'XDG_RUNTIME_DIR':\n case 'XDG_STATE_HOME':\n case 'XDG_DATA_HOME':\n case 'XDG_CONFIG_DIRS':\n case 'XDG_CACHE_HOME':\n case 'XDG_CONFIG_HOME':\n case 'XDG_BIN_HOME':\n return true;\n\n // direnv\n case 'DIRENV_DIR':\n case 'DIRENV_FILE':\n case 'DIRENV_WATCHES':\n case 'DIRENV_DIFF':\n return true;\n\n // Package-manager registry/install roots. No legitimate per-project `.env`\n // use case — the established mechanism for each is a dedicated config file\n // (`.npmrc`, `.yarnrc.yml`, `.bunfig.toml`) — and a malicious value is a\n // supply-chain RCE the moment the CLI shells out to npm/yarn/pnpm/bun.\n case 'NPM_CONFIG_REGISTRY':\n case 'NPM_CONFIG_PREFIX':\n case 'NPM_CONFIG_USERCONFIG':\n case 'NPM_CONFIG_GLOBALCONFIG':\n case 'NPM_CONFIG_CACHE':\n case 'YARN_REGISTRY':\n case 'YARN_CACHE_FOLDER':\n case 'YARN_GLOBAL_FOLDER':\n case 'PNPM_HOME':\n case 'BUN_INSTALL':\n case 'BUN_INSTALL_BIN':\n case 'COCOAPODS_HOME':\n case 'CMAKE_HOME':\n return true;\n\n default:\n return false;\n }\n}\n\n/**\n * Whether a dotenv key represents per-developer/per-machine configuration that\n * should only be loaded from `.local` env files (e.g. `.env.local`,\n * `.env.development.local`). Committed `.env*` files cannot set these — that\n * prevents a malicious project from redirecting developer-tool roots (e.g.\n * `ANDROID_HOME`) via a supply-chain attack, while still letting developers\n * pin them in their gitignored `.local` overrides.\n *\n * Honors `EXPO_UNSAFE_DOTENV_KEYS`: opt-in keys are allowed in any env file.\n */\nexport function isLocalEnvKey(name: string): boolean {\n if (safeKeys.has(name)) return false;\n switch (name) {\n // Android tooling\n case 'ANDROID_HOME':\n case 'ANDROID_SDK_ROOT':\n case 'ANDROID_NDK_HOME':\n case 'ANDROID_NDK_ROOT':\n case 'ANDROID_AVD_HOME':\n case 'ANDROID_EMULATOR_HOME':\n case 'GRADLE_HOME':\n case 'GRADLE_USER_HOME':\n case 'KOTLIN_HOME':\n return true;\n\n // JVM tooling\n case 'JAVA_HOME':\n case 'JDK_HOME':\n case 'JRE_HOME':\n return true;\n\n // Apple tooling\n case 'DEVELOPER_DIR':\n case 'XCODE_DEVELOPER_DIR_PATH':\n return true;\n\n // CocoaPods / Fastlane (secrets and non-exec config)\n case 'COCOAPODS_DISABLE_STATS':\n case 'FASTLANE_USER':\n case 'FASTLANE_PASSWORD':\n case 'FASTLANE_SESSION':\n case 'FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD':\n return true;\n\n // Android NDK (per-project NDK version pinning is common)\n case 'NDK_HOME':\n case 'NDK_ROOT':\n return true;\n\n // Per-developer preferences and per-machine setup\n case 'BROWSER':\n case 'BROWSER_ARGS':\n case 'HTTP_PROXY':\n case 'http_proxy':\n case 'HTTPS_PROXY':\n case 'https_proxy':\n case 'ALL_PROXY':\n case 'all_proxy':\n case 'NO_PROXY':\n case 'no_proxy':\n case 'FTP_PROXY':\n case 'ftp_proxy':\n case 'SSL_CRT_FILE':\n case 'SSL_KEY_FILE':\n case 'REACT_NATIVE_PACKAGER_HOSTNAME':\n return true;\n // NOTE(@kitten): Used to override where hermesc is found, not safe to read from .env\n case 'REACT_NATIVE_OVERRIDE_HERMES_DIR':\n return true;\n\n default:\n return false;\n }\n}\n"],"mappings":"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","ignoreList":[]}