Skip to content

feat(master-sync): add plugin + type fixes#4315

Open
SystemVirtue wants to merge 1 commit intopear-devs:masterfrom
SystemVirtue:feature/master-sync-integration
Open

feat(master-sync): add plugin + type fixes#4315
SystemVirtue wants to merge 1 commit intopear-devs:masterfrom
SystemVirtue:feature/master-sync-integration

Conversation

@SystemVirtue
Copy link

Adds the master-sync plugin and fixes type issues in api-server, downloader, and skip-silences so the repository typechecks cleanly. Verified: 'pnpm typecheck' passes and 'pnpm dev' builds with master-sync included.\n\nFiles added/changed: src/plugins/master-sync/, src/plugins/api-server/, src/plugins/downloader/, src/plugins/skip-silences/.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit

eslint

🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (authErr: any) {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await log(`Token request failed: ${authErr.message}`);


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (error: any) {


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const errorMsg = error.message || 'Unknown error';


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

const errorMsg = error.message || 'Unknown error';


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ············


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace API·call·failed·after·${retries}·attempts:·${errorMsg} with ⏎················API·call·failed·after·${retries}·attempts:·${errorMsg},⏎··············

await log(`API call failed after ${retries} attempts: ${errorMsg}`);


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

return { success: false, error: errorMsg };


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace API·call·failed·(attempt·${attempt·+·1}/${retries}),·retrying·in·${delay}ms:·${errorMsg} with ⏎················API·call·failed·(attempt·${attempt·+·1}/${retries}),·retrying·in·${delay}ms:·${errorMsg},⏎··············

await log(`API call failed (attempt ${attempt + 1}/${retries}), retrying in ${delay}ms: ${errorMsg}`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace resolve with (resolve)

await new Promise(resolve => setTimeout(resolve, delay));


🚫 [eslint] <stylistic/arrow-parens> reported by reviewdog 🐶
Expected parentheses around arrow function argument.

await new Promise(resolve => setTimeout(resolve, delay));


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace 'master-sync:update-state', with ⏎········'master-sync:update-state',⏎·······

ipc.handle('master-sync:update-state', async (_event: any, state: any) => {


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

ipc.handle('master-sync:update-state', async (_event: any, state: any) => {


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

ipc.handle('master-sync:update-state', async (_event: any, state: any) => {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

await log('Received empty state update, ignoring');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ··············

return { success: false, error: 'No state provided' };


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

const config = await getConfig();


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ··········if·(!config.enabled) with ············if·(!config.enabled)⏎·············

if (!config.enabled) return { success: false, error: 'Plugin disabled' };


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ··········if·(config.role·!==·'MASTER') with ············if·(config.role·!==·'MASTER')⏎·············

if (config.role !== 'MASTER') return { success: false, error: 'Plugin not running as MASTER' };


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·········· with ············

const { songId, isPaused, queueHash, videoId } = state;


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const { songId, isPaused, queueHash, videoId } = state;


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

await log('State update received:', state);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

// Sync song change: ensure the slave plays the same track


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

if (songId && songId !== lastSongId && videoId) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

await log(`Song changed to: ${songId} (${videoId})`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

const cfg = await getConfig();


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

if (cfg.role !== 'MASTER') {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

await log('Skipping song sync because role is not MASTER');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ··············


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

// Strategy: clear slave queue, add the single video, then start playback


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace const·clearResult·=·await·callSlaveAPI('/api/v1/queue',·'DELETE' with ··const·clearResult·=·await·callSlaveAPI(⏎··················'/api/v1/queue',⏎··················'DELETE',⏎················

const clearResult = await callSlaveAPI('/api/v1/queue', 'DELETE');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

if (!clearResult.success) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace await·log(Failed·to·clear·slave·queue:·${clearResult.error}`` with ··await·log(⏎····················Failed·to·clear·slave·queue:·${clearResult.error}`,⏎··················`

await log(`Failed to clear slave queue: ${clearResult.error}`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ··············const·addResult·=·await·callSlaveAPI('/api/v1/queue',·'POST',·{·videoId with ················const·addResult·=·await·callSlaveAPI('/api/v1/queue',·'POST',·{⏎··················videoId,⏎···············

const addResult = await callSlaveAPI('/api/v1/queue', 'POST', { videoId });


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const addResult = await callSlaveAPI('/api/v1/queue', 'POST', { videoId });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

if (!addResult.success) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace await·log(Failed·to·add·video·to·slave·queue:·${addResult.error}`` with ··await·log(⏎····················Failed·to·add·video·to·slave·queue:·${addResult.error}`,⏎··················`

await log(`Failed to add video to slave queue: ${addResult.error}`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ··················

const playResult = await callSlaveAPI('/api/v1/play', 'POST');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

if (!playResult.success) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace await·log(Failed·to·start·playback·on·slave:·${playResult.error}`` with ··await·log(⏎······················Failed·to·start·playback·on·slave:·${playResult.error}`,⏎····················`

await log(`Failed to start playback on slave: ${playResult.error}`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

lastSongId = songId;


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

lastSongId = songId;


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

await log('Song synced successfully');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·········· with ············


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

// Sync play/pause state


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace if·(config.syncPlayPause·&&·isPaused·!==·null·&&·isPaused·!==·lastPausedState with ··if·(⏎··············config.syncPlayPause·&&⏎··············isPaused·!==·null·&&⏎··············isPaused·!==·lastPausedState⏎············

if (config.syncPlayPause && isPaused !== null && isPaused !== lastPausedState) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············await·log(Playback·state·changed·to:·${isPaused·?·'paused'·:·'playing'}); with ··············await·log(⏎················Playback·state·changed·to:·${isPaused·?·'paused'·:·'playing'},

await log(`Playback state changed to: ${isPaused ? 'paused' : 'playing'}`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ⏎··

const cfg = await getConfig();


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

if (cfg.role !== 'MASTER') {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace await·log('Skipping·play/pause·sync·because·role·is·not·MASTER' with ··await·log(⏎··················'Skipping·play/pause·sync·because·role·is·not·MASTER',⏎················

await log('Skipping play/pause sync because role is not MASTER');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

const endpoint = isPaused ? '/api/v1/pause' : '/api/v1/play';


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

const result = await callSlaveAPI(endpoint, 'POST');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

if (!result.success) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

await log(`Failed to sync playback state: ${result.error}`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

lastPausedState = isPaused;


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

lastPausedState = isPaused;


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

await log('Playback state synced successfully');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ··············


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

// Sync queue changes


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

if (queueHash && queueHash !== lastQueueHash) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

await log('Queue changed');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ··············

lastQueueHash = queueHash;


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

lastQueueHash = queueHash;


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············⏎············ with ⏎··············

// Queue sync would require the full queue data


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

// This is handled in the renderer


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

return { success: true };


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

} catch (error: any) {


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (error: any) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

await log(`Error in update-state handler: ${error.message}`);


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await log(`Error in update-state handler: ${error.message}`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·········· with ············

return { success: false, error: error.message };


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

return { success: false, error: error.message };


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

return { success: false, error: error.message };


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ······} with ········},⏎······


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

ipc.handle('master-sync:sync-queue', async (_event: any, queue: any) => {


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

ipc.handle('master-sync:sync-queue', async (_event: any, queue: any) => {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .length on an any value.

await log('Syncing queue with', queue.length, 'items');


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoId on an any value.

if (item.videoId) {


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

videoId: item.videoId,


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoId on an any value.

videoId: item.videoId,


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace Queue·synced:·${successCount}/${queue.length}·items·added with ⏎············Queue·synced:·${successCount}/${queue.length}·items·added,⏎··········

await log(`Queue synced: ${successCount}/${queue.length} items added`);


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .length on an any value.

await log(`Queue synced: ${successCount}/${queue.length} items added`);


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (error: any) {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await log(`Error in sync-queue handler: ${error.message}`);


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

return { success: false, error: error.message };


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

return { success: false, error: error.message };


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··········


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (error: any) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace Failed·to·request·state·from·renderer:·${error.message} with ⏎··············Failed·to·request·state·from·renderer:·${error.message},⏎············

await log(`Failed to request state from renderer: ${error.message}`);


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await log(`Failed to request state from renderer: ${error.message}`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··········


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (error: any) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace '[Master·Sync]·Failed·to·send·state·request:',·error with ⏎················'[Master·Sync]·Failed·to·send·state·request:',⏎················error,⏎··············

console.error('[Master Sync] Failed to send state request:', error);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace 'Periodic·sync·not·started·(plugin·disabled·or·not·MASTER)' with ⏎············'Periodic·sync·not·started·(plugin·disabled·or·not·MASTER)',⏎··········

await log('Periodic sync not started (plugin disabled or not MASTER)');


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

startPeriodicSync?.().catch((error: any) => {


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

(this as any)._startPeriodicSync = startPeriodicSync;


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access ._startPeriodicSync on an any value.

(this as any)._startPeriodicSync = startPeriodicSync;


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ⏎········

Promise.resolve(getConfig()).then((config: MasterSyncConfig) => {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

if (config.enabled) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

log('Master Sync plugin started');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ······}) with ········})⏎········

}).catch((error: Error) => {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

console.error('[Master Sync] Failed to get initial config:', error);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <@typescript-eslint/require-await> reported by reviewdog 🐶
Async method 'onConfigChange' has no 'await' expression.

async onConfigChange(newConfig: MasterSyncConfig) {


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

const log = async (message: string, ...args: any[]) => {


🚫 [eslint] <@typescript-eslint/no-unsafe-argument> reported by reviewdog 🐶
Unsafe spread of an any[] array type.

console.log(`[Master Sync Renderer] ${message}`, ...args);


🚫 [eslint] <prefer-const> reported by reviewdog 🐶
'currentQueue' is never reassigned. Use 'const' instead.

let currentQueue: any[] = [];


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

let currentQueue: any[] = [];


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

const computeQueueHash = (queue: any[]) => {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace item with (item)

return JSON.stringify(queue.map(item => item.videoId || item.id));


🚫 [eslint] <stylistic/arrow-parens> reported by reviewdog 🐶
Expected parentheses around arrow function argument.

return JSON.stringify(queue.map(item => item.videoId || item.id));


🚫 [eslint] <@typescript-eslint/no-unsafe-return> reported by reviewdog 🐶
Unsafe return of a value of type any.

return JSON.stringify(queue.map(item => item.videoId || item.id));


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoId on an any value.

return JSON.stringify(queue.map(item => item.videoId || item.id));


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .id on an any value.

return JSON.stringify(queue.map(item => item.videoId || item.id));


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (error: any) {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await log(`Failed to send state to backend: ${error.message}`);


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (error: any) {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await log(`Error sending state: ${error.message}`);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ⏎···········

const videoElement = document.querySelector<HTMLVideoElement>('video');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··········


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ⏎············await·log(


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace await·log('Found·player·elements·after·'·+·checkAttempts·+·'·attempts' with ··'Found·player·elements·after·'·+·checkAttempts·+·'·attempts',⏎············

await log('Found player elements after ' + checkAttempts + ' attempts');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace '[role="heading"][title]' with ⏎················'[role="heading"][title]',⏎··············

const titleElement = document.querySelector('[role="heading"][title]');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··············


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ················


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace 'v' with ⏎··················'v',⏎················

const videoId = new URLSearchParams(window.location.search).get('v');


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ················


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ⏎·············

const playerContainer = document.querySelector('[role="main"]') || document.body;


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

onPlayerApiReady(api: any, { ipc, getConfig }: any) {


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

onPlayerApiReady(api: any, { ipc, getConfig }: any) {


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const config = await getConfig();


🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of an any typed value.

const config = await getConfig();


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .logDebug on an any value.

if (config.logDebug) {


🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of an any typed value.

api.addEventListener('onStateChange', async (state: any) => {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .addEventListener on an any value.

api.addEventListener('onStateChange', async (state: any) => {


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

api.addEventListener('onStateChange', async (state: any) => {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ············


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const playerResponse = api.getPlayerResponse?.();


🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of an any typed value.

const playerResponse = api.getPlayerResponse?.();


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .getPlayerResponse on an any value.

const playerResponse = api.getPlayerResponse?.();


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const currentSong = playerResponse?.videoDetails;


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoDetails on an any value.

const currentSong = playerResponse?.videoDetails;


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ············


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const result = await ipc.invoke('master-sync:update-state', {
songId: currentSong.videoId,
videoId: currentSong.videoId,
isPaused: state === 2, // YouTube player states: 2 = paused
queueHash: null,
});


🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of an any typed value.

const result = await ipc.invoke('master-sync:update-state', {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .invoke on an any value.

const result = await ipc.invoke('master-sync:update-state', {


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

songId: currentSong.videoId,


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoId on an any value.

songId: currentSong.videoId,


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

videoId: currentSong.videoId,


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoId on an any value.

videoId: currentSong.videoId,


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .success on an any value.

if (!result?.success) {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .error on an any value.

await log(`Failed to update state: ${result?.error}`);


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (error: any) {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await log(`Error in onStateChange handler: ${error.message}`);


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const playerResponse = api.getPlayerResponse?.();


🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of an any typed value.

const playerResponse = api.getPlayerResponse?.();


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .getPlayerResponse on an any value.

const playerResponse = api.getPlayerResponse?.();


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const initialSong = playerResponse?.videoDetails;


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoDetails on an any value.

const initialSong = playerResponse?.videoDetails;


🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of an any typed value.

ipc.invoke('master-sync:update-state', {
songId: initialSong.videoId,
videoId: initialSong.videoId,
isPaused: api.getPlayerState?.() === 2,
queueHash: null,
}).catch((error: any) => {


🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of an any typed value.

ipc.invoke('master-sync:update-state', {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ⏎············

ipc.invoke('master-sync:update-state', {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .invoke on an any value.

ipc.invoke('master-sync:update-state', {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

songId: initialSong.videoId,


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

songId: initialSong.videoId,


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoId on an any value.

songId: initialSong.videoId,


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

videoId: initialSong.videoId,


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

videoId: initialSong.videoId,


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoId on an any value.

videoId: initialSong.videoId,


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··

isPaused: api.getPlayerState?.() === 2,


🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of an any typed value.

isPaused: api.getPlayerState?.() === 2,


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .getPlayerState on an any value.

isPaused: api.getPlayerState?.() === 2,


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace }) with ··})⏎············

}).catch((error: any) => {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .catch on an any value.

}).catch((error: any) => {


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

}).catch((error: any) => {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace console.error('[Master·Sync]·Failed·to·send·initial·state:',·error with ··console.error(⏎················'[Master·Sync]·Failed·to·send·initial·state:',⏎················error,⏎··············

console.error('[Master Sync] Failed to send initial state:', error);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (error: any) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ⏎···········

const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$|^localhost$|^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$/;


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·currentConfig.role·===·'SLAVE'·?·'127.0.0.1' with ⏎··········currentConfig.role·===·'SLAVE'⏎············?·'127.0.0.1'⏎···········

const targetHost = currentConfig.role === 'SLAVE' ? '127.0.0.1' : currentConfig.slaveHost;


🚫 [eslint] <@typescript-eslint/no-unsafe-argument> reported by reviewdog 🐶
Unsafe argument of type any assigned to a parameter of type RequestInit | undefined.

let res = await fetch(url, { signal: controller.signal } as any);


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

let res = await fetch(url, { signal: controller.signal } as any);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace (res.status·===·403·||·res.status·===·401)·&&·currentConfig.slaveAuthToken with ⏎············(res.status·===·403·||·res.status·===·401)·&&⏎············currentConfig.slaveAuthToken⏎··········

if ((res.status === 403 || res.status === 401) && currentConfig.slaveAuthToken) {


🚫 [eslint] <@typescript-eslint/no-unsafe-argument> reported by reviewdog 🐶
Unsafe argument of type any assigned to a parameter of type RequestInit | undefined.

res = await fetch(url, { signal: controller.signal, headers: { Authorization: `Bearer ${currentConfig.slaveAuthToken}` } } as any);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·signal:·controller.signal,·headers:·{·Authorization:·Bearer·${currentConfig.slaveAuthToken}·} with ⏎··············signal:·controller.signal,⏎··············headers:·{⏎················Authorization:·Bearer·${currentConfig.slaveAuthToken},⏎··············},⏎···········

res = await fetch(url, { signal: controller.signal, headers: { Authorization: `Bearer ${currentConfig.slaveAuthToken}` } } as any);


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

res = await fetch(url, { signal: controller.signal, headers: { Authorization: `Bearer ${currentConfig.slaveAuthToken}` } } as any);


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const json = (await res.json().catch(() => null)) as any;


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

const json = (await res.json().catch(() => null)) as any;


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const title = json?.title || json?.videoDetails?.title || json?.name || (json && JSON.stringify(json).slice(0, 200));


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·json?.title·||·json?.videoDetails?.title·||·json?.name·|| with ⏎··············json?.title·||⏎··············json?.videoDetails?.title·||⏎··············json?.name·||⏎·············

const title = json?.title || json?.videoDetails?.title || json?.name || (json && JSON.stringify(json).slice(0, 200));


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .title on an any value.

const title = json?.title || json?.videoDetails?.title || json?.name || (json && JSON.stringify(json).slice(0, 200));


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoDetails on an any value.

const title = json?.title || json?.videoDetails?.title || json?.name || (json && JSON.stringify(json).slice(0, 200));


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .name on an any value.

const title = json?.title || json?.videoDetails?.title || json?.name || (json && JSON.stringify(json).slice(0, 200));


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·Connection·successful·to·${targetHost}:${port}·+ with ⏎················Connection·successful·to·${targetHost}:${port}·+⏎···············

message: `Connection successful to ${targetHost}:${port}` + (title ? `\nSong info: ${title}` : ''),


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ``http://${targetHost}:${port}/auth/master-sync,·{·method:·'POST'·}·as·any with `⏎··················`http://${targetHost}:${port}/auth/master-sync`,⏎··················{·method:·'POST'·}·as·any,⏎················`

const authRes = await fetch(`http://${targetHost}:${port}/auth/master-sync`, { method: 'POST' } as any);


🚫 [eslint] <@typescript-eslint/no-unsafe-argument> reported by reviewdog 🐶
Unsafe argument of type any assigned to a parameter of type RequestInit | undefined.

const authRes = await fetch(`http://${targetHost}:${port}/auth/master-sync`, { method: 'POST' } as any);


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

const authRes = await fetch(`http://${targetHost}:${port}/auth/master-sync`, { method: 'POST' } as any);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·Token·request·failed:·${authRes.status}·${authRes.statusText}`` with ⏎····················type:·'error',⏎····················message:·Token·request·failed:·${authRes.status}·${authRes.statusText}`,⏎·················`

await dialog.showMessageBox(window, { type: 'error', message: `Token request failed: ${authRes.status} ${authRes.statusText}` });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·accessToken?:·string with ⏎····················accessToken?:·string;⏎·················

const authJson = (await authRes.json().catch(() => ({}))) as { accessToken?: string };


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ⏎·······················

message: 'Authorization token received. Do you want to save it to Master Sync configuration?',


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·message:·'Authorization·token·saved.' with ⏎························message:·'Authorization·token·saved.',⏎·····················

await dialog.showMessageBox(window, { message: 'Authorization token saved.' });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·message:·'Authorization·token·was·not·saved.' with ⏎························message:·'Authorization·token·was·not·saved.',⏎·····················

await dialog.showMessageBox(window, { message: 'Authorization token was not saved.' });


🚫 [eslint] <@typescript-eslint/no-unsafe-argument> reported by reviewdog 🐶
Unsafe argument of type any assigned to a parameter of type RequestInit | undefined.

const retryRes = await fetch(url, { signal: controller.signal, headers: { Authorization: `Bearer ${token}` } } as any);


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·signal:·controller.signal,·headers:·{·Authorization:·Bearer·${token}·} with ⏎······················signal:·controller.signal,⏎······················headers:·{·Authorization:·Bearer·${token}·},⏎···················

const retryRes = await fetch(url, { signal: controller.signal, headers: { Authorization: `Bearer ${token}` } } as any);


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

const retryRes = await fetch(url, { signal: controller.signal, headers: { Authorization: `Bearer ${token}` } } as any);


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const json2 = (await retryRes.json().catch(() => null)) as any;


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace .json() with ⏎························.json()⏎························

const json2 = (await retryRes.json().catch(() => null)) as any;


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

const json2 = (await retryRes.json().catch(() => null)) as any;


🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

const title2 = json2?.title || json2?.videoDetails?.title || json2?.name || (json2 && JSON.stringify(json2).slice(0, 200));


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·json2?.title·||·json2?.videoDetails?.title·||·json2?.name·|| with ⏎························json2?.title·||⏎························json2?.videoDetails?.title·||⏎························json2?.name·||⏎·······················

const title2 = json2?.title || json2?.videoDetails?.title || json2?.name || (json2 && JSON.stringify(json2).slice(0, 200));


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .title on an any value.

const title2 = json2?.title || json2?.videoDetails?.title || json2?.name || (json2 && JSON.stringify(json2).slice(0, 200));


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .videoDetails on an any value.

const title2 = json2?.title || json2?.videoDetails?.title || json2?.name || (json2 && JSON.stringify(json2).slice(0, 200));


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .name on an any value.

const title2 = json2?.title || json2?.videoDetails?.title || json2?.name || (json2 && JSON.stringify(json2).slice(0, 200));


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·message:·Connection·successful·to·${targetHost}:${port}·+·(title2·?·\nSong·info:·${title2}·:·'') with ⏎························message:⏎··························Connection·successful·to·${targetHost}:${port}·+⏎··························(title2·?·\nSong·info:·${title2}·:·''),⏎·····················

await dialog.showMessageBox(window, { message: `Connection successful to ${targetHost}:${port}` + (title2 ? `\nSong info: ${title2}` : '') });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·Connection·failed·after·token·request:·HTTP·${retryRes.status}·${retryRes.statusText}\n${text2}`` with ⏎························type:·'error',⏎························message:·Connection·failed·after·token·request:·HTTP·${retryRes.status}·${retryRes.statusText}\n${text2}`,⏎·····················`

await dialog.showMessageBox(window, { type: 'error', message: `Connection failed after token request: HTTP ${retryRes.status} ${retryRes.statusText}\n${text2}` });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·'No·token·returned·from·SLAVE.' with ⏎······················type:·'error',⏎······················message:·'No·token·returned·from·SLAVE.',⏎···················

await dialog.showMessageBox(window, { type: 'error', message: 'No token returned from SLAVE.' });


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (authErr: any) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·Failed·to·request·token:·${authErr?.message·??·String(authErr)}`` with ⏎··················type:·'error',⏎··················message:·Failed·to·request·token:·${authErr?.message·??·String(authErr)}`,⏎···············`

await dialog.showMessageBox(window, { type: 'error', message: `Failed to request token: ${authErr?.message ?? String(authErr)}` });


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await dialog.showMessageBox(window, { type: 'error', message: `Failed to request token: ${authErr?.message ?? String(authErr)}` });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'info',·message:·'Test·cancelled.' with ⏎················type:·'info',⏎················message:·'Test·cancelled.',⏎·············

await dialog.showMessageBox(window, { type: 'info', message: 'Test cancelled.' });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·Connection·failed:·HTTP·${res.status}·${res.statusText}\n${text}`` with ⏎··············type:·'error',⏎··············message:·Connection·failed:·HTTP·${res.status}·${res.statusText}\n${text}`,⏎···········`

await dialog.showMessageBox(window, { type: 'error', message: `Connection failed: HTTP ${res.status} ${res.statusText}\n${text}` });


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (err: any) {


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .name on an any value.

if (err && err.name === 'AbortError') {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·Connection·timed·out·after·${timeoutMs}ms`` with ⏎··············type:·'error',⏎··············message:·Connection·timed·out·after·${timeoutMs}ms`,⏎···········`

await dialog.showMessageBox(window, { type: 'error', message: `Connection timed out after ${timeoutMs}ms` });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·Connection·error:·${err?.message·??·String(err)}`` with ⏎··············type:·'error',⏎··············message:·Connection·error:·${err?.message·??·String(err)}`,⏎···········`

await dialog.showMessageBox(window, { type: 'error', message: `Connection error: ${err?.message ?? String(err)}` });


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await dialog.showMessageBox(window, { type: 'error', message: `Connection error: ${err?.message ?? String(err)}` });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·Token·request·failed:·${res.status}·${res.statusText}`` with ⏎··················type:·'error',⏎··················message:·Token·request·failed:·${res.status}·${res.statusText}`,⏎···············`

await dialog.showMessageBox(window, { type: 'error', message: `Token request failed: ${res.status} ${res.statusText}` });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·message:·'Authorization·token·received·and·saved.' with ⏎··················message:·'Authorization·token·received·and·saved.',⏎···············

await dialog.showMessageBox(window, { message: 'Authorization token received and saved.' });


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·'No·token·received·from·SLAVE.' with ⏎··················type:·'error',⏎··················message:·'No·token·received·from·SLAVE.',⏎···············

await dialog.showMessageBox(window, { type: 'error', message: 'No token received from SLAVE.' });


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

} catch (err: any) {


🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·type:·'error',·message:·Failed·to·request·token:·${err.message}`` with ⏎················type:·'error',⏎················message:·Failed·to·request·token:·${err.message}`,⏎·············`

await dialog.showMessageBox(window, { type: 'error', message: `Failed to request token: ${err.message}` });


🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .message on an any value.

await dialog.showMessageBox(window, { type: 'error', message: `Failed to request token: ${err.message}` });


🚫 [eslint] <@typescript-eslint/no-unsafe-argument> reported by reviewdog 🐶
Unsafe argument of type any assigned to a parameter of type Float32Array<ArrayBuffer>.

analyser.getFloatFrequencyData(fftBins as any);


🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

analyser.getFloatFrequencyData(fftBins as any);

const ffmpegMutex = new Mutex();

Platform.shim.eval = async (data: Types.BuildScriptResult, env: Record<string, Types.VMPrimative>) => {
Platform.shim.eval = async (data: any, env: Record<string, any>) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

const ffmpegMutex = new Mutex();

Platform.shim.eval = async (data: Types.BuildScriptResult, env: Record<string, Types.VMPrimative>) => {
Platform.shim.eval = async (data: any, env: Record<string, any>) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.

const ffmpegMutex = new Mutex();

Platform.shim.eval = async (data: Types.BuildScriptResult, env: Record<string, Types.VMPrimative>) => {
Platform.shim.eval = async (data: any, env: Record<string, any>) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <@typescript-eslint/require-await> reported by reviewdog 🐶
Async arrow function has no 'await' expression.

@@ -0,0 +1,545 @@
import { createPlugin } from '@/utils';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <importPlugin/order> reported by reviewdog 🐶
There should be at least one empty line between import groups

Suggested change
import { createPlugin } from '@/utils';
import { createPlugin } from '@/utils';

autoRequestToken: false,
} as MasterSyncConfig,
stylesheets: [masterSyncStyle],

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··

Suggested change

// Retry immediately once with new token
// Rebuild options with new token
const retryOptions = { ...options } as any;
retryOptions.headers = { ...retryOptions.headers, Authorization: `Bearer ${token}` };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.

// Retry immediately once with new token
// Rebuild options with new token
const retryOptions = { ...options } as any;
retryOptions.headers = { ...retryOptions.headers, Authorization: `Bearer ${token}` };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .headers on an any value.

// Retry immediately once with new token
// Rebuild options with new token
const retryOptions = { ...options } as any;
retryOptions.headers = { ...retryOptions.headers, Authorization: `Bearer ${token}` };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·...retryOptions.headers,·Authorization:·Bearer·${token}`` with ⏎························...retryOptions.headers,⏎························Authorization:·Bearer·${token}`,⏎·····················`

Suggested change
retryOptions.headers = { ...retryOptions.headers, Authorization: `Bearer ${token}` };
retryOptions.headers = {
...retryOptions.headers,
Authorization: `Bearer ${token}`,
};

// Retry immediately once with new token
// Rebuild options with new token
const retryOptions = { ...options } as any;
retryOptions.headers = { ...retryOptions.headers, Authorization: `Bearer ${token}` };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .headers on an any value.

// Rebuild options with new token
const retryOptions = { ...options } as any;
retryOptions.headers = { ...retryOptions.headers, Authorization: `Bearer ${token}` };
const retryResp = await fetch(url, retryOptions);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <@typescript-eslint/no-unsafe-argument> reported by reviewdog 🐶
Unsafe argument of type any assigned to a parameter of type RequestInit | undefined.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Comments