支持领取链接长期有效
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -21,7 +21,7 @@ export type FulfillmentPrepareDeps = {
|
||||
updateTask: (taskId: number | string, patch: TaskUpdatePatch) => Promise<TaskRow | null>
|
||||
createTaskClaimToken: (taskId: number | string) => Promise<{
|
||||
token: string
|
||||
expired_at: string
|
||||
expired_at: string | null
|
||||
[key: string]: unknown
|
||||
}>
|
||||
notifyTaskAutoManualReview: (payload: {
|
||||
|
||||
Reference in New Issue
Block a user