mirror of
https://github.com/janishutz/MusicPlayer.git
synced 2026-09-10 14:25:24 +02:00
feat: request wrapper utility
This commit is contained in:
@@ -8,58 +8,51 @@ import {
|
||||
import {
|
||||
musicKitPlayback
|
||||
} from './playback';
|
||||
import request from '@/ts/request';
|
||||
|
||||
export const useMusicKit: PlayerSourcePluginInitializer = ( storefront: string = 'ch' ): Promise<PlayerSourcePlugin> => {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
const init = async ( storefront: string ): Promise<PlayerSourcePlugin> => {
|
||||
const res = await fetch( import.meta.env.VITE_BACKEND_URL + '/dev-token', {
|
||||
'credentials': 'include'
|
||||
const token = await ( await request.get( '/dev-token' ) ).text();
|
||||
const instance = await window.MusicKit.configure( {
|
||||
'developerToken': token,
|
||||
'app': {
|
||||
'name': 'MusicPlayer',
|
||||
'build': '4'
|
||||
// 'icon': 'https://music.janishutz.com/logo.jpg'
|
||||
},
|
||||
'storefrontId': storefront.toUpperCase()
|
||||
} );
|
||||
const controls = musicKitPlayback( instance );
|
||||
|
||||
if ( res.status === 200 ) {
|
||||
const token = await res.text();
|
||||
const instance = await window.MusicKit.configure( {
|
||||
'developerToken': token,
|
||||
'app': {
|
||||
'name': 'MusicPlayer',
|
||||
'build': '4'
|
||||
// 'icon': 'https://music.janishutz.com/logo.jpg'
|
||||
},
|
||||
'storefrontId': storefront.toUpperCase()
|
||||
} );
|
||||
const controls = musicKitPlayback( instance );
|
||||
const login = async (): Promise<boolean> => {
|
||||
try {
|
||||
await instance.authorize();
|
||||
|
||||
const login = async (): Promise<boolean> => {
|
||||
try {
|
||||
await instance.authorize();
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
'authorized': controls.loggedIn,
|
||||
'play': controls.play,
|
||||
'pause': controls.pause,
|
||||
'stop': controls.stop,
|
||||
'playSong': controls.playSong,
|
||||
'getDuration': controls.getDuration,
|
||||
'getPlaybackPos': controls.getPlaybackPos,
|
||||
'id': 'applemusic',
|
||||
'name': 'Apple Music',
|
||||
'seekTo': controls.seekTo,
|
||||
'login': login,
|
||||
'addSongsFromThisSource': addFromAppleMusic,
|
||||
'loading': {
|
||||
'requiresLocalFiles': false
|
||||
},
|
||||
'songUnload': async () => {}
|
||||
};
|
||||
} else {
|
||||
throw new Error( 'ERR_AUTH' );
|
||||
}
|
||||
return {
|
||||
'authorized': controls.loggedIn,
|
||||
'play': controls.play,
|
||||
'pause': controls.pause,
|
||||
'stop': controls.stop,
|
||||
'playSong': controls.playSong,
|
||||
'getDuration': controls.getDuration,
|
||||
'getPlaybackPos': controls.getPlaybackPos,
|
||||
'id': 'applemusic',
|
||||
'name': 'Apple Music',
|
||||
'seekTo': controls.seekTo,
|
||||
'login': login,
|
||||
'addSongsFromThisSource': addFromAppleMusic,
|
||||
'loading': {
|
||||
'requiresLocalFiles': false
|
||||
},
|
||||
'songUnload': async () => {}
|
||||
};
|
||||
};
|
||||
|
||||
if ( !window.MusicKit ) {
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
export class AuthError extends Error {}
|
||||
|
||||
export class UnownedError extends Error {}
|
||||
|
||||
|
||||
const get = async ( url: string ): Promise<Response> => {
|
||||
return await wrapper( url, {
|
||||
'credentials': 'include'
|
||||
} );
|
||||
};
|
||||
|
||||
const post = async ( url: string, payload: string, mime: string = 'application/json' ): Promise<Response> => {
|
||||
return await wrapper( url, {
|
||||
'credentials': 'include',
|
||||
'body': payload,
|
||||
'headers': {
|
||||
'Content-Type': mime ?? 'application/json'
|
||||
}
|
||||
} );
|
||||
};
|
||||
|
||||
const wrapper = async ( url: string, opts: RequestInit ): Promise<Response> => {
|
||||
const res = await fetch( import.meta.env.VITE_BACKEND_URL + url, opts );
|
||||
|
||||
if ( res.ok ) {
|
||||
return res;
|
||||
} else if ( res.status === 403 || res.status === 401 ) {
|
||||
throw new AuthError( 'ERR_USER_UNAUTHORIZED' );
|
||||
} else if ( res.status === 402 ) {
|
||||
throw new UnownedError( 'ERR_USER_UNOWNED' );
|
||||
} else {
|
||||
throw new Error( 'ERR_' + res.status );
|
||||
}
|
||||
};
|
||||
|
||||
export default {
|
||||
get,
|
||||
post
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user