mal-api-v2
Version:
An awesome library to connect with the new MyAnimeList's API v2!
1 lines • 7.06 kB
JavaScript
(()=>{var e={990:(e,t,s)=>{const{fetApi:i}=s(243),{animeFull:r,animeInList:n}=s(341),a=s(880),{getSeason:o,checkSeason:u}=s(427);e.exports=class{constructor(e){this.fetapi=(t,s)=>i(e,"get",t,s)}id(e,t=r){return this.fetapi(`/anime/${e}`,{fields:a(r,t)})}search(e){const t={q:e.q,limit:e.limit||100,offset:e.offset||0,fields:a(n,e.fields)};return this.fetapi("/anime",t)}ranking(e){const t={ranking_type:e.ranking_type||"all",limit:e.limit||100,offset:e.offset||0,fields:a(n,e.fields)};return this.fetapi("/anime/ranking",t)}seasonal(e){const t={sort:e.sort||"anime_score",limit:e.limit||100,offset:e.offset||0,fields:a(n,e.fields)};return this.fetapi(`/anime/season/${e.year||(new Date).getFullYear()}/${void 0!==e.season&&u(e.season)?e.season:o(+(new Date).toLocaleString("default",{month:"numeric"}))}`,t)}suggested(e){const t={limit:e.limit||100,offset:e.offset||0,fields:a(n,e.fields)};return this.fetapi("/anime/suggestions",t)}}},189:(e,t,s)=>{const{fetApi:i}=s(243),{mangaFull:r,mangaInList:n}=s(341),a=s(880);e.exports=class{constructor(e){this.fetapi=(t,s)=>i(e,"get",t,s)}id(e,t=r){return this.fetapi(`/manga/${e}`,{fields:a(r,t)})}search(e){const t={q:e.q,limit:e.limit||100,offset:e.offset||0,fields:a(n,e.fields)};return this.fetapi("/manga",t)}ranking(e){const t={ranking_type:e.ranking_type||"all",limit:e.limit||100,offset:e.offset||0,fields:a(n,e.fields)};return this.fetapi("/manga/ranking",t)}}},49:(e,t,s)=>{const{fetToken:i,generateUrlAuthentication:r}=s(243),n=s(932);e.exports=class{constructor(e){this.clientId=e.clientId,this.clientSecret=e.clientSecret||void 0,this.urlRedirect=e.urlRedirect||void 0}pkceGenerate(e=43){return n.generate(e)}pkceVerifyChallenge(e,t){return n.verify(e,t)}urlAuthorize(e,t){const s={response_type:"code",client_id:this.clientId,state:t,redirect_uri:this.urlRedirect,code_challenge:e,code_challenge_method:"plain"};return r(s)}getToken(e,t){const s={client_id:this.clientId,client_secret:this.clientSecret,grant_type:"authorization_code",code:e,redirect_uri:this.urlRedirect,code_verifier:t};return i(s)}refreshToken(e){return i({client_id:this.clientId,client_secret:this.clientSecret,grant_type:"refresh_token",refresh_token:e})}}},176:(e,t,s)=>{const{fetApi:i}=s(243),{user:r}=s(341),n=s(880);e.exports=class{constructor(e){this.fetapi=(t,s)=>i(e,"get",t,s)}get(e){return void 0===e&&(e={userName:"@me",fields:r}),this.fetapi(`/users/${e.userName}`,{fields:n(r,e.fields)})}}},152:(e,t,s)=>{const{fetApi:i}=s(243),{userAnime:r}=s(341),n=s(880);e.exports=class{constructor(e){this.fetapi=(t,s,r)=>i(e,t,s,r)}getList(e){let t;return t=void 0===e?{status:void 0,sort:"anime_title",limit:100,offset:0,fields:n(r)}:{status:e.status||void 0,sort:e.sort||"anime_title",limit:e.limit||100,offset:e.offset||0,fields:n(r,e.fields)},this.fetapi("get",`/users/${e&&e.userName||"@me"}/animelist`,t)}deleteList(e){return this.fetapi("delete",`/anime/${e}`)}updateList(e,t){return this.fetapi("put",`/anime/${e}`,t)}}},977:(e,t,s)=>{const{fetApi:i}=s(243),{userManga:r}=s(341),n=s(880);e.exports=class{constructor(e){this.fetapi=(t,s,r)=>i(e,t,s,r)}getList(e){let t;return t=void 0===e?{status:void 0,sort:"manga_title",limit:100,offset:0,fields:n(r)}:{status:e.status||void 0,sort:e.sort||"manga_title",limit:e.limit||100,offset:e.offset||0,fields:n(r,e.fields)},this.fetapi("get",`/users/${e&&e.userName||"@me"}/mangalist`,t)}deleteList(e){return this.fetapi("delete",`/manga/${e}`)}updateList(e,t){return this.fetapi("put",`/manga/${e}`,t)}}},880:e=>{e.exports=function(e,t){const s=e=>e.sort().join(",");let i;var r;return void 0!==t&&Array.isArray(t)?(i=(t=>t.filter((t=>e.includes(t))))((r=t).filter(((e,t)=>r.indexOf(e)===t))),i=0===i.length?s(e):s(i)):i=s(e),i}},243:(e,t,s)=>{const{agent:i,post:r}=s(99),{stringify:n}=s(722);function a(e){return n(e,{arrayFormat:"comma",skipEmptyString:!0,skipNull:!0})}t.fetApi=function(e,t,s,r){const n=i().set({Authorization:`Bearer ${e}`}),o=`https://api.myanimelist.net/v2${s}`;return new Promise(((e,s)=>{const i=t=>e({status:!0,return:t.body}),u=e=>s(Object.assign({status:!1},{retaurn:JSON.parse(e.response.text)}));"delete"===t?n.delete(`${o}/my_list_status`).then((()=>e({status:!0,return:{message:"Delete success."}}))).catch((e=>e.response.status>400&&u(e))):"put"===t?n.put(`${o}/my_list_status`).type("application/x-www-form-urlencoded").send(a(r)).then(i).catch(u):"get"===t&&n.get(`${o}?${a(r)}`).then(i).catch(u)}))},t.fetToken=function(e){return new Promise(((t,s)=>{r("https://myanimelist.net/v1/oauth2/token").type("application/x-www-form-urlencoded").send(a(e)).then((e=>t({status:!0,return:e.body}))).catch((e=>s(Object.assign({status:!1},{retaurn:JSON.parse(e.response.text)}))))}))},t.generateUrlAuthentication=function(e){return`https://myanimelist.net/v1/oauth2/authorize?${a(e)}`}},427:(e,t)=>{t.getSeason=function(e){return e>2&&e<6?"spring":e>5&&e<9?"summer":e>8&&e<12?"fall":"winter"},t.checkSeason=function(e){return["spring","summer","fall","winter"].includes(e.toLowerCase())}},341:e=>{const t=["alternative_titles","created_at","end_date","genres","id","main_picture","mean","media_type","my_list_status","nsfw","num_list_users","num_scoring_users","popularity","rank","start_date","status","synopsis","title","updated_at"],s=["background","pictures","recommendations","related_anime","related_manga"],i=["finish_date","priority","score","start_date","status","tags","updated_at"],r=["average_episode_duration","broadcast","num_episodes","rating","source","start_season","studios",...t],n=["statistics",...s,...r],a=["authors","num_chapters","num_volumes",...t],o=["serialization",...s,...a],u=["is_rewatching","num_times_rewatched","num_watched_episodes","rewatch_value",...i],l=["is_rereading","num_chapters_read","num_times_reread","num_volumes_read","reread_value",...i];e.exports={animeFull:n,animeInList:r,mangaFull:o,mangaInList:a,user:["anime_statistics","birthday","gender","id","is_supporter","joined_at","location","name","picture","time_zone"],userAnime:u,userManga:l}},932:(e,t,s)=>{const{createHash:i,randomBytes:r}=s(770);function n(e){return i("sha256").update(e).digest("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}t.generate=function(e){if(e<43||e>128)throw new Error(`Expected a length between 43 and 128. Received ${e}.`);const t=function(e){return function(e,t){const s=Math.pow(2,8),i=s/Math.min(t.length,s);let n="";for(let s=0;s<e;s++)n+=t[Math.floor(r(e)[s]/i)];return n}(e,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~")}(e);return{code_challenge:n(t),code_verifier:t}},t.verify=function(e,t){return n(e)===t}},770:e=>{"use strict";e.exports=require("crypto")},722:e=>{"use strict";e.exports=require("query-string")},99:e=>{"use strict";e.exports=require("superagent")}},t={};function s(i){var r=t[i];if(void 0!==r)return r.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,s),n.exports}var i={};(()=>{var e=i;const t=s(49),r=s(990),n=s(189),a=s(176),o=s(152),u=s(977);e.Oauth2=t,e.Anime=r,e.Manga=n,e.User=a,e.UserAnimeList=o,e.UserMangaList=u})(),module.exports=i})();