mirror of
http://192.168.0.88:13333/lywsvip/openclaw-zero-token.git
synced 2026-05-10 00:56:22 +08:00
Major upgrade from e26988a38 to upstream v2026.3.28 (f9b107928).
Key changes:
- Upstream src/, ui/, extensions/ (89 bundled extensions)
- Zero-token web providers preserved in src/zero-token/
- AskOnce plugin restored and registered as CLI command
- Added missing packages: @anthropic-ai/vertex-sdk, @modelcontextprotocol/sdk
- Fixed tsconfig rootDir, skipLibCheck for plugin-sdk DTS build
- Added askonce to bundled plugin metadata and package.json exports
- Fixed AskOnce CLI command registration (missing commands metadata)
- Restored AskOnce adapter imports (correct 5-level relative paths)
- Removed stale migration artifacts from root directory
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
export function estimateBase64DecodedBytes(base64: string): number {
|
|
// Avoid `trim()`/`replace()` here: they allocate a second (potentially huge) string.
|
|
// We only need a conservative decoded-size estimate to enforce budgets before Buffer.from(..., "base64").
|
|
let effectiveLen = 0;
|
|
for (let i = 0; i < base64.length; i += 1) {
|
|
const code = base64.charCodeAt(i);
|
|
// Treat ASCII control + space as whitespace; base64 decoders commonly ignore these.
|
|
if (code <= 0x20) {
|
|
continue;
|
|
}
|
|
effectiveLen += 1;
|
|
}
|
|
|
|
if (effectiveLen === 0) {
|
|
return 0;
|
|
}
|
|
|
|
let padding = 0;
|
|
// Find last non-whitespace char(s) to detect '=' padding without allocating/copying.
|
|
let end = base64.length - 1;
|
|
while (end >= 0 && base64.charCodeAt(end) <= 0x20) {
|
|
end -= 1;
|
|
}
|
|
if (end >= 0 && base64[end] === "=") {
|
|
padding = 1;
|
|
end -= 1;
|
|
while (end >= 0 && base64.charCodeAt(end) <= 0x20) {
|
|
end -= 1;
|
|
}
|
|
if (end >= 0 && base64[end] === "=") {
|
|
padding = 2;
|
|
}
|
|
}
|
|
|
|
const estimated = Math.floor((effectiveLen * 3) / 4) - padding;
|
|
return Math.max(0, estimated);
|
|
}
|
|
|
|
const BASE64_CHARS_RE = /^[A-Za-z0-9+/]+={0,2}$/;
|
|
|
|
/**
|
|
* Normalize and validate a base64 string.
|
|
* Returns canonical base64 (no whitespace) or undefined when invalid.
|
|
*/
|
|
export function canonicalizeBase64(base64: string): string | undefined {
|
|
const cleaned = base64.replace(/\s+/g, "");
|
|
if (!cleaned || cleaned.length % 4 !== 0 || !BASE64_CHARS_RE.test(cleaned)) {
|
|
return undefined;
|
|
}
|
|
return cleaned;
|
|
}
|