@rsdk/db 5.12.0-next.8 → 5.12.0
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 +4 -0
- package/dist/multi-host-url/exception.js +7 -2
- package/dist/multi-host-url/exception.js.map +1 -1
- package/dist/multi-host-url/multi-host-url.resolver.js +3 -2
- package/dist/multi-host-url/multi-host-url.resolver.js.map +1 -1
- package/package.json +2 -2
- package/src/multi-host-url/exception.ts +9 -2
- package/src/multi-host-url/multi-host-url.resolver.ts +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
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
|
+
## [5.12.0](https://github.com/R-Vision/rsdk/compare/v5.12.0-next.9...v5.12.0) (2026-05-05)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @rsdk/db
|
|
9
|
+
|
|
6
10
|
## [5.11.0](https://github.com/R-Vision/rsdk/compare/v5.11.0-next.10...v5.11.0) (2025-12-22)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @rsdk/db
|
|
@@ -2,9 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MultiHostNativeRequired = exports.InvalidMultiHostProtocol = exports.InvalidMultiHostUrl = void 0;
|
|
4
4
|
const core_1 = require("@rsdk/core");
|
|
5
|
+
/**
|
|
6
|
+
* Заменяет `userinfo` (`user:pass@`) в URL-подобной строке на `***:***@`,
|
|
7
|
+
* чтобы пароль из `DB_URL` не попадал в логи через message/details ошибки.
|
|
8
|
+
*/
|
|
9
|
+
const maskUrlCredentials = (str) => str.replace(/(:\/\/)[^/@\s]+@/u, '$1***:***@');
|
|
5
10
|
class InvalidMultiHostUrl extends core_1.BootstrapException {
|
|
6
11
|
constructor(str, cause) {
|
|
7
|
-
super(`Invalid multi-host url string: <${str}>`, {
|
|
12
|
+
super(`Invalid multi-host url string: <${maskUrlCredentials(str)}>`, {
|
|
8
13
|
cause,
|
|
9
14
|
});
|
|
10
15
|
}
|
|
@@ -15,7 +20,7 @@ class InvalidMultiHostProtocol extends core_1.BootstrapException {
|
|
|
15
20
|
super(`Invalid protocol: <${protocol}>, expected: ${expectedProtocols}`, {
|
|
16
21
|
details: {
|
|
17
22
|
protocol,
|
|
18
|
-
url,
|
|
23
|
+
url: maskUrlCredentials(url),
|
|
19
24
|
expected: expectedProtocols,
|
|
20
25
|
},
|
|
21
26
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exception.js","sourceRoot":"","sources":["../../src/multi-host-url/exception.ts"],"names":[],"mappings":";;;AAAA,qCAAgD;AAEhD,MAAa,mBAAoB,SAAQ,yBAAkB;IACzD,YAAY,GAAW,EAAE,KAAe;QACtC,KAAK,CAAC,mCAAmC,GAAG,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"exception.js","sourceRoot":"","sources":["../../src/multi-host-url/exception.ts"],"names":[],"mappings":";;;AAAA,qCAAgD;AAEhD;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAU,EAAE,CACjD,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;AAEjD,MAAa,mBAAoB,SAAQ,yBAAkB;IACzD,YAAY,GAAW,EAAE,KAAe;QACtC,KAAK,CAAC,mCAAmC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE;YACnE,KAAK;SACN,CAAC,CAAC;IACL,CAAC;CACF;AAND,kDAMC;AAED,MAAa,wBAAyB,SAAQ,yBAAkB;IAC9D,YAAY,iBAA2B,EAAE,QAAgB,EAAE,GAAW;QACpE,KAAK,CAAC,sBAAsB,QAAQ,gBAAgB,iBAAiB,EAAE,EAAE;YACvE,OAAO,EAAE;gBACP,QAAQ;gBACR,GAAG,EAAE,kBAAkB,CAAC,GAAG,CAAC;gBAC5B,QAAQ,EAAE,iBAAiB;aAC5B;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAVD,4DAUC;AAED;;;;;;;GAOG;AACH,MAAa,uBAAwB,SAAQ,yBAAkB;IAC7D,YAAY,UAAkB;QAC5B,KAAK,CACH,6DAA6D,UAAU,UAAU;YAC/E,uEAAuE;YACvE,wEAAwE;YACxE,yEAAyE;YACzE,wDAAwD,CAC3D,CAAC;IACJ,CAAC;CACF;AAVD,0DAUC"}
|
|
@@ -30,15 +30,16 @@ class MultiHostResolver {
|
|
|
30
30
|
for (let i = 0; i < url.hosts.length; i++) {
|
|
31
31
|
const candidate = url.getHostAt(i);
|
|
32
32
|
const entry = url.hosts[i];
|
|
33
|
+
const hostLabel = entry.port === undefined ? entry.host : `${entry.host}:${entry.port}`;
|
|
33
34
|
try {
|
|
34
35
|
await probe(candidate);
|
|
35
36
|
if (i > 0) {
|
|
36
|
-
this.logger.info(`multi-host db: connected to host #${i + 1} (${
|
|
37
|
+
this.logger.info(`multi-host db: connected to host #${i + 1} (${hostLabel}) after previous hosts failed`);
|
|
37
38
|
}
|
|
38
39
|
return candidate;
|
|
39
40
|
}
|
|
40
41
|
catch (error) {
|
|
41
|
-
this.logger.warn(`multi-host db: host ${
|
|
42
|
+
this.logger.warn(`multi-host db: host ${hostLabel} not reachable, trying next`, error);
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
this.logger.warn('multi-host db: none of the configured hosts responded to the bootstrap probe; falling back to the first host and relying on reconnect cycle');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-host-url.resolver.js","sourceRoot":"","sources":["../../src/multi-host-url/multi-host-url.resolver.ts"],"names":[],"mappings":";;;AAMA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,iBAAiB;IACC;IAA7B,YAA6B,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAAG,CAAC;IAEhD,KAAK,CAAC,OAAO,CAAC,GAAiB,EAAE,KAAqB;QACpD,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"multi-host-url.resolver.js","sourceRoot":"","sources":["../../src/multi-host-url/multi-host-url.resolver.ts"],"names":[],"mappings":";;;AAMA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,iBAAiB;IACC;IAA7B,YAA6B,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAAG,CAAC;IAEhD,KAAK,CAAC,OAAO,CAAC,GAAiB,EAAE,KAAqB;QACpD,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GACb,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAExE,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACV,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,qCAAqC,CAAC,GAAG,CAAC,KAAK,SAAS,+BAA+B,CACxF,CAAC;gBACJ,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,uBAAuB,SAAS,6BAA6B,EAC7D,KAAc,CACf,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,6IAA6I,CAC9I,CAAC;QACF,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;CACF;AAnCD,8CAmCC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdk/db",
|
|
3
|
-
"version": "5.12.0
|
|
3
|
+
"version": "5.12.0",
|
|
4
4
|
"description": "Common functionality and interfaces for relational database plugins",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -19,5 +19,5 @@
|
|
|
19
19
|
"@rsdk/logging": "*",
|
|
20
20
|
"reflect-metadata": "^0.1.12 || ^0.2.0"
|
|
21
21
|
},
|
|
22
|
-
"gitHead": "
|
|
22
|
+
"gitHead": "e37dbd5dfabbc6150e3d22d545b03ee5e41bf6a4"
|
|
23
23
|
}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { BootstrapException } from '@rsdk/core';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Заменяет `userinfo` (`user:pass@`) в URL-подобной строке на `***:***@`,
|
|
5
|
+
* чтобы пароль из `DB_URL` не попадал в логи через message/details ошибки.
|
|
6
|
+
*/
|
|
7
|
+
const maskUrlCredentials = (str: string): string =>
|
|
8
|
+
str.replace(/(:\/\/)[^/@\s]+@/u, '$1***:***@');
|
|
9
|
+
|
|
3
10
|
export class InvalidMultiHostUrl extends BootstrapException {
|
|
4
11
|
constructor(str: string, cause?: unknown) {
|
|
5
|
-
super(`Invalid multi-host url string: <${str}>`, {
|
|
12
|
+
super(`Invalid multi-host url string: <${maskUrlCredentials(str)}>`, {
|
|
6
13
|
cause,
|
|
7
14
|
});
|
|
8
15
|
}
|
|
@@ -13,7 +20,7 @@ export class InvalidMultiHostProtocol extends BootstrapException {
|
|
|
13
20
|
super(`Invalid protocol: <${protocol}>, expected: ${expectedProtocols}`, {
|
|
14
21
|
details: {
|
|
15
22
|
protocol,
|
|
16
|
-
url,
|
|
23
|
+
url: maskUrlCredentials(url),
|
|
17
24
|
expected: expectedProtocols,
|
|
18
25
|
},
|
|
19
26
|
});
|
|
@@ -32,18 +32,20 @@ export class MultiHostResolver {
|
|
|
32
32
|
for (let i = 0; i < url.hosts.length; i++) {
|
|
33
33
|
const candidate = url.getHostAt(i);
|
|
34
34
|
const entry = url.hosts[i];
|
|
35
|
+
const hostLabel =
|
|
36
|
+
entry.port === undefined ? entry.host : `${entry.host}:${entry.port}`;
|
|
35
37
|
|
|
36
38
|
try {
|
|
37
39
|
await probe(candidate);
|
|
38
40
|
if (i > 0) {
|
|
39
41
|
this.logger.info(
|
|
40
|
-
`multi-host db: connected to host #${i + 1} (${
|
|
42
|
+
`multi-host db: connected to host #${i + 1} (${hostLabel}) after previous hosts failed`,
|
|
41
43
|
);
|
|
42
44
|
}
|
|
43
45
|
return candidate;
|
|
44
46
|
} catch (error) {
|
|
45
47
|
this.logger.warn(
|
|
46
|
-
`multi-host db: host ${
|
|
48
|
+
`multi-host db: host ${hostLabel} not reachable, trying next`,
|
|
47
49
|
error as Error,
|
|
48
50
|
);
|
|
49
51
|
}
|