Suuuper simple emitter for worldstate events.
Very opinionated decisions on what events and event names, as well as.... everything else
npm install worldstate-emitterThis package requires Node.js 20.10.0 or higher and is an ES Module.
You'll also need to install the following peer dependencies:
npm install warframe-worldstate-parser@^5 warframe-worldstate-data@^3For better logging support:
npm install winston@^3import WorldstateEmitter from "worldstate-emitter";
// Create emitter instance
const emitter = await WorldstateEmitter.make({
locale: "en",
features: ["worldstate", "rss", "twitter"],
});
// Listen for worldstate events
emitter.on("ws:update:event", (event) => {
console.log("New worldstate event:", event.id);
});
// Listen for RSS posts
emitter.on("rss", (post) => {
console.log("New forum post:", post.title);
});
// Listen for tweets
emitter.on("tweet", (tweet) => {
console.log("New tweet:", tweet.text);
});
// Get current worldstate
const worldstate = emitter.getWorldstate("en");
console.log("Current worldstate:", worldstate);This package is written in TypeScript and includes full type definitions. All types are automatically available when using TypeScript:
import WorldstateEmitter from "worldstate-emitter";
import type WorldState from "warframe-worldstate-parser";
const emitter = await WorldstateEmitter.make({ locale: "en" });
// TypeScript will infer the correct types
const ws: WorldState | undefined = emitter.getWorldstate("en");interface WorldstateEmitterOptions {
locale?: string; // Language to filter events (e.g., 'en', 'es', 'de')
features?: string[]; // Features to enable: 'worldstate', 'rss', 'twitter'
}
const emitter = await WorldstateEmitter.make({
locale: "en", // Optional: filter to English only
features: ["worldstate", "rss"], // Optional: only enable these features
});Configure the emitter with environment variables:
LOG_LEVEL- Logging level (default:error)WORLDSTATE_URL- Custom worldstate API URLKUVA_URL- Custom Kuva/Arbitration data URLSENTIENT_URL- Custom Sentient Anomaly data URLWORLDSTATE_CRON- Cron pattern for worldstate updates (default:25 */5 * * * *)WS_EXTERNAL_CRON- Cron pattern for external data (default:0 */10 * * * *)WS_EMITTER_FEATURES- Comma-separated list of features to enableTWITTER_KEY- Twitter API consumer keyTWITTER_SECRET- Twitter API consumer secretTWITTER_BEARER_TOKEN- Twitter API bearer tokenTWITTER_TIMEOUT- Twitter update interval in ms (default:60000)
| Emitter Event | Emit key | Description |
|---|---|---|
| RSS | rss |
New forum post from DE |
| Raw Worldstate | ws:update:raw |
Raw worldstate data updated |
| Parsed Worldstate | ws:update:parsed |
Parsed worldstate data available |
| Worldstate Event | ws:update:event |
Individual worldstate event |
| Tweet | tweet |
New tweet from one of the selected accounts |
| Method | Parameters | Returns | Description |
|---|---|---|---|
getRss() |
- | RssFeedItem[] |
Get current RSS feed items |
getWorldstate() |
language?: string |
WorldState | undefined |
Get worldstate for a language |
getTwitter() |
- | Promise<any> |
Get Twitter data |
debug |
- | DebugInfo |
Get debug information |
Parameters:
language- Defaults toen. Any locale fromwarframe-worldstate-data
Twitter Accounts
- Warframe (warframe)
- Digital Extremes (digitalextremes)
- [DE]Pablo (pablo)
- Cameron Rogers (cameron)
- [DE]Rebecca (rebecca)
- [DE]Steve (steve)
- [DE]Danielle (danielle)
- [DE]Megan (megan)
- [DE]George (george)
- [DE]Maciej (maciej)
- [DE]Sheldon (sheldon)
- [DE]Marcus (narc)
- [DE]Helen (helen)
- Tobiah (me) (tobiah)
- WF Discord (wfdiscord)
Twitter Events
tweetretweetreplyquote
RSS Feeds
This project is written in TypeScript and uses tsdown for building:
npm run buildThis generates:
dist/index.mjs- Compiled JavaScript moduledist/index.d.mts- TypeScript type definitions
npm testTests use Mocha with tsx for TypeScript support.
This project uses Biome for linting and formatting:
npm run lint # Check for issues
npm run lint:fix # Auto-fix issuesGenerate TypeDoc documentation:
npm run build:docsworldstate-emitter/
├── handlers/ # Event handlers
│ ├── events/ # Event processors
│ ├── RSS.ts # RSS feed handler
│ ├── Twitter.ts # Twitter API handler
│ └── Worldstate.ts # Worldstate handler
├── utilities/ # Utility classes and functions
│ ├── Cache.ts # Cron-based cache
│ ├── WSCache.ts # Worldstate cache wrapper
│ ├── env.ts # Environment configuration
│ └── index.ts # Shared utilities
├── resources/ # Configuration files
│ ├── config.ts # URL and cron patterns
│ ├── rssFeeds.json # RSS feed definitions
│ └── tweeters.json # Twitter accounts to watch
├── types/ # TypeScript type definitions
├── test/ # Test files
└── dist/ # Build output (generated)This project uses:
- TypeScript with strict mode
- Biome for linting and formatting
- Conventional Commits for commit messages
- Semantic Release for automated versioning
Before submitting a PR:
- Run
npm run lint:fixto format code - Run
npm testto ensure tests pass - Run
npm run buildto verify the build - Use conventional commit messages
Apache-2.0