mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-19 02:51:14 +00:00
feat: Add support for $env in the js task runner (no-changelog) (#11177)
This commit is contained in:
75
packages/workflow/src/WorkflowDataProxyEnvProvider.ts
Normal file
75
packages/workflow/src/WorkflowDataProxyEnvProvider.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
import { ExpressionError } from './errors/expression.error';
|
||||
|
||||
export type EnvProviderState = {
|
||||
isProcessAvailable: boolean;
|
||||
isEnvAccessBlocked: boolean;
|
||||
env: Record<string, string>;
|
||||
};
|
||||
|
||||
/**
|
||||
* Captures a snapshot of the environment variables and configuration
|
||||
* that can be used to initialize an environment provider.
|
||||
*/
|
||||
export function createEnvProviderState(): EnvProviderState {
|
||||
const isProcessAvailable = typeof process !== 'undefined';
|
||||
const isEnvAccessBlocked = isProcessAvailable
|
||||
? process.env.N8N_BLOCK_ENV_ACCESS_IN_NODE === 'true'
|
||||
: false;
|
||||
const env: Record<string, string> =
|
||||
!isProcessAvailable || isEnvAccessBlocked ? {} : (process.env as Record<string, string>);
|
||||
|
||||
return {
|
||||
isProcessAvailable,
|
||||
isEnvAccessBlocked,
|
||||
env,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a proxy that provides access to the environment variables
|
||||
* in the `WorkflowDataProxy`. Use the `createEnvProviderState` to
|
||||
* create the default state object that is needed for the proxy,
|
||||
* unless you need something specific.
|
||||
*
|
||||
* @example
|
||||
* createEnvProvider(
|
||||
* runIndex,
|
||||
* itemIndex,
|
||||
* createEnvProviderState(),
|
||||
* )
|
||||
*/
|
||||
export function createEnvProvider(
|
||||
runIndex: number,
|
||||
itemIndex: number,
|
||||
providerState: EnvProviderState,
|
||||
): Record<string, string> {
|
||||
return new Proxy(
|
||||
{},
|
||||
{
|
||||
has() {
|
||||
return true;
|
||||
},
|
||||
|
||||
get(_, name) {
|
||||
if (name === 'isProxy') return true;
|
||||
|
||||
if (!providerState.isProcessAvailable) {
|
||||
throw new ExpressionError('not accessible via UI, please run node', {
|
||||
runIndex,
|
||||
itemIndex,
|
||||
});
|
||||
}
|
||||
if (providerState.isEnvAccessBlocked) {
|
||||
throw new ExpressionError('access to env vars denied', {
|
||||
causeDetailed:
|
||||
'If you need access please contact the administrator to remove the environment variable ‘N8N_BLOCK_ENV_ACCESS_IN_NODE‘',
|
||||
runIndex,
|
||||
itemIndex,
|
||||
});
|
||||
}
|
||||
|
||||
return providerState.env[name.toString()];
|
||||
},
|
||||
},
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user