119 lines · 3.6 KB · TypeScript
RawDownload
export function toUint8Array(value: unknown): Uint8Array {	if (value instanceof Uint8Array) {		return value;	}	if (ArrayBuffer.isView(value)) {		return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);	}	if (value instanceof ArrayBuffer) {		return new Uint8Array(value);	}	return new TextEncoder().encode(String(value));} export function bytesToBase64(value: Uint8Array): string {	const bufferCtor = (		globalThis as {			Buffer?: {				from(value: Uint8Array): { toString(encoding: "base64"): string };			};		}	).Buffer;	if (bufferCtor) {		return bufferCtor.from(value).toString("base64");	} 	let binary = "";	for (let offset = 0; offset < value.byteLength; offset += 0x8000) {		const chunk = value.subarray(offset, offset + 0x8000);		binary += String.fromCharCode(...chunk);	}	return btoa(binary);} export function base64ToBytes(value: string): Uint8Array {	const bufferCtor = (		globalThis as {			Buffer?: {				from(value: string, encoding: "base64"): Uint8Array;			};		}	).Buffer;	if (bufferCtor) {		return new Uint8Array(bufferCtor.from(value, "base64"));	} 	const binary = atob(value);	const out = new Uint8Array(binary.length);	for (let offset = 0; offset < binary.length; offset += 1) {		out[offset] = binary.charCodeAt(offset);	}	return out;} export function guestEncodingBootstrapCode(): string {	return `		if (!globalThis.__agentOSEncoding) {			const encoder = new TextEncoder();			const bytesToBase64 = (bytes) => {				let binary = "";				for (let offset = 0; offset < bytes.byteLength; offset += 0x8000) {					const chunk = bytes.subarray(offset, offset + 0x8000);					binary += String.fromCharCode(...chunk);				}				return btoa(binary);			};			const base64ToBytes = (value) => {				const binary = atob(value);				const out = new Uint8Array(binary.length);				for (let index = 0; index < binary.length; index += 1) {					out[index] = binary.charCodeAt(index);				}				return out;			};			const toBytes = (value, encoding) => {				if (value == null) return new Uint8Array(0);				if (typeof value === "string") {					if (encoding === "hex") {						const out = new Uint8Array(Math.floor(value.length / 2));						for (let index = 0; index < out.length; index += 1) {							out[index] = parseInt(value.slice(index * 2, index * 2 + 2), 16);						}						return out;					}					if (encoding === "base64") return base64ToBytes(value);					return encoder.encode(value);				}				if (ArrayBuffer.isView(value)) {					return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);				}				if (value instanceof ArrayBuffer) return new Uint8Array(value);				if (Array.isArray(value)) return new Uint8Array(value);				if (value && value.type === "Buffer" && Array.isArray(value.data)) return new Uint8Array(value.data);				if (value && typeof value === "object" && value.type === "secret" && typeof value.export === "function") {					return toBytes(value.export());				}				return encoder.encode(String(value));			};			Object.defineProperty(globalThis, "__agentOSEncoding", {				configurable: true,				value: {					base64ToBytes,					bytesToBase64,					decodeBytesPayload(value) {						if (typeof value === "string") return encoder.encode(value);						if (!value || value.__agentOSType !== "bytes" || typeof value.base64 !== "string") {							return new Uint8Array(0);						}						return base64ToBytes(value.base64);					},					encodeBytesPayload(value) {						if (value == null) return null;						return { __agentOSType: "bytes", base64: bytesToBase64(toBytes(value)) };					},					toBytes,				},			});		}	`;}