69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
/**
|
|
* Discord webhook smoke test — sends a FAKE digest to DISCORD_WEBHOOK_URL
|
|
* so you can verify the integration without waiting for a real signal change.
|
|
*
|
|
* Usage:
|
|
* npm run discord:test
|
|
*/
|
|
|
|
import 'dotenv/config';
|
|
import { DiscordNotifier } from '../server/domains/digest/DiscordNotifier';
|
|
import type { DigestReport } from '../server/domains/shared/types';
|
|
|
|
/* eslint-disable no-console */
|
|
if (!process.env.DISCORD_WEBHOOK_URL) {
|
|
console.error('DISCORD_WEBHOOK_URL is not set in .env');
|
|
console.error('Discord → channel → Settings → Integrations → Webhooks → New Webhook → Copy URL');
|
|
process.exit(1);
|
|
}
|
|
|
|
const fakeReport: DigestReport = {
|
|
date: new Date().toISOString().slice(0, 10),
|
|
snapshotCount: 3,
|
|
newTickers: [],
|
|
changes: [
|
|
{
|
|
ticker: 'TEST',
|
|
previousSignal: '✅ Strong Buy',
|
|
newSignal: '🔄 Neutral',
|
|
previousDate: 'yesterday',
|
|
scoreDelta: -7,
|
|
price: 123.45,
|
|
catalysts: [
|
|
{
|
|
headline: '🔧 This is a TEST message from market-screener — webhook works!',
|
|
catalyst: 'regulatory',
|
|
source: 'edgar',
|
|
url: 'https://example.com',
|
|
publishedAt: new Date().toISOString(),
|
|
},
|
|
],
|
|
},
|
|
],
|
|
maStories: [
|
|
{
|
|
headline: '🔧 TEST: SC 13D filing example (M&A section renders like this)',
|
|
catalyst: 'ma',
|
|
source: 'edgar',
|
|
url: 'https://example.com',
|
|
publishedAt: new Date().toISOString(),
|
|
},
|
|
],
|
|
};
|
|
|
|
const logger = {
|
|
log: (...args: unknown[]) => console.log(...args),
|
|
warn: (...args: unknown[]) => console.warn(...args),
|
|
write: (msg: string) => process.stdout.write(msg),
|
|
};
|
|
|
|
const ok = await new DiscordNotifier(logger).send(fakeReport);
|
|
if (ok) {
|
|
console.log('✓ Test digest posted — check your Discord channel.');
|
|
process.exit(0);
|
|
} else {
|
|
console.error('✗ Post failed. Check the webhook URL (it may have been deleted/regenerated).');
|
|
process.exit(1);
|
|
}
|
|
/* eslint-enable no-console */
|