worldstate-emitter
v2.4.4
Published
Event emitter for Warframe worldstate & other events - TypeScript support included
Maintainers
Readme
Worldstate Emitter
Suuuper simple emitter for worldstate events.
Very opinionated decisions on what events and event names, as well as.... everything else
Installation
npm install worldstate-emitterThis package requires Node.js 20.10.0 or higher and is an ES Module.
Peer Dependencies
You'll also need to install the following peer dependencies:
npm install warframe-worldstate-parser@^5 warframe-worldstate-data@^3Optional Dependencies
For better logging support:
npm install winston@^3Usage
Basic Example
import 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);TypeScript Support
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");Configuration Options
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
});Environment Variables
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 Events
Main Events
| 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 |
API Methods
| 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
- 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)
tweetretweetreplyquote
- Players helping Players
- PC Updates
- PC Announcements
- PS4 Updates
- PS4 Announcements
- XB1 Updates
- XB1 Announcements
- Switch Updates
- Switch Announcements
- News
- Developers Workshop
- [DE]Rebecca
- [DE]Danielle
- [DE]Drew
- [DE]Glen
- [DE]Taylor
- [DE]Steve
- [DE]Helen
- [DE]Saske
- [DE]Kaz
- [DE]Pablo
- [DE]Connor
- [DE]Marcus
- [DE]George
- [DE]Bear
Development
Building
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
Testing
npm testTests use Mocha with tsx for TypeScript support.
Linting
This project uses Biome for linting and formatting:
npm run lint # Check for issues
npm run lint:fix # Auto-fix issuesDocumentation
Generate TypeDoc documentation:
npm run build:docsProject Structure
worldstate-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)Contributing
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
License
Apache-2.0
