From 97d133442350b9725422ed4e55386f47e37004fd Mon Sep 17 00:00:00 2001 From: hectorzhao Date: Mon, 14 Sep 2026 15:20:30 +0800 Subject: [PATCH] fix: preserve fractional timestamp input compatibility --- api/src/open-api/open-api-input-boundaries.spec.ts | 1 + api/src/open-api/open-api.protocol.ts | 2 +- docs/client-http-api-guide.md | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/api/src/open-api/open-api-input-boundaries.spec.ts b/api/src/open-api/open-api-input-boundaries.spec.ts index ad3d268..52f2a20 100644 --- a/api/src/open-api/open-api-input-boundaries.spec.ts +++ b/api/src/open-api/open-api-input-boundaries.spec.ts @@ -26,6 +26,7 @@ describe('public HTTP input boundaries', () => { ['2026-09-14T08:00:00+08:00', '2026-09-14T00:00:00.000Z'], ['2026-09-14T00:00Z', '2026-09-14T00:00:00.000Z'], ['2000-02-29T00:00:00.123Z', '2000-02-29T00:00:00.123Z'], + ['2026-09-14T00:00:00.123456789Z', '2026-09-14T00:00:00.123Z'], ])('preserves valid calendar dates/timezones %s', (value, expected) => { expect(parseOpenApiDate(value).toISOString()).toBe(expected); }); diff --git a/api/src/open-api/open-api.protocol.ts b/api/src/open-api/open-api.protocol.ts index 5d7c6bc..4739e2e 100644 --- a/api/src/open-api/open-api.protocol.ts +++ b/api/src/open-api/open-api.protocol.ts @@ -12,7 +12,7 @@ export function pinnedWebhookLookup(address: string, family: number): LookupFunc /** Validate calendar components before Date can normalize an impossible day. */ export function parseOpenApiDate(value: string): Date { - const parts = /^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,3}))?)?(Z|[+-]\d{2}:\d{2}))?$/.exec( + const parts = /^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d+))?)?(Z|[+-]\d{2}:\d{2}))?$/.exec( value, ); if (parts) { diff --git a/docs/client-http-api-guide.md b/docs/client-http-api-guide.md index d6c985d..e11f298 100644 --- a/docs/client-http-api-guide.md +++ b/docs/client-http-api-guide.md @@ -398,7 +398,7 @@ headers["Idempotency-Key"] = "sms-order-20260914-0001" 查询代码没有额外强制“只查最近 N 天”,但历史查询能否返回数据取决于实际留存、当前应用归属和筛选条件。startTime 必须不晚于 endTime,当前时间边界两端均包含。跨窗口同步可按上行 id 去重,避免公共边界重复计入。 -时间接受 `YYYY-MM-DD`(按UTC零点)或带 `Z` / `±HH:mm` 时区的ISO 8601时间;秒可省略,小数秒最多三位。日期必须在日历上真实存在,不接受2月30日、24:00、无时区日期时间或本地化日期格式;空字符串也不是省略参数。游标中的时间执行同样校验。 +时间接受 `YYYY-MM-DD`(按UTC零点)或带 `Z` / `±HH:mm` 时区的ISO 8601时间;秒可省略,小数秒按毫秒精度解析,更高精度输入保留兼容。日期必须在日历上真实存在,不接受2月30日、24:00、无时区日期时间或本地化日期格式;空字符串也不是省略参数。游标中的时间执行同样校验。 ### 7.1 列表与筛选