@basemaps/lambda-tiler 8.13.0 → 8.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/build/cli/render.tile.js +16 -6
- package/build/cli/render.tile.js.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/routes/__tests__/health.test.js +7 -14
- package/build/routes/__tests__/health.test.js.map +1 -1
- package/build/util/config.loader.d.ts +1 -0
- package/build/util/config.loader.js +11 -7
- package/build/util/config.loader.js.map +1 -1
- package/package.json +9 -9
- package/src/cli/render.tile.ts +23 -7
- package/src/index.ts +2 -1
- package/src/routes/__tests__/health.test.ts +7 -20
- package/src/util/config.loader.ts +13 -7
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,38 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [8.13.2](https://github.com/linz/basemaps/compare/lambda-tiler-v8.13.1...lambda-tiler-v8.13.2) (2026-05-17)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Dependencies
|
|
10
|
+
|
|
11
|
+
* The following workspace dependencies were updated
|
|
12
|
+
* dependencies
|
|
13
|
+
* @basemaps/config bumped from ^8.13.1 to ^8.13.2
|
|
14
|
+
* @basemaps/config-loader bumped from ^8.12.4 to ^8.12.5
|
|
15
|
+
* @basemaps/geo bumped from ^8.9.0 to ^8.9.1
|
|
16
|
+
* @basemaps/shared bumped from ^8.9.8 to ^8.9.9
|
|
17
|
+
* @basemaps/tiler bumped from ^8.12.2 to ^8.12.3
|
|
18
|
+
* @basemaps/tiler-sharp bumped from ^8.11.5 to ^8.11.6
|
|
19
|
+
* devDependencies
|
|
20
|
+
* @basemaps/attribution bumped from ^8.9.0 to ^8.9.1
|
|
21
|
+
|
|
22
|
+
## [8.13.1](https://github.com/linz/basemaps/compare/lambda-tiler-v8.13.0...lambda-tiler-v8.13.1) (2026-02-26)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* lower memory usage when rendering from large amounts of tiffs BM-1535 ([#3605](https://github.com/linz/basemaps/issues/3605)) ([9dc711d](https://github.com/linz/basemaps/commit/9dc711daf77a904ddb3b1d9b1083e01d0ef37818))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Dependencies
|
|
31
|
+
|
|
32
|
+
* The following workspace dependencies were updated
|
|
33
|
+
* dependencies
|
|
34
|
+
* @basemaps/config-loader bumped from ^8.12.3 to ^8.12.4
|
|
35
|
+
* @basemaps/shared bumped from ^8.9.7 to ^8.9.8
|
|
36
|
+
* @basemaps/tiler-sharp bumped from ^8.11.4 to ^8.11.5
|
|
37
|
+
|
|
6
38
|
## [8.13.0](https://github.com/linz/basemaps/compare/lambda-tiler-v8.12.2...lambda-tiler-v8.13.0) (2026-02-15)
|
|
7
39
|
|
|
8
40
|
|
package/build/cli/render.tile.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ConfigProviderMemory } from '@basemaps/config';
|
|
2
2
|
import { initConfigFromUrls } from '@basemaps/config-loader';
|
|
3
3
|
import { TileMatrixSets } from '@basemaps/geo';
|
|
4
|
-
import { fsa, LogConfig, setDefaultConfig } from '@basemaps/shared';
|
|
4
|
+
import { fsa, FsaLocalCache, LogConfig, setDefaultConfig } from '@basemaps/shared';
|
|
5
5
|
import { LambdaUrlRequest } from '@linzjs/lambda';
|
|
6
6
|
import { extname } from 'path';
|
|
7
7
|
import { TileXyzRaster } from '../routes/tile.xyz.raster.js';
|
|
@@ -21,6 +21,7 @@ if (sourceRaw == null || tilePath == null) {
|
|
|
21
21
|
`);
|
|
22
22
|
process.exit(1);
|
|
23
23
|
}
|
|
24
|
+
fsa.middleware.push(FsaLocalCache);
|
|
24
25
|
const source = fsa.toUrl(sourceRaw);
|
|
25
26
|
const tile = fromPath(tilePath);
|
|
26
27
|
let tileMatrix = null;
|
|
@@ -38,13 +39,22 @@ function fromPath(s) {
|
|
|
38
39
|
}
|
|
39
40
|
return tile;
|
|
40
41
|
}
|
|
42
|
+
async function loadConfig(url) {
|
|
43
|
+
if (url.pathname.endsWith('.json') || url.pathname.endsWith('.json.gz')) {
|
|
44
|
+
const cfg = ConfigProviderMemory.fromJson(await fsa.readJson(url), url);
|
|
45
|
+
LogConfig.get().info({ url: url.href }, 'ConfigLoaded');
|
|
46
|
+
const imagery = [...cfg.objects.values()].filter((f) => f.id.startsWith('im_'));
|
|
47
|
+
return { tileSet: cfg.imageryToTileSetByName(imagery[0]), imagery, cfg };
|
|
48
|
+
}
|
|
49
|
+
const cfg = new ConfigProviderMemory();
|
|
50
|
+
const { imagery } = await initConfigFromUrls(cfg, [url]);
|
|
51
|
+
return { tileSet: cfg.imageryToTileSetByName(imagery[0]), imagery, cfg };
|
|
52
|
+
}
|
|
41
53
|
async function main() {
|
|
42
54
|
const log = LogConfig.get();
|
|
43
|
-
log.level = 'trace';
|
|
44
|
-
const
|
|
45
|
-
setDefaultConfig(
|
|
46
|
-
const { imagery } = await initConfigFromUrls(provider, [source]);
|
|
47
|
-
const tileSet = provider.imageryToTileSetByName(imagery[0]);
|
|
55
|
+
log.level = process.argv.includes('--verbose') ? 'trace' : 'debug';
|
|
56
|
+
const { tileSet, imagery, cfg } = await loadConfig(source);
|
|
57
|
+
setDefaultConfig(cfg);
|
|
48
58
|
log.info({ tileSet: tileSet.name, layers: tileSet.layers.length }, 'TileSet:Loaded');
|
|
49
59
|
for (const im of imagery) {
|
|
50
60
|
log.info({ url: im.uri, title: im.title, tileMatrix: im.tileMatrix, files: im.files.length }, 'Imagery:Loaded');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.tile.js","sourceRoot":"","sources":["../../src/cli/render.tile.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"render.tile.js","sourceRoot":"","sources":["../../src/cli/render.tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,oBAAoB,EAAuB,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAuB,cAAc,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAqB,gBAAgB,EAAY,MAAM,gBAAgB,CAAC;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEjC,IAAI,SAAS,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;IAC1C,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC;;;;;;;;GAQX,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAEnC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAChC,IAAI,UAAU,GAAyB,IAAI,CAAC;AAE5C,gEAAgE;AAChE,SAAS,QAAQ,CAAC,CAAS;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAEvE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,GAAQ;IAER,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxE,MAAM,GAAG,GAAG,oBAAoB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACxE,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAoB,CAAC;QACnG,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACvC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;IAC5B,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAEnE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3D,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAEtB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAErF,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAChH,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACvB,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,wBAAwB,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,IAAI,UAAU,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAc,EAAE,EAAa,EAAE,GAAG,CAAsB,CAAC;IAE3G,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;QACrD,IAAI;QACJ,UAAU;QACV,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,QAAQ,EAAE,IAAI,CAAC,SAAS;QACxB,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpD,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3F,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACvE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -43,10 +43,10 @@ handler.router.hook('request', (req) => {
|
|
|
43
43
|
FsaLog.reset();
|
|
44
44
|
randomTrace(req);
|
|
45
45
|
req.set('name', 'LambdaTiler');
|
|
46
|
+
req.log.debug({ ...req.logContext }, 'Lambda:Start');
|
|
46
47
|
});
|
|
47
48
|
handler.router.hook('response', (req, res) => {
|
|
48
49
|
req.set('fetchCount', FsaLog.count);
|
|
49
|
-
req.set('fetches', FsaLog.requests);
|
|
50
50
|
req.set('cacheSize', FsaCache.size);
|
|
51
51
|
// Force access-control-allow-origin to everything
|
|
52
52
|
res.header('access-control-allow-origin', '*');
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAqB,kBAAkB,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;AAEhD,wGAAwG;AACxG,OAAO,CAAC,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;AAEtC,SAAS,WAAW,CAAC,GAAsB;IACzC,yDAAyD;IACzD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC;QACxB,OAAO;IACT,CAAC;IAED,4CAA4C;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3B,WAAW;IACX,IAAI,IAAI,GAAG,IAAI;QAAE,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC;IACzC,YAAY;SACP,IAAI,IAAI,GAAG,IAAI;QAAE,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC;IAC9C,uBAAuB;;QAClB,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;AAC9B,CAAC;AAED,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;IACrC,UAAU,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,WAAW,CAAC,GAAG,CAAC,CAAC;IAEjB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,14 @@
|
|
|
1
1
|
import assert from 'node:assert';
|
|
2
2
|
import { afterEach, before, beforeEach, describe, it } from 'node:test';
|
|
3
3
|
import { ConfigProviderMemory } from '@basemaps/config';
|
|
4
|
-
import {
|
|
5
|
-
import { LambdaAlbRequest, LambdaHttpResponse } from '@linzjs/lambda';
|
|
4
|
+
import { LambdaHttpResponse } from '@linzjs/lambda';
|
|
6
5
|
import sinon from 'sinon';
|
|
7
6
|
import { FakeData } from '../../__tests__/config.data.js';
|
|
7
|
+
import { mockRequest } from '../../__tests__/xyz.util.js';
|
|
8
8
|
import { ConfigLoader } from '../../util/config.loader.js';
|
|
9
9
|
import { getTestBuffer, healthGet, TestTiles, VectorTileProvider } from '../health.js';
|
|
10
10
|
import { TileXyzRaster } from '../tile.xyz.raster.js';
|
|
11
11
|
import { tileXyzVector } from '../tile.xyz.vector.js';
|
|
12
|
-
const ctx = new LambdaAlbRequest({
|
|
13
|
-
requestContext: null,
|
|
14
|
-
httpMethod: 'get',
|
|
15
|
-
path: '/v1/tiles/health',
|
|
16
|
-
body: null,
|
|
17
|
-
isBase64Encoded: false,
|
|
18
|
-
}, {}, LogConfig.get());
|
|
19
12
|
// Function to create a vector tile with specific properties for testing
|
|
20
13
|
function createTestTile(testFeatures) {
|
|
21
14
|
const layers = {};
|
|
@@ -48,13 +41,13 @@ describe('/v1/health', () => {
|
|
|
48
41
|
config.objects.clear();
|
|
49
42
|
sandbox.restore();
|
|
50
43
|
});
|
|
51
|
-
it('Should return bad response', () => {
|
|
44
|
+
it('Should return bad response', async () => {
|
|
52
45
|
// Given ... a bad get tile response
|
|
53
46
|
const BadResponse = new LambdaHttpResponse(500, 'Can not get Tile Set.');
|
|
54
47
|
sandbox.stub(TileXyzRaster, 'tile').resolves(BadResponse);
|
|
55
48
|
sandbox.stub(tileXyzVector, 'tile').resolves(BadResponse);
|
|
56
49
|
// When ...Then ...
|
|
57
|
-
assert.rejects(() => healthGet(
|
|
50
|
+
await assert.rejects(() => healthGet(mockRequest('/v1/tiles/health')), BadResponse);
|
|
58
51
|
});
|
|
59
52
|
const Response1 = new LambdaHttpResponse(200, 'ok');
|
|
60
53
|
const Response2 = new LambdaHttpResponse(200, 'ok');
|
|
@@ -76,18 +69,18 @@ describe('/v1/health', () => {
|
|
|
76
69
|
callbackVectorTile.onCall(0).resolves(testVectorTile1);
|
|
77
70
|
callbackVectorTile.onCall(1).resolves(testVectorTile2);
|
|
78
71
|
// When ...
|
|
79
|
-
const res = await healthGet(
|
|
72
|
+
const res = await healthGet(mockRequest('/v1/tiles/health'));
|
|
80
73
|
// Then ...
|
|
81
74
|
assert.equal(res.status, 200);
|
|
82
75
|
assert.equal(res.statusDescription, 'ok');
|
|
83
76
|
});
|
|
84
|
-
it('Should return mis-match tile response', () => {
|
|
77
|
+
it('Should return mis-match tile response', async () => {
|
|
85
78
|
// Given ... a bad get tile response for second get tile
|
|
86
79
|
const callback = sandbox.stub(TileXyzRaster, 'tile');
|
|
87
80
|
callback.onCall(0).resolves(Response2);
|
|
88
81
|
// When ... Then ...
|
|
89
82
|
const BadResponse = new LambdaHttpResponse(500, 'TileSet does not match.');
|
|
90
|
-
assert.rejects(() => healthGet(
|
|
83
|
+
await assert.rejects(() => healthGet(mockRequest('/v1/tiles/health')), BadResponse);
|
|
91
84
|
});
|
|
92
85
|
});
|
|
93
86
|
//# sourceMappingURL=health.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.test.js","sourceRoot":"","sources":["../../../src/routes/__tests__/health.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"health.test.js","sourceRoot":"","sources":["../../../src/routes/__tests__/health.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,5 @@ export declare class ConfigLoader {
|
|
|
6
6
|
/** Lookup the config path from a request and return a standardized location */
|
|
7
7
|
static extract(req: LambdaHttpRequest): string | null;
|
|
8
8
|
static load(req: LambdaHttpRequest): Promise<BasemapsConfigProvider>;
|
|
9
|
+
static _load(req: LambdaHttpRequest): Promise<BasemapsConfigProvider>;
|
|
9
10
|
}
|
|
@@ -19,9 +19,9 @@ export class ConfigLoader {
|
|
|
19
19
|
const cb = await config.ConfigBundle.get('cb_latest');
|
|
20
20
|
if (cb == null)
|
|
21
21
|
return config;
|
|
22
|
-
|
|
23
|
-
return CachedConfig.get(
|
|
24
|
-
req?.
|
|
22
|
+
const configUrl = fsa.toUrl(cb.path);
|
|
23
|
+
return CachedConfig.get(configUrl).then((cfg) => {
|
|
24
|
+
req?.set('config', configUrl.href);
|
|
25
25
|
if (cfg == null)
|
|
26
26
|
throw new LambdaHttpResponse(500, 'Unable to find latest configuration');
|
|
27
27
|
if (cfg.assets == null)
|
|
@@ -39,9 +39,15 @@ export class ConfigLoader {
|
|
|
39
39
|
return rawLocation;
|
|
40
40
|
}
|
|
41
41
|
static async load(req) {
|
|
42
|
+
req.timer.start('config:load');
|
|
43
|
+
const config = await this._load(req);
|
|
44
|
+
req.timer.end('config:load');
|
|
45
|
+
return config;
|
|
46
|
+
}
|
|
47
|
+
static async _load(req) {
|
|
42
48
|
const rawLocation = req.query.get('config');
|
|
43
49
|
if (rawLocation == null)
|
|
44
|
-
return this.getDefaultConfig();
|
|
50
|
+
return this.getDefaultConfig(req);
|
|
45
51
|
const configLocation = isBase58(rawLocation) ? Buffer.from(base58.decode(rawLocation)).toString() : rawLocation;
|
|
46
52
|
const configUrl = fsa.toUrl(configLocation);
|
|
47
53
|
if (configUrl == null)
|
|
@@ -52,10 +58,8 @@ export class ConfigLoader {
|
|
|
52
58
|
if (!SafeBuckets.has(configUrl.hostname)) {
|
|
53
59
|
throw new LambdaHttpResponse(400, `Bucket: "${configUrl.hostname}" is not a allowed bucket location`);
|
|
54
60
|
}
|
|
55
|
-
req.set('config', configUrl.href);
|
|
56
|
-
req.timer.start('config:load');
|
|
57
61
|
return CachedConfig.get(configUrl).then((f) => {
|
|
58
|
-
req.
|
|
62
|
+
req.set('config', configUrl.href);
|
|
59
63
|
if (f == null)
|
|
60
64
|
throw new LambdaHttpResponse(400, `Invalid config location at ${configLocation}`);
|
|
61
65
|
return f;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.loader.js","sourceRoot":"","sources":["../../src/util/config.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA0B,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,+CAA+C;AAC/C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,wBAAwB;IACxB,yBAAyB;IACzB,eAAe;IACf,uBAAuB;IACvB,uBAAuB;CACxB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAErG,MAAM,OAAO,YAAY;IACvB,0BAA0B;IAC1B,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAuB;QACnD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAElC,gGAAgG;QAChG,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,EAAE,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC;QAE9B,GAAG,
|
|
1
|
+
{"version":3,"file":"config.loader.js","sourceRoot":"","sources":["../../src/util/config.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA0B,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,+CAA+C;AAC/C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,wBAAwB;IACxB,yBAAyB;IACzB,eAAe;IACf,uBAAuB;IACvB,uBAAuB;CACxB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAErG,MAAM,OAAO,YAAY;IACvB,0BAA0B;IAC1B,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAuB;QACnD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAElC,gGAAgG;QAChG,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,EAAE,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC;QAE9B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9C,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,GAAG,IAAI,IAAI;gBAAE,MAAM,IAAI,kBAAkB,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;YAC1F,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI;gBAAE,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;YAC/C,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,OAAO,CAAC,GAAsB;QACnC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,WAAW,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9E,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAsB;QACtC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAsB;QACvC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,WAAW,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE3D,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QAChH,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAE5C,IAAI,SAAS,IAAI,IAAI;YAAE,MAAM,IAAI,kBAAkB,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;QACpF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,kBAAkB,CAAC,GAAG,EAAE,2CAA2C,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,kBAAkB,CAAC,GAAG,EAAE,YAAY,SAAS,CAAC,QAAQ,oCAAoC,CAAC,CAAC;QACxG,CAAC;QAED,OAAO,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5C,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAElC,IAAI,CAAC,IAAI,IAAI;gBAAE,MAAM,IAAI,kBAAkB,CAAC,GAAG,EAAE,8BAA8B,cAAc,EAAE,CAAC,CAAC;YACjG,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@basemaps/lambda-tiler",
|
|
3
|
-
"version": "8.13.
|
|
3
|
+
"version": "8.13.2",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/linz/basemaps.git",
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"types": "./build/index.d.ts",
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@basemaps/config": "^8.13.
|
|
26
|
-
"@basemaps/config-loader": "^8.12.
|
|
27
|
-
"@basemaps/geo": "^8.9.
|
|
28
|
-
"@basemaps/shared": "^8.9.
|
|
29
|
-
"@basemaps/tiler": "^8.12.
|
|
30
|
-
"@basemaps/tiler-sharp": "^8.11.
|
|
25
|
+
"@basemaps/config": "^8.13.2",
|
|
26
|
+
"@basemaps/config-loader": "^8.12.5",
|
|
27
|
+
"@basemaps/geo": "^8.9.1",
|
|
28
|
+
"@basemaps/shared": "^8.9.9",
|
|
29
|
+
"@basemaps/tiler": "^8.12.3",
|
|
30
|
+
"@basemaps/tiler-sharp": "^8.11.6",
|
|
31
31
|
"@linzjs/geojson": "^8.0.0",
|
|
32
32
|
"@linzjs/lambda": "^4.2.0",
|
|
33
33
|
"@mapbox/vector-tile": "^2.0.3",
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
"bundle": "./bundle.sh"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@basemaps/attribution": "^8.9.
|
|
53
|
+
"@basemaps/attribution": "^8.9.1",
|
|
54
54
|
"@chunkd/fs": "^11.2.0",
|
|
55
55
|
"@types/aws-lambda": "^8.10.75",
|
|
56
56
|
"@types/pixelmatch": "^5.0.0",
|
|
57
57
|
"pretty-json-log": "^1.0.0"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "0ed5769fbfc070ca14c95a498a80eff05128203f"
|
|
60
60
|
}
|
package/src/cli/render.tile.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ConfigProviderMemory } from '@basemaps/config';
|
|
1
|
+
import { ConfigImagery, ConfigProviderMemory, ConfigTileSetRaster } from '@basemaps/config';
|
|
2
2
|
import { initConfigFromUrls } from '@basemaps/config-loader';
|
|
3
3
|
import { Tile, TileMatrixSet, TileMatrixSets } from '@basemaps/geo';
|
|
4
|
-
import { fsa, LogConfig, setDefaultConfig } from '@basemaps/shared';
|
|
4
|
+
import { fsa, FsaLocalCache, LogConfig, setDefaultConfig } from '@basemaps/shared';
|
|
5
5
|
import { LambdaHttpRequest, LambdaUrlRequest, UrlEvent } from '@linzjs/lambda';
|
|
6
6
|
import { Context } from 'aws-lambda';
|
|
7
7
|
import { extname } from 'path';
|
|
@@ -25,6 +25,9 @@ if (sourceRaw == null || tilePath == null) {
|
|
|
25
25
|
`);
|
|
26
26
|
process.exit(1);
|
|
27
27
|
}
|
|
28
|
+
|
|
29
|
+
fsa.middleware.push(FsaLocalCache);
|
|
30
|
+
|
|
28
31
|
const source = fsa.toUrl(sourceRaw);
|
|
29
32
|
const tile = fromPath(tilePath);
|
|
30
33
|
let tileMatrix: TileMatrixSet | null = null;
|
|
@@ -43,14 +46,27 @@ function fromPath(s: string): Tile & { extension: string } {
|
|
|
43
46
|
return tile;
|
|
44
47
|
}
|
|
45
48
|
|
|
49
|
+
async function loadConfig(
|
|
50
|
+
url: URL,
|
|
51
|
+
): Promise<{ tileSet: ConfigTileSetRaster; imagery: ConfigImagery[]; cfg: ConfigProviderMemory }> {
|
|
52
|
+
if (url.pathname.endsWith('.json') || url.pathname.endsWith('.json.gz')) {
|
|
53
|
+
const cfg = ConfigProviderMemory.fromJson(await fsa.readJson(url), url);
|
|
54
|
+
LogConfig.get().info({ url: url.href }, 'ConfigLoaded');
|
|
55
|
+
const imagery = [...cfg.objects.values()].filter((f) => f.id.startsWith('im_')) as ConfigImagery[];
|
|
56
|
+
return { tileSet: cfg.imageryToTileSetByName(imagery[0]), imagery, cfg };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const cfg = new ConfigProviderMemory();
|
|
60
|
+
const { imagery } = await initConfigFromUrls(cfg, [url]);
|
|
61
|
+
return { tileSet: cfg.imageryToTileSetByName(imagery[0]), imagery, cfg };
|
|
62
|
+
}
|
|
63
|
+
|
|
46
64
|
async function main(): Promise<void> {
|
|
47
65
|
const log = LogConfig.get();
|
|
48
|
-
log.level = 'trace';
|
|
49
|
-
const provider = new ConfigProviderMemory();
|
|
50
|
-
setDefaultConfig(provider);
|
|
51
|
-
const { imagery } = await initConfigFromUrls(provider, [source]);
|
|
66
|
+
log.level = process.argv.includes('--verbose') ? 'trace' : 'debug';
|
|
52
67
|
|
|
53
|
-
const tileSet =
|
|
68
|
+
const { tileSet, imagery, cfg } = await loadConfig(source);
|
|
69
|
+
setDefaultConfig(cfg);
|
|
54
70
|
|
|
55
71
|
log.info({ tileSet: tileSet.name, layers: tileSet.layers.length }, 'TileSet:Loaded');
|
|
56
72
|
|
package/src/index.ts
CHANGED
|
@@ -48,11 +48,12 @@ handler.router.hook('request', (req) => {
|
|
|
48
48
|
randomTrace(req);
|
|
49
49
|
|
|
50
50
|
req.set('name', 'LambdaTiler');
|
|
51
|
+
|
|
52
|
+
req.log.debug({ ...req.logContext }, 'Lambda:Start');
|
|
51
53
|
});
|
|
52
54
|
|
|
53
55
|
handler.router.hook('response', (req, res) => {
|
|
54
56
|
req.set('fetchCount', FsaLog.count);
|
|
55
|
-
req.set('fetches', FsaLog.requests);
|
|
56
57
|
req.set('cacheSize', FsaCache.size);
|
|
57
58
|
// Force access-control-allow-origin to everything
|
|
58
59
|
res.header('access-control-allow-origin', '*');
|
|
@@ -2,30 +2,17 @@ import assert from 'node:assert';
|
|
|
2
2
|
import { afterEach, before, beforeEach, describe, it } from 'node:test';
|
|
3
3
|
|
|
4
4
|
import { ConfigProviderMemory } from '@basemaps/config';
|
|
5
|
-
import {
|
|
6
|
-
import { LambdaAlbRequest, LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda';
|
|
5
|
+
import { LambdaHttpResponse } from '@linzjs/lambda';
|
|
7
6
|
import { VectorTile, VectorTileFeature, VectorTileLayer } from '@mapbox/vector-tile';
|
|
8
|
-
import { ALBEventRequestContext, Context } from 'aws-lambda';
|
|
9
7
|
import sinon from 'sinon';
|
|
10
8
|
|
|
11
9
|
import { FakeData } from '../../__tests__/config.data.js';
|
|
10
|
+
import { mockRequest } from '../../__tests__/xyz.util.js';
|
|
12
11
|
import { ConfigLoader } from '../../util/config.loader.js';
|
|
13
12
|
import { getTestBuffer, healthGet, TestFeature, TestTiles, VectorTileProvider } from '../health.js';
|
|
14
13
|
import { TileXyzRaster } from '../tile.xyz.raster.js';
|
|
15
14
|
import { tileXyzVector } from '../tile.xyz.vector.js';
|
|
16
15
|
|
|
17
|
-
const ctx: LambdaHttpRequest = new LambdaAlbRequest(
|
|
18
|
-
{
|
|
19
|
-
requestContext: null as unknown as ALBEventRequestContext,
|
|
20
|
-
httpMethod: 'get',
|
|
21
|
-
path: '/v1/tiles/health',
|
|
22
|
-
body: null,
|
|
23
|
-
isBase64Encoded: false,
|
|
24
|
-
},
|
|
25
|
-
{} as Context,
|
|
26
|
-
LogConfig.get(),
|
|
27
|
-
);
|
|
28
|
-
|
|
29
16
|
// Function to create a vector tile with specific properties for testing
|
|
30
17
|
function createTestTile(testFeatures: TestFeature[]): VectorTile {
|
|
31
18
|
const layers: Record<string, VectorTileLayer> = {};
|
|
@@ -65,14 +52,14 @@ describe('/v1/health', () => {
|
|
|
65
52
|
sandbox.restore();
|
|
66
53
|
});
|
|
67
54
|
|
|
68
|
-
it('Should return bad response', () => {
|
|
55
|
+
it('Should return bad response', async () => {
|
|
69
56
|
// Given ... a bad get tile response
|
|
70
57
|
const BadResponse = new LambdaHttpResponse(500, 'Can not get Tile Set.');
|
|
71
58
|
sandbox.stub(TileXyzRaster, 'tile').resolves(BadResponse);
|
|
72
59
|
sandbox.stub(tileXyzVector, 'tile').resolves(BadResponse);
|
|
73
60
|
|
|
74
61
|
// When ...Then ...
|
|
75
|
-
assert.rejects(() => healthGet(
|
|
62
|
+
await assert.rejects(() => healthGet(mockRequest('/v1/tiles/health')), BadResponse);
|
|
76
63
|
});
|
|
77
64
|
|
|
78
65
|
const Response1 = new LambdaHttpResponse(200, 'ok');
|
|
@@ -99,20 +86,20 @@ describe('/v1/health', () => {
|
|
|
99
86
|
callbackVectorTile.onCall(1).resolves(testVectorTile2);
|
|
100
87
|
|
|
101
88
|
// When ...
|
|
102
|
-
const res = await healthGet(
|
|
89
|
+
const res = await healthGet(mockRequest('/v1/tiles/health'));
|
|
103
90
|
|
|
104
91
|
// Then ...
|
|
105
92
|
assert.equal(res.status, 200);
|
|
106
93
|
assert.equal(res.statusDescription, 'ok');
|
|
107
94
|
});
|
|
108
95
|
|
|
109
|
-
it('Should return mis-match tile response', () => {
|
|
96
|
+
it('Should return mis-match tile response', async () => {
|
|
110
97
|
// Given ... a bad get tile response for second get tile
|
|
111
98
|
const callback = sandbox.stub(TileXyzRaster, 'tile');
|
|
112
99
|
callback.onCall(0).resolves(Response2);
|
|
113
100
|
|
|
114
101
|
// When ... Then ...
|
|
115
102
|
const BadResponse = new LambdaHttpResponse(500, 'TileSet does not match.');
|
|
116
|
-
assert.rejects(() => healthGet(
|
|
103
|
+
await assert.rejects(() => healthGet(mockRequest('/v1/tiles/health')), BadResponse);
|
|
117
104
|
});
|
|
118
105
|
});
|
|
@@ -25,10 +25,10 @@ export class ConfigLoader {
|
|
|
25
25
|
const cb = await config.ConfigBundle.get('cb_latest');
|
|
26
26
|
if (cb == null) return config;
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
const configUrl = fsa.toUrl(cb.path);
|
|
29
|
+
return CachedConfig.get(configUrl).then((cfg) => {
|
|
30
|
+
req?.set('config', configUrl.href);
|
|
29
31
|
|
|
30
|
-
return CachedConfig.get(fsa.toUrl(cb.path)).then((cfg) => {
|
|
31
|
-
req?.timer.end('config:load');
|
|
32
32
|
if (cfg == null) throw new LambdaHttpResponse(500, 'Unable to find latest configuration');
|
|
33
33
|
if (cfg.assets == null) cfg.assets = cb.assets;
|
|
34
34
|
return cfg;
|
|
@@ -44,8 +44,15 @@ export class ConfigLoader {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
static async load(req: LambdaHttpRequest): Promise<BasemapsConfigProvider> {
|
|
47
|
+
req.timer.start('config:load');
|
|
48
|
+
const config = await this._load(req);
|
|
49
|
+
req.timer.end('config:load');
|
|
50
|
+
return config;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static async _load(req: LambdaHttpRequest): Promise<BasemapsConfigProvider> {
|
|
47
54
|
const rawLocation = req.query.get('config');
|
|
48
|
-
if (rawLocation == null) return this.getDefaultConfig();
|
|
55
|
+
if (rawLocation == null) return this.getDefaultConfig(req);
|
|
49
56
|
|
|
50
57
|
const configLocation = isBase58(rawLocation) ? Buffer.from(base58.decode(rawLocation)).toString() : rawLocation;
|
|
51
58
|
const configUrl = fsa.toUrl(configLocation);
|
|
@@ -58,10 +65,9 @@ export class ConfigLoader {
|
|
|
58
65
|
throw new LambdaHttpResponse(400, `Bucket: "${configUrl.hostname}" is not a allowed bucket location`);
|
|
59
66
|
}
|
|
60
67
|
|
|
61
|
-
req.set('config', configUrl.href);
|
|
62
|
-
req.timer.start('config:load');
|
|
63
68
|
return CachedConfig.get(configUrl).then((f) => {
|
|
64
|
-
req.
|
|
69
|
+
req.set('config', configUrl.href);
|
|
70
|
+
|
|
65
71
|
if (f == null) throw new LambdaHttpResponse(400, `Invalid config location at ${configLocation}`);
|
|
66
72
|
return f;
|
|
67
73
|
});
|