{"_id":"lastfm-njs","_rev":"36-4fc61cef2b0faff361f70ef7bd0b5952","name":"lastfm-njs","description":"A complete last.fm API for Node.JS","dist-tags":{"latest":"2.0.1","beta":"2.0.0-beta.10"},"versions":{"0.0.3":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.0.3","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"lib":"lib"},"engines":{"node":"*"},"dependencies":{"request":"*","request-promise-native":"*","crypto":"*","lodash.merge":"*"},"devDependencies":{},"optionalDependencies":{},"gitHead":"be26cdfe0a9af7b1dee4851dd02a47abbce5ac10","bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","_id":"lastfm-njs@0.0.3","scripts":{},"_shasum":"047adff0192a459ec513a6eedb6a5338fa127341","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.6.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"047adff0192a459ec513a6eedb6a5338fa127341","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.0.3.tgz","integrity":"sha512-1VlY1ycbRNV+JO38YfSnBhZVFNiwGWbDdvYCFf6b2Qtu7N5PpqDQhpQAddq8f9wXOturyLMeWKKcw/XKv3W7tQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVD3gNr0QkgvvJLUzRScGpkxXJi/fSReN695usYbnr/AiEAimLRAAtImHzKNm3jK0OxTH/NRVAfQcUB6/Zu3syhAVs="}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.0.3.tgz_1474990824343_0.5283424218650907"}},"0.1.1":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.1.1","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"cb6e414651128de7901c1169734768d2bfe3a711","_id":"lastfm-njs@0.1.1","scripts":{},"_shasum":"83f869dba3dacdb4e61e88479f35a48ea4c7c210","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.6.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"83f869dba3dacdb4e61e88479f35a48ea4c7c210","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.1.1.tgz","integrity":"sha512-4qvyeb4oDnejX2rokjPjJqzf7WxsyAPgv/h0OB4yFjVvgknjhdI+f8XrxVmlaWfoJplL5rNPTzucVMmfL2hFGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCX+NPOKG+QJs6tpY7iDBArD/pUKF9P44Rkt1+dbdBirAIgA6yweD8+zkbBK/3skuiqBW7eX+6c/8szu4yel/0e8Es="}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.1.1.tgz_1474991461841_0.5670577525161207"}},"0.1.2":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.1.2","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"3558cf15090df65af30cba348c20978c60c32b0c","_id":"lastfm-njs@0.1.2","scripts":{},"_shasum":"2ceeafc4d7293e2dd0801763b5bbb7790846d330","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.6.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"2ceeafc4d7293e2dd0801763b5bbb7790846d330","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.1.2.tgz","integrity":"sha512-lRalV2rl/FfcljApy2ykT5TaRd5pSFhiugDmOOVlCYzLe5xol9RYnnNwjndmeueT4MMU49pCed3qNO0We3ID0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6R1rIwdLaAVzjBdPtFsUw+hMCJNoQlH45u73YC6uYKQIhANUdVja1EtMhwTsISO1CpLrdYmC1yiHcinmpO2tmEWcx"}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.1.2.tgz_1474991597777_0.344448565505445"}},"0.1.3":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.1.3","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"6100e7b22798b9bcb04951889ec375d89e5172fa","_id":"lastfm-njs@0.1.3","scripts":{},"_shasum":"df5d7d6d09ea3615fae952cbb9f926f024482789","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.6.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"df5d7d6d09ea3615fae952cbb9f926f024482789","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.1.3.tgz","integrity":"sha512-QR2Y54dn8+1Hza8ANEyzQTw3eiIrzejlpHz7iNtHoYqvhYpch9WSm09ULeYB9uTDg3IKybNzJo811RQQpyeyGQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBLgmKTfGNVoR7VR+rx2b6gbmk7R2E94K02QpiIKuI61AiEAkTOydK8aOF9t9AZozCzUWXwI7A2BB2p1HWoWrCnVZi8="}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.1.3.tgz_1475028142662_0.27355591719970107"}},"0.1.4":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.1.4","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"5e55dc8ae64f8eaf3622cc4cb4f959202e623495","_id":"lastfm-njs@0.1.4","scripts":{},"_shasum":"4e7941be35399fab9c54d7aed063403f7b672c38","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.6.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"4e7941be35399fab9c54d7aed063403f7b672c38","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.1.4.tgz","integrity":"sha512-SFVyeFsHHowgIPQtL7hTZKIkdcPpmOm/3MlKNEoubHq7W93fGq461h/UH/9Fp4fFeJjZtdxPdMUy5BQIsKVmEg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDq6EJOoaQkAqPINhTAYsIsGbQZv3d1O15iz0gBs9t2DgIgKyIUkzdrMb5GB2RsOvJVOMJ2C5QgPsnRtwwypIBAbG8="}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.1.4.tgz_1475176994127_0.6618397640995681"}},"0.1.5":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.1.5","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"44576126caa2a734ab8a69065312d9c543ac075e","_id":"lastfm-njs@0.1.5","scripts":{},"_shasum":"01a2969c1517e0badbc16e938ddfc138756cdf9c","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.7.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"01a2969c1517e0badbc16e938ddfc138756cdf9c","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.1.5.tgz","integrity":"sha512-dim+ow9f3mMc4rqnuicGl2FQWF0GbxY6pEU1dR6hxTYPOcFMiMUxw/Vh9QZ+XQE5dNfSiHOFhFDf5ozDsjFSkw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOuiv0F7pWxFECrIRiqjXimC102KDPFXtGfb1hBWFczgIhAN7xFDBUedM1gx4434T/sHAut+ovCw9BuZdwHJk8DQJq"}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.1.5.tgz_1475178817230_0.18657145858742297"}},"0.1.6":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.1.6","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"424702bbe1e8cc587035270d77328e45bbcf2494","_id":"lastfm-njs@0.1.6","scripts":{},"_shasum":"8efd56f11a2d190045a315dad13d7dfbdc228965","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.7.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"8efd56f11a2d190045a315dad13d7dfbdc228965","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.1.6.tgz","integrity":"sha512-jjVTTnxacUjzB8r3tLNoCQ+wTFO/RlIa5j+wHjLpfXRJKSzOZWmLB+/GvCuWq/Li+eeRASDwZ3mhPd6oNuvNCg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwqsJUBUZL6CyvTwscoDuoEW6DbblmrJg0e0NKMICSzAiEA8WafAoeHAKdABvFyXoiA+Jd9Wuo1f0KUUQQ1frZ4Hiw="}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.1.6.tgz_1475181538346_0.4996986777987331"}},"0.2.0":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.2.0","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"d8e85e4d925a9782c25063a476300effe0d3c5a9","_id":"lastfm-njs@0.2.0","scripts":{},"_shasum":"10b02c9b0873da685e14df22c59a28e53700247c","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.7.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"10b02c9b0873da685e14df22c59a28e53700247c","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.2.0.tgz","integrity":"sha512-M5nuQzL1h7DZ7WFp4F+wT/Hl+OI0682w3Rs7YL6RyXW/NQrkUFLOxTYI8uXqW/rOWHEMU3LNOI1izu6zXMU5oQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDbmUQUKfqUxxEChdQSDIBdvKrWCS9WLs5Isnh8VIfkQIhAIcDiXcgZppJUX5RIwNao07sNgc7Z8hMCSmU6TIRSaVS"}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.2.0.tgz_1475967485417_0.6127161546610296"}},"0.2.1":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.2.1","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"de4aaa58f62708185ab9caa9b235740776d5f495","_id":"lastfm-njs@0.2.1","scripts":{},"_shasum":"a0adc2fd602fb57814cdaca801b370593faaeb76","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.7.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"a0adc2fd602fb57814cdaca801b370593faaeb76","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.2.1.tgz","integrity":"sha512-fngyAa7hBaau5gIRh1jTDtAMsL5h2mbBelFMjaUoNkwIIh7XCHG+4V3mVioJeR9NZsJwQ1F7C6iYUT+2s0fTxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHHSVCfQt6PKPQGSijWz7c8X8p0AMO9hQ7DdyMaqFTWgIhAJsJcPC9YtCIPjo/QzS1K3QvlX1sDttnM2LOYOZauK77"}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.2.1.tgz_1476114414313_0.01007723854854703"}},"0.2.2":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.2.2","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"e90bcb05d559284c7d0bf06f2bf82e409ed160f9","_id":"lastfm-njs@0.2.2","scripts":{},"_shasum":"49214477f29b6361353364f7a4dd91411a45a5e4","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.7.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"49214477f29b6361353364f7a4dd91411a45a5e4","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.2.2.tgz","integrity":"sha512-IvwvB7yrAdKxxh5LINXRxJ1mR1ETLvYALfNY/tE48oe0o3wJbIHmP8A3IxjFhUQ+ZA8CxjG/8VMHCJv2CdZ++g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCw2HCXvcLO9e6jRLtQe090plyg4b/bz/L//90eOtqoaAIhALuiycdYzT+kDOiuSM9sMQ5V5nyhbBpJw5IaoWDxImoU"}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.2.2.tgz_1476371341110_0.5940307173877954"}},"0.2.3":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.2.3","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"db0631e42ea227cbed9e723fd2842c900c0951bb","_id":"lastfm-njs@0.2.3","scripts":{},"_shasum":"bc6707560e70bdae12148cbd426511cfaf46dc44","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.7.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"bc6707560e70bdae12148cbd426511cfaf46dc44","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.2.3.tgz","integrity":"sha512-ZjYdklUQZnG6k62dL/x/wDNFxM9iam4KO3uCsuOUph+U/Q1VvdrFw/iaxiJswfBekRdXS+2MGH1hsJqFHnMWGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiZtvLDK9cfSGMWAUKQrNiaHj2DsvwaTh9lqvr50SD7AIgKtjSi3tUNcynVr1t2Rv2oZrODG4XwKt6bUitRjb0SXE="}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.2.3.tgz_1476371675463_0.6378132784739137"}},"0.2.4":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"0.2.4","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"crypto":"0.0.3","lodash.merge":"^4.6.0","request":"^2.75.0","request-promise-native":"^1.0.3"},"gitHead":"b305ae597cc09e552887e3256b7c7c6c7c2818cf","_id":"lastfm-njs@0.2.4","scripts":{},"_shasum":"ef9ea053581ed8096860c6b3fb5b08f259529e7d","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.7.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"shasum":"ef9ea053581ed8096860c6b3fb5b08f259529e7d","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-0.2.4.tgz","integrity":"sha512-0zg5Wb4WOiL+oEqptEUlpeXS5R749q/C3AxSKPpl8ccFWWsDzUR3iUueavv1pqaUzYpFZfOifDBFnPUjrmZIfg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC0oW+zcUeKxDXLM0B6L7SKQxbnx8yM+uGgNCaQPuURJAiEA+K0M/P6iwsAdZIbu71RA/wvPZ/BiGcsHL/fuNsgxXDE="}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lastfm-njs-0.2.4.tgz_1476749113987_0.7250880901701748"}},"1.0.0":{"name":"lastfm-njs","description":"A complete last.fm API for Node.JS","version":"1.0.0","repository":{"type":"git","url":"git://github.com/ChrisW-B/lastfm-njs.git"},"author":{"name":"Chris Barry","email":"me@chrisb.xyz"},"main":"lib/index.js","directories":{"example":"examples"},"engines":{"node":"*"},"devDependencies":{"eslint":"^4.6.1","eslint-config-airbnb-base":"^12.0.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"5.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/ChrisW-B/lastfm-njs/issues"},"homepage":"https://github.com/ChrisW-B/lastfm-njs#readme","keywords":["lastfm","music"],"license":"ISC","dependencies":{"request-promise-native":"^1.0.3"},"gitHead":"7fcf17fdb8ce59b3ddf73e62f18b07f1fcf0fda5","_id":"lastfm-njs@1.0.0","_npmVersion":"5.4.0","_nodeVersion":"8.4.0","_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"dist":{"integrity":"sha512-wVzYBFI/AfuyvkAI/jIdSv51REqI/H9ViOB4eDh6RNOxbGgjKylWFf/ELOSR529s5yAFUA1E4QgdMfsUjxettA==","shasum":"2a77ea6b5d9e79cc68c29643575a96fc764c9c2f","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-1.0.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAVVxHztjYDiQrFUC80WwcOdDQrble5stdt+GKroWPORAiEAjon2vivtW2JW23kUeDzWaJtXAmOzWRlpMqhFvh3hlYY="}]},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs-1.0.0.tgz_1504982711658_0.8024151669815183"}},"2.0.0-beta.0":{"name":"lastfm-njs","version":"2.0.0-beta.0","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./index.cjs.js","module":"./index.js","types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"style":"./theme.css","_id":"lastfm-njs@2.0.0-beta.0","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"0b1ada76a8a437685551fb4ad76bce4ea9c1b6d4","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-OpDN9Yt2PvSuh6PTdISF+mUNX05wWZku7xAz0C3n0YeHrcS3/iT34fm6wBkH13pTcGQI8nNw7rZUp0zrwdZ04Q==","shasum":"caa04cb18a8b71cb80a6f876e9e39f2356767787","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.0.tgz","fileCount":18,"unpackedSize":138352,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXGfF8erXYzvY1HE1owlwGtxXMIA1YlWtxve5ZHaQlewIhAOnWgILwiUnvifJ/wS4qje+oRVpvlMQ6/V37wqI44dsb"}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.0_1695661250748_0.5928043345243699"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"lastfm-njs","version":"2.0.0-beta.1","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./index.cjs.js","module":"./index.js","types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"_id":"lastfm-njs@2.0.0-beta.1","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"0b1ada76a8a437685551fb4ad76bce4ea9c1b6d4","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-H62fZGFMmoP7s24a0RI8++8221t/kd1FNBdVVUy4FRCYoLUYr4hKlP8jNfogyrx1QQAl6fZZ/b3Tbsu740mQ5w==","shasum":"f1c79d66f2f154f5e9e5ed83f84467164123f40d","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.1.tgz","fileCount":18,"unpackedSize":138789,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4zizBNqmQU71IPTWKobKgU9Qc2PnH/VHUqXgEwlLoGwIhAPh1os3KowzOOswcZv4loq8C0aXpsN94v2raQpDogc1I"}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.1_1695665207603_0.30401361572713004"},"_hasShrinkwrap":false},"2.0.0-beta.2":{"name":"lastfm-njs","version":"2.0.0-beta.2","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./index.cjs.js","module":"./index.js","types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"_id":"lastfm-njs@2.0.0-beta.2","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"0b1ada76a8a437685551fb4ad76bce4ea9c1b6d4","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-Bc4mludvUa1SzMV/vQ2T2F726ofF5TQ6ZWuGCUo61HZQZfwdwL0peWb6DMht+xXjIoX7NiTja5BX67O7W6+nCg==","shasum":"ccab0ae3d71920e0d3ce194e6f27dd51c0914a5e","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.2.tgz","fileCount":18,"unpackedSize":145141,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDc51Rn0KqFdOS3ORfVXZq7HJJVGLLr4NAbC2rpqg52iwIhAKw2krVwyEesW/whXB3koTG+kD0LdKNknRDaxifuEv0m"}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.2_1695665731550_0.33290576724352827"},"_hasShrinkwrap":false},"2.0.0-beta.3":{"name":"lastfm-njs","version":"2.0.0-beta.3","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./index.cjs.js","module":"./index.js","types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"_id":"lastfm-njs@2.0.0-beta.3","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"650fb82c54b7685adcbec184653985606d2cc5de","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-239Wo/ZNQ8f76lXGlp9eKok4cgv7q9Y1W7K47rMivXdfNBlZmqQ7lslsNuKFw5Pl+1XEJFKUQOETu1dNPASx9A==","shasum":"a32a29d1088f216ee41cb33ab9cf5ad250e38bdd","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.3.tgz","fileCount":18,"unpackedSize":145517,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVTREPN82Yfwureuv8ZJJIFliVkF5fPNQaRj1hln7WUgIgOLuIzW1Jc1iW1MsBrJPfdMagmnyghb+EtVCuP4mhRpA="}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.3_1695666794294_0.3644854213745323"},"_hasShrinkwrap":false},"2.0.0-beta.4":{"name":"lastfm-njs","version":"2.0.0-beta.4","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./index.cjs.js","module":"./index.js","types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"_id":"lastfm-njs@2.0.0-beta.4","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"650fb82c54b7685adcbec184653985606d2cc5de","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-2hcPeXbR7ApKC6QsU7iGJGDulMz0qoepaH5BG1stljpIl8ZqcQfbOV6ArLFLZ8R4EVT9idbiKa3Ba15KUwc8Ng==","shasum":"de8458a08e53dd85d6d99d6c7347796d2bfd5f04","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.4.tgz","fileCount":18,"unpackedSize":146482,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGEYOHiLrOJXRtkz0P73d3QdO3T9dVL8fKOlt/pBIOVJAiEArDLQqRRfbns43K9xM0IHebb58Whh+tHHTFfEbzO48us="}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.4_1695667465140_0.20688722647024083"},"_hasShrinkwrap":false},"2.0.0-beta.5":{"name":"lastfm-njs","version":"2.0.0-beta.5","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./index.cjs.js","module":"./index.js","types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"_id":"lastfm-njs@2.0.0-beta.5","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"650fb82c54b7685adcbec184653985606d2cc5de","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-1fJIFoWgu5m6pGmICzZVgE00eb1qeMYyXVy+0btWpsxd0j3hSza0bxzb7Bs5lyBMy2ELAscRHoce965PfL41Ig==","shasum":"8244d0814b6d6c08d754240746abdf3b2ab1389e","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.5.tgz","fileCount":18,"unpackedSize":147363,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICbGPLWtSSbyqjn7f+Nf6W+tBdyEO79OLf3Ox6boKsjbAiEAhKiq8TIVA1ytQ0UpFr68tJMf7ebjv8bmM25jaFSvMVw="}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.5_1695667852427_0.43597437403288186"},"_hasShrinkwrap":false},"2.0.0-beta.6":{"name":"lastfm-njs","version":"2.0.0-beta.6","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./index.cjs.js","module":"./index.js","types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"_id":"lastfm-njs@2.0.0-beta.6","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"650fb82c54b7685adcbec184653985606d2cc5de","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-V/dauPktgJVCPJQ7B3F6rMRTyewvGICrxPUfSxNjYVDa7PyAl5GFKzqiQeKqjXbTUJEyb9vRwMfaS3MNOa9lJQ==","shasum":"ef2c79a0fb8974bde1a05401693de2007f5003b9","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.6.tgz","fileCount":18,"unpackedSize":146891,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJm2n9wnyYX0D6FZf6h/0vmoWjUzS81uYQFpKmGDa2JAIgF/IsWu+EYgh3wOy1JV8lMFBcS3St4HbH7H4K3OtM15o="}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.6_1695668332179_0.4160291549288495"},"_hasShrinkwrap":false},"2.0.0-beta.7":{"name":"lastfm-njs","version":"2.0.0-beta.7","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./cjs/index.js","module":"./esm/index.js","exports":{"require":"./dist/cjs/index.js","import":"./dist/esm/index.js"},"types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"_id":"lastfm-njs@2.0.0-beta.7","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"650fb82c54b7685adcbec184653985606d2cc5de","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-vscgtUBcLX8pxgXNDbVWhSshmZUhyFxq/DtFohDWN4Jh3R0HLLPgmTjm9zuq53N9n+ycEGUUnGDQIbVkx9m7kA==","shasum":"03d797675884898cb931b77279fee0a40a64c2a7","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.7.tgz","fileCount":19,"unpackedSize":200635,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHLhBS5DKIX9+w1spBUuwWUIDXiJSOhcZv6OcO/RdqagIgNOnaj4Yi44JqPb5VXii3W4r12Bb7uHCHYDYZ6gZM9yY="}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.7_1695681842803_0.01251586728680354"},"_hasShrinkwrap":false},"2.0.0-beta.8":{"name":"lastfm-njs","version":"2.0.0-beta.8","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./cjs/index.js","module":"./esm/index.js","exports":{"require":"./cjs/index.js","import":"./esm/index.js"},"types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"_id":"lastfm-njs@2.0.0-beta.8","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"650fb82c54b7685adcbec184653985606d2cc5de","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-gAXPxe2rr8ES2yj83XPXTrcxwZg3B1qLyMONphZhbl1NF+hllCBef2YeVfBVmXQjPcAvajJO9syas3t6EF0ncA==","shasum":"a6d82556453392c524dd5f543700496daa70d287","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.8.tgz","fileCount":19,"unpackedSize":200625,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwr0trA4tZO83hhfJEnZujMlV7gfxTaXFpUTlnAVoUeAiAahYpl9DikuRfzkNvuEmZZc5svipwntHrVMDnQ5WQT9A=="}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.8_1695681949740_0.2348180009609031"},"_hasShrinkwrap":false},"2.0.0-beta.9":{"name":"lastfm-njs","version":"2.0.0-beta.9","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./cjs/index.js","module":"./esm/index.js","exports":{"require":"./cjs/index.js","import":"./esm/index.js","types":"./index.d.ts"},"types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"type":"module","_id":"lastfm-njs@2.0.0-beta.9","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"650fb82c54b7685adcbec184653985606d2cc5de","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-xePkpyrMK+xLCwQ0MA/euPwTObQhGTSy9FIGCLbF5VsuYR2fG2svCj//n16estBRa7fsstyRyfF4LBGU5z3eAw==","shasum":"b0d92baa9d693526c701a0e2d127747711f891b0","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.9.tgz","fileCount":19,"unpackedSize":200674,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEUtdcRhjHE++HpaGo6Cr4ib7uKF00b96XKZM7Bh0JpKAiBE0bDAVmoi81X0jPxIWnUWCp1F0rB8aDbJr8Hcm2qMgg=="}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.9_1695682296352_0.8093014843236186"},"_hasShrinkwrap":false},"2.0.0-beta.10":{"name":"lastfm-njs","version":"2.0.0-beta.10","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"main":"./cjs/index.cjs","module":"./esm/index.mjs","exports":{"require":"./cjs/index.cjs","import":"./esm/index.mjs","types":"./index.d.ts"},"types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"type":"module","_id":"lastfm-njs@2.0.0-beta.10","readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need password\n\n```ts\nvar lfm = new lastfm({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","readmeFilename":"README.md","gitHead":"650fb82c54b7685adcbec184653985606d2cc5de","_nodeVersion":"18.18.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-zjAcvKt0XNKylgsWBxZLLPsipvJ8oSWoaCJaPehOAyVV0QI5OKkc6bY8LzrD37luMR9D1oFWgHb5CvxBtLJU0g==","shasum":"87cdad4708387feeb22368f96bdb9aad9dfc469b","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.0-beta.10.tgz","fileCount":19,"unpackedSize":200683,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB8D1FCoUhCjeXrx2TJrnfHXFgrMr4f5ztNwfuSD2K6qAiEA0y5rWjZ6/ctFFbva2yN89920xOA/D+/P6hyOTFcH1kU="}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.0-beta.10_1695682528695_0.9825012859633762"},"_hasShrinkwrap":false},"2.0.1":{"name":"lastfm-njs","version":"2.0.1","private":false,"description":"A complete last.fm API for Node.JS","keywords":["lastfm","music","last fm","last-fm"],"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"license":"ISC","author":{"name":"chris b"},"exports":{"require":"./cjs/index.cjs","import":"./esm/index.mjs","types":"./index.d.ts"},"main":"./cjs/index.cjs","module":"./esm/index.mjs","types":"./index.d.ts","engines":{"node":">=18"},"importSort":{".js, .jsx, .es6, .es, .mjs":{"parser":"babylon","style":"module"},".ts, .tsx":{"parser":"typescript","style":"module"}},"type":"module","_id":"lastfm-njs@2.0.1","gitHead":"f2016104f301a81ccdf0ca6a0ed9b7636bd7662b","_nodeVersion":"18.18.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-RJsOGjKI8EDowKsJhvPObUXkPXDQM2EuXhDPXK+G9YKBdVXAHX7IrRKs7sFZWI4bDhF56ZXQC08/AeYvKYYoEA==","shasum":"f6e49ebde211753b59b0a9ce3da882a9aebc972d","tarball":"https://registry.npmjs.org/lastfm-njs/-/lastfm-njs-2.0.1.tgz","fileCount":19,"unpackedSize":200986,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQcDLowc/rkLKZIh9j5ZKJ1qEMnD0zS4DkJS6RTsq1AAiBpAM8cbAlvf8IhNddN7xjE5YGT15IAeU5pHlcRQQjsRQ=="}]},"_npmUser":{"name":"chrisw_b","email":"me@chrisb.xyz"},"directories":{},"maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lastfm-njs_2.0.1_1695689335536_0.35347463845445426"},"_hasShrinkwrap":false}},"readme":"# LastFM-njs\n\nA fully featured interface for Node and the Last.FM api\n\nThe full Last.FM API description can be found [here](http://www.last.fm/api)\n\nYou'll need an API key from [Create API Account](http://www.last.fm/api/account/create)\n\nYou can install using `npm install --save lastfm-njs`\n\nThen you can set up like so, where username is a default username:\n\n```ts\nvar lastfm = require(\"lastfm-njs\");\nvar config = require(\"./config\");\nvar lfm = new lastfm.default({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n});\n```\n\nIf a method requires writing to an account, then you also need a password\n\n```ts\nvar lfm = new lastfm.default({\n  apiKey: config.key,\n  apiSecret: config.secret,\n  username: config.username,\n  password: config.password,\n});\n```\n\nThis library supports both esm and cjs importing, commonjs will export as a default. You can use modules like\n\n```ts\nimport LastFM from 'lastfm-njs';\n\nconst client = new LastFM(...)\n```\n\nor require with\n\n```ts\nconst LastFM = require(\"lastfm-njs\");\n\nconst client = new LastFM.default(...)\n```\n\nAfter this, you can use any of the methods\n\n## Documentation\n\n- [Authentication Methods](#authentication-methods)\n- [Album Methods](#album-methods)\n- [Artist Methods](#artist-methods)\n- [Geo Methods](#geo-methods)\n- [Library Methods](#library-methods)\n- [Tag Methods](#tag-methods)\n- [Track Methods](#track-methods)\n- [User Methods](#user-methods)\n\n#### All methods use promises\n\n```ts\nlastfm\n  .auth_getMobileSession()\n  .then(function (result) {\n    lastfm\n      .album_addTags({\n        artist: \"Oh Pep!\",\n        album: \"Living\",\n        tags: \"peppy,folk,music\",\n      })\n      .then(printRes)\n      .catch(printError);\n  })\n  .catch(printError);\n```\n\nSee example files for other examples\n\n### Authentication\n\n[Last.FM Documentation](http://www.last.fm/api/show/auth.getMobileSession)\n\n**A username and password is required**\n\n`auth_getMobileSession();`\n\nwhich either returns\n\n```ts\n{\n    success: true,\n    key: 'XXX'\n}\n```\n\nor\n\n```ts\n{\n    success: false,\n    error: [lastFMError]\n}\n```\n\n### Album Methods\n\n[Examples](../master/examples/album_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.addTags)\n\n`album_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tags: tags, //req, max: 10, comma separated list\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Info\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getInfo)\n\n`album_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n  lang: lang, //opt\n  username: username, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTags)\n\n`album_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.getTopTags)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  album: album, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/album.removeTag)\n\n`album_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  album: album, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Album Search\n\n[Last.FM Documentation](https://www.last.fm/api/show/album.search)\n\n`album_getTopTags(opt)`, where\n\n```ts\nopt = {\n  album: album, //req\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n## Artist\n\n[Examples](../master/examples/artist_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.addTags)\n\n`artist_addTags(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tags: tags, //req, max 10, comma separated\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getCorrection)\n\n`artist_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getInfo)\n\n`artist_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getSimilar)\n\n`artist_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTags)\n\n`artist_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  user: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopAlbums)\n\n`artist_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 50\n  limit: limit, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTags)\n\n`artist_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.getTopTracks)\n\n`artist_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  mbid: mbid, //opt\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.removeTag)\n\n`artist_removeTag(opt)`, where\n\n```ts\n    opt = {\n        artist: artist //req\n        tag: tag, //req, 1 tag to be removed\n    }\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/artist.search)\n\n`artist_search(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Chart Methods\n\n[Examples](../master/examples/chart_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopArtists)\n\n`chart_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTags)\n\n`chart_getTopTags(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/chart.getTopTracks)\n\n`chart_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Geo Methods\n\n[Examples](../master/examples/geo_examples.ts)\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopArtists)\n\n`geo_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/geo.getTopTracks)\n\n`geo_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  country: country, //req, ISO 3166-1 format\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Library Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/library.getArtists)\n\n`library_getArtists(opt)`, where\n\n```ts\nopt = {\n  user: username, //req\n  page: page, //opt, default is 1\n  limit: limit, //opt, default is 50\n};\n```\n\n### Tag Methods\n\n[Examples](../master/examples/library_examples.ts)\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getInfo)\n\n`tag_getInfo(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  lang: lang, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getSimilar)\n\n`tag_getSimilar(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopAlbums)\n\n`tag_getTopAlbums(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopArtists)\n\n`tag_getTopArtists(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTags)\n\n`tag_getTopTags(opt)`, where\n\n```ts\nopt = {};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getTopTracks)\n\n`tag_getTopTracks(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n  limit: limit, //opt, defaults to 50\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/tag.getWeeklyChartList)\n\n`tag_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  tag: tag, //req\n};\n```\n\n### Track Methods\n\n[Examples](../master/examples/track_examples.ts)\n\n#### Add Tags\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.addTags)\n\n`track_addTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tags: tags, //req, max: 10\n};\n```\n\n_\\*Requires Authentication_\n\n#### Get Correction\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getCorrection)\n\n`track_getCorrection(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getInfo)\n\n`track_getInfo(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  username: username, //opt\n};\n```\n\n#### Get Similar\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getSimilar)\n\n`track_getSimilar(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n  limit: limit, //opt\n};\n```\n\n#### Get Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTags)\n\n`track_getTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  username: username, //req\n  mbid: mbid, //opt\n};\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.getTopTags)\n\n`track_getTopTags(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n  mbid: mbid, //opt\n};\n```\n\n#### Love Track\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.love)\n\n`track_love(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req unless mbid\n  track: track, //req unless mbid\n};\n```\n\n_\\*Requires Authentication_\n\n#### Remove Tag\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.removeTag)\n\n`track_removeTag(opt)`, where\n\n```ts\nopt = {\n  artist: artist, //req\n  track: track, //req\n  tag: tag, //req, single tag to remove\n};\n```\n\n_\\*Requires Authentication_\n\n#### Scrobble\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.scrobble)\n\n`track_scrobble(opt)`, where\n\n```ts\nopt = {\n  artist: artist[i], //req\n  track: track[i], //req\n  timestamp: timestamp[i], //req\n  album: album[i], //opt\n  context: context[i], //opt\n  streamId: streamId[i], //opt\n  chosenByUser: chosenByUser[i], //opt\n  trackNumber: trackNumber[i], //opt\n  mbid: mbid[i], //opt\n  albumArtist: albumArtist[i], //opt\n  duration: duration[i], //opt\n};\n```\n\n_\\*Requires Authentication_\n\n#### Search\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.search)\n\n`track_search(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //opt\n  limit: limit, //opt, defaults to 30\n  page: page, //opt, defaults to 1\n};\n```\n\n#### Unlove\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.unlove)\n\n`track_unlove(opt)`, where\n\n```ts\nopt = {\n  track: track, //req\n  artist: artist, //req\n};\n```\n\n_\\*Requires Authentication_\n\n#### Update Now Playing\\*\n\n[Last.FM Documentation](http://www.last.fm/api/show/track.updateNowPlaying)\n\n`track_updateNowPlaying(opt)`, where\n\n```ts\n    opt = {\n        artist: artist, //req\n        track: track, //req\n        album: album, //opt\n        context: context //opt\n        trackNumber: trackNumber, //opt\n        mbid: mbid, //opt\n        albumArtist: albumArtist, //opt\n        duration: duration, //opt\n    }\n```\n\n_\\*Requires Authentication_\n\n### User Methods\n\n[Examples](../master/examples/user_examples.ts)\n\n#### Get Artist Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getArtistTracks)\n\n`user_getArtistTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  artist: artist, //req\n  startTimestamp: startTimestamp, //opt defaults to all time\n  page: page, //opt, default is 1\n  endTimestamp: endTimestamp, //opt defaults to all time\n};\n```\n\n#### Get Friends\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getFriends)\n\n`user_getFriends(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  recentTracks: recentTracks, //opt, true|false\n  limit: limit, //opt defaults to 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Info\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getInfo)\n\n`user_getInfo(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt, defaults to init user\n};\n```\n\n#### Get Loved Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getLovedTracks)\n\n`user_getLovedTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Personal Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getPersonalTags)\n\n`user_getPersonalTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  tag: tag, //req\n  taggingtype: artist | album | track, //req\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Recent Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getRecentTracks)\n\n`user_getRecentTracks(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startTime, //opt\n  extended: 0 | 1, //opt\n  to: endTime, //opt\n  limit: limit, //opt, default is 50\n  page: page, //opt, default is 1\n};\n```\n\n#### Get Top Albums\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopAlbums)\n\n`user_getTopAlbums(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Artists\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopArtists)\n\n`user_getTopArtists(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Top Tags\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTags)\n\n`user_getTopTags(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  limit: limit, //opt, default is 50\n};\n```\n\n#### Get Top Tracks\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getTopTracks)\n\n`user_getTopTracks(opt)`, where\n\n```ts\n    opt = {\n        user: username, //opt\n        period: overall|7day|1month|3month|6month|12month, //opt, default is overall\n        limit: limit, //opt, default is 50\n        page: page, //opt, default is 1\n    }\n```\n\n#### Get Weekly Album Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyAlbumChart)\n\n`user_getWeeklyAlbumChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Artist Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyArtistChart)\n\n`user_getWeeklyArtistChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n\n#### Get Weekly Chart List\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyChartList)\n\n`user_getWeeklyChartList(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n};\n```\n\n#### Get Weekly Track Chart\n\n[Last.FM Documentation](http://www.last.fm/api/show/user.getWeeklyTrackChart)\n\n`user_getWeeklyTrackChart(opt)`, where\n\n```ts\nopt = {\n  user: username, //opt\n  from: startdate, //opt, default is overall\n  to: enddate, //opt, default is 50\n};\n```\n","maintainers":[{"name":"chrisw_b","email":"me@chrisb.xyz"}],"time":{"modified":"2023-09-26T00:48:56.015Z","created":"2016-09-27T15:40:26.233Z","0.0.3":"2016-09-27T15:40:26.233Z","0.1.1":"2016-09-27T15:51:03.493Z","0.1.2":"2016-09-27T15:53:19.622Z","0.1.3":"2016-09-28T02:02:23.481Z","0.1.4":"2016-09-29T19:23:15.199Z","0.1.5":"2016-09-29T19:53:39.450Z","0.1.6":"2016-09-29T20:38:59.472Z","0.2.0":"2016-10-08T22:58:06.196Z","0.2.1":"2016-10-10T15:46:56.126Z","0.2.2":"2016-10-13T15:09:03.103Z","0.2.3":"2016-10-13T15:14:36.623Z","0.2.4":"2016-10-18T00:05:16.164Z","1.0.0":"2017-09-09T18:45:12.859Z","1.999.0-beta":"2023-09-25T16:14:27.976Z","1.9999.0-beta":"2023-09-25T16:35:29.107Z","2.0.0":"2023-09-25T16:45:52.839Z","2.0.0-beta.0":"2023-09-25T17:00:50.904Z","2.0.0-beta.1":"2023-09-25T18:06:47.829Z","2.0.0-beta.2":"2023-09-25T18:15:31.817Z","2.0.0-beta.3":"2023-09-25T18:33:14.492Z","2.0.0-beta.4":"2023-09-25T18:44:25.295Z","2.0.0-beta.5":"2023-09-25T18:50:52.677Z","2.0.0-beta.6":"2023-09-25T18:58:52.383Z","2.0.0-beta.7":"2023-09-25T22:44:03.016Z","2.0.0-beta.8":"2023-09-25T22:45:49.924Z","2.0.0-beta.9":"2023-09-25T22:51:36.506Z","2.0.0-beta.10":"2023-09-25T22:55:28.914Z","2.0.1":"2023-09-26T00:48:55.802Z"},"homepage":"https://git.chriswb.dev/chrisw-b/lastfm-njs#readme","repository":{"type":"git","url":"https://git.chriswb.dev/chrisw-b/lastfm-njs.git"},"author":{"name":"chris b"},"bugs":{"url":"https://git.chriswb.dev/chrisw-b/lastfm-njs/issues"},"readmeFilename":"README.md","keywords":["lastfm","music","last fm","last-fm"],"license":"ISC"}