Skip to content

Use browser-friendly process.env.* #729

Description

@davidmurdoch

The Node.js testing code left in the distributed SDK can cause problems with bundlers that don't need to mock Node's process emulation or process.env.* replacement (MetaMask is using one of these "lazy" bundlers).

const apiKey = process.env.ETHERSCAN_KEY;
const apiKeyParam = apiKey ? `&apiKey=${process.env.ETHERSCAN_KEY}` : '';

A potential fix:

function buildUrlForSupportedChainAndAddress({ supportedChain, address }) {
  const baseUrl = supportedChain.baseUrl;
  const apiRoute = supportedChain.apiRoute;
  const urlWithRoute = `${baseUrl}/${apiRoute}&address=${address}`;

  const apiKey = globalThis.process?.env?.ETHERSCAN_KEY;

  const apiKeyParam = apiKey ? `&apiKey=${apiKey}` : '';
  return urlWithRoute + apiKeyParam;
}

Since this looks to be an undocumented env var, I don't think this would break any contracts with code that depends on this behavior. However, there is a change this could break some "dumb" bundlers that use naive string/regex replacement, instead of AST-based replacemers.

If you need to support verbatim process.env.* something like this will likely work:

  const apiKey =
    (typeof globalThis !== "undefined" &&
      globalThis.process &&
      globalThis.process.env &&
      globalThis.process.env.ETHERSCAN_KEY) || 
    "";

  const apiKeyParam = apiKey ? `&apiKey=${apiKey}` : "";

There are probably other instances of env var injection left in the code that could use a similar "fix".

Of course, the most ideal situation is for code meant for testing would just be compiled out before publishing :-)

Let me know if you want either of these fixes, or something else, and I can open a PR for it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions