Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/thatstupidcomputer / packages/discovery/evidence.ts |
| Date | Not specified in source |
| Repository | Janady13/thatstupidcomputer |
| Revision | 57555cde46910102dd25d6c1c1fb2c359e9655bd |
| Branch | main |
| Path or archive member | packages/discovery/evidence.ts |
| Original SHA-256 | 2b479226adfe10adfb52fa2fc6c775c0a181e7573caf27d79dfa37a1f8022f39 |
| Git blob SHA | 6cbd3fe147b1f6bf75db911d2afdabf69f9fded0 |
| Reading-copy SHA-256 | 2b479226adfe10adfb52fa2fc6c775c0a181e7573caf27d79dfa37a1f8022f39 |
Recovered source transcript
Download complete source text ↓22 lines · 1.2 KB
import {readFileSync,realpathSync,mkdirSync,lstatSync,writeFileSync} from 'node:fs';
import {resolve} from 'node:path';
/** Must be called before any collection. cwd is never an output authority. */
export function evidenceDirectory(projectRoot:string):string {
let root:string;
try {
root=realpathSync(projectRoot);
const pkg=JSON.parse(readFileSync(resolve(root,'package.json'),'utf8'));
if(pkg.name!=='thatstupidcomputer'||!lstatSync(resolve(root,'apps/web/src')).isDirectory()) throw new Error();
} catch { throw new Error('Evidence requires a verified project root'); }
const directory=resolve(root,'.build/discovery');
mkdirSync(directory,{recursive:true,mode:0o700});
if(realpathSync(directory)!==directory||lstatSync(directory).isSymbolicLink()) throw new Error('Unsafe evidence directory');
return directory;
}
export function saveEvidence(directory:string,provider:string,startedAt:string,report:unknown) {
if(!/^[a-z]+$/.test(provider)||!/^\d{4}-\d\d-\d\dT[\d:.]+Z$/.test(startedAt)) throw new Error('Invalid evidence identifier');
const file=resolve(directory,`${provider}-${startedAt.replace(/[:.]/g,'-')}.json`);
writeFileSync(file,JSON.stringify(report,null,2)+'\n',{flag:'wx',mode:0o600});
return file;
}