Suuuper simple emitter for worldstate events.
Very opinionated decisions on what events and event names, as well as.... everything else
npm install worldstate-emitter
This 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@^3
For better logging support:
npm install winston@^3
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);
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 to en. Any locale from warframe-worldstate-datatweetretweetreplyquoteThis project is written in TypeScript and uses tsdown for building:
npm run build
This generates:
dist/index.mjs - Compiled JavaScript moduledist/index.d.mts - TypeScript type definitionsnpm test
Tests 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 issues
Generate TypeDoc documentation:
npm run build:docs
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)
This project uses:
Before submitting a PR:
npm run lint:fix to format codenpm test to ensure tests passnpm run build to verify the buildApache-2.0