From 6bbce4d10091f2fffacb1edb5c0f8526cea1f2db Mon Sep 17 00:00:00 2001 From: Blayne Chard Date: Thu, 15 May 2025 09:58:29 +1200 Subject: [PATCH 1/2] feat(lambda-tiler): expose configuration id and hash if present --- packages/config/src/memory/memory.config.ts | 7 ++++ .../lambda-tiler/src/__tests__/index.test.ts | 32 +++++++++++++++++-- packages/lambda-tiler/src/routes/version.ts | 24 ++++++++++++-- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/packages/config/src/memory/memory.config.ts b/packages/config/src/memory/memory.config.ts index 8a80772793..4803a9b842 100644 --- a/packages/config/src/memory/memory.config.ts +++ b/packages/config/src/memory/memory.config.ts @@ -69,8 +69,14 @@ function removeUndefined(obj: unknown): void { export class ConfigProviderMemory extends BasemapsConfigProvider { override type = 'memory' as const; + static is(cfg: BasemapsConfigProvider): cfg is ConfigProviderMemory { + return cfg.type === 'memory'; + } + /** Optional id of the configuration */ id?: string; + /** Optional hash of the config if the config was loaded from JSON */ + hash?: string; Imagery = new MemoryConfigObject(this, ConfigPrefix.Imagery); Style = new MemoryConfigObject(this, ConfigPrefix.Style); @@ -245,6 +251,7 @@ export class ConfigProviderMemory extends BasemapsConfigProvider { mem.assets = cfg.assets; mem.id = cfg.id; + mem.hash = cfg.hash; return mem; } diff --git a/packages/lambda-tiler/src/__tests__/index.test.ts b/packages/lambda-tiler/src/__tests__/index.test.ts index f3f0958ef1..a61268a606 100644 --- a/packages/lambda-tiler/src/__tests__/index.test.ts +++ b/packages/lambda-tiler/src/__tests__/index.test.ts @@ -1,7 +1,10 @@ import assert from 'node:assert'; import { afterEach, describe, it } from 'node:test'; +import { ConfigProviderMemory } from '@basemaps/config'; + import { handler } from '../index.js'; +import { ConfigLoader } from '../util/config.loader.js'; import { mockRequest } from './xyz.util.js'; describe('LambdaXyz index', () => { @@ -17,7 +20,10 @@ describe('LambdaXyz index', () => { delete process.env['BUILD_ID']; }); - it('should return version', async () => { + it('should return version', async (t) => { + const config = new ConfigProviderMemory(); + t.mock.method(ConfigLoader, 'getDefaultConfig', () => config); + process.env['GIT_VERSION'] = '1.2.3'; process.env['GIT_HASH'] = 'abc456'; @@ -32,7 +38,10 @@ describe('LambdaXyz index', () => { }); }); - it('should include buildId if exists', async () => { + it('should include buildId if exists', async (t) => { + const config = new ConfigProviderMemory(); + t.mock.method(ConfigLoader, 'getDefaultConfig', () => config); + process.env['GIT_VERSION'] = '1.2.3'; process.env['BUILD_ID'] = '1658821493-3'; @@ -46,6 +55,25 @@ describe('LambdaXyz index', () => { buildId: '1658821493-3', }); }); + + it('should return config information if present', async (t) => { + const config = new ConfigProviderMemory(); + t.mock.method(ConfigLoader, 'getDefaultConfig', () => config); + config.id = 'config-id'; + + const response = await handler.router.handle(mockRequest('/v1/version')); + assert.deepEqual(JSON.parse(response.body), { + version: 'dev', + config: { id: 'config-id' }, + }); + + config.hash = 'config-hash'; + const responseHash = await handler.router.handle(mockRequest('/v1/version')); + assert.deepEqual(JSON.parse(responseHash.body), { + version: 'dev', + config: { id: 'config-id', hash: 'config-hash' }, + }); + }); }); it('should respond to /ping', async () => { diff --git a/packages/lambda-tiler/src/routes/version.ts b/packages/lambda-tiler/src/routes/version.ts index a17b6d31bc..a7207525a9 100644 --- a/packages/lambda-tiler/src/routes/version.ts +++ b/packages/lambda-tiler/src/routes/version.ts @@ -1,6 +1,16 @@ -import { HttpHeader, LambdaHttpResponse } from '@linzjs/lambda'; +import { BasemapsConfigProvider, ConfigProviderMemory } from '@basemaps/config'; +import { HttpHeader, LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda'; -export function versionGet(): Promise { +import { ConfigLoader } from '../util/config.loader.js'; + +function getConfigHash(cfg: BasemapsConfigProvider): { id: string; hash?: string } | undefined { + if (!ConfigProviderMemory.is(cfg)) return undefined; + if (cfg.id == null) return undefined; + return { id: cfg.id, hash: cfg.hash }; +} + +export async function versionGet(req: LambdaHttpRequest): Promise { + const config = await ConfigLoader.load(req); const response = new LambdaHttpResponse(200, 'ok'); response.header(HttpHeader.CacheControl, 'no-store'); response.json({ @@ -9,16 +19,26 @@ export function versionGet(): Promise { * @example "v6.42.1" */ version: process.env['GIT_VERSION'] ?? 'dev', + /** * Full git commit hash * @example "e4231b1ee62c276c8657c56677ced02681dfe5d6" */ hash: process.env['GIT_HASH'], + /** + * * The exact build that this release was run from * @example "1658821493-3" */ buildId: process.env['BUILD_ID'], + + /** + * Configuration id that was used to power this config + * @example { "id": "cb_01JTQ7ZK49F8EY4N5DRJ3XFT73", hash: "HcByZ8WS2zpaTxFJp6wSKg2eUpwahLqAGEQdcDxKxqp6" } + */ + config: getConfigHash(config), }); + return Promise.resolve(response); } From 62aee0b54f425cfcdc4da1e92b52a46349e774db Mon Sep 17 00:00:00 2001 From: Blayne Chard Date: Thu, 15 May 2025 14:02:27 +1200 Subject: [PATCH 2/2] feat: allow config to be loaded from a enviroment variable --- .github/workflows/push.yml | 13 ++++++++ packages/_infra/README.md | 4 +++ packages/_infra/src/serve/lambda.tiler.ts | 2 ++ packages/cli-config/src/cli/action.import.ts | 31 ++++++------------- .../lambda-tiler/src/cli/render.preview.ts | 5 +-- packages/lambda-tiler/src/cli/render.tile.ts | 5 +-- .../src/routes/__tests__/fonts.test.ts | 28 ++--------------- .../lambda-tiler/src/util/config.loader.ts | 19 ++++++------ packages/server/src/config.ts | 20 ++---------- packages/server/src/server.ts | 8 +++-- packages/shared/src/config.ts | 15 --------- packages/shared/src/const.ts | 7 +++++ packages/shared/src/index.ts | 1 - 13 files changed, 61 insertions(+), 97 deletions(-) delete mode 100644 packages/shared/src/config.ts diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index e32b754ba0..8d095bc8bf 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -22,6 +22,10 @@ jobs: runs-on: ubuntu-latest concurrency: deploy-${{ github.ref }} + outputs: + # Current configuration location + config_location: ${{ steps.config.outputs.config_location }} + permissions: id-token: write contents: write @@ -73,6 +77,13 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} NODE_AUTH_TOKEN: ${{secrets.NPM_AUTH_TOKEN_LINZJS}} + - name: Get current configuration location + id: config + run: | + CONFIG_HASH=$(curl https://basemaps.linz.govt.nz/v1/version | jq .config.hash) + + echo "config_location=s3://linz-basemaps/config/config-${CONFIG_HASH}.json.gz" >> $GITHUB_OUTPUT + - name: Benchmark uses: blacha/hyperfine-action@v1 @@ -124,6 +135,7 @@ jobs: npx lerna run bundle --stream npx lerna run deploy:deploy --stream env: + BASEMAPS_CONFIG_LOCATION: "s3://linz-basemaps/config/" BASEMAPS_API_KEY_BLOCKS: ${{ secrets.BASEMAPS_API_KEY_BLOCKS }} GOOGLE_ANALYTICS: ${{ secrets.GOOGLE_ANALYTICS }} NODE_ENV: 'dev' @@ -180,6 +192,7 @@ jobs: npx lerna run bundle --stream npx lerna run deploy:deploy --stream env: + BASEMAPS_CONFIG_LOCATION: "s3://linz-basemaps/config/" BASEMAPS_API_KEY_BLOCKS: ${{ secrets.BASEMAPS_API_KEY_BLOCKS }} GOOGLE_ANALYTICS: ${{ secrets.GOOGLE_ANALYTICS }} NODE_ENV: 'production' diff --git a/packages/_infra/README.md b/packages/_infra/README.md index 4402b28db6..e11dd55661 100644 --- a/packages/_infra/README.md +++ b/packages/_infra/README.md @@ -29,6 +29,10 @@ CDK_DEFAULT_ACCOUNT; // Due to the convoluted way that TLS certificates are made inside LINZ a hard coded TLS ARN is needed for the Cloudfront CLOUDFRONT_CERTIFICATE_ARN; + +// Configuration is stored as JSON files, a configuration file is required generally stored in s3 +// eg: s3://linz-basemaps/config/config-:someConfigHash.json.gz +BASEMAPS_CONFIG_LOCATION; ``` For first usage you will need to bootstrap the account, this will create a s3 bucket to store CDK assets in diff --git a/packages/_infra/src/serve/lambda.tiler.ts b/packages/_infra/src/serve/lambda.tiler.ts index 9c75c060bd..660942a1a1 100644 --- a/packages/_infra/src/serve/lambda.tiler.ts +++ b/packages/_infra/src/serve/lambda.tiler.ts @@ -33,9 +33,11 @@ export class LambdaTiler extends Construct { const environment: Record = { [Env.PublicUrlBase]: config.PublicUrlBase, [Env.AwsRoleConfigPath]: `s3://${config.AwsRoleConfigBucket}/config.json`, + [Env.ConfigLocation]: Env.get(Env.ConfigLocation) as string, AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1', }; + if (environment[Env.ConfigLocation] == null) throw new Error(`$${Env.ConfigLocation} is required`); if (props.staticBucketName) { environment[Env.StaticAssetLocation] = `s3://${props.staticBucketName}/`; } diff --git a/packages/cli-config/src/cli/action.import.ts b/packages/cli-config/src/cli/action.import.ts index 7c47316c47..10fd5f5aaa 100644 --- a/packages/cli-config/src/cli/action.import.ts +++ b/packages/cli-config/src/cli/action.import.ts @@ -10,18 +10,9 @@ import { TileSetType, } from '@basemaps/config'; import { GoogleTms, Nztm2000QuadTms, TileMatrixSet } from '@basemaps/geo'; -import { - Env, - fsa, - getDefaultConfig, - getLogger, - getPreviewUrl, - logArguments, - LogType, - setDefaultConfig, -} from '@basemaps/shared'; +import { Env, fsa, getLogger, getPreviewUrl, logArguments, LogType } from '@basemaps/shared'; import { CliInfo } from '@basemaps/shared/build/cli/info.js'; -import { command, flag, option, optional, string } from 'cmd-ts'; +import { command, flag, option, string } from 'cmd-ts'; import fetch from 'node-fetch'; import { invalidateCache } from '../util.js'; @@ -49,7 +40,7 @@ export const ImportCommand = command({ description: 'Output a markdown file with the config changes', }), target: option({ - type: optional(string), + type: string, long: 'target', description: 'Target config file to compare', }), @@ -144,17 +135,13 @@ export const ImportCommand = command({ }, }); -async function getConfig(logger: LogType, target?: string): Promise { - if (target) { - logger.info({ config: target }, 'Import:Target:Load'); - const configJson = await fsa.readJson(fsa.toUrl(target)); - const mem = ConfigProviderMemory.fromJson(configJson); - mem.createVirtualTileSets(); +async function getConfig(logger: LogType, target: string): Promise { + logger.info({ config: target }, 'Import:Target:Load'); + const configJson = await fsa.readJson(fsa.toUrl(target)); + const mem = ConfigProviderMemory.fromJson(configJson); + mem.createVirtualTileSets(); - setDefaultConfig(mem); - return mem; - } - return getDefaultConfig(); + return mem; } const promises: Promise[] = []; diff --git a/packages/lambda-tiler/src/cli/render.preview.ts b/packages/lambda-tiler/src/cli/render.preview.ts index 5732ff11ab..0b7fe145c8 100644 --- a/packages/lambda-tiler/src/cli/render.preview.ts +++ b/packages/lambda-tiler/src/cli/render.preview.ts @@ -1,11 +1,12 @@ import { ConfigProviderMemory } from '@basemaps/config'; import { initConfigFromUrls } from '@basemaps/config-loader'; import { TileMatrixSet, TileMatrixSets } from '@basemaps/geo'; -import { fsa, LogConfig, setDefaultConfig } from '@basemaps/shared'; +import { fsa, LogConfig } from '@basemaps/shared'; import { LambdaHttpRequest, LambdaUrlRequest, UrlEvent } from '@linzjs/lambda'; import { Context } from 'aws-lambda'; import { renderPreview } from '../routes/preview.js'; +import { ConfigLoader } from '../util/config.loader.js'; const target = fsa.toUrl(`/home/blacha/tmp/basemaps/bm-724/test-north-island_20230220_10m/`); const location = { lat: -39.0852555, lon: 177.3998405 }; @@ -17,7 +18,7 @@ let tileMatrix: TileMatrixSet | null = null; async function main(): Promise { const log = LogConfig.get(); const provider = new ConfigProviderMemory(); - setDefaultConfig(provider); + ConfigLoader.setDefaultConfig(provider); const { tileSet, imagery } = await initConfigFromUrls(provider, [target]); if (tileSet.layers.length === 0) throw new Error('No imagery found in path: ' + target.href); diff --git a/packages/lambda-tiler/src/cli/render.tile.ts b/packages/lambda-tiler/src/cli/render.tile.ts index cf45995ce5..3875cb8544 100644 --- a/packages/lambda-tiler/src/cli/render.tile.ts +++ b/packages/lambda-tiler/src/cli/render.tile.ts @@ -1,12 +1,13 @@ import { ConfigProviderMemory } from '@basemaps/config'; import { initConfigFromUrls } from '@basemaps/config-loader'; import { Tile, TileMatrixSet, TileMatrixSets } from '@basemaps/geo'; -import { fsa, LogConfig, setDefaultConfig } from '@basemaps/shared'; +import { fsa, LogConfig } from '@basemaps/shared'; import { LambdaHttpRequest, LambdaUrlRequest, UrlEvent } from '@linzjs/lambda'; import { Context } from 'aws-lambda'; import { extname } from 'path'; import { TileXyzRaster } from '../routes/tile.xyz.raster.js'; +import { ConfigLoader } from '../util/config.loader.js'; // Render configuration const source = fsa.toUrl(`/home/blacha/data/elevation/christchurch_2020-2021/`); @@ -27,7 +28,7 @@ async function main(): Promise { const log = LogConfig.get(); log.level = 'trace'; const provider = new ConfigProviderMemory(); - setDefaultConfig(provider); + ConfigLoader.setDefaultConfig(provider); const { imagery, tileSets } = await initConfigFromUrls(provider, [source]); const tileSet = tileSets.find((f) => f.layers.length > 0); diff --git a/packages/lambda-tiler/src/routes/__tests__/fonts.test.ts b/packages/lambda-tiler/src/routes/__tests__/fonts.test.ts index 33d37cc9c5..106a17b3b6 100644 --- a/packages/lambda-tiler/src/routes/__tests__/fonts.test.ts +++ b/packages/lambda-tiler/src/routes/__tests__/fonts.test.ts @@ -1,8 +1,7 @@ import assert from 'node:assert'; import { afterEach, beforeEach, describe, it } from 'node:test'; -import { base58, BaseConfig, ConfigProviderMemory } from '@basemaps/config'; -import { setDefaultConfig } from '@basemaps/shared'; +import { base58, ConfigProviderMemory } from '@basemaps/config'; import { fsa, FsMemory } from '@chunkd/fs'; import { Api, mockRequest, mockUrlRequest } from '../../__tests__/xyz.util.js'; @@ -20,13 +19,14 @@ describe('/v1/fonts', () => { config.objects.clear(); fsa.register('memory://', memory); config.assets = 'memory://assets/'; - setDefaultConfig(config); + ConfigLoader.setDefaultConfig(config); }); afterEach(() => { CachedConfig.cache.clear(); CoSources.cache.clear(); memory.files.clear(); + ConfigLoader._defaultConfig = undefined; }); it('should return 404 if no font found', async (t) => { @@ -84,28 +84,6 @@ describe('/v1/fonts', () => { assert.equal(res.status, 404); }); - it('should get the correct utf8 font with default assets', async () => { - config.assets = undefined; - const configJson = config.toJson(); - await fsa.write(new URL(`memory://config-${configJson.hash}.json`), JSON.stringify(configJson)); - - config.objects.set('cb_latest', { - id: 'cb_latest', - name: 'latest', - path: `memory://config-${configJson.hash}.json`, - hash: configJson.hash, - assets: 'memory://new-location/', - } as BaseConfig); - - await fsa.write(new URL('memory://new-location/fonts/Roboto Thin/0-255.pbf'), Buffer.from('')); - const res255 = await handler.router.handle(mockRequest('/v1/fonts/Roboto Thin/0-255.pbf')); - assert.equal(res255.status, 200, res255.statusDescription); - assert.equal(res255.header('content-type'), 'application/x-protobuf'); - assert.equal(res255.header('content-encoding'), undefined); - assert.notEqual(res255.header('etag'), undefined); - assert.equal(res255.header('cache-control'), 'public, max-age=604800, stale-while-revalidate=86400'); - }); - it('should get the correct utf8 font with config assets', async (t) => { t.mock.method(ConfigLoader, 'getDefaultConfig', () => config); diff --git a/packages/lambda-tiler/src/util/config.loader.ts b/packages/lambda-tiler/src/util/config.loader.ts index 337043cb09..da5f47e60b 100644 --- a/packages/lambda-tiler/src/util/config.loader.ts +++ b/packages/lambda-tiler/src/util/config.loader.ts @@ -1,7 +1,6 @@ import { base58, BasemapsConfigProvider, isBase58 } from '@basemaps/config'; -import { fsa, getDefaultConfig } from '@basemaps/shared'; -import { LambdaHttpResponse } from '@linzjs/lambda'; -import { LambdaHttpRequest } from '@linzjs/lambda'; +import { Env, fsa } from '@basemaps/shared'; +import { LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda'; import { CachedConfig } from './config.cache.js'; @@ -17,20 +16,22 @@ const SafeBuckets = new Set([ const SafeProtocols = new Set([new URL('s3://foo').protocol, new URL('memory://foo.json').protocol]); export class ConfigLoader { + static _defaultConfig: BasemapsConfigProvider | undefined; + static setDefaultConfig(config: BasemapsConfigProvider): void { + this._defaultConfig = config; + } /** Exposed for testing */ static async getDefaultConfig(req?: LambdaHttpRequest): Promise { - const config = getDefaultConfig(); + if (ConfigLoader._defaultConfig) return ConfigLoader._defaultConfig; - // Look up the latest config bundle out of dynamodb, then load the config from the provided path - const cb = await config.ConfigBundle.get('cb_latest'); - if (cb == null) return config; + const configLocation = Env.get(Env.ConfigLocation); + if (configLocation == null) throw new Error(`Missing configuration: $${Env.ConfigLocation}`); req?.timer.start('config:load'); - return CachedConfig.get(fsa.toUrl(cb.path)).then((cfg) => { + return CachedConfig.get(fsa.toUrl(configLocation)).then((cfg) => { req?.timer.end('config:load'); if (cfg == null) throw new LambdaHttpResponse(500, 'Unable to find latest configuration'); - if (cfg.assets == null) cfg.assets = cb.assets; return cfg; }); } diff --git a/packages/server/src/config.ts b/packages/server/src/config.ts index 7e3e9e8dbd..fbe4972c64 100644 --- a/packages/server/src/config.ts +++ b/packages/server/src/config.ts @@ -1,6 +1,6 @@ -import { BasemapsConfigProvider, ConfigBundled, ConfigPrefix, ConfigProviderMemory } from '@basemaps/config'; +import { BasemapsConfigProvider, ConfigBundled, ConfigProviderMemory } from '@basemaps/config'; import { ConfigJson, initConfigFromUrls } from '@basemaps/config-loader'; -import { ConfigProviderDynamo, fsa, getDefaultConfig, LogType } from '@basemaps/shared'; +import { fsa, LogType } from '@basemaps/shared'; import pLimit from 'p-limit'; export type ServerOptions = (ServerOptionsTiffs | ServerOptionsConfig) & { configCache?: URL }; @@ -48,22 +48,6 @@ export async function loadConfig(opts: ServerOptions, logger: LogType): Promise< } const configPath = opts.config; - // Load config from dynamodb table - if (configPath.startsWith('dynamodb://')) { - const table = configPath.slice('dynamodb://'.length); - logger.info({ path: configPath, table, mode: 'dynamo' }, 'Starting Server'); - return new ConfigProviderDynamo(table); - } - - // Load a bundled config by loading it from the default dynamo reference - if (configPath.startsWith(ConfigPrefix.ConfigBundle)) { - const cb = await getDefaultConfig().ConfigBundle.get(configPath); - if (cb == null) throw new Error(`Config bundle does not exist ${configPath}`); - const configJson = await fsa.readJson(fsa.toUrl(cb.path)); - const mem = ConfigProviderMemory.fromJson(configJson); - mem.createVirtualTileSets(); - return mem; - } // Read a bundled config directly from a JSON file. if (configPath.endsWith('.json') || configPath.endsWith('.json.gz')) { diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index d27c2c7232..a6c2f684fa 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -1,7 +1,9 @@ // Fastfiy uses a lot of floating promises /* eslint-disable @typescript-eslint/no-floating-promises */ +import { BasemapsConfigProvider } from '@basemaps/config'; import { handler } from '@basemaps/lambda-tiler'; -import { Env, fsa, getDefaultConfig, LogType, setDefaultConfig } from '@basemaps/shared'; +import { ConfigLoader } from '@basemaps/lambda-tiler/src/util/config.loader.js'; +import { Env, fsa, LogType } from '@basemaps/shared'; import formBodyPlugin from '@fastify/formbody'; import fastifyStatic from '@fastify/static'; import { LambdaUrlRequest, UrlEvent } from '@linzjs/lambda'; @@ -35,13 +37,13 @@ export async function createServer(opts: ServerOptions, logger: LogType): Promis BasemapsServer.register(formBodyPlugin.default); const cfg = await loadConfig(opts, logger); - setDefaultConfig(cfg); + ConfigLoader.getDefaultConfig = (): Promise => Promise.resolve(cfg); if (opts.assets) { const isExists = await fsa.exists(fsa.toUrl(opts.assets)); if (!isExists) throw new Error(`--assets path "${opts.assets}" does not exist`); logger.info({ path: opts.assets }, 'Config:Assets'); - getDefaultConfig().assets = opts.assets; + cfg.assets = opts.assets; } const landingLocation = getLandingLocation(); diff --git a/packages/shared/src/config.ts b/packages/shared/src/config.ts deleted file mode 100644 index 80ac71c23a..0000000000 --- a/packages/shared/src/config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { BasemapsConfigProvider } from '@basemaps/config'; - -import { Const } from './const.js'; -import { ConfigProviderDynamo } from './dynamo/dynamo.config.js'; - -let ConfigDefault: BasemapsConfigProvider = new ConfigProviderDynamo(Const.TileMetadata.TableName); - -export function setDefaultConfig(cfg: BasemapsConfigProvider): BasemapsConfigProvider { - ConfigDefault = cfg; - return ConfigDefault; -} - -export function getDefaultConfig(): BasemapsConfigProvider { - return ConfigDefault; -} diff --git a/packages/shared/src/const.ts b/packages/shared/src/const.ts index d30fc84685..aa303572fc 100644 --- a/packages/shared/src/const.ts +++ b/packages/shared/src/const.ts @@ -49,6 +49,13 @@ export const Env = { */ BlockedApiKeys: 'BASEMAPS_API_KEY_BLOCKS', + /** + * Location of the default configuration for basemaps + * + * @example "s3://linz-basemaps/config/config-1234.json.gz" + */ + ConfigLocation: 'BASEMAPS_CONFIG_LOCATION', + Gdal: { /** Should the gdal docker container be used? */ UseDocker: 'GDAL_DOCKER', diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 4852e2e469..8d4ca3b5a3 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -4,7 +4,6 @@ export * from './api.js'; export { isArgo } from './cli/argo.js'; export { getLogger, logArguments } from './cli/log.js'; export { RgbaType, Url, UrlArrayJsonFile, UrlFolder } from './cli/parsers.js'; -export { getDefaultConfig, setDefaultConfig } from './config.js'; export { Const, Env } from './const.js'; export { ConfigDynamoBase } from './dynamo/dynamo.config.base.js'; export { ConfigProviderDynamo } from './dynamo/dynamo.config.js';