@certd/basic 1.38.2 → 1.38.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/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
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
+ ## [1.38.4](https://github.com/certd/certd/compare/v1.38.3...v1.38.4) (2026-01-31)
7
+
8
+ ### Bug Fixes
9
+
10
+ * 修复1:: 形式的ipv6校验失败的bug ([8b96f21](https://github.com/certd/certd/commit/8b96f218d5284033f10c186c0ce18e4c16d8e9b2))
11
+
12
+ ### Performance Improvements
13
+
14
+ * 支持部署到阿里云GA ([1a0d3ee](https://github.com/certd/certd/commit/1a0d3eeb1b0b5ce08f05af84b6161e00c1fe1815))
15
+ * 支持部署到华为elb ([60c8ace](https://github.com/certd/certd/commit/60c8ace443e848155d3ce12e95b84766a4610d3a))
16
+
17
+ ## [1.38.3](https://github.com/certd/certd/compare/v1.38.2...v1.38.3) (2026-01-28)
18
+
19
+ ### Bug Fixes
20
+
21
+ * 站点检查多个ip连接超时的报错显示不出来的bug ([33b284a](https://github.com/certd/certd/commit/33b284afc0ae6391658d573e32b1ce7765e51cb2))
22
+
6
23
  ## [1.38.2](https://github.com/certd/certd/compare/v1.38.1...v1.38.2) (2026-01-22)
7
24
 
8
25
  **Note:** Version bump only for package @certd/basic
package/build.md CHANGED
@@ -1 +1 @@
1
- 12:26
1
+ 02:08
@@ -74,6 +74,7 @@ export declare const utils: {
74
74
  };
75
75
  string: {
76
76
  maxLength(str?: string, length?: number): string;
77
+ appendTimeSuffix(str?: string): string;
77
78
  };
78
79
  locker: import("./util.lock.js").Locker;
79
80
  mitter: import("mitt").Emitter<Record<import("mitt").EventType, unknown>>;
@@ -54,8 +54,14 @@ function isIpv6(d) {
54
54
  if (!d) {
55
55
  return false;
56
56
  }
57
- const isIPv6Regex = /^([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})$/gm;
58
- return isIPv6Regex.test(d);
57
+ try {
58
+ // 尝试构造URL,用IPv6作为hostname
59
+ new URL(`http://[${d}]`);
60
+ return true;
61
+ }
62
+ catch {
63
+ return false;
64
+ }
59
65
  }
60
66
  function isIp(d) {
61
67
  if (!d) {
@@ -23,23 +23,26 @@ export class HttpError extends Error {
23
23
  if (!error) {
24
24
  return;
25
25
  }
26
- super(error.message || error.response?.statusText);
27
- const message = error?.message;
26
+ let message = error?.message || error?.response.statusText || error?.code;
28
27
  if (message && typeof message === "string" && message.indexOf) {
29
28
  for (const key in errorMap) {
30
29
  if (message.indexOf(key) > -1) {
31
- this.message = `${this.message}(${errorMap[key]})`;
30
+ message = `${message}(${errorMap[key]})`;
32
31
  break;
33
32
  }
34
33
  }
35
34
  }
35
+ if (!message) {
36
+ message = error.message;
37
+ }
38
+ if (error.errors && error.errors.length > 0) {
39
+ message += " \n" + error.errors.map((item) => item.message).join("\n ");
40
+ }
41
+ super(message);
36
42
  this.name = error.name;
37
43
  this.code = error.code;
38
44
  this.status = error.response?.status;
39
45
  this.statusText = error.response?.statusText || error.code;
40
- if (!this.message) {
41
- this.message = error.code;
42
- }
43
46
  this.request = {
44
47
  baseURL: error.config?.baseURL,
45
48
  url: error.config?.url,
@@ -151,39 +154,40 @@ export function createAxiosService({ logger }) {
151
154
  return response.data;
152
155
  }, (error) => {
153
156
  const status = error.response?.status;
157
+ let message = "";
154
158
  switch (status) {
155
159
  case 400:
156
- error.message = "请求错误";
160
+ message = "请求错误";
157
161
  break;
158
162
  case 401:
159
- error.message = "认证/登录失败";
163
+ message = "认证/登录失败";
160
164
  break;
161
165
  case 403:
162
- error.message = "拒绝访问";
166
+ message = "拒绝访问";
163
167
  break;
164
168
  case 404:
165
- error.message = `请求地址出错`;
169
+ message = `请求地址出错`;
166
170
  break;
167
171
  case 408:
168
- error.message = "请求超时";
172
+ message = "请求超时";
169
173
  break;
170
174
  case 500:
171
- error.message = "服务器内部错误";
175
+ message = "服务器内部错误";
172
176
  break;
173
177
  case 501:
174
- error.message = "服务未实现";
178
+ message = "服务未实现";
175
179
  break;
176
180
  case 502:
177
- error.message = "网关错误";
181
+ message = "网关错误";
178
182
  break;
179
183
  case 503:
180
- error.message = "服务不可用";
184
+ message = "服务不可用";
181
185
  break;
182
186
  case 504:
183
- error.message = "网关超时";
187
+ message = "网关超时";
184
188
  break;
185
189
  case 505:
186
- error.message = "HTTP版本不受支持";
190
+ message = "HTTP版本不受支持";
187
191
  break;
188
192
  case 302:
189
193
  //重定向
@@ -191,8 +195,11 @@ export function createAxiosService({ logger }) {
191
195
  default:
192
196
  break;
193
197
  }
198
+ if (status) {
199
+ message += ` [${status}] `;
200
+ }
194
201
  const errorCode = error.code;
195
- let errorMessage = null;
202
+ let errorMessage = "";
196
203
  if (errorCode === "ECONNABORTED") {
197
204
  errorMessage = "请求连接终止";
198
205
  }
@@ -208,10 +215,17 @@ export function createAxiosService({ logger }) {
208
215
  else if (errorCode === "ENOTFOUND") {
209
216
  errorMessage = "请求地址不存在";
210
217
  }
211
- if (errorMessage) {
212
- error.message = errorMessage + "," + error.message;
218
+ if (errorCode) {
219
+ errorMessage += ` [${errorCode}] `;
220
+ }
221
+ if (message) {
222
+ errorMessage += `,${message}`;
223
+ }
224
+ if (error.message) {
225
+ errorMessage += `(${error.message})`;
213
226
  }
214
- logger.error(`请求出错:status:${error.response?.status || error.code},statusText:${error.response?.statusText || error.code},url:${error.config?.url},method:${error.config?.method}。`);
227
+ error.message = errorMessage;
228
+ logger.error(`请求出错:${errorMessage} status:${status},statusText:${error.response?.statusText || error.code},url:${error.config?.url},method:${error.config?.method}。`);
215
229
  logger.error("返回数据:", JSON.stringify(error.response?.data));
216
230
  if (error.response?.data) {
217
231
  const message = error.response.data.message || error.response.data.msg || error.response.data.error;
@@ -1,3 +1,4 @@
1
1
  export declare const stringUtils: {
2
2
  maxLength(str?: string, length?: number): string;
3
+ appendTimeSuffix(str?: string): string;
3
4
  };
@@ -1,8 +1,15 @@
1
+ import dayjs from "dayjs";
1
2
  export const stringUtils = {
2
3
  maxLength(str, length = 100) {
3
4
  if (str) {
4
- return str.length > length ? str.slice(0, length) + '...' : str;
5
+ return str.length > length ? str.slice(0, length) + "..." : str;
5
6
  }
6
- return '';
7
+ return "";
8
+ },
9
+ appendTimeSuffix(str) {
10
+ if (str) {
11
+ return `${str}-${dayjs().format("YYYYMMDDHHmmssSSS")}`;
12
+ }
13
+ return "";
7
14
  },
8
15
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@certd/basic",
3
3
  "private": false,
4
- "version": "1.38.2",
4
+ "version": "1.38.4",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",
@@ -47,5 +47,5 @@
47
47
  "tslib": "^2.8.1",
48
48
  "typescript": "^5.4.2"
49
49
  },
50
- "gitHead": "f92dc6a1ad103de9cc184da3b84096943906cb59"
50
+ "gitHead": "84291482732687cc8162c6505666ba2b29b02918"
51
51
  }