mirror of
https://github.com/certd/certd.git
synced 2026-05-19 07:37:36 +08:00
refactor(acme-client): 将acme-client改造成ts包并优化项目结构
重构acme-client模块,将原有JavaScript代码迁移至TypeScript 添加类型定义文件(.d.ts)和类型检查 更新构建配置和脚本以支持TypeScript编译 优化项目目录结构和模块导出方式 更新相关依赖和开发工具配置
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { formatResponseError, parseRetryAfterHeader, retry } from "./util.js";
|
||||
|
||||
declare const describe: any;
|
||||
declare const it: any;
|
||||
|
||||
describe("util helpers", () => {
|
||||
it("parses retry-after values", () => {
|
||||
assert.equal(parseRetryAfterHeader("120"), 120);
|
||||
assert.equal(parseRetryAfterHeader("invalid"), 0);
|
||||
assert.equal(parseRetryAfterHeader("Wed, 21 Oct 2015 07:28:00 GMT"), 0);
|
||||
});
|
||||
|
||||
it("formats response errors without newlines", () => {
|
||||
const error = formatResponseError({
|
||||
data: {
|
||||
error: {
|
||||
detail: "line 1\nline 2",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.equal(error, "line 1line 2");
|
||||
});
|
||||
|
||||
it("retries until success", async () => {
|
||||
const delays: number[] = [];
|
||||
const originalSetTimeout = globalThis.setTimeout;
|
||||
let attempts = 0;
|
||||
|
||||
(globalThis as any).setTimeout = (fn: (...args: any[]) => void, delay?: number) => {
|
||||
delays.push(Number(delay));
|
||||
return originalSetTimeout(fn, 0);
|
||||
};
|
||||
|
||||
try {
|
||||
const result = await retry(
|
||||
async () => {
|
||||
attempts += 1;
|
||||
|
||||
if (attempts < 3) {
|
||||
throw new Error(`boom-${attempts}`);
|
||||
}
|
||||
|
||||
return "ok";
|
||||
},
|
||||
{ attempts: 3, min: 10, max: 20 },
|
||||
() => {}
|
||||
);
|
||||
|
||||
assert.equal(result, "ok");
|
||||
assert.equal(attempts, 3);
|
||||
assert.deepEqual(delays, [10, 20]);
|
||||
} finally {
|
||||
(globalThis as any).setTimeout = originalSetTimeout;
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user