支持领取链接长期有效

This commit is contained in:
yml2213
2026-08-11 14:06:29 +08:00
parent e72c936986
commit e097ddad3d
13 changed files with 65 additions and 9 deletions
@@ -0,0 +1,15 @@
import assert from 'node:assert/strict'
import test from 'node:test'
import { resolveClaimTokenExpiration } from './claim-service.js'
test('领取链接默认可配置为长期有效', () => {
assert.equal(resolveClaimTokenExpiration('2026-08-11T08:00:00.000Z', 0), null)
})
test('领取链接保留正整数小时的限时配置能力', () => {
assert.equal(
resolveClaimTokenExpiration('2026-08-11T08:00:00.000Z', 24),
'2026-08-12T08:00:00.000Z',
)
})
@@ -10,7 +10,7 @@ type TaskClaimToken = NonNullable<Awaited<ReturnType<typeof createClaimToken>>>
export async function createTaskClaimToken(taskId: number | string): Promise<TaskClaimToken> {
const createdAt = nowIso()
const expiredAt = addHours(createdAt, Number(runtimeConfig.orders.tokenTtlHours || 24))
const expiredAt = resolveClaimTokenExpiration(createdAt, runtimeConfig.orders.tokenTtlHours)
const token = await createClaimToken({
taskId: Number(taskId),
token: randomToken(24),
@@ -36,6 +36,17 @@ export async function createTaskClaimToken(taskId: number | string): Promise<Tas
}
}
/** 0 表示长期有效;正整数保留为可选的限时领取策略。 */
export function resolveClaimTokenExpiration(
createdAt: string,
tokenTtlHours: unknown,
): string | null {
const ttlHours = Number(tokenTtlHours)
return Number.isFinite(ttlHours) && ttlHours > 0
? addHours(createdAt, ttlHours)
: null
}
export function buildClaimUrl(token: string): string {
const baseUrl = String(runtimeConfig.orders.claimBaseUrl || '').trim()
return baseUrl ? `${baseUrl.replace(/\/+$/, '')}/${token}` : token