#!/usr/bin/env node // Sendet eine Nachricht in den Briefkasten (App-Name=kiel-briefkasten). // Nutzung: node send-message.js "Text" [Absender] [Keyfile] // Ohne Keyfile wird publish/signing-key.json genutzt (=> ✓-Vermerk als Kiel). const fs = require('fs'); const path = require('path'); const crypto = require('crypto'); const { Readable } = require('stream'); const { TurboFactory, EthereumSigner } = require('@ardrive/turbo-sdk'); async function main() { const [text, from, keyfileArg] = process.argv.slice(2); if (!text) { console.error('Nutzung: node send-message.js "Text" [Absender] [Keyfile]'); process.exit(1); } const keyfile = keyfileArg || path.join(__dirname, 'signing-key.json'); let key; if (fs.existsSync(keyfile)) { key = JSON.parse(fs.readFileSync(keyfile, 'utf8')).privateKey; } else { key = crypto.randomBytes(32).toString('hex'); fs.writeFileSync(keyfile, JSON.stringify({ privateKey: key }, null, 2), { mode: 0o600 }); console.log('Neuer Signier-Key erzeugt:', keyfile); } const signer = new EthereumSigner(key); const turbo = TurboFactory.authenticated({ signer, token: 'ethereum' }); const buf = Buffer.from(text, 'utf8'); const tags = [ { name: 'App-Name', value: 'kiel-briefkasten' }, { name: 'Content-Type', value: 'text/plain' }, { name: 'Published-At', value: String(Math.floor(Date.now() / 1000)) }, ]; if (from) tags.push({ name: 'From', value: from }); const r = await turbo.uploadFile({ fileStreamFactory: () => Readable.from(buf), fileSizeFactory: () => buf.length, dataItemOpts: { tags }, }); console.log('Gesendet:', r.id); console.log('https://arweave.net/' + r.id); } main().catch(e => { console.error(e); process.exit(1); });