import { PLAY_AUTHORING_FIELD_REGISTRY, validatePlayAuthoringField, type PlayAuthoringFieldPath, } from '../plays/authoring-contract'; export const DURABLE_CALL_STALE_AFTER_SECONDS_ERROR = PLAY_AUTHORING_FIELD_REGISTRY['ctx.tools.execute.staleAfterSeconds'] .errorMessage; export type DurableCallCachePolicy = { forceRefresh: boolean; staleAfterSeconds: number | null; }; /** Normalize the public freshness contract shared by durable calls. */ export function resolveDurableCallCachePolicy( staleAfterSeconds?: number | null, path: Extract< PlayAuthoringFieldPath, | 'ctx.tools.execute.staleAfterSeconds' | 'ctx.step.staleAfterSeconds' | 'ctx.fetch.staleAfterSeconds' > = 'ctx.tools.execute.staleAfterSeconds', ): DurableCallCachePolicy { if (staleAfterSeconds === undefined || staleAfterSeconds === null) { return { forceRefresh: false, staleAfterSeconds: null }; } if (staleAfterSeconds === 0) { return { forceRefresh: true, staleAfterSeconds: null }; } validatePlayAuthoringField(path, staleAfterSeconds); return { forceRefresh: false, staleAfterSeconds }; }