A Node.js library for querying Warframe item prices from the Warframe.Market API.
npm install --save warframe-nexus-query
import PriceCheckQuerier from 'warframe-nexus-query';
const querier = new PriceCheckQuerier({ logger: console });
// Query item prices
const results = await querier.priceCheckQuery('loki prime', 'pc');
console.log(results);
// Get Discord-formatted attachments
const attachments = await querier.priceCheckQueryAttachment('ash prime systems', undefined, 'pc');
console.log(attachments);
// Clean up when done
await querier.stopUpdating();
const querier = new PriceCheckQuerier(options);
Options:
logger - Logger instance (default: console)marketCache - Custom cache implementation (optional)skipMarket - Skip market data fetching (default: false)priceCheckQuery(query, platform)Query item prices and return raw result objects.
Parameters:
query (string) - Item name to search forplatform (string) - Platform: 'pc', 'ps4', 'playstation', 'xb1', 'xbox', 'xbone', 'swi', 'switch', 'ns'Returns: Promise<Array<Summary>> - Array of price summary objects
const results = await querier.priceCheckQuery('nova prime set', 'pc');
priceCheckQueryString(query, platform)Query item prices and return formatted string.
Parameters:
query (string) - Item name to search forplatform (string) - Platform identifierReturns: Promise<string> - Formatted price string
const priceString = await querier.priceCheckQueryString('maiming strike', 'pc');
console.log(priceString); // "Maiming Strike: 150p (avg)"
priceCheckQueryAttachment(query, priorResults, platform)Query item prices and return Discord-formatted embeds.
Parameters:
query (string) - Item name to search forpriorResults (Array|undefined) - Prior query results to use instead of fetching new dataplatform (string) - Platform identifierReturns: Promise<Array<Object>> - Array of Discord embed objects
const embeds = await querier.priceCheckQueryAttachment('condition overload', undefined, 'pc');
// Send embeds to Discord webhook
await fetch(webhookUrl, {
method: 'POST',
body: JSON.stringify({ embeds }),
headers: { 'Content-Type': 'application/json' },
});
stopUpdating()Clean up resources and stop background updates.
await querier.stopUpdating();
| Variable | Description | Default | Example |
|---|---|---|---|
WARFRAME_MARKET_API_VERSION |
API version to use | v1 |
v2 |
MARKET_TIMEOUT |
API request timeout (ms) | 30000 |
60000 |
MARKET_CACHE_PATH |
Cache directory path | ./cache |
/tmp/wf-cache |
MARKET_V2_URL_OVERRIDE |
Custom v2 API base URL | - | https://custom.api/v2 |
Switch between v1 and v2 APIs:
# Use v2 API (recommended)
WARFRAME_MARKET_API_VERSION=v2 node app.js
# Use v1 API (legacy)
WARFRAME_MARKET_API_VERSION=v1 node app.js
The v2 API includes enhanced features:
{
item: 'Ash Prime Systems',
prices: {
selling: { median: 15, average: 18.5, min: 10, max: 30 },
buying: { median: 12, average: 11.8, min: 8, max: 15 }
},
traders: [
{
user: 'TraderName',
platinum: 15,
quantity: 3,
status: 'online',
reputation: 156,
activity: 'In Dojo'
}
]
}
The following platform identifiers are supported:
| Platform | Aliases |
|---|---|
| PC | pc |
| PlayStation | ps4, playstation |
| Xbox | xb1, xbox, xbone |
| Nintendo Switch | swi, switch, ns |
Result object returned by priceCheckQuery():
{
type: 'market-v2', // 'market' for v1, 'market-v2' for v2
item: 'Item Name',
platform: 'pc',
componentName: 'Set',
prices: {
selling: {
median: 100,
average: 105.5,
min: 80,
max: 150,
count: 25
},
buying: {
median: 90,
average: 88.2,
min: 60,
max: 95,
count: 15
}
},
traders: [ // v2 only
{
user: 'Username',
platinum: 100,
quantity: 2,
status: 'online', // 'online' | 'ingame' | 'offline'
reputation: 250,
activity: 'On Mission'
}
]
}
Result object returned by priceCheckQueryAttachment():
{
title: 'Ash Prime Systems [PC]',
url: 'https://warframe.market/items/ash_prime_systems',
thumbnail: { url: 'https://warframe.market/static/assets/...' },
color: 0x336699,
fields: [
{
name: 'Selling',
value: '💰 15p (median)\n📊 10-30p range\n📦 25 orders',
inline: true
},
{
name: 'Buying',
value: '💰 12p (median)\n📊 8-15p range\n📦 15 orders',
inline: true
},
{
name: '🟢 Online Traders',
value: 'TraderName: 15p x3'
}
],
footer: {
text: 'Warframe Market • Updated 2 minutes ago'
}
}
import PriceCheckQuerier from 'warframe-nexus-query';
const querier = new PriceCheckQuerier({ logger: console });
// Search for an item
const results = await querier.priceCheckQuery('nikana prime', 'pc');
results.forEach((result) => {
console.log(`${result.item} - ${result.componentName}`);
console.log(`Median sell price: ${result.prices.selling.median}p`);
console.log(`Median buy price: ${result.prices.buying.median}p`);
});
await querier.stopUpdating();
import PriceCheckQuerier from 'warframe-nexus-query';
import { Client, GatewayIntentBits } from 'discord.js';
const bot = new Client({ intents: [GatewayIntentBits.Guilds] });
const querier = new PriceCheckQuerier({ logger: console });
bot.on('interactionCreate', async (interaction) => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'price') {
const item = interaction.options.getString('item');
const platform = interaction.options.getString('platform') || 'pc';
const embeds = await querier.priceCheckQueryAttachment(item, undefined, platform);
if (embeds.length > 0) {
await interaction.reply({ embeds });
} else {
await interaction.reply('No results found for that item.');
}
}
});
bot.login(process.env.DISCORD_TOKEN);
import PriceCheckQuerier from 'warframe-nexus-query';
const querier = new PriceCheckQuerier({ logger: console });
const platforms = ['pc', 'ps4', 'xbox', 'switch'];
for (const platform of platforms) {
const results = await querier.priceCheckQuery('Trinity Prime Set', platform);
if (results.length > 0) {
const price = results[0].prices.selling.median;
console.log(`${platform.toUpperCase()}: ${price}p`);
}
}
await querier.stopUpdating();
# Build, then run tests
npm test
# Coverage (Coveralls consumes coverage/lcov.info)
npm run test:coverage
# Lint and auto-fix. Formatting comes from ESLint Stylistic.
npm run lint
npm run lint:fix
# Generate API documentation
npm run build:docs
Typedoc writes HTML to docs/. Pull requests build the docs. Pushes to master publish them to GitHub Pages.
# Clone repository
git clone https://github.com/WFCD/warframe-nexus-query.git
cd warframe-nexus-query
# Install dependencies
npm install
# Run tests in watch mode
npm test -- --watch
# Lint and auto-fix
npm run lint:fix
Contributions are welcome! Please:
git checkout -b feature/amazing-feature)git commit -m 'feat: add amazing feature')git push origin feature/amazing-feature)Licensed under the Apache License 2.0. See LICENSE for details.