laplace-api
Version:
Client library for Laplace API for the US stock market and BIST (Istanbul stock market) fundamental financial data.
87 lines (70 loc) • 1.96 kB
text/typescript
import * as dotenv from "dotenv";
import * as envalid from "envalid";
const { str } = envalid;
export interface LaplaceConfigurationInterface {
baseURL?: string;
apiKey: string;
}
export class LaplaceConfiguration implements LaplaceConfigurationInterface {
baseURL: string;
apiKey: string;
constructor({
baseURL = "https://api.finfree.app",
apiKey,
}: LaplaceConfigurationInterface) {
this.baseURL = baseURL || "https://api.finfree.app";
this.apiKey = apiKey;
}
validate(): null | Error {
if (!this.apiKey) {
return new Error("API key is required");
}
// Remove baseURL validation since it's now optional
return null;
}
applyDefaults(): null | Error {
if (!this.baseURL) {
this.baseURL = "https://api.finfree.app";
}
return null;
}
}
function loadEnvironment(filename?: string): dotenv.DotenvConfigOutput {
if (filename) {
return dotenv.config({ path: filename, override: true });
} else {
return dotenv.config({ debug: false });
}
}
type ValidationFunc = (config: LaplaceConfiguration) => null | Error;
function validationFuncRegular(config: LaplaceConfiguration): null | Error {
return config.validate();
}
export function loadGlobal(
filename?: string,
validationFunc: ValidationFunc = validationFuncRegular
): LaplaceConfiguration {
const envLoadResult = loadEnvironment(filename);
if (envLoadResult.error) {
throw envLoadResult.error;
}
const env = envalid.cleanEnv(process.env, {
BASE_URL: str({ default: "https://api.finfree.app" }),
API_KEY: str(),
});
const config = new LaplaceConfiguration({
baseURL: env.BASE_URL,
apiKey: env.API_KEY,
});
const defaultError = config.applyDefaults();
if (defaultError) {
throw defaultError;
}
if (validationFunc) {
const validationError = validationFunc(config);
if (validationError) {
throw validationError;
}
}
return config;
}