Severian's picture
Upload 7464 files
c211499
raw
history blame
6.31 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getShas = exports.setEnvironmentVariable = exports.getEnvironmentVariable = exports.getEnvironmentVariables = exports.getLangChainEnvVars = exports.getRuntimeEnvironment = exports.getEnv = exports.isNode = exports.isDeno = exports.isJsDom = exports.isWebWorker = exports.isBrowser = void 0;
const isBrowser = () => typeof window !== "undefined" && typeof window.document !== "undefined";
exports.isBrowser = isBrowser;
const isWebWorker = () => typeof globalThis === "object" &&
globalThis.constructor &&
globalThis.constructor.name === "DedicatedWorkerGlobalScope";
exports.isWebWorker = isWebWorker;
const isJsDom = () => (typeof window !== "undefined" && window.name === "nodejs") ||
(typeof navigator !== "undefined" &&
(navigator.userAgent.includes("Node.js") ||
navigator.userAgent.includes("jsdom")));
exports.isJsDom = isJsDom;
// Supabase Edge Function provides a `Deno` global object
// without `version` property
const isDeno = () => typeof Deno !== "undefined";
exports.isDeno = isDeno;
// Mark not-as-node if in Supabase Edge Function
const isNode = () => typeof process !== "undefined" &&
typeof process.versions !== "undefined" &&
typeof process.versions.node !== "undefined" &&
!(0, exports.isDeno)();
exports.isNode = isNode;
const getEnv = () => {
let env;
if ((0, exports.isBrowser)()) {
env = "browser";
}
else if ((0, exports.isNode)()) {
env = "node";
}
else if ((0, exports.isWebWorker)()) {
env = "webworker";
}
else if ((0, exports.isJsDom)()) {
env = "jsdom";
}
else if ((0, exports.isDeno)()) {
env = "deno";
}
else {
env = "other";
}
return env;
};
exports.getEnv = getEnv;
let runtimeEnvironment;
async function getRuntimeEnvironment() {
if (runtimeEnvironment === undefined) {
const env = (0, exports.getEnv)();
const releaseEnv = getShas();
runtimeEnvironment = {
library: "langsmith",
runtime: env,
...releaseEnv,
};
}
return runtimeEnvironment;
}
exports.getRuntimeEnvironment = getRuntimeEnvironment;
/**
* Retrieves the LangChain-specific environment variables from the current runtime environment.
* Sensitive keys (containing the word "key") have their values redacted for security.
*
* @returns {Record<string, string>}
* - A record of LangChain-specific environment variables.
*/
function getLangChainEnvVars() {
const allEnvVars = getEnvironmentVariables() || {};
const envVars = {};
for (const [key, value] of Object.entries(allEnvVars)) {
if (key.startsWith("LANGCHAIN_") && typeof value === "string") {
envVars[key] = value;
}
}
for (const key in envVars) {
if (key.toLowerCase().includes("key") && typeof envVars[key] === "string") {
const value = envVars[key];
envVars[key] =
value.slice(0, 2) + "*".repeat(value.length - 4) + value.slice(-2);
}
}
return envVars;
}
exports.getLangChainEnvVars = getLangChainEnvVars;
/**
* Retrieves the environment variables from the current runtime environment.
*
* This function is designed to operate in a variety of JS environments,
* including Node.js, Deno, browsers, etc.
*
* @returns {Record<string, string> | undefined}
* - A record of environment variables if available.
* - `undefined` if the environment does not support or allows access to environment variables.
*/
function getEnvironmentVariables() {
try {
// Check for Node.js environment
// eslint-disable-next-line no-process-env
if (typeof process !== "undefined" && process.env) {
// eslint-disable-next-line no-process-env
Object.entries(process.env).reduce((acc, [key, value]) => {
acc[key] = String(value);
return acc;
}, {});
}
// For browsers and other environments, we may not have direct access to env variables
// Return undefined or any other fallback as required.
return undefined;
}
catch (e) {
// Catch any errors that might occur while trying to access environment variables
return undefined;
}
}
exports.getEnvironmentVariables = getEnvironmentVariables;
function getEnvironmentVariable(name) {
// Certain Deno setups will throw an error if you try to access environment variables
// https://github.com/hwchase17/langchainjs/issues/1412
try {
return typeof process !== "undefined"
? // eslint-disable-next-line no-process-env
process.env?.[name]
: undefined;
}
catch (e) {
return undefined;
}
}
exports.getEnvironmentVariable = getEnvironmentVariable;
function setEnvironmentVariable(name, value) {
if (typeof process !== "undefined") {
// eslint-disable-next-line no-process-env
process.env[name] = value;
}
}
exports.setEnvironmentVariable = setEnvironmentVariable;
let cachedCommitSHAs;
/**
* Get the Git commit SHA from common environment variables
* used by different CI/CD platforms.
* @returns {string | undefined} The Git commit SHA or undefined if not found.
*/
function getShas() {
if (cachedCommitSHAs !== undefined) {
return cachedCommitSHAs;
}
const common_release_envs = [
"VERCEL_GIT_COMMIT_SHA",
"NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA",
"COMMIT_REF",
"RENDER_GIT_COMMIT",
"CI_COMMIT_SHA",
"CIRCLE_SHA1",
"CF_PAGES_COMMIT_SHA",
"REACT_APP_GIT_SHA",
"SOURCE_VERSION",
"GITHUB_SHA",
"TRAVIS_COMMIT",
"GIT_COMMIT",
"BUILD_VCS_NUMBER",
"bamboo_planRepository_revision",
"Build.SourceVersion",
"BITBUCKET_COMMIT",
"DRONE_COMMIT_SHA",
"SEMAPHORE_GIT_SHA",
"BUILDKITE_COMMIT",
];
const shas = {};
for (const env of common_release_envs) {
const envVar = getEnvironmentVariable(env);
if (envVar !== undefined) {
shas[env] = envVar;
}
}
cachedCommitSHAs = shas;
return shas;
}
exports.getShas = getShas;