@matterbridge/thread 3.9.3-dev-20260627-f5f8623 → 3.9.3-dev-20260627-5d60de5
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/dist/dockerVersion.d.ts
CHANGED
package/dist/dockerVersion.js
CHANGED
|
@@ -2,21 +2,45 @@ import { getErrorMessage } from '@matterbridge/utils/error';
|
|
|
2
2
|
import { logModuleLoaded } from '@matterbridge/utils/loader';
|
|
3
3
|
import { isValidString } from '@matterbridge/utils/validate';
|
|
4
4
|
logModuleLoaded('DockerVersion');
|
|
5
|
+
let lastDockerVersionWarning;
|
|
6
|
+
export function takeDockerVersionWarning() {
|
|
7
|
+
const warning = lastDockerVersionWarning;
|
|
8
|
+
lastDockerVersionWarning = undefined;
|
|
9
|
+
return warning;
|
|
10
|
+
}
|
|
5
11
|
async function httpsGetJson(url, headers, timeoutMs) {
|
|
6
12
|
const https = await import('node:https');
|
|
7
13
|
return new Promise((resolve, reject) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
let settled = false;
|
|
15
|
+
let req;
|
|
16
|
+
let timeoutId;
|
|
17
|
+
const rejectOnce = (error) => {
|
|
18
|
+
if (settled)
|
|
19
|
+
return;
|
|
20
|
+
settled = true;
|
|
21
|
+
clearTimeout(timeoutId);
|
|
22
|
+
reject(error);
|
|
23
|
+
};
|
|
24
|
+
const resolveOnce = (value) => {
|
|
25
|
+
if (settled)
|
|
26
|
+
return;
|
|
27
|
+
settled = true;
|
|
28
|
+
clearTimeout(timeoutId);
|
|
29
|
+
resolve(value);
|
|
30
|
+
};
|
|
31
|
+
const timeoutError = new Error(`Request timed out after ${timeoutMs / 1000} seconds`);
|
|
32
|
+
timeoutId = setTimeout(() => {
|
|
33
|
+
req?.destroy?.(timeoutError);
|
|
34
|
+
rejectOnce(timeoutError);
|
|
12
35
|
}, timeoutMs).unref();
|
|
13
|
-
|
|
36
|
+
req = https.get(url, { headers }, (res) => {
|
|
14
37
|
let data = '';
|
|
15
38
|
const statusCode = res.statusCode ?? 0;
|
|
16
39
|
if (statusCode >= 300 && statusCode < 400) {
|
|
17
40
|
const locationHeader = Array.isArray(res.headers.location) ? res.headers.location[0] : res.headers.location;
|
|
18
41
|
if (locationHeader) {
|
|
19
42
|
clearTimeout(timeoutId);
|
|
43
|
+
settled = true;
|
|
20
44
|
res.resume();
|
|
21
45
|
const redirectedUrl = new URL(locationHeader, url).toString();
|
|
22
46
|
let redirectedHeaders = headers;
|
|
@@ -35,27 +59,24 @@ async function httpsGetJson(url, headers, timeoutMs) {
|
|
|
35
59
|
}
|
|
36
60
|
}
|
|
37
61
|
if (statusCode < 200 || statusCode >= 300) {
|
|
38
|
-
clearTimeout(timeoutId);
|
|
39
62
|
res.resume();
|
|
40
|
-
|
|
63
|
+
rejectOnce(new Error(`Failed to fetch data. Status code: ${statusCode}`));
|
|
41
64
|
return;
|
|
42
65
|
}
|
|
43
66
|
res.on('data', (chunk) => {
|
|
44
67
|
data += chunk;
|
|
45
68
|
});
|
|
46
69
|
res.on('end', () => {
|
|
47
|
-
clearTimeout(timeoutId);
|
|
48
70
|
try {
|
|
49
|
-
|
|
71
|
+
resolveOnce(JSON.parse(data));
|
|
50
72
|
}
|
|
51
73
|
catch (error) {
|
|
52
|
-
|
|
74
|
+
rejectOnce(new Error(`Failed to parse response JSON: ${getErrorMessage(error)}`));
|
|
53
75
|
}
|
|
54
76
|
});
|
|
55
77
|
});
|
|
56
78
|
req.on('error', (error) => {
|
|
57
|
-
|
|
58
|
-
reject(new Error(`Request failed: ${getErrorMessage(error)}`));
|
|
79
|
+
rejectOnce(new Error(`Request failed: ${getErrorMessage(error)}`));
|
|
59
80
|
});
|
|
60
81
|
});
|
|
61
82
|
}
|
|
@@ -72,7 +93,8 @@ function getOciVersionLabel(config) {
|
|
|
72
93
|
config.config?.Labels?.['org.label-schema.version'] ??
|
|
73
94
|
config.container_config?.Labels?.['org.label-schema.version']);
|
|
74
95
|
}
|
|
75
|
-
export async function getDockerVersion(owner, repo, tag = 'latest', timeoutMs =
|
|
96
|
+
export async function getDockerVersion(owner, repo, tag = 'latest', timeoutMs = 10_000) {
|
|
97
|
+
lastDockerVersionWarning = undefined;
|
|
76
98
|
if (!isValidString(owner, 1) || !isValidString(repo, 1) || !isValidString(tag, 1))
|
|
77
99
|
return undefined;
|
|
78
100
|
try {
|
|
@@ -104,7 +126,10 @@ export async function getDockerVersion(owner, repo, tag = 'latest', timeoutMs =
|
|
|
104
126
|
const config = await httpsGetJson(configUrl, { ...baseHeaders, Accept: 'application/json' }, timeoutMs);
|
|
105
127
|
return getOciVersionLabel(config);
|
|
106
128
|
}
|
|
107
|
-
catch {
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (getErrorMessage(error).includes('Status code: 429')) {
|
|
131
|
+
lastDockerVersionWarning = `Docker Hub rate limit reached while checking ${owner}/${repo}:${tag}. Docker image version is unavailable.`;
|
|
132
|
+
}
|
|
108
133
|
return undefined;
|
|
109
134
|
}
|
|
110
135
|
}
|
package/dist/threadsManager.js
CHANGED
|
@@ -200,7 +200,6 @@ export class ThreadsManager {
|
|
|
200
200
|
const fileURL = pathToFileURL(path.resolve(relativePath));
|
|
201
201
|
const options = {
|
|
202
202
|
workerData: { ...workerData, threadName: name, debug: this.debug, verbose: this.verbose, logLevel: this.log.logLevel, tracker: this.tracker },
|
|
203
|
-
type: 'module',
|
|
204
203
|
name,
|
|
205
204
|
argv: argv ?? process.argv.slice(2),
|
|
206
205
|
env: env ?? process.env,
|
|
@@ -2,7 +2,7 @@ import { readFileSync } from 'node:fs';
|
|
|
2
2
|
import { inspectError } from '@matterbridge/utils/error';
|
|
3
3
|
import { logModuleLoaded } from '@matterbridge/utils/loader';
|
|
4
4
|
import { debugStringify } from 'node-ansi-logger';
|
|
5
|
-
import { getDockerVersion } from './dockerVersion.js';
|
|
5
|
+
import { getDockerVersion, takeDockerVersionWarning } from './dockerVersion.js';
|
|
6
6
|
import { WorkerWrapper } from './workerWrapper.js';
|
|
7
7
|
logModuleLoaded('DockerVersion', '\u001B[35m');
|
|
8
8
|
export default new WorkerWrapper('DockerVersion', async (worker) => {
|
|
@@ -21,7 +21,13 @@ export default new WorkerWrapper('DockerVersion', async (worker) => {
|
|
|
21
21
|
}
|
|
22
22
|
try {
|
|
23
23
|
dockerVersionLatest = await getDockerVersion('luligu', 'matterbridge', 'latest');
|
|
24
|
+
const latestWarning = takeDockerVersionWarning();
|
|
25
|
+
if (latestWarning)
|
|
26
|
+
worker.logger("warn", latestWarning);
|
|
24
27
|
dockerVersionDev = await getDockerVersion('luligu', 'matterbridge', 'dev');
|
|
28
|
+
const devWarning = takeDockerVersionWarning();
|
|
29
|
+
if (devWarning)
|
|
30
|
+
worker.logger("warn", devWarning);
|
|
25
31
|
worker.logger("info", `Docker version check succeeded: latest=${dockerVersionLatest}, dev=${dockerVersionDev}, current=${dockerBuildConfig?.version ?? 'unknown'}`);
|
|
26
32
|
success = true;
|
|
27
33
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matterbridge/thread",
|
|
3
|
-
"version": "3.9.3-dev-20260627-
|
|
3
|
+
"version": "3.9.3-dev-20260627-5d60de5",
|
|
4
4
|
"description": "Matterbridge thread library",
|
|
5
5
|
"author": "https://github.com/Luligu",
|
|
6
6
|
"homepage": "https://matterbridge.io/",
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
"CHANGELOG.md"
|
|
70
70
|
],
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@matterbridge/types": "3.9.3-dev-20260627-
|
|
73
|
-
"@matterbridge/utils": "3.9.3-dev-20260627-
|
|
72
|
+
"@matterbridge/types": "3.9.3-dev-20260627-5d60de5",
|
|
73
|
+
"@matterbridge/utils": "3.9.3-dev-20260627-5d60de5",
|
|
74
74
|
"@zip.js/zip.js": "2.8.26",
|
|
75
75
|
"node-ansi-logger": "3.3.0"
|
|
76
76
|
}
|