@mountainpass/addressr 2.0.3 → 2.0.4
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/lib/ci/build.js +1 -1
- package/lib/ci/pipeline.js +4 -4
- package/lib/client/elasticsearch.js +2 -2
- package/lib/controllers/Addresses.js +11 -11
- package/lib/controllers/Default.js +5 -5
- package/lib/deploy/create-deployment-archive.js +5 -5
- package/lib/eslint.config.js +42 -11
- package/lib/loader.js +6 -6
- package/lib/server.js +12 -12
- package/lib/service/DefaultService.js +8 -4
- package/lib/service/address-service.js +20 -20
- package/lib/src/server2.js +13 -13
- package/lib/swagger.js +8 -8
- package/lib/utils/stream-down.js +10 -12
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/scripts/check-version.js +1 -1
- /package/lib/service/{printVersion.js → print-version.js} +0 -0
- /package/lib/service/{setLinkOptions.js → set-link-options.js} +0 -0
- /package/lib/src/{waycharterServer.js → waycharter-server.js} +0 -0
package/lib/ci/build.js
CHANGED
|
@@ -35,7 +35,7 @@ console.log('starting...');
|
|
|
35
35
|
const node = client.container().from('node:12.11.0');
|
|
36
36
|
|
|
37
37
|
// mount cloned repository into Node image
|
|
38
|
-
|
|
38
|
+
await client.container({
|
|
39
39
|
id: node
|
|
40
40
|
}).withMountedDirectory('/src', source).withWorkdir('/src').withExec(['npm', 'run', 'hello']);
|
|
41
41
|
});
|
package/lib/ci/pipeline.js
CHANGED
|
@@ -28,10 +28,12 @@ actions:
|
|
|
28
28
|
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
-
const
|
|
31
|
+
const cacheDirectory = `${(0, _envPaths.default)('', {
|
|
32
32
|
suffix: ''
|
|
33
33
|
}).cache}/dagger`;
|
|
34
|
-
const binLocation = `${
|
|
34
|
+
const binLocation = `${cacheDirectory}/dagger-0.3.9`;
|
|
35
|
+
|
|
36
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- internal cache path
|
|
35
37
|
if (!process.env._EXPERIMENTAL_DAGGER_CLI_BIN && _nodeFs.default.existsSync(binLocation)) {
|
|
36
38
|
process.env._EXPERIMENTAL_DAGGER_CLI_BIN = binLocation;
|
|
37
39
|
console.log(`using already downloaded '${binLocation}'`);
|
|
@@ -59,8 +61,6 @@ console.log('connecting...');
|
|
|
59
61
|
// console.log("Hello from Dagger and Node " + version)
|
|
60
62
|
|
|
61
63
|
await installed.withExec(['npm', 'run', 'genversion']).file('version.js').export('dagger-version.js');
|
|
62
|
-
console.log(stdout);
|
|
63
|
-
console.error(stderr);
|
|
64
64
|
|
|
65
65
|
/*
|
|
66
66
|
npm run genversion
|
|
@@ -75,7 +75,7 @@ async function initIndex(esClient, clear, synonyms) {
|
|
|
75
75
|
tokenizer: {
|
|
76
76
|
whitecomma: {
|
|
77
77
|
type: 'pattern',
|
|
78
|
-
pattern:
|
|
78
|
+
pattern: String.raw`[\W,]+`,
|
|
79
79
|
lowercase: false
|
|
80
80
|
}
|
|
81
81
|
}
|
|
@@ -208,7 +208,7 @@ async function esConnect(esport = ELASTIC_PORT, eshost = ELASTIC_HOST, interval
|
|
|
208
208
|
logger(`connecting elastic search client on ${eshost}:${esport}...`);
|
|
209
209
|
await esClient.ping();
|
|
210
210
|
logger(`...connected to ${eshost}:${esport}`);
|
|
211
|
-
|
|
211
|
+
globalThis.esClient = esClient;
|
|
212
212
|
return esClient;
|
|
213
213
|
} catch (error_) {
|
|
214
214
|
error(`An error occurred while trying to connect the elastic search client on ${eshost}:${esport}`, error_);
|
|
@@ -17,12 +17,12 @@ function getAddress(request, response) {
|
|
|
17
17
|
if (addressResponse.statusCode) {
|
|
18
18
|
response.setHeader('Content-Type', 'application/json');
|
|
19
19
|
response.status(addressResponse.statusCode);
|
|
20
|
-
response.json(addressResponse.json);
|
|
21
|
-
} else {
|
|
22
|
-
response.setHeader('link', addressResponse.link.toString());
|
|
23
|
-
(0, _writer.writeJson)(response, addressResponse.json);
|
|
20
|
+
return response.json(addressResponse.json);
|
|
24
21
|
}
|
|
25
|
-
|
|
22
|
+
response.setHeader('link', addressResponse.link.toString());
|
|
23
|
+
return (0, _writer.writeJson)(response, addressResponse.json);
|
|
24
|
+
}).catch(function (error_) {
|
|
25
|
+
(0, _writer.writeJson)(response, error_.body || error_);
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
function getAddresses(request, response) {
|
|
@@ -33,12 +33,12 @@ function getAddresses(request, response) {
|
|
|
33
33
|
if (addressesResponse.statusCode) {
|
|
34
34
|
response.setHeader('Content-Type', 'application/json');
|
|
35
35
|
response.status(addressesResponse.statusCode);
|
|
36
|
-
response.json(addressesResponse.json);
|
|
37
|
-
} else {
|
|
38
|
-
response.setHeader('link', addressesResponse.link.toString());
|
|
39
|
-
response.setHeader('link-template', addressesResponse.linkTemplate.toString());
|
|
40
|
-
(0, _writer.writeJson)(response, addressesResponse.json);
|
|
36
|
+
return response.json(addressesResponse.json);
|
|
41
37
|
}
|
|
42
|
-
|
|
38
|
+
response.setHeader('link', addressesResponse.link.toString());
|
|
39
|
+
response.setHeader('link-template', addressesResponse.linkTemplate.toString());
|
|
40
|
+
return (0, _writer.writeJson)(response, addressesResponse.json);
|
|
41
|
+
}).catch(function (error_) {
|
|
42
|
+
(0, _writer.writeJson)(response, error_.body || error_);
|
|
43
43
|
});
|
|
44
44
|
}
|
|
@@ -10,12 +10,12 @@ var _writer = require("../utils/writer.js");
|
|
|
10
10
|
|
|
11
11
|
// var logger = debug('api');
|
|
12
12
|
|
|
13
|
-
function getApiRoot(request,
|
|
13
|
+
function getApiRoot(request, response_) {
|
|
14
14
|
(0, _DefaultService.getApiRoot)().then(function (response) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
(0, _writer.writeJson)(
|
|
15
|
+
response_.setHeader('link', response.link.toString());
|
|
16
|
+
response_.setHeader('link-template', response.linkTemplate.toString());
|
|
17
|
+
return (0, _writer.writeJson)(response_, response.body);
|
|
18
18
|
}).catch(function (error) {
|
|
19
|
-
(0, _writer.writeJson)(
|
|
19
|
+
(0, _writer.writeJson)(response_, error.body);
|
|
20
20
|
});
|
|
21
21
|
}
|
|
@@ -62,12 +62,12 @@ function createPackageJson(context, filepath) {
|
|
|
62
62
|
[name]: version
|
|
63
63
|
}
|
|
64
64
|
};
|
|
65
|
-
fs.writeFileSync(filepath, JSON.stringify(newPackageJson,
|
|
65
|
+
fs.writeFileSync(filepath, JSON.stringify(newPackageJson, undefined, 2)); // eslint-disable-line security/detect-non-literal-fs-filename -- internal deployment path
|
|
66
66
|
}
|
|
67
|
-
async function createDeploymentArchive(
|
|
68
|
-
shell.mkdir('-p',
|
|
69
|
-
createPackageJson(packageJson, `${
|
|
67
|
+
async function createDeploymentArchive(deploymentDirectory) {
|
|
68
|
+
shell.mkdir('-p', deploymentDirectory);
|
|
69
|
+
createPackageJson(packageJson, `${deploymentDirectory}/package.json`);
|
|
70
70
|
const archiveName = packageJson.name.replace('@', '').replace('/', '-');
|
|
71
|
-
await zip(`${
|
|
71
|
+
await zip(`${deploymentDirectory}/`, `${archiveName}-deployment-${packageJson.version}.zip`);
|
|
72
72
|
}
|
|
73
73
|
createDeploymentArchive('./deployment');
|
package/lib/eslint.config.js
CHANGED
|
@@ -37,24 +37,28 @@ var _default = exports.default = [{
|
|
|
37
37
|
strict: 2,
|
|
38
38
|
'prettier/prettier': 'error',
|
|
39
39
|
'import-x/default': 0,
|
|
40
|
-
'unicorn/filename-case': ['
|
|
40
|
+
'unicorn/filename-case': ['error', {
|
|
41
41
|
cases: {
|
|
42
42
|
kebabCase: true,
|
|
43
43
|
pascalCase: true
|
|
44
44
|
}
|
|
45
45
|
}],
|
|
46
|
-
'unicorn/prevent-abbreviations': '
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
'unicorn/prevent-abbreviations': ['error', {
|
|
47
|
+
replacements: {
|
|
48
|
+
res: {
|
|
49
|
+
response: true
|
|
50
|
+
},
|
|
51
|
+
dir: {
|
|
52
|
+
directory: true
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}],
|
|
56
|
+
// Blocked by ADR 005 (Babel/CJS — requires native ESM)
|
|
49
57
|
'unicorn/prefer-module': 'off',
|
|
58
|
+
// waycharter ops.find()/ops.filter() are not Array.prototype — false positives
|
|
50
59
|
'unicorn/no-array-callback-reference': 'off',
|
|
51
|
-
|
|
52
|
-
'unicorn/prefer-spread': 'off',
|
|
60
|
+
// Blocked by ADR 005 (Babel/CJS — requires native ESM)
|
|
53
61
|
'unicorn/prefer-top-level-await': 'off',
|
|
54
|
-
'unicorn/prefer-global-this': 'off',
|
|
55
|
-
'unicorn/require-module-specifiers': 'off',
|
|
56
|
-
'unicorn/prefer-string-raw': 'off',
|
|
57
|
-
'unicorn/no-anonymous-default-export': 'off',
|
|
58
62
|
'promise/always-return': 'warn',
|
|
59
63
|
'promise/catch-or-return': 'warn',
|
|
60
64
|
'n/no-unsupported-features/es-syntax': 'off',
|
|
@@ -65,9 +69,16 @@ var _default = exports.default = [{
|
|
|
65
69
|
'no-process-exit': 'warn',
|
|
66
70
|
'no-useless-assignment': 'off',
|
|
67
71
|
complexity: 'warn',
|
|
72
|
+
'max-lines-per-function': ['warn', {
|
|
73
|
+
max: 100,
|
|
74
|
+
skipBlankLines: true,
|
|
75
|
+
skipComments: true
|
|
76
|
+
}],
|
|
77
|
+
'max-depth': ['warn', 4],
|
|
78
|
+
'max-params': ['warn', 4],
|
|
68
79
|
'n/hashbang': ['error', {
|
|
69
80
|
convertPath: {
|
|
70
|
-
'bin/**/*.js': [
|
|
81
|
+
'bin/**/*.js': [String.raw`^bin/(.+?)\.js$`, 'lib/bin/$1.js']
|
|
71
82
|
}
|
|
72
83
|
}]
|
|
73
84
|
}
|
|
@@ -89,4 +100,24 @@ var _default = exports.default = [{
|
|
|
89
100
|
rules: {
|
|
90
101
|
'n/hashbang': 'off'
|
|
91
102
|
}
|
|
103
|
+
}, {
|
|
104
|
+
// Dagger CI runtime — modules resolved by Dagger SDK, not Node.js
|
|
105
|
+
files: ['ci/**'],
|
|
106
|
+
rules: {
|
|
107
|
+
'import-x/no-unresolved': 'off',
|
|
108
|
+
'n/no-missing-import': 'off'
|
|
109
|
+
}
|
|
110
|
+
}, {
|
|
111
|
+
// k6 load testing runtime — modules resolved by k6, not Node.js
|
|
112
|
+
files: ['test/k6/**'],
|
|
113
|
+
rules: {
|
|
114
|
+
'import-x/no-unresolved': 'off',
|
|
115
|
+
'n/no-missing-import': 'off'
|
|
116
|
+
}
|
|
117
|
+
}, {
|
|
118
|
+
// Deploy scripts — deps installed in deployment context, not dev
|
|
119
|
+
files: ['deploy/**'],
|
|
120
|
+
rules: {
|
|
121
|
+
'n/no-missing-require': 'off'
|
|
122
|
+
}
|
|
92
123
|
}];
|
package/lib/loader.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _debug = _interopRequireDefault(require("debug"));
|
|
4
4
|
var _elasticsearch = require("./client/elasticsearch");
|
|
5
5
|
var _addressService = require("./service/address-service");
|
|
6
|
-
var _printVersion = require("./service/
|
|
6
|
+
var _printVersion = require("./service/print-version");
|
|
7
7
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
8
|
const logger = (0, _debug.default)('api');
|
|
9
9
|
const error = (0, _debug.default)('error');
|
|
@@ -12,20 +12,20 @@ if (process.env.DEBUG == undefined) {
|
|
|
12
12
|
}
|
|
13
13
|
const start = process.hrtime();
|
|
14
14
|
(0, _elasticsearch.esConnect)().then(() => {
|
|
15
|
-
logger('es client connected');
|
|
15
|
+
return logger('es client connected');
|
|
16
16
|
}).then(() => {
|
|
17
17
|
console.log('======================');
|
|
18
18
|
console.log('Addressr - Data Loader');
|
|
19
19
|
console.log('======================');
|
|
20
|
-
(0, _printVersion.printVersion)();
|
|
20
|
+
return (0, _printVersion.printVersion)();
|
|
21
21
|
}).then(_addressService.loadGnaf).then(() => {
|
|
22
|
-
logger('data loaded');
|
|
22
|
+
return logger('data loaded');
|
|
23
23
|
}).then(() => {
|
|
24
24
|
const end = process.hrtime(start);
|
|
25
|
-
logger(`Execution time: ${end[0]}s ${end[1] / 1_000_000}ms`);
|
|
25
|
+
return logger(`Execution time: ${end[0]}s ${end[1] / 1_000_000}ms`);
|
|
26
26
|
}).then(() => {
|
|
27
27
|
logger(`Fin`);
|
|
28
|
-
process.exit();
|
|
28
|
+
process.exit(); // eslint-disable-line unicorn/no-process-exit, n/no-process-exit, no-process-exit -- CLI loader entry point
|
|
29
29
|
}).catch(error_ => {
|
|
30
30
|
error('error loading data', error_);
|
|
31
31
|
throw error_;
|
package/lib/server.js
CHANGED
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
var _debug = _interopRequireDefault(require("debug"));
|
|
4
4
|
var _elasticsearch = require("./client/elasticsearch");
|
|
5
|
-
var _printVersion = require("./service/
|
|
5
|
+
var _printVersion = require("./service/print-version");
|
|
6
6
|
var _swagger = require("./swagger");
|
|
7
7
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
8
|
const logger = (0, _debug.default)('api');
|
|
9
|
-
(0, _swagger.startServer)().then(() => {
|
|
9
|
+
(0, _swagger.startServer)().then(async () => {
|
|
10
10
|
logger('connecting es client');
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
const esClient = await (0, _elasticsearch.esConnect)();
|
|
12
|
+
globalThis.esClient = esClient;
|
|
13
|
+
logger('es client connected');
|
|
14
|
+
console.log('=====================');
|
|
15
|
+
console.log('Addressr - API Server');
|
|
16
|
+
console.log('=====================');
|
|
17
|
+
(0, _printVersion.printVersion)();
|
|
18
|
+
}).catch(error => {
|
|
19
|
+
console.error('Failed to start server:', error);
|
|
20
|
+
throw error;
|
|
21
21
|
});
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getApiRoot = getApiRoot;
|
|
7
7
|
var _debug = _interopRequireDefault(require("debug"));
|
|
8
8
|
var _httpLinkHeader = _interopRequireDefault(require("http-link-header"));
|
|
9
|
-
var _setLinkOptions = require("./
|
|
9
|
+
var _setLinkOptions = require("./set-link-options");
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
var logger = (0, _debug.default)('api');
|
|
12
12
|
|
|
@@ -17,10 +17,11 @@ var logger = (0, _debug.default)('api');
|
|
|
17
17
|
* returns Root
|
|
18
18
|
**/
|
|
19
19
|
async function getApiRoot() {
|
|
20
|
-
|
|
20
|
+
/* eslint-disable security/detect-object-injection -- iterating Object.keys() of swagger spec, not user input */
|
|
21
|
+
const paths = Object.keys(globalThis.swaggerDocument.paths).filter(p => globalThis.swaggerDocument.paths[p].get !== undefined && globalThis.swaggerDocument.paths[p].get['x-root-rel'] !== undefined);
|
|
21
22
|
const link = new _httpLinkHeader.default();
|
|
22
23
|
for (const p of paths) {
|
|
23
|
-
const op =
|
|
24
|
+
const op = globalThis.swaggerDocument.paths[p].get;
|
|
24
25
|
if (op.parameters && op.parameters.some(parameter => parameter.required === true)) {
|
|
25
26
|
// skip
|
|
26
27
|
} else {
|
|
@@ -45,10 +46,13 @@ async function getApiRoot() {
|
|
|
45
46
|
});
|
|
46
47
|
const linkTemplate = new _httpLinkHeader.default();
|
|
47
48
|
for (const url of paths) {
|
|
48
|
-
const op =
|
|
49
|
+
const op = globalThis.swaggerDocument.paths[url].get;
|
|
49
50
|
logger(op);
|
|
50
51
|
(0, _setLinkOptions.setLinkOptions)(op, url, linkTemplate);
|
|
51
52
|
}
|
|
53
|
+
|
|
54
|
+
/* eslint-enable security/detect-object-injection */
|
|
55
|
+
|
|
52
56
|
return {
|
|
53
57
|
link: link,
|
|
54
58
|
body: {},
|
|
@@ -23,7 +23,7 @@ var _nodeStream = _interopRequireDefault(require("node:stream"));
|
|
|
23
23
|
var _unzipStream = _interopRequireDefault(require("unzip-stream"));
|
|
24
24
|
var _elasticsearch = require("../client/elasticsearch");
|
|
25
25
|
var _streamDown = _interopRequireDefault(require("../utils/stream-down"));
|
|
26
|
-
var _setLinkOptions = require("./
|
|
26
|
+
var _setLinkOptions = require("./set-link-options");
|
|
27
27
|
var _keyv = require("keyv");
|
|
28
28
|
var _keyvFile = require("keyv-file");
|
|
29
29
|
var _nodeCrypto = _interopRequireDefault(require("node:crypto"));
|
|
@@ -54,10 +54,10 @@ const ONE_DAY_MS = 1000 * ONE_DAY_S;
|
|
|
54
54
|
const THIRTY_DAYS_MS = ONE_DAY_MS * 30;
|
|
55
55
|
const ES_INDEX_NAME = process.env.ES_INDEX_NAME || 'addressr';
|
|
56
56
|
async function dropIndex() {
|
|
57
|
-
await (0, _elasticsearch.dropIndex)(
|
|
57
|
+
await (0, _elasticsearch.dropIndex)(globalThis.esClient);
|
|
58
58
|
}
|
|
59
59
|
async function clearAddresses() {
|
|
60
|
-
await (0, _elasticsearch.initIndex)(
|
|
60
|
+
await (0, _elasticsearch.initIndex)(globalThis.esClient, true);
|
|
61
61
|
}
|
|
62
62
|
async function setAddresses(addr) {
|
|
63
63
|
await clearAddresses();
|
|
@@ -458,7 +458,7 @@ function mapGeo(geoSite, context, geoDefault) {
|
|
|
458
458
|
})
|
|
459
459
|
};
|
|
460
460
|
}) : [];
|
|
461
|
-
const
|
|
461
|
+
const defaults = geoDefault && !foundDefault ? geoDefault.map(geo => {
|
|
462
462
|
return {
|
|
463
463
|
default: true,
|
|
464
464
|
...(geo.GEOCODE_TYPE_CODE !== '' && {
|
|
@@ -475,7 +475,7 @@ function mapGeo(geoSite, context, geoDefault) {
|
|
|
475
475
|
})
|
|
476
476
|
};
|
|
477
477
|
}) : [];
|
|
478
|
-
return sites
|
|
478
|
+
return [...sites, ...defaults];
|
|
479
479
|
}
|
|
480
480
|
function mapToSla(fla) {
|
|
481
481
|
return fla.join(', ');
|
|
@@ -819,7 +819,7 @@ async function loadAddressDetails(file, expectedCount, context, {
|
|
|
819
819
|
}
|
|
820
820
|
async function searchForAddress(searchString, p, pageSize = PAGE_SIZE) {
|
|
821
821
|
// const searchString = '657 The Entrance Road'; //'2/25 TOTTERDE'; // 'UNT 2, BELCONNEN';
|
|
822
|
-
const searchResp = await
|
|
822
|
+
const searchResp = await globalThis.esClient.search({
|
|
823
823
|
index: ES_INDEX_NAME,
|
|
824
824
|
body: {
|
|
825
825
|
from: (p - 1 || 0) * pageSize,
|
|
@@ -882,7 +882,7 @@ async function sendIndexRequest(indexingBody, initialBackoff = Number.parseInt(p
|
|
|
882
882
|
// eslint-disable-next-line no-constant-condition
|
|
883
883
|
for (let count = 0; true; count++) {
|
|
884
884
|
try {
|
|
885
|
-
const resp = await
|
|
885
|
+
const resp = await globalThis.esClient.bulk({
|
|
886
886
|
refresh,
|
|
887
887
|
body: indexingBody,
|
|
888
888
|
timeout: process.env.ADDRESSR_INDEX_TIMEOUT || '300s'
|
|
@@ -962,17 +962,17 @@ function buildSynonyms(context) {
|
|
|
962
962
|
const {
|
|
963
963
|
readdir
|
|
964
964
|
} = require('node:fs').promises;
|
|
965
|
-
async function getFiles(
|
|
966
|
-
const
|
|
967
|
-
logger(`reading ${
|
|
968
|
-
const dirents = await readdir(
|
|
965
|
+
async function getFiles(currentDirectory, baseDirectory) {
|
|
966
|
+
const directory = _nodePath.default.resolve(baseDirectory, currentDirectory);
|
|
967
|
+
logger(`reading ${directory} (${currentDirectory} in ${baseDirectory})`);
|
|
968
|
+
const dirents = await readdir(directory, {
|
|
969
969
|
withFileTypes: true
|
|
970
970
|
});
|
|
971
971
|
const files = await Promise.all(dirents.map(dirent => {
|
|
972
|
-
const
|
|
973
|
-
return dirent.isDirectory() ? getFiles(
|
|
972
|
+
const result = `${currentDirectory}/${dirent.name}`;
|
|
973
|
+
return dirent.isDirectory() ? getFiles(result, baseDirectory) : result;
|
|
974
974
|
}));
|
|
975
|
-
return
|
|
975
|
+
return files.flat();
|
|
976
976
|
}
|
|
977
977
|
function countFileLines(filePath) {
|
|
978
978
|
return new Promise((resolve, reject) => {
|
|
@@ -1028,7 +1028,7 @@ async function loadGnafData(directory, {
|
|
|
1028
1028
|
await loadAuthFiles(files, directory, loadContext, filesCounts);
|
|
1029
1029
|
// loadContext now contains all the auth files, so we can build the synonyms
|
|
1030
1030
|
const synonyms = buildSynonyms(loadContext);
|
|
1031
|
-
await (0, _elasticsearch.initIndex)(
|
|
1031
|
+
await (0, _elasticsearch.initIndex)(globalThis.esClient, process.env.ES_CLEAR_INDEX || false, synonyms);
|
|
1032
1032
|
const addressDetailFiles = files.filter(f => f.match(/ADDRESS_DETAIL/) && f.match(/\/Standard\//));
|
|
1033
1033
|
logger('addressDetailFiles', addressDetailFiles);
|
|
1034
1034
|
for (const detailFile of addressDetailFiles) {
|
|
@@ -1306,14 +1306,14 @@ async function loadGnaf({
|
|
|
1306
1306
|
if (contents.length === 0) {
|
|
1307
1307
|
throw new Error(`Data dir '${unzipped}' is empty`);
|
|
1308
1308
|
}
|
|
1309
|
-
const
|
|
1309
|
+
const gnafDirectory = await (0, _glob.glob)('**/G-NAF/', {
|
|
1310
1310
|
cwd: unzipped
|
|
1311
1311
|
});
|
|
1312
|
-
console.log(
|
|
1313
|
-
if (
|
|
1312
|
+
console.log(gnafDirectory);
|
|
1313
|
+
if (gnafDirectory.length === 0) {
|
|
1314
1314
|
throw new Error(`Cannot find 'G-NAF' directory in Data dir '${unzipped}'`);
|
|
1315
1315
|
}
|
|
1316
|
-
mainDirectory = _nodePath.default.dirname(`${unzipped}/${
|
|
1316
|
+
mainDirectory = _nodePath.default.dirname(`${unzipped}/${gnafDirectory[0].slice(0, -1)}`);
|
|
1317
1317
|
}
|
|
1318
1318
|
logger('Main Data dir', mainDirectory);
|
|
1319
1319
|
await loadGnafData(mainDirectory, {
|
|
@@ -1330,7 +1330,7 @@ async function loadGnaf({
|
|
|
1330
1330
|
**/
|
|
1331
1331
|
async function getAddress(addressId) {
|
|
1332
1332
|
try {
|
|
1333
|
-
const jsonX = await
|
|
1333
|
+
const jsonX = await globalThis.esClient.get({
|
|
1334
1334
|
index: ES_INDEX_NAME,
|
|
1335
1335
|
id: `/addresses/${addressId}`
|
|
1336
1336
|
});
|
package/lib/src/server2.js
CHANGED
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
var _debug = _interopRequireDefault(require("debug"));
|
|
4
4
|
var _elasticsearch = require("../client/elasticsearch");
|
|
5
|
-
var _printVersion = require("../service/
|
|
6
|
-
var _waycharterServer = require("./
|
|
5
|
+
var _printVersion = require("../service/print-version");
|
|
6
|
+
var _waycharterServer = require("./waycharter-server");
|
|
7
7
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
8
|
const logger = (0, _debug.default)('api');
|
|
9
|
-
(0, _waycharterServer.startRest2Server)().then(() => {
|
|
9
|
+
(0, _waycharterServer.startRest2Server)().then(async () => {
|
|
10
10
|
logger('connecting es client');
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
const esClient = await (0, _elasticsearch.esConnect)();
|
|
12
|
+
globalThis.esClient = esClient;
|
|
13
|
+
logger('es client connected');
|
|
14
|
+
console.log('=======================');
|
|
15
|
+
console.log('Addressr - API Server 2');
|
|
16
|
+
console.log('=======================');
|
|
17
|
+
(0, _printVersion.printVersion)();
|
|
18
|
+
}).catch(error => {
|
|
19
|
+
console.error('Failed to start server:', error);
|
|
20
|
+
throw error;
|
|
21
21
|
});
|
package/lib/swagger.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.startServer = startServer;
|
|
7
7
|
exports.stopServer = stopServer;
|
|
8
|
-
exports.
|
|
8
|
+
exports.swaggerDocument = void 0;
|
|
9
9
|
exports.swaggerInit = swaggerInit;
|
|
10
10
|
var _debug = _interopRequireDefault(require("debug"));
|
|
11
11
|
var _express = _interopRequireDefault(require("express"));
|
|
@@ -32,12 +32,12 @@ var options = {
|
|
|
32
32
|
|
|
33
33
|
// The Swagger document (require it, build it programmatically, fetch it from a URL, ...)
|
|
34
34
|
var spec = (0, _nodeFs.readFileSync)(_nodePath.default.join(__dirname, 'api/swagger.yaml'), 'utf8');
|
|
35
|
-
var
|
|
36
|
-
|
|
35
|
+
var swaggerDocument = exports.swaggerDocument = (0, _jsYaml.load)(spec);
|
|
36
|
+
globalThis.swaggerDocument = swaggerDocument;
|
|
37
37
|
function swaggerInit() {
|
|
38
38
|
// Initialize the Swagger middleware
|
|
39
39
|
return new Promise(resolve => {
|
|
40
|
-
(0, _swaggerTools.initializeMiddleware)(
|
|
40
|
+
(0, _swaggerTools.initializeMiddleware)(swaggerDocument, function (middleware) {
|
|
41
41
|
// Interpret Swagger resources and attach metadata to request - must be first in swagger-tools middleware chain
|
|
42
42
|
const metaData = middleware.swaggerMetadata();
|
|
43
43
|
app.use(metaData);
|
|
@@ -55,7 +55,7 @@ function swaggerInit() {
|
|
|
55
55
|
// apiDocs: '/api-docs',
|
|
56
56
|
// swaggerUi: '/docs',
|
|
57
57
|
}));
|
|
58
|
-
app.use(function (error_, request,
|
|
58
|
+
app.use(function (error_, request, response, next) {
|
|
59
59
|
if (error_.failedValidation) {
|
|
60
60
|
// handle validation errror
|
|
61
61
|
const rehydratedError = Object.assign({}, error_);
|
|
@@ -70,13 +70,13 @@ function swaggerInit() {
|
|
|
70
70
|
delete rehydratedError.results;
|
|
71
71
|
}
|
|
72
72
|
error('error!!!', error_.message, JSON.stringify(rehydratedError, undefined, 2));
|
|
73
|
-
|
|
73
|
+
response.status(error_.code === 'SCHEMA_VALIDATION_FAILED' ? '500' : '400').json(rehydratedError);
|
|
74
74
|
} else {
|
|
75
75
|
next();
|
|
76
76
|
}
|
|
77
77
|
});
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
globalThis.swaggerApp = app;
|
|
79
|
+
globalThis.swaggerMiddleware = middleware;
|
|
80
80
|
resolve({
|
|
81
81
|
app,
|
|
82
82
|
middleware
|
package/lib/utils/stream-down.js
CHANGED
|
@@ -2,21 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
var _progress = _interopRequireDefault(require("progress"));
|
|
4
4
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
5
|
-
const {
|
|
6
|
-
parse
|
|
7
|
-
} = require('node:url');
|
|
8
5
|
const http = require('node:https');
|
|
9
6
|
const fs = require('node:fs');
|
|
10
7
|
const pathUtil = require('node:path');
|
|
11
|
-
module.exports = function (url, path, size) {
|
|
12
|
-
const uri =
|
|
8
|
+
module.exports = function streamDown(url, path, size) {
|
|
9
|
+
const uri = new URL(url);
|
|
13
10
|
if (!path) {
|
|
14
|
-
path = pathUtil.basename(uri.
|
|
11
|
+
path = pathUtil.basename(uri.pathname);
|
|
15
12
|
}
|
|
16
|
-
const file = fs.createWriteStream(path);
|
|
13
|
+
const file = fs.createWriteStream(path); // eslint-disable-line security/detect-non-literal-fs-filename -- path is internal
|
|
14
|
+
|
|
17
15
|
return new Promise(function (resolve, reject) {
|
|
18
|
-
http.get(uri.
|
|
19
|
-
const length =
|
|
16
|
+
http.get(uri.toString()).on('response', function (response) {
|
|
17
|
+
const length = response.headers['content-length'] ? Number.parseInt(response.headers['content-length'], 10) : size;
|
|
20
18
|
// let downloaded = 0;
|
|
21
19
|
// let percent = 0;
|
|
22
20
|
var bar = new _progress.default(' downloading [:bar] :rate/bps :percent :etas', {
|
|
@@ -25,7 +23,7 @@ module.exports = function (url, path, size) {
|
|
|
25
23
|
width: 20,
|
|
26
24
|
total: length
|
|
27
25
|
});
|
|
28
|
-
|
|
26
|
+
response.on('data', function (chunk) {
|
|
29
27
|
file.write(chunk);
|
|
30
28
|
// downloaded += chunk.length;
|
|
31
29
|
//percent = ((100.0 * downloaded) / len).toFixed(2);
|
|
@@ -39,8 +37,8 @@ module.exports = function (url, path, size) {
|
|
|
39
37
|
// );
|
|
40
38
|
}).on('end', function () {
|
|
41
39
|
file.end();
|
|
42
|
-
console.log(`\n${uri.
|
|
43
|
-
resolve(
|
|
40
|
+
console.log(`\n${uri.pathname} downloaded to: ${path}`);
|
|
41
|
+
resolve(response);
|
|
44
42
|
}).on('error', function (error) {
|
|
45
43
|
reject(error);
|
|
46
44
|
});
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
package/scripts/check-version.js
CHANGED
|
@@ -7,5 +7,5 @@ if (!satisfies(process.version, version)) {
|
|
|
7
7
|
console.log(
|
|
8
8
|
`Required node version ${version} not satisfied with current version ${process.version}.`,
|
|
9
9
|
);
|
|
10
|
-
process.exit(1);
|
|
10
|
+
process.exit(1); // eslint-disable-line no-process-exit, n/no-process-exit -- postinstall version check
|
|
11
11
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|