worldstate-emitter
    Preparing search index...

    worldstate-emitter

    Worldstate Emitter

    Suuuper simple emitter for worldstate events.

    Very opinionated decisions on what events and event names, as well as.... everything else

    semantic-release: angular npm npm downloads TypeScript Discord

    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 URL
    • KUVA_URL - Custom Kuva/Arbitration data URL
    • SENTIENT_URL - Custom Sentient Anomaly data URL
    • WORLDSTATE_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 enable
    • TWITTER_KEY - Twitter API consumer key
    • TWITTER_SECRET - Twitter API consumer secret
    • TWITTER_BEARER_TOKEN - Twitter API bearer token
    • TWITTER_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:

    Twitter Accounts

    Twitter Events
    • tweet
    • retweet
    • reply
    • quote

    RSS Feeds
    Staff Replies

    This project is written in TypeScript and uses tsdown for building:

    npm run build
    

    This generates:

    • dist/index.mjs - Compiled JavaScript module
    • dist/index.d.mts - TypeScript type definitions
    npm 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:

    • TypeScript with strict mode
    • Biome for linting and formatting
    • Conventional Commits for commit messages
    • Semantic Release for automated versioning

    Before submitting a PR:

    1. Run npm run lint:fix to format code
    2. Run npm test to ensure tests pass
    3. Run npm run build to verify the build
    4. Use conventional commit messages

    Apache-2.0

    Discord