SOURCE / PINNED RELEASE
Made of little things.
Body Journal
- Release
- e8049f8da4e2…
- Author-recorded commit
- 61c04bf0e8aa…
- License
- LICENSE
- Author’s source reference
- nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-6c4554844c7
Archive hash verified: 4369d778da046a8b…. The source-to-build association is the author’s claim; it has not been independently rebuilt.
import { parseSettings, type ConnectionSettings } from './ai-client.js';
import { boundedText, object } from './ai-contract.js';
export interface SavedConnections {
version: 2;
settings: ConnectionSettings;
remembered: string[];
keys: { id: string; provider: string; value: string }[];
trustedBridge: string;
}
export const bridgeIdentity = (settings: ConnectionSettings): string => JSON.stringify(settings.bridge);
export function parseConnections(raw: string): SavedConnections {
if (new TextEncoder().encode(raw).byteLength > 24_000) throw new Error('Saved connections are too large.');
const data = object(JSON.parse(raw));
if (data.version === 1) {
const settings = parseSettings(raw);
return { version: 2, settings, remembered: settings.connections.map(c => c.id), keys: [], trustedBridge: '' };
}
if (data.version !== 2 || !Array.isArray(data.remembered) || data.remembered.length > 8 || !Array.isArray(data.keys) || data.keys.length > 8) throw new Error('Invalid saved connections.');
const settings = parseSettings(JSON.stringify(data.settings));
const selected = data.remembered;
const remembered = settings.connections.filter(c => selected.includes(c.id)).map(c => c.id);
const seen = new Set<string>();
const keys = data.keys.map(value => {
const k = object(value), id = boundedText(k.id, 80), key = boundedText(k.value, 512);
if (seen.has(id) || !remembered.includes(id) || !settings.connections.some(c => c.id === id && c.provider === k.provider) || !/^[\x21-\x7e]{8,512}$/.test(key)) throw new Error('Invalid saved key.');
seen.add(id);
return { id, provider: String(k.provider), value: key };
});
return { version: 2, settings, remembered, keys, trustedBridge: data.trustedBridge === bridgeIdentity(settings) ? String(data.trustedBridge) : '' };
}
export function connectionRecord(settings: ConnectionSettings, keys: Map<string, string>, remembered: Set<string>, trusted: boolean): string {
const safe = parseSettings(JSON.stringify(settings));
const record = { version: 2, settings: safe, remembered: safe.connections.filter(c => remembered.has(c.id)).map(c => c.id),
keys: safe.connections.flatMap(c => remembered.has(c.id) && keys.get(c.id) ? [{ id: c.id, provider: c.provider, value: keys.get(c.id) }] : []),
trustedBridge: trusted ? bridgeIdentity(safe) : '' };
return JSON.stringify(parseConnections(JSON.stringify(record)));
}
