diff --git a/app/common/prefixedConsole.mjs b/app/common/prefixedConsole.mjs new file mode 100644 index 0000000..170bcbe --- /dev/null +++ b/app/common/prefixedConsole.mjs @@ -0,0 +1,12 @@ +import { Console } from 'node:console'; +import consoleStamp from 'console-stamp'; + +export default function prefixedConsole(...prefixes) { + let result = new Console({ stdout: process.stdout, stderr: process.stderr }); + + let prefix = prefixes.map(s => `[${s}]`).join(' '); + let format = `:date(dd.mm.yyyy HH:MM:ss.l) :label(7) ${prefix}`.trim(); + consoleStamp(result, { format }); + + return result; +} diff --git a/app/index.mjs b/app/index.mjs index 97384f8..f662e12 100644 --- a/app/index.mjs +++ b/app/index.mjs @@ -1,7 +1,9 @@ import dotenv from 'dotenv'; +import consoleStamp from 'console-stamp'; import cron from './cron.mjs'; import { sendTweets } from './twitter/index.mjs'; +consoleStamp(console); dotenv.config(); const actions = { diff --git a/app/splatnet/NsoClient.mjs b/app/splatnet/NsoClient.mjs index bf3b272..68a3e98 100644 --- a/app/splatnet/NsoClient.mjs +++ b/app/splatnet/NsoClient.mjs @@ -1,6 +1,7 @@ import CoralApi from 'nxapi/coral'; import { addUserAgent } from "nxapi"; import ValueCache from '../common/ValueCache.mjs'; +import prefixedConsole from '../common/prefixedConsole.mjs'; let _nxapiInitialized = false; @@ -17,6 +18,7 @@ export default class NsoClient constructor(nintendoToken = null) { initializeNxapi(); + this.console = prefixedConsole('NSO'); this.nintendoToken = nintendoToken || process.env.NINTENDO_TOKEN; } @@ -52,11 +54,11 @@ export default class NsoClient } async _createCoralSession() { - console.debug('Creating Coral session'); + this.console.info('Creating Coral session...'); let { data } = await CoralApi.createWithSessionToken(this.nintendoToken); let expires = this._calculateCacheExpiry(data.credential.expiresIn); - console.debug(`Caching Coral session until: ${expires}`); + this.console.debug(`Caching Coral session until: ${expires}`); await this._getCoralCache().setData(data, expires); return data; @@ -84,11 +86,11 @@ export default class NsoClient async _createWebServiceToken(id, tokenCache) { let coral = await this.getCoralApi(); - console.debug(`Creating web service token for ID ${id}`); + this.console.info(`Creating web service token for ID ${id}...`); let { result } = await coral.getWebServiceToken(id); let expires = this._calculateCacheExpiry(result.expiresIn); - console.debug(`Caching web service token for ID ${id} until: ${expires}`); + this.console.debug(`Caching web service token for ID ${id} until: ${expires}`); await tokenCache.setData(result, expires); return result; diff --git a/app/splatnet/SplatNet3Client.mjs b/app/splatnet/SplatNet3Client.mjs index 703454b..9e0439e 100644 --- a/app/splatnet/SplatNet3Client.mjs +++ b/app/splatnet/SplatNet3Client.mjs @@ -1,5 +1,6 @@ import ValueCache from "../common/ValueCache.mjs"; import NsoClient from "./NsoClient.mjs"; +import prefixedConsole from '../common/prefixedConsole.mjs'; export const SPLATNET3_WEB_SERVICE_ID = '4834290508791808'; @@ -10,6 +11,7 @@ export default class SplatNet3Client bulletToken = null; constructor(nsoClient = null) { + this.console = prefixedConsole('SplatNet'); this.nsoClient = nsoClient ?? new NsoClient; } @@ -52,7 +54,7 @@ export default class SplatNet3Client } async _createBulletToken(webServiceToken, bulletTokenCache) { - console.debug('Creating bullet token'); + this.console.info('Creating bullet token...'); let response = await fetch(this.baseUrl + '/api/bullet_tokens', { method: 'POST', @@ -73,7 +75,7 @@ export default class SplatNet3Client let expiry = this._calculateCacheExpiry(7200); await bulletTokenCache.setData(bulletToken, expiry); - console.debug(`Caching bullet token until: ${expiry}`); + this.console.debug(`Caching bullet token until: ${expiry}`); return bulletToken; } diff --git a/app/splatnet/index.mjs b/app/splatnet/index.mjs index 54ddf86..75ea0f9 100644 --- a/app/splatnet/index.mjs +++ b/app/splatnet/index.mjs @@ -8,7 +8,7 @@ import SplatNet3Client, { SPLATNET3_WEB_SERVICE_ID } from "./SplatNet3Client.mjs * even if e.g. the imink API has intermittent downtime. */ export async function warmCache() { - console.debug('Warming caches...'); + console.info('Warming caches...'); let nso = new NsoClient; let splatnet = new SplatNet3Client; diff --git a/package-lock.json b/package-lock.json index a4ae511..52cab7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "splatoon3.ink", "version": "0.0.0", "dependencies": { + "console-stamp": "^3.0.6", "cron": "^2.1.0", "dotenv": "^16.0.2", "ecstatic": "^4.1.4", @@ -710,7 +711,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -824,6 +824,18 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/console-stamp": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.6.tgz", + "integrity": "sha512-j4tP+1shVIUjSnvrtv5nJ5uVzLeNOTweVHkcEXB2ej4NJdlRp14w0hOzQiF+iQvOTjz4jafmdhd1CdYSwNzM8Q==", + "dependencies": { + "chalk": "^4.1.2", + "dateformat": "^4.6.3" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -911,6 +923,14 @@ "node": ">= 12" } }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "engines": { + "node": "*" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -3902,7 +3922,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4912,7 +4931,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4996,6 +5014,15 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "console-stamp": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.6.tgz", + "integrity": "sha512-j4tP+1shVIUjSnvrtv5nJ5uVzLeNOTweVHkcEXB2ej4NJdlRp14w0hOzQiF+iQvOTjz4jafmdhd1CdYSwNzM8Q==", + "requires": { + "chalk": "^4.1.2", + "dateformat": "^4.6.3" + } + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -5062,6 +5089,11 @@ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" }, + "dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7069,7 +7101,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } diff --git a/package.json b/package.json index ff37896..b92edef 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "twitter": "node app/index.mjs twitter" }, "dependencies": { + "console-stamp": "^3.0.6", "cron": "^2.1.0", "dotenv": "^16.0.2", "ecstatic": "^4.1.4",