const fs = require('fs'); const path = require('path'); const log = (msg) => console.log(`[OASIS] [PATCH] ${msg}`); // === Patch ssb-ref === const ssbRefPath = path.resolve(__dirname, '../src/server/node_modules/ssb-ref/index.js'); if (fs.existsSync(ssbRefPath)) { const data = fs.readFileSync(ssbRefPath, 'utf8'); const patched = data.replace( /exports\.parseAddress\s*=\s*deprecate\([^)]*\)/, 'exports.parseAddress = parseAddress' ); if (patched !== data) { fs.writeFileSync(ssbRefPath, patched); log('Patched ssb-ref to remove deprecated usage of parseAddress'); } else { log('ssb-ref patch skipped: target line not found'); } } // === Patch ssb-blobs === const ssbBlobsPath = path.resolve(__dirname, '../src/server/node_modules/ssb-blobs/inject.js'); if (fs.existsSync(ssbBlobsPath)) { let data = fs.readFileSync(ssbBlobsPath, 'utf8'); const marker = 'want: function (id, cb)'; const startIndex = data.indexOf(marker); if (startIndex !== -1) { const endIndex = data.indexOf('},', startIndex); // end of function block if (endIndex !== -1) { const before = data.slice(0, startIndex); const after = data.slice(endIndex + 2); const replacement = ` want: function (id, cb) { id = toBlobId(id); if (!isBlobId(id)) return cb(new Error('invalid id:' + id)); if (blobStore.isEmptyHash(id)) return cb(null, true); if (wantCallbacks[id]) { if (!Array.isArray(wantCallbacks[id])) wantCallbacks[id] = []; wantCallbacks[id].push(cb); } else { wantCallbacks[id] = [cb]; blobStore.size(id, function (err, size) { if (err) return cb(err); if (size != null) { while (wantCallbacks[id].length) { const fn = wantCallbacks[id].shift(); if (typeof fn === 'function') fn(null, true); } delete wantCallbacks[id]; } }); } const peerId = findPeerWithBlob(id); if (peerId) get(peerId, id); if (wantCallbacks[id]) registerWant(id); },`; const finalData = before + replacement + after; fs.writeFileSync(ssbBlobsPath, finalData); log('Patched ssb-blobs to fix wantCallbacks handling'); } else { log('ssb-blobs patch skipped: end of want function not found'); } } else { log('ssb-blobs patch skipped: want function not found'); } }