diff --git a/package.json b/package.json index 9e49439..da03164 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ "type": "module", "dependencies": { "@types/luxon": "^3.3.7", + "@xhayper/discord-rpc": "^1.1.2", "cli-progress": "^3.12.0", "colors": "^1.4.0", - "discord-rpc": "^4.0.1", "enquirer": "^2.4.1", "luxon": "^3.4.4", "pretty-ms": "^8.0.0", @@ -26,7 +26,6 @@ }, "devDependencies": { "@types/cli-progress": "^3.11.5", - "@types/discord-rpc": "^4.0.8", "@types/node": "^20.10.5", "@typescript-eslint/eslint-plugin": "^6.15.0", "@typescript-eslint/parser": "^6.15.0", diff --git a/src/index.ts b/src/index.ts index 865742d..04909ed 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,7 @@ import 'colors'; import Enquirer from 'enquirer'; // @ts-expect-error [currently, no types file exists for trakt.tv, so this will cause an error] import Trakt from 'trakt.tv'; -import { Client } from 'discord-rpc'; +import { Client } from '@xhayper/discord-rpc'; import { DateTime } from 'luxon'; import { GenericFormatter, Options, Params, SingleBar, @@ -75,7 +75,8 @@ enum ConnectionState { Playing, NotPlaying, Connected, - Disconnected + Disconnected, + Connecting } /** @@ -113,18 +114,23 @@ class DiscordRPC { const traktCredentials = await fetchTraktCredentials(); // Initialize the RPC client with IPC transport - rpc = new Client({ transport: 'ipc' }); + rpc = new Client({ + clientId: traktCredentials.discordClientId, + transport: { + type: 'ipc', + }, + }); // Event handler for when the RPC client is ready rpc.on('ready', async () => { instanceState = ConnectionState.Connected; - if (progressBar)progressBar.stop(); + if (progressBar) progressBar.stop(); progressBar = await generateProgressBar(); progressBar.start(0, 0); }); - // Login to Discord using Trakt's Discord client ID - await rpc.login({ clientId: traktCredentials.discordClientId }); + // Login to Discord + await rpc.login(); // Clear the retryInterval if it exists if (retryInterval) clearInterval(retryInterval); @@ -198,9 +204,8 @@ class TraktInstance { async updateStatus(discordStatusInterval: NodeJS.Timeout | null) { if (!rpc) return; - // Check if the RPC transport socket is not open - // @ts-expect-error [currently, no types file exists for trakt.tv, so this will cause an error] - if (rpc.transport.socket.readyState !== 'open') { + // Check if the RPC transport socket is connected + if (!rpc.transport.isConnected) { // Clear the Discord status interval if (discordStatusInterval) clearInterval(discordStatusInterval); @@ -238,7 +243,7 @@ class TraktInstance { } // Set Discord activity with Trakt content - await rpc.setActivity({ ...traktContent }); + await rpc.user?.setActivity({ ...traktContent }); return; } @@ -254,7 +259,7 @@ class TraktInstance { progressBar.start(0, 0); // Clear Discord activity - await rpc.clearActivity(); + await rpc.user?.clearActivity(); } /** @@ -399,6 +404,9 @@ async function generateProgressBar() { case ConnectionState.Disconnected: return `${'Failed to connect to Discord. Retrying in'.red} ${countdownTimer.toString().green} ${'seconds.'.red}`; + + case ConnectionState.Connecting: + return `${'Connecting...'.green}`; default: return `${formatDate()} | ${'Trakt:'.red} Not Playing.`; } @@ -642,6 +650,11 @@ async function main(): Promise { } } + // Create an initial progress bar indicating progress. + instanceState = ConnectionState.Connecting; + progressBar = await generateProgressBar(); + progressBar.start(0, 0); + // Initialize Trakt and Discord RPC await initializeTraktAndDiscordRPC(); } catch (error) { diff --git a/yarn.lock b/yarn.lock index a627a24..9b3a314 100644 --- a/yarn.lock +++ b/yarn.lock @@ -247,22 +247,6 @@ __metadata: languageName: node linkType: hard -"@types/discord-rpc@npm:^4.0.8": - version: 4.0.8 - resolution: "@types/discord-rpc@npm:4.0.8" - dependencies: - "@types/events": "npm:*" - checksum: 134e3dcc972bd92dbe3037c01efd4e010bfd7bdb890b4a5871fc928ef2b38ab8eca661f392195c348638319fedb40f6c5f87d8bea850cca60312ec1fa0a68dc2 - languageName: node - linkType: hard - -"@types/events@npm:*": - version: 3.0.3 - resolution: "@types/events@npm:3.0.3" - checksum: 3a56f8c51eb4ebc0d05dcadca0c6636c816acc10216ce36c976fad11e54a01f4bb979a07211355686015884753b37f17d74bfdc7aaf4ebb027c1e8a501c7b21d - languageName: node - linkType: hard - "@types/http-cache-semantics@npm:*": version: 4.0.4 resolution: "@types/http-cache-semantics@npm:4.0.4" @@ -454,6 +438,23 @@ __metadata: languageName: node linkType: hard +"@xhayper/discord-rpc@npm:^1.1.2": + version: 1.1.2 + resolution: "@xhayper/discord-rpc@npm:1.1.2" + dependencies: + axios: "npm:^1.6.2" + bufferutil: "npm:^4.0.8" + utf-8-validate: "npm:^6.0.3" + ws: "npm:^8.15.1" + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: cacd460877fd331234f703eb8e8eb48e52562aa454d6cf3a5074d75ddd7f908b5c33ee423cad1018c60911a6d3a2e3e36de31d7bf80c714c07f0d2fceab16b3c + languageName: node + linkType: hard + "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -669,6 +670,13 @@ __metadata: languageName: node linkType: hard +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.5": version: 1.0.5 resolution: "available-typed-arrays@npm:1.0.5" @@ -676,6 +684,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.6.2": + version: 1.6.2 + resolution: "axios@npm:1.6.2" + dependencies: + follow-redirects: "npm:^1.15.0" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 9b77e030e85e4f9cbcba7bb52fbff67d6ce906c92d213e0bd932346a50140faf83733bf786f55bd58301bd92f9973885c7b87d6348023e10f7eaf286d0791a1d + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -683,15 +702,6 @@ __metadata: languageName: node linkType: hard -"bindings@npm:^1.3.0": - version: 1.5.0 - resolution: "bindings@npm:1.5.0" - dependencies: - file-uri-to-path: "npm:1.0.0" - checksum: 3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba - languageName: node - linkType: hard - "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -720,6 +730,16 @@ __metadata: languageName: node linkType: hard +"bufferutil@npm:^4.0.8": + version: 4.0.8 + resolution: "bufferutil@npm:4.0.8" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 36cdc5b53a38d9f61f89fdbe62029a2ebcd020599862253fefebe31566155726df9ff961f41b8c97b02b4c12b391ef97faf94e2383392654cf8f0ed68f76e47c + languageName: node + linkType: hard + "cacache@npm:^18.0.0": version: 18.0.1 resolution: "cacache@npm:18.0.1" @@ -845,6 +865,15 @@ __metadata: languageName: node linkType: hard +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -943,6 +972,13 @@ __metadata: languageName: node linkType: hard +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -959,20 +995,6 @@ __metadata: languageName: node linkType: hard -"discord-rpc@npm:^4.0.1": - version: 4.0.1 - resolution: "discord-rpc@npm:4.0.1" - dependencies: - node-fetch: "npm:^2.6.1" - register-scheme: "github:devsnek/node-register-scheme" - ws: "npm:^7.3.1" - dependenciesMeta: - register-scheme: - optional: true - checksum: 9a055efcbd252b5ba91cbfc2c1a0130eba75e389c2b7ede5b0db2d7c7499b36d1a36c3503dad50370df184cfabd7e4e5c4689a7e043222fc4baf37a020fa3957 - languageName: node - linkType: hard - "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -1398,13 +1420,6 @@ __metadata: languageName: node linkType: hard -"file-uri-to-path@npm:1.0.0": - version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0" - checksum: 3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 - languageName: node - linkType: hard - "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -1442,6 +1457,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.15.0": + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" + peerDependenciesMeta: + debug: + optional: true + checksum: 915a2cf22e667bdf47b1a43cc6b7dce14d95039e9bbf9a24d0e739abfbdfa00077dd43c86d4a7a19efefcc7a99af144920a175eedc3888d268af5df67c272ee5 + languageName: node + linkType: hard + "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -1461,6 +1486,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: cb6f3ac49180be03ff07ba3ff125f9eba2ff0b277fb33c7fc47569fc5e616882c5b1c69b9904c4c4187e97dd0419dd03b134174756f296dec62041e6527e2c6e + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -2200,6 +2236,22 @@ __metadata: languageName: node linkType: hard +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + "mimic-response@npm:^1.0.0": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" @@ -2360,26 +2412,14 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^1.3.0": - version: 1.7.2 - resolution: "node-addon-api@npm:1.7.2" - dependencies: - node-gyp: "npm:latest" - checksum: bcf526f2ce788182730d3c3df5206585873d1e837a6e1378ff84abccf2f19cf3f93a8274f9c1245af0de63a0dbd1bb95ca2f767ecf5c678d6930326aaf396c4e - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.1": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 +"node-gyp-build@npm:^4.3.0": + version: 4.7.1 + resolution: "node-gyp-build@npm:4.7.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: b8e4a3f889237cd08edde3775e2b4e1e39a0571580584e33e29979f0c532a254ce3c5ec9435bd526254ad0b3f0b4a7e7fe14e53bd400f6ea9445f3bfd88a6b1e languageName: node linkType: hard @@ -2650,6 +2690,13 @@ __metadata: languageName: node linkType: hard +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -2692,16 +2739,6 @@ __metadata: languageName: node linkType: hard -"register-scheme@github:devsnek/node-register-scheme": - version: 0.0.2 - resolution: "register-scheme@https://github.com/devsnek/node-register-scheme.git#commit=e7cc9a63a1f512565da44cb57316d9fb10750e17" - dependencies: - bindings: "npm:^1.3.0" - node-addon-api: "npm:^1.3.0" - checksum: a73a5ea3f07fc9a916329b7c304ee891eff7bd3e24d2f00be3e775743423c47a1281de12874308f39fa05ebefee825c99467f465817872f4e09d35634fc50104 - languageName: node - linkType: hard - "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -3100,13 +3137,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - "trakt.tv@npm:^8.2.0": version: 8.2.0 resolution: "trakt.tv@npm:8.2.0" @@ -3121,14 +3151,13 @@ __metadata: resolution: "traktdiscordpresence@workspace:." dependencies: "@types/cli-progress": "npm:^3.11.5" - "@types/discord-rpc": "npm:^4.0.8" "@types/luxon": "npm:^3.3.7" "@types/node": "npm:^20.10.5" "@typescript-eslint/eslint-plugin": "npm:^6.15.0" "@typescript-eslint/parser": "npm:^6.15.0" + "@xhayper/discord-rpc": "npm:^1.1.2" cli-progress: "npm:^3.12.0" colors: "npm:^1.4.0" - discord-rpc: "npm:^4.0.1" enquirer: "npm:^2.4.1" eslint: "npm:^8.56.0" eslint-config-airbnb: "npm:^19.0.4" @@ -3330,27 +3359,20 @@ __metadata: languageName: node linkType: hard -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 +"utf-8-validate@npm:^6.0.3": + version: 6.0.3 + resolution: "utf-8-validate@npm:6.0.3" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 2ca08b07f4070540b33ff15f3f0632fa30baaee8a766fff993be47b4829b4fb30fd36fdf1270336324d03f65e0936c4608ee719d862230d75311751dcfe27a83 languageName: node linkType: hard -"webidl-conversions@npm:^3.0.0": +"v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 languageName: node linkType: hard @@ -3431,18 +3453,18 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.3.1": - version: 7.5.9 - resolution: "ws@npm:7.5.9" +"ws@npm:^8.15.1": + version: 8.15.1 + resolution: "ws@npm:8.15.1" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: aec4ef4eb65821a7dde7b44790f8699cfafb7978c9b080f6d7a98a7f8fc0ce674c027073a78574c94786ba7112cc90fa2cc94fc224ceba4d4b1030cff9662494 + checksum: 9964360dd5ab35c7376bd7c4295a3c8bd44ea0838c9413742548a6fb3ec371fc6c18552d5b8e76bdc21536db1909765612815bae072674b5ec69971605395a96 languageName: node linkType: hard