|
1 | 1 | import { createSubsystemLogger } from "openclaw/plugin-sdk/core"; |
2 | 2 | import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime"; |
| 3 | +import { |
| 4 | + isFutureDateTimestampMs, |
| 5 | + resolveExpiresAtMsFromDurationMs, |
| 6 | +} from "openclaw/plugin-sdk/number-runtime"; |
3 | 7 | import type { |
4 | 8 | ModelDefinitionConfig, |
5 | 9 | ModelProviderConfig, |
@@ -92,9 +96,10 @@ function getCachedIamTokenEntry( |
92 | 96 | now: number = Date.now(), |
93 | 97 | ): { token: string; expiresAt: number } | undefined { |
94 | 98 | const cached = iamTokenCache.get(region); |
95 | | - if (cached && cached.expiresAt > now) { |
| 99 | + if (cached && isFutureDateTimestampMs(cached.expiresAt, { nowMs: now })) { |
96 | 100 | return cached; |
97 | 101 | } |
| 102 | + iamTokenCache.delete(region); |
98 | 103 | return undefined; |
99 | 104 | } |
100 | 105 |
|
@@ -123,7 +128,10 @@ export async function generateBearerTokenFromIam(params: { |
123 | 128 | region: params.region, |
124 | 129 | expiresInSeconds: 7200, // 2 hours |
125 | 130 | })(); |
126 | | - iamTokenCache.set(params.region, { token, expiresAt: now + IAM_TOKEN_TTL_MS }); |
| 131 | + const expiresAt = resolveExpiresAtMsFromDurationMs(IAM_TOKEN_TTL_MS, { nowMs: now }); |
| 132 | + if (expiresAt !== undefined) { |
| 133 | + iamTokenCache.set(params.region, { token, expiresAt }); |
| 134 | + } |
127 | 135 | return token; |
128 | 136 | } catch (error) { |
129 | 137 | log.debug?.("Mantle IAM token generation unavailable", { |
|
0 commit comments