worldstate-emitter 2.2.8 → 2.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintignore CHANGED
@@ -1,4 +1,5 @@
1
1
  .github/**
2
2
  docs/**
3
3
  resources/**
4
+ !resources/config.js
4
5
  types/**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "worldstate-emitter",
3
- "version": "2.2.8",
3
+ "version": "2.2.10",
4
4
  "description": "Event emitter for worldstate & other warframe events",
5
5
  "keywords": [
6
6
  "warframe",
@@ -1,6 +1,7 @@
1
1
  export const WORLDSTATE_URL = process.env.WORLDSTATE_URL ?? 'https://api.warframe.com/cdn/worldState.php';
2
2
  export const KUVA_URL = process.env.KUVA_URL ?? 'https://10o.io/arbitrations.json';
3
3
  export const SENTIENT_URL = process.env.SENTIENT_URL ?? 'https://semlar.com/anomaly.json';
4
- export const PROXY_URL = process.env.PROXY_URL ?? undefined;
5
4
 
6
- export const FEATURES = process.env.WS_EMITTER_FEATURES ? process.env.WS_EMITTER_FEATURES.split(',') : ['rss', 'twitter', 'worldstate'];
5
+ export const FEATURES = process.env.WS_EMITTER_FEATURES
6
+ ? process.env.WS_EMITTER_FEATURES.split(',')
7
+ : ['rss', 'twitter', 'worldstate'];
@@ -1,10 +1,7 @@
1
1
  import { EventEmitter } from 'node:events';
2
- import { randomUUID } from 'node:crypto';
3
2
 
4
3
  import { CronJob } from 'cron';
5
4
 
6
- import fetch from './FetchProxy.js';
7
-
8
5
  import { logger } from './index.js';
9
6
 
10
7
  export default class CronCache extends EventEmitter {
@@ -44,10 +41,7 @@ export default class CronCache extends EventEmitter {
44
41
 
45
42
  async #fetch() {
46
43
  logger.silly(`fetching... ${this.#url}`);
47
- const updated = await fetch(this.#url, {
48
- session: `emitter-session-${randomUUID()}`,
49
- contentType: 'text/html',
50
- });
44
+ const updated = await fetch(this.#url);
51
45
  this.#data = await updated.text();
52
46
  return this.#data;
53
47
  }
@@ -43,7 +43,7 @@ export default class WSCache {
43
43
  try {
44
44
  deps.kuvaData = JSON.parse(await this.#kuvaCache.get());
45
45
  } catch (err) {
46
- logger.warn(`Error parsing kuva data for ${this.#language}: ${err}`);
46
+ logger.debug(`Error parsing kuva data for ${this.#language}: ${err}`);
47
47
  }
48
48
  try {
49
49
  deps.sentientData = JSON.parse(await this.#sentientCache.get());
@@ -51,8 +51,14 @@ export default class WSCache {
51
51
  logger.warn(`Error parsing sentient data for ${this.#language}: ${err}`);
52
52
  }
53
53
 
54
- const t = await WorldState.build(newData, deps);
55
- if (!t.timestamp) return;
54
+ let t;
55
+ try {
56
+ t = await WorldState.build(newData, deps);
57
+ if (!t.timestamp) return;
58
+ } catch (err) {
59
+ this.#logger.warn(`Error parsing worldstate data for ${this.#language}: ${err}`);
60
+ return;
61
+ }
56
62
 
57
63
  this.#inner = t;
58
64
  this.#emitter.emit('ws:update:parsed', {
@@ -1,73 +0,0 @@
1
- import { PROXY_URL } from '../resources/config.js';
2
-
3
- const isCI = process.env.CI === 'true';
4
- const ciTimeout = process.env.CI_TIMEOUT ? parseInt(process.env.CI_TIMEOUT, 10) : 600000;
5
- const localTimeout = process.env.LOCAL_TIMEOUT ? parseInt(process.env.LOCAL_TIMEOUT, 10) : 12000000;
6
-
7
- export default async (
8
- url,
9
- { session = 'parser-session', contentType = 'application/json' } = {
10
- session: 'parser-session',
11
- contentType: 'application/json',
12
- }
13
- ) => {
14
- if (PROXY_URL) {
15
- const controller = new AbortController();
16
- const timeout = setTimeout(
17
- () => {
18
- controller.abort();
19
- },
20
- isCI ? ciTimeout : localTimeout
21
- );
22
- let res;
23
- try {
24
- res = await fetch(`${PROXY_URL}/v1`, {
25
- method: 'POST',
26
- headers: { 'Content-Type': 'application/json' },
27
- signal: controller.signal,
28
- body: JSON.stringify({
29
- cmd: 'request.get',
30
- url,
31
- session,
32
- maxTimeout: isCI ? ciTimeout : localTimeout,
33
- returnOnlyCookies: false,
34
- returnPageContent: true,
35
- }),
36
- });
37
- } catch (error) {
38
- if (error.name === 'AbortError') {
39
- throw new Error(`Request timed out after ${isCI ? ciTimeout : localTimeout}ms`);
40
- }
41
- throw new Error(`Proxy request failed: ${error.message}`);
42
- } finally {
43
- clearTimeout(timeout);
44
- }
45
- const text = await res.text();
46
- const { solution } = JSON.parse(text);
47
- if (!solution?.response) {
48
- throw solution;
49
- }
50
- if (contentType === 'application/json') {
51
- return {
52
- ok: solution.responseCode === 200,
53
- status: solution.responseCode,
54
- json: async () => {
55
- try {
56
- return JSON.parse(solution.response);
57
- } catch (error) {
58
- return {};
59
- }
60
- },
61
- };
62
- }
63
- if (contentType === 'text/html') {
64
- return {
65
- ok: solution.responseCode === 200,
66
- status: solution.responseCode,
67
- text: async () => solution.response.replace(/<\/?[^>]+(>|$)/g, ''),
68
- };
69
- }
70
- return solution.response;
71
- }
72
- return fetch(url);
73
- };