import * as runtime from "./internal/runtime/mod"; /** Describes the running Encore application. */ export interface AppMeta { /** * The Encore application ID. If the application is not linked to the Encore platform this will be an empty string. * To link to the Encore platform run `encore app link` from your terminal in the root directory of the Encore app. */ appId: string; /** * The base URL which can be used to call the API of this running application. * * For local development it is "http://localhost:", typically "http://localhost:4000". * * If a custom domain is used for this environment it is returned here, but note that * changes only take effect at the time of deployment while custom domains can be updated at any time. */ apiBaseUrl: string; /** Information about the environment the app is running in. */ environment: EnvironmentMeta; /** Information about the build. */ build: BuildMeta; /** Information about the deployment. */ deploy: DeployMeta; } /** Describes the environment the Encore application is running in. */ export interface EnvironmentMeta { /** * The name of environment that this application. * For local development it is "local". */ name: string; /** * The type of environment is this application running in. * For local development it is "development". */ type: EnvironmentType; /** * The cloud this is running in. * For local development it is "local". */ cloud: CloudProvider; } /** Describes what type of environment the application is running in. */ export type EnvironmentType = // A production environment. | "production" // A long-lived cloud-hosted, non-production environment, such as test environments, or local development. | "development" // A short-lived cloud-hosted, non-production environments, such as preview environments | "ephemeral" // When running automated tests. | "test"; /** Describes what cloud provider the application is running in. */ export type CloudProvider = | "aws" // Amazon Web Services | "gcp" // Google Cloud Platform | "azure" // Microsoft Azure | "encore" // Encore Cloud. | "local"; // Local development /** Information about the build that formed the running application. */ export interface BuildMeta { /** The git commit that formed the base of this build. */ revision: string; /** Whether there were uncommitted changes on top of the commit. */ uncommittedChanges: boolean; } /** Information about the deployment of the running application. */ export interface DeployMeta { /** The unique id of the deployment. Generated by the Encore Platform. */ id: string; /** The services hosted by this deployment, keyed by the service name. */ hostedServices: Record; } export interface HostedService { /** The name of the service */ name: string; } /** * Returns metadata about the running Encore application. * * The metadata is cached and is the same object each call, * and therefore must not be modified by the caller. */ export function appMeta(): AppMeta { // Compute the metadata on first use. if (cached === null) { let rt = runtime.RT.appMeta(); cached = { appId: rt.appId, apiBaseUrl: rt.apiBaseUrl, environment: { name: rt.environment.name, type: envType(rt.environment.type), cloud: cloudProvider(rt.environment.cloud) }, build: { revision: rt.build.revision, uncommittedChanges: rt.build.uncommittedChanges }, deploy: { id: rt.deploy.id, hostedServices: rt.deploy.hostedServices } }; } return cached; } function envType(rtType: runtime.EnvironmentType): EnvironmentType { switch (rtType) { case runtime.EnvironmentType.Production: return "production"; case runtime.EnvironmentType.Development: return "development"; case runtime.EnvironmentType.Ephemeral: return "ephemeral"; case runtime.EnvironmentType.Test: return "test"; default: return "development"; } } function cloudProvider(rtType: runtime.CloudProvider): CloudProvider { switch (rtType) { case runtime.CloudProvider.AWS: return "aws"; case runtime.CloudProvider.GCP: return "gcp"; case runtime.CloudProvider.Azure: return "azure"; case runtime.CloudProvider.Encore: return "encore"; case runtime.CloudProvider.Local: return "local"; default: return "local"; } } // The cached app metadata. Set on first use. let cached: AppMeta | null = null;