openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
54 lines (53 loc) • 3.07 kB
JavaScript
import { t as hasNonEmptyString } from "./string-coerce-CIXf7egm.js";
import { d as isSecretRef, v as resolveSecretInputRef } from "./types.secrets-kC0nOetj.js";
import { a as isBuiltInDefaultSecretProviderRef, l as isValidSecretRef } from "./ref-contract-D92DqQ-r.js";
import { a as resolveTokenExpiryState, r as hasUsableOAuthCredential } from "./credential-state-N1MIGw99.js";
import { c as isNonSecretApiKeyMarker, s as isKnownEnvApiKeyMarker } from "./model-auth-markers-jBKQn38x.js";
import { t as canResolveEnvSecretRefInReadOnlyPath } from "./secret-ref-readonly.internal-BCUjKmWU.js";
//#region src/agents/auth-profiles/read-only-availability.ts
/** Pure, non-resolving credential availability checks shared by status and route selection. */
function hasMalformedSecretInputSyntax(value) {
if (typeof value !== "string") return false;
const trimmed = value.trim();
return trimmed.startsWith("secretref-env:") || trimmed.startsWith("__env__:") || trimmed.startsWith("$");
}
function resolveSecretRefReadOnlyAvailability(value, cfg, env) {
if (!isSecretRef(value) || !isValidSecretRef(value)) return false;
if (value.source === "env") {
if (!canResolveEnvSecretRefInReadOnlyPath({
cfg,
provider: value.provider,
id: value.id
})) return false;
return hasNonEmptyString(env[value.id]) ? true : void 0;
}
const source = cfg.secrets?.providers?.[value.provider];
if (source?.source !== value.source && !isBuiltInDefaultSecretProviderRef(cfg, value)) return false;
if (value.source === "file" && source?.source === "file" && source.mode === "singleValue" !== (value.id === "value")) return false;
}
function resolveSecretInputReadOnlyAvailability(value, refValue, cfg, env) {
const { ref } = resolveSecretInputRef({
value,
refValue,
defaults: cfg.secrets?.defaults
});
if (ref) return resolveSecretRefReadOnlyAvailability(ref, cfg, env);
if (!hasNonEmptyString(value)) return false;
if (hasMalformedSecretInputSyntax(value)) return false;
return isKnownEnvApiKeyMarker(value) ? hasNonEmptyString(env[value.trim()]) : isNonSecretApiKeyMarker(value) ? void 0 : true;
}
function resolveStoredCredentialReadOnlyAvailability(params) {
const { credential, cfg, env } = params;
const now = params.now ?? Date.now();
if (credential.type === "api_key") return resolveSecretInputReadOnlyAvailability(credential.key, credential.keyRef, cfg, env);
if (credential.type === "token") {
const expiryState = resolveTokenExpiryState(credential.expires, now);
if (expiryState === "expired" || expiryState === "invalid_expires") return false;
return resolveSecretInputReadOnlyAvailability(credential.token, credential.tokenRef, cfg, env);
}
if (hasUsableOAuthCredential(credential, { now })) return true;
if (hasNonEmptyString(credential.refresh)) return params.canRefreshOAuth ? true : void 0;
return credential.oauthRef && !hasNonEmptyString(credential.access) ? void 0 : false;
}
//#endregion
export { resolveSecretRefReadOnlyAvailability as n, resolveStoredCredentialReadOnlyAvailability as r, hasMalformedSecretInputSyntax as t };