@ansango/lastfm-api 3.1.3 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +165 -15
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -2
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/entrypoints/album.d.ts +1 -1
- package/dist/entrypoints/album.d.ts.map +1 -1
- package/dist/entrypoints/album.js.map +1 -1
- package/dist/entrypoints/album.schemas.d.ts.map +1 -1
- package/dist/entrypoints/album.schemas.js.map +1 -1
- package/dist/entrypoints/artist.d.ts +1 -1
- package/dist/entrypoints/artist.d.ts.map +1 -1
- package/dist/entrypoints/artist.js.map +1 -1
- package/dist/entrypoints/artist.schemas.d.ts.map +1 -1
- package/dist/entrypoints/artist.schemas.js.map +1 -1
- package/dist/entrypoints/auth.d.ts +1 -1
- package/dist/entrypoints/auth.d.ts.map +1 -1
- package/dist/entrypoints/auth.js.map +1 -1
- package/dist/entrypoints/auth.schemas.d.ts.map +1 -1
- package/dist/entrypoints/auth.schemas.js.map +1 -1
- package/dist/entrypoints/base.schemas.d.ts.map +1 -1
- package/dist/entrypoints/base.schemas.js.map +1 -1
- package/dist/entrypoints/chart.d.ts +1 -1
- package/dist/entrypoints/chart.d.ts.map +1 -1
- package/dist/entrypoints/chart.js.map +1 -1
- package/dist/entrypoints/chart.schemas.d.ts.map +1 -1
- package/dist/entrypoints/chart.schemas.js.map +1 -1
- package/dist/entrypoints/geo.d.ts.map +1 -1
- package/dist/entrypoints/geo.js.map +1 -1
- package/dist/entrypoints/geo.schemas.d.ts.map +1 -1
- package/dist/entrypoints/geo.schemas.js.map +1 -1
- package/dist/entrypoints/library.d.ts.map +1 -1
- package/dist/entrypoints/library.js.map +1 -1
- package/dist/entrypoints/library.schemas.d.ts.map +1 -1
- package/dist/entrypoints/library.schemas.js.map +1 -1
- package/dist/entrypoints/tag.d.ts.map +1 -1
- package/dist/entrypoints/tag.js.map +1 -1
- package/dist/entrypoints/tag.schemas.d.ts.map +1 -1
- package/dist/entrypoints/tag.schemas.js.map +1 -1
- package/dist/entrypoints/track.d.ts.map +1 -1
- package/dist/entrypoints/track.js.map +1 -1
- package/dist/entrypoints/track.schemas.d.ts.map +1 -1
- package/dist/entrypoints/track.schemas.js.map +1 -1
- package/dist/entrypoints/user.d.ts.map +1 -1
- package/dist/entrypoints/user.js.map +1 -1
- package/dist/entrypoints/user.schemas.d.ts.map +1 -1
- package/dist/entrypoints/user.schemas.js.map +1 -1
- package/dist/index.d.ts +18 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/services/album.d.ts +43 -1
- package/dist/services/album.d.ts.map +1 -1
- package/dist/services/album.js +35 -2
- package/dist/services/album.js.map +1 -1
- package/dist/services/album.schemas.d.ts +51 -12
- package/dist/services/album.schemas.d.ts.map +1 -1
- package/dist/services/album.schemas.js +48 -10
- package/dist/services/album.schemas.js.map +1 -1
- package/dist/services/artist.d.ts +50 -1
- package/dist/services/artist.d.ts.map +1 -1
- package/dist/services/artist.js +34 -2
- package/dist/services/artist.js.map +1 -1
- package/dist/services/artist.schemas.d.ts +99 -25
- package/dist/services/artist.schemas.d.ts.map +1 -1
- package/dist/services/artist.schemas.js +125 -60
- package/dist/services/artist.schemas.js.map +1 -1
- package/dist/services/auth.d.ts +72 -1
- package/dist/services/auth.d.ts.map +1 -1
- package/dist/services/auth.js +37 -2
- package/dist/services/auth.js.map +1 -1
- package/dist/services/auth.schemas.d.ts +23 -1
- package/dist/services/auth.schemas.d.ts.map +1 -1
- package/dist/services/auth.schemas.js +20 -2
- package/dist/services/auth.schemas.js.map +1 -1
- package/dist/services/chart.d.ts +1 -1
- package/dist/services/chart.d.ts.map +1 -1
- package/dist/services/chart.js +2 -2
- package/dist/services/chart.js.map +1 -1
- package/dist/services/chart.schemas.d.ts +6 -6
- package/dist/services/chart.schemas.d.ts.map +1 -1
- package/dist/services/chart.schemas.js +21 -21
- package/dist/services/chart.schemas.js.map +1 -1
- package/dist/services/geo.d.ts +1 -1
- package/dist/services/geo.d.ts.map +1 -1
- package/dist/services/geo.js +2 -2
- package/dist/services/geo.js.map +1 -1
- package/dist/services/geo.schemas.d.ts +6 -6
- package/dist/services/geo.schemas.d.ts.map +1 -1
- package/dist/services/geo.schemas.js +17 -17
- package/dist/services/geo.schemas.js.map +1 -1
- package/dist/services/index.d.ts +12 -12
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +13 -13
- package/dist/services/index.js.map +1 -1
- package/dist/services/library.d.ts +1 -1
- package/dist/services/library.d.ts.map +1 -1
- package/dist/services/library.js +2 -2
- package/dist/services/library.js.map +1 -1
- package/dist/services/library.schemas.d.ts +3 -3
- package/dist/services/library.schemas.d.ts.map +1 -1
- package/dist/services/library.schemas.js +8 -8
- package/dist/services/library.schemas.js.map +1 -1
- package/dist/services/schemas/base.entities.schemas.d.ts +3 -3
- package/dist/services/schemas/base.entities.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.entities.schemas.js +9 -9
- package/dist/services/schemas/base.entities.schemas.js.map +1 -1
- package/dist/services/schemas/base.entity-names.schemas.d.ts +1 -1
- package/dist/services/schemas/base.entity-names.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.entity-names.schemas.js +1 -1
- package/dist/services/schemas/base.entity-names.schemas.js.map +1 -1
- package/dist/services/schemas/base.metadata.schemas.d.ts +1 -1
- package/dist/services/schemas/base.metadata.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.metadata.schemas.js +1 -1
- package/dist/services/schemas/base.metadata.schemas.js.map +1 -1
- package/dist/services/schemas/base.pagination.schemas.d.ts +1 -1
- package/dist/services/schemas/base.pagination.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.pagination.schemas.js +1 -1
- package/dist/services/schemas/base.pagination.schemas.js.map +1 -1
- package/dist/services/schemas/base.primitives.schemas.d.ts +3 -1
- package/dist/services/schemas/base.primitives.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.primitives.schemas.js +8 -7
- package/dist/services/schemas/base.primitives.schemas.js.map +1 -1
- package/dist/services/schemas/index.d.ts +5 -5
- package/dist/services/schemas/index.d.ts.map +1 -1
- package/dist/services/schemas/index.js +5 -5
- package/dist/services/schemas/index.js.map +1 -1
- package/dist/services/tag.d.ts +1 -1
- package/dist/services/tag.d.ts.map +1 -1
- package/dist/services/tag.js +2 -2
- package/dist/services/tag.js.map +1 -1
- package/dist/services/tag.schemas.d.ts +13 -13
- package/dist/services/tag.schemas.d.ts.map +1 -1
- package/dist/services/tag.schemas.js +50 -50
- package/dist/services/tag.schemas.js.map +1 -1
- package/dist/services/track.d.ts +128 -4
- package/dist/services/track.d.ts.map +1 -1
- package/dist/services/track.js +79 -10
- package/dist/services/track.js.map +1 -1
- package/dist/services/track.schemas.d.ts +213 -25
- package/dist/services/track.schemas.d.ts.map +1 -1
- package/dist/services/track.schemas.js +206 -57
- package/dist/services/track.schemas.js.map +1 -1
- package/dist/services/track.utils.d.ts +16 -7
- package/dist/services/track.utils.d.ts.map +1 -1
- package/dist/services/track.utils.js +49 -48
- package/dist/services/track.utils.js.map +1 -1
- package/dist/services/user.d.ts +19 -1
- package/dist/services/user.d.ts.map +1 -1
- package/dist/services/user.js +3 -2
- package/dist/services/user.js.map +1 -1
- package/dist/services/user.schemas.d.ts +321 -63
- package/dist/services/user.schemas.d.ts.map +1 -1
- package/dist/services/user.schemas.js +197 -88
- package/dist/services/user.schemas.js.map +1 -1
- package/dist/utils.d.ts +37 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +105 -20
- package/dist/utils.js.map +1 -1
- package/package.json +167 -154
- package/dist/__tests__/utils.test.d.ts +0 -2
- package/dist/__tests__/utils.test.d.ts.map +0 -1
- package/dist/__tests__/utils.test.js +0 -86
- package/dist/__tests__/utils.test.js.map +0 -1
package/dist/services/auth.d.ts
CHANGED
|
@@ -1,14 +1,85 @@
|
|
|
1
1
|
import type { LastFmConfig } from '../config.js';
|
|
2
|
-
import type { AuthGetSessionRequest, AuthGetSessionResponse } from './auth.schemas.js';
|
|
2
|
+
import type { AuthGetMobileSessionRequest, AuthGetMobileSessionResponse, AuthGetSessionRequest, AuthGetSessionResponse, AuthGetTokenResponse } from './auth.schemas.js';
|
|
3
3
|
export interface AuthService {
|
|
4
4
|
/**
|
|
5
5
|
* Get the session key for a user. Used for authenticating a user when scrobbling.
|
|
6
|
+
*
|
|
7
|
+
* This is the second step of the **browser-based auth flow**:
|
|
8
|
+
* 1. `auth.getToken()` — returns a request token
|
|
9
|
+
* 2. Direct the user to `https://www.last.fm/api/auth/?api_key=<KEY>&token=<token>` in a browser
|
|
10
|
+
* 3. The user authorises the app, Last.fm redirects to your callback URL with the same token
|
|
11
|
+
* 4. Call `auth.getSession({ token })` — this method — to exchange the authorised token for a session key
|
|
12
|
+
*
|
|
13
|
+
* The returned `session.key` is what write methods (`track.love`, `track.scrobble`, …) expect as `sk`.
|
|
14
|
+
*
|
|
6
15
|
* @param {AuthGetSessionRequest} params
|
|
7
16
|
* @param {RequestInit} init
|
|
8
17
|
* @returns {Promise<AuthGetSessionResponse>}
|
|
9
18
|
* https://www.last.fm/api/show/auth.getSession
|
|
10
19
|
* */
|
|
11
20
|
getSession: (params: AuthGetSessionRequest, init?: RequestInit) => Promise<AuthGetSessionResponse>;
|
|
21
|
+
/**
|
|
22
|
+
* Get a request token for user authentication. The returned token still
|
|
23
|
+
* requires the user to authorise it on the Last.fm website before it can
|
|
24
|
+
* be exchanged for a session via `auth.getSession`.
|
|
25
|
+
*
|
|
26
|
+
* Signed GET with no functional request parameters and no existing
|
|
27
|
+
* session. Safe to call from any environment.
|
|
28
|
+
*
|
|
29
|
+
* This is the first step of the **browser-based auth flow** — the
|
|
30
|
+
* recommended path for self-service users. The full flow is:
|
|
31
|
+
* 1. `auth.getToken()` — this method
|
|
32
|
+
* 2. Open the returned `authUrl` in a browser. Log in if prompted, click "Allow access"
|
|
33
|
+
* 3. Last.fm redirects to the callback URL configured on your API account with the same token
|
|
34
|
+
* 4. `auth.getSession({ token })` to exchange for the session key
|
|
35
|
+
*
|
|
36
|
+
* The response includes a pre-built `authUrl` so consumers don't have to
|
|
37
|
+
* construct the URL themselves. The CLI prints it; Scalar renders it in
|
|
38
|
+
* the "Try it" response.
|
|
39
|
+
*
|
|
40
|
+
* @param {RequestInit} init
|
|
41
|
+
* @returns {Promise<AuthGetTokenResponse>} `{ token, authUrl }` — `authUrl` is
|
|
42
|
+
* the full Last.fm auth URL ready to open in a browser.
|
|
43
|
+
* https://www.last.fm/api/show/auth.getToken
|
|
44
|
+
*/
|
|
45
|
+
getToken: (init?: RequestInit) => Promise<AuthGetTokenResponse>;
|
|
46
|
+
/**
|
|
47
|
+
* Get a mobile session for a user, exchanging a username/email and
|
|
48
|
+
* password for a session key. Returns the session to the caller; the
|
|
49
|
+
* client does not persist it.
|
|
50
|
+
*
|
|
51
|
+
* **Server-side / trusted environments only.** This method handles a
|
|
52
|
+
* password and the application's shared secret; it must never be used
|
|
53
|
+
* from a browser or any environment where the bundle is exposed.
|
|
54
|
+
*
|
|
55
|
+
* **Mobile-class API keys only.** Last.fm rejects this call with 403
|
|
56
|
+
* (`error: 4 — Authentication Failed`) for self-service web/desktop
|
|
57
|
+
* API keys. Self-service users should use the browser flow
|
|
58
|
+
* (`auth.getToken` + `auth.getSession`) instead. The Last.fm create
|
|
59
|
+
* form has no app-type selector; to obtain a mobile-class key you
|
|
60
|
+
* need to email `partners@last.fm` and ask for a reclassification.
|
|
61
|
+
*
|
|
62
|
+
* Requires HTTPS — a custom `baseUrl` over plain HTTP is rejected
|
|
63
|
+
* before any network call.
|
|
64
|
+
*
|
|
65
|
+
* Intentionally does not support the deprecated `authToken` /
|
|
66
|
+
* `md5(username + md5(password))` credential flow.
|
|
67
|
+
*
|
|
68
|
+
* @deprecated Last.fm restricts this method to **mobile-class API
|
|
69
|
+
* keys**, which are not exposed through the public self-service create
|
|
70
|
+
* form. Every self-service key defaults to "web", so this call returns
|
|
71
|
+
* `error: 4 — Authentication Failed` for almost all users. Use the
|
|
72
|
+
* browser flow (`auth.getToken` + `auth.getSession`) instead, which
|
|
73
|
+
* works for every self-service API key. See
|
|
74
|
+
* <https://www.last.fm/api/webauth> for the full flow. This method
|
|
75
|
+
* is still callable and will be removed in a future major release.
|
|
76
|
+
*
|
|
77
|
+
* @param {AuthGetMobileSessionRequest} params
|
|
78
|
+
* @param {RequestInit} init
|
|
79
|
+
* @returns {Promise<AuthGetMobileSessionResponse>}
|
|
80
|
+
* https://www.last.fm/api/show/auth.getMobileSession
|
|
81
|
+
*/
|
|
82
|
+
getMobileSession: (params: AuthGetMobileSessionRequest, init?: RequestInit) => Promise<AuthGetMobileSessionResponse>;
|
|
12
83
|
}
|
|
13
84
|
export declare function createAuthService(config: LastFmConfig): AuthService;
|
|
14
85
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EACX,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,WAAW;IAC3B;;;;;;;;;;;;;;;SAeK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAClG;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,gBAAgB,EAAE,CAAC,MAAM,EAAE,2BAA2B,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,4BAA4B,CAAC,CAAA;CACpH;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,CA4CnE"}
|
package/dist/services/auth.js
CHANGED
|
@@ -1,7 +1,42 @@
|
|
|
1
|
-
import { fetcher,
|
|
1
|
+
import { buildAuthUrl, fetcher, LastFmApiError, signedPost } from '../utils.js';
|
|
2
2
|
export function createAuthService(config) {
|
|
3
|
+
const getMobileSessionImpl = (params, init) => {
|
|
4
|
+
// Enforce HTTPS before any network call. The default baseUrl is
|
|
5
|
+
// already https://, so this only fires when a caller has set a
|
|
6
|
+
// custom baseUrl over plain http://. If baseUrl is undefined we
|
|
7
|
+
// trust the default (which is HTTPS) and let signedPost use it.
|
|
8
|
+
if (config.baseUrl !== undefined && !config.baseUrl.toLowerCase().startsWith('https://')) {
|
|
9
|
+
throw new LastFmApiError('`auth.getMobileSession` requires HTTPS. Use the default baseUrl or set `baseUrl` to an https:// URL.', 0);
|
|
10
|
+
}
|
|
11
|
+
return signedPost(config, 'auth.getMobileSession', {
|
|
12
|
+
params: {
|
|
13
|
+
username: params.username,
|
|
14
|
+
password: params.password,
|
|
15
|
+
},
|
|
16
|
+
requiresSession: false,
|
|
17
|
+
init,
|
|
18
|
+
});
|
|
19
|
+
};
|
|
3
20
|
return {
|
|
4
|
-
getSession:
|
|
21
|
+
getSession: (params, init) => fetcher(buildAuthUrl(config, 'auth.getSession', params), init),
|
|
22
|
+
getToken: async (init) => {
|
|
23
|
+
const response = await fetcher(buildAuthUrl(config, 'auth.getToken'), init);
|
|
24
|
+
// Augment with the pre-built user-facing auth URL so consumers
|
|
25
|
+
// don't have to construct `https://www.last.fm/api/auth/?api_key=...&token=...`
|
|
26
|
+
// themselves. The CLI prints it; Scalar renders it in the response.
|
|
27
|
+
// Note: this URL is NOT signed (Last.fm's /api/auth/ endpoint takes
|
|
28
|
+
// api_key + token in clear, no api_sig). It also doesn't honour a
|
|
29
|
+
// custom `baseUrl` because the user-facing auth page is always
|
|
30
|
+
// hosted at last.fm/api/auth/ — only the API baseUrl is configurable.
|
|
31
|
+
const authUrl = new URL('https://www.last.fm/api/auth/');
|
|
32
|
+
authUrl.searchParams.set('api_key', config.apiKey);
|
|
33
|
+
authUrl.searchParams.set('token', response.token);
|
|
34
|
+
return {
|
|
35
|
+
...response,
|
|
36
|
+
authUrl: authUrl.toString(),
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
getMobileSession: getMobileSessionImpl,
|
|
5
40
|
};
|
|
6
41
|
}
|
|
7
42
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA2F/E,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACrD,MAAM,oBAAoB,GAAG,CAAC,MAAmC,EAAE,IAAkB,EAAE,EAAE;QACxF,gEAAgE;QAChE,+DAA+D;QAC/D,gEAAgE;QAChE,gEAAgE;QAChE,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1F,MAAM,IAAI,cAAc,CACvB,sGAAsG,EACtG,CAAC,CACD,CAAA;QACF,CAAC;QACD,OAAO,UAAU,CAA+B,MAAM,EAAE,uBAAuB,EAAE;YAChF,MAAM,EAAE;gBACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aACzB;YACD,eAAe,EAAE,KAAK;YACtB,IAAI;SACJ,CAAC,CAAA;IACH,CAAC,CAAA;IAED,OAAO;QACN,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC5B,OAAO,CAAyB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACvF,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACxB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAuB,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAA;YACjG,+DAA+D;YAC/D,gFAAgF;YAChF,oEAAoE;YACpE,oEAAoE;YACpE,kEAAkE;YAClE,+DAA+D;YAC/D,sEAAsE;YACtE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,+BAA+B,CAAC,CAAA;YACxD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YAClD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;YACjD,OAAO;gBACN,GAAG,QAAQ;gBACX,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;aAC3B,CAAA;QACF,CAAC;QACD,gBAAgB,EAAE,oBAAoB;KACtC,CAAA;AACF,CAAC"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
import { z } from
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
export declare const authGetSessionRequestSchema: z.ZodObject<{
|
|
3
3
|
token: z.ZodString;
|
|
4
4
|
}, z.core.$strip>;
|
|
5
|
+
export declare const authGetMobileSessionRequestSchema: z.ZodObject<{
|
|
6
|
+
username: z.ZodString;
|
|
7
|
+
password: z.ZodString;
|
|
8
|
+
}, z.core.$strip>;
|
|
5
9
|
export declare const sessionSchema: z.ZodObject<{
|
|
6
10
|
name: z.ZodString;
|
|
7
11
|
key: z.ZodString;
|
|
8
12
|
subscriber: z.ZodNumber;
|
|
9
13
|
}, z.core.$strip>;
|
|
14
|
+
export declare const tokenSchema: z.ZodObject<{
|
|
15
|
+
token: z.ZodString;
|
|
16
|
+
}, z.core.$strip>;
|
|
10
17
|
export declare const authGetSessionResponseSchema: z.ZodObject<{
|
|
11
18
|
session: z.ZodObject<{
|
|
12
19
|
name: z.ZodString;
|
|
@@ -14,7 +21,22 @@ export declare const authGetSessionResponseSchema: z.ZodObject<{
|
|
|
14
21
|
subscriber: z.ZodNumber;
|
|
15
22
|
}, z.core.$strip>;
|
|
16
23
|
}, z.core.$strip>;
|
|
24
|
+
export declare const authGetTokenResponseSchema: z.ZodObject<{
|
|
25
|
+
token: z.ZodString;
|
|
26
|
+
authUrl: z.ZodOptional<z.ZodString>;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
export declare const authGetMobileSessionResponseSchema: z.ZodObject<{
|
|
29
|
+
session: z.ZodObject<{
|
|
30
|
+
name: z.ZodString;
|
|
31
|
+
key: z.ZodString;
|
|
32
|
+
subscriber: z.ZodNumber;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
}, z.core.$strip>;
|
|
17
35
|
export type AuthGetSessionRequest = z.infer<typeof authGetSessionRequestSchema>;
|
|
36
|
+
export type AuthGetMobileSessionRequest = z.infer<typeof authGetMobileSessionRequestSchema>;
|
|
18
37
|
export type Session = z.infer<typeof sessionSchema>;
|
|
38
|
+
export type Token = z.infer<typeof tokenSchema>;
|
|
19
39
|
export type AuthGetSessionResponse = z.infer<typeof authGetSessionResponseSchema>;
|
|
40
|
+
export type AuthGetTokenResponse = z.infer<typeof authGetTokenResponseSchema>;
|
|
41
|
+
export type AuthGetMobileSessionResponse = z.infer<typeof authGetMobileSessionResponseSchema>;
|
|
20
42
|
//# sourceMappingURL=auth.schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.schemas.d.ts","sourceRoot":"","sources":["../../src/services/auth.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"auth.schemas.d.ts","sourceRoot":"","sources":["../../src/services/auth.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,2BAA2B;;iBAEtC,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;iBAG5C,CAAA;AAGF,eAAO,MAAM,aAAa;;;;iBAIxB,CAAA;AAEF,eAAO,MAAM,WAAW;;iBAEtB,CAAA;AAGF,eAAO,MAAM,4BAA4B;;;;;;iBAEvC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;iBASrC,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;iBAE7C,CAAA;AAGF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAC3F,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAC/C,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AACjF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { z } from
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
// Request schemas
|
|
3
3
|
export const authGetSessionRequestSchema = z.object({
|
|
4
|
-
token: z.string()
|
|
4
|
+
token: z.string(),
|
|
5
|
+
});
|
|
6
|
+
export const authGetMobileSessionRequestSchema = z.object({
|
|
7
|
+
username: z.string(),
|
|
8
|
+
password: z.string(),
|
|
5
9
|
});
|
|
6
10
|
// Entity schemas
|
|
7
11
|
export const sessionSchema = z.object({
|
|
@@ -9,8 +13,22 @@ export const sessionSchema = z.object({
|
|
|
9
13
|
key: z.string(),
|
|
10
14
|
subscriber: z.number(),
|
|
11
15
|
});
|
|
16
|
+
export const tokenSchema = z.object({
|
|
17
|
+
token: z.string(),
|
|
18
|
+
});
|
|
12
19
|
// Response schemas
|
|
13
20
|
export const authGetSessionResponseSchema = z.object({
|
|
14
21
|
session: sessionSchema,
|
|
15
22
|
});
|
|
23
|
+
export const authGetTokenResponseSchema = z.object({
|
|
24
|
+
token: z.string(),
|
|
25
|
+
authUrl: z
|
|
26
|
+
.string()
|
|
27
|
+
.url()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Pre-built Last.fm auth URL to open in a browser. Equivalent to `https://www.last.fm/api/auth/?api_key=<KEY>&token=<token>`. Open it, log in if prompted, click "Allow access", then pass the same token to `auth.getSession`.'),
|
|
30
|
+
});
|
|
31
|
+
export const authGetMobileSessionResponseSchema = z.object({
|
|
32
|
+
session: sessionSchema,
|
|
33
|
+
});
|
|
16
34
|
//# sourceMappingURL=auth.schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.schemas.js","sourceRoot":"","sources":["../../src/services/auth.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"auth.schemas.js","sourceRoot":"","sources":["../../src/services/auth.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,kBAAkB;AAClB,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAA;AAEF,iBAAiB;AACjB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAA;AAEF,mBAAmB;AACnB,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,OAAO,EAAE,aAAa;CACtB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,CACR,+NAA+N,CAC/N;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1D,OAAO,EAAE,aAAa;CACtB,CAAC,CAAA"}
|
package/dist/services/chart.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ChartGetTopArtistsRequest, ChartGetTopArtistsResponse, ChartGetTopTagsRequest, ChartGetTopTagsResponse, ChartGetTopTracksRequest, ChartGetTopTracksResponse } from './chart.schemas.js';
|
|
2
1
|
import type { LastFmConfig } from '../config.js';
|
|
2
|
+
import type { ChartGetTopArtistsRequest, ChartGetTopArtistsResponse, ChartGetTopTagsRequest, ChartGetTopTagsResponse, ChartGetTopTracksRequest, ChartGetTopTracksResponse } from './chart.schemas.js';
|
|
3
3
|
export interface ChartService {
|
|
4
4
|
/**
|
|
5
5
|
* Get the top artists chart
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/services/chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/services/chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAGhD,OAAO,KAAK,EACX,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,WAAW,YAAY;IAC5B;;;;;;SAMK;IACL,aAAa,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC7G;;;;;;SAMK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACpG;;;;;;SAMK;IACL,YAAY,EAAE,CAAC,MAAM,EAAE,wBAAwB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAA;CAC1G;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAQrE"}
|
package/dist/services/chart.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { buildUrl, fetcher } from '../utils.js';
|
|
2
2
|
export function createChartService(config) {
|
|
3
3
|
return {
|
|
4
4
|
getTopArtists: (params, init) => fetcher(buildUrl(config, 'chart.getTopArtists', params), init),
|
|
5
5
|
getTopTags: (params, init) => fetcher(buildUrl(config, 'chart.getTopTags', params), init),
|
|
6
|
-
getTopTracks: (params, init) => fetcher(buildUrl(config, 'chart.getTopTracks', params), init)
|
|
6
|
+
getTopTracks: (params, init) => fetcher(buildUrl(config, 'chart.getTopTracks', params), init),
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=chart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/services/chart.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/services/chart.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAqC/C,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACtD,OAAO;QACN,aAAa,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC/B,OAAO,CAA6B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAC3F,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAA0B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAClH,YAAY,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC9B,OAAO,CAA4B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;KACzF,CAAA;AACF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { z } from
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
export declare const chartGetTopArtistsRequestSchema: z.ZodObject<{
|
|
3
3
|
limit: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
4
4
|
page: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
@@ -12,11 +12,11 @@ export declare const chartGetTopArtistsResponseSchema: z.ZodObject<{
|
|
|
12
12
|
listeners: z.ZodString;
|
|
13
13
|
url: z.ZodString;
|
|
14
14
|
image: z.ZodArray<z.ZodObject<{
|
|
15
|
-
|
|
15
|
+
'#text': z.ZodString;
|
|
16
16
|
size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
|
|
17
17
|
}, z.core.$strip>>;
|
|
18
18
|
}, z.core.$strip>>;
|
|
19
|
-
|
|
19
|
+
'@attr': z.ZodObject<{
|
|
20
20
|
page: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
21
21
|
perPage: z.ZodString;
|
|
22
22
|
totalPages: z.ZodString;
|
|
@@ -36,7 +36,7 @@ export declare const chartGetTopTagsResponseSchema: z.ZodObject<{
|
|
|
36
36
|
reach: z.ZodNumber;
|
|
37
37
|
taggings: z.ZodString;
|
|
38
38
|
}, z.core.$strip>>;
|
|
39
|
-
|
|
39
|
+
'@attr': z.ZodObject<{
|
|
40
40
|
page: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
41
41
|
perPage: z.ZodString;
|
|
42
42
|
totalPages: z.ZodString;
|
|
@@ -63,11 +63,11 @@ export declare const chartGetTopTracksResponseSchema: z.ZodObject<{
|
|
|
63
63
|
url: z.ZodString;
|
|
64
64
|
}, z.core.$strip>;
|
|
65
65
|
image: z.ZodArray<z.ZodObject<{
|
|
66
|
-
|
|
66
|
+
'#text': z.ZodString;
|
|
67
67
|
size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
|
|
68
68
|
}, z.core.$strip>>;
|
|
69
69
|
}, z.core.$strip>>;
|
|
70
|
-
|
|
70
|
+
'@attr': z.ZodObject<{
|
|
71
71
|
page: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
72
72
|
perPage: z.ZodString;
|
|
73
73
|
totalPages: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.schemas.d.ts","sourceRoot":"","sources":["../../src/services/chart.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"chart.schemas.d.ts","sourceRoot":"","sources":["../../src/services/chart.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAmBvB,eAAO,MAAM,+BAA+B;;;iBAG1C,CAAA;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;iBAmB3C,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;iBAiBxC,CAAA;AAEF,eAAO,MAAM,8BAA8B;;;iBAGzC,CAAA;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyB1C,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AACvF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAA;AACzF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AACjF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACnF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AACrF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { z } from
|
|
2
|
-
import { artistNameSchema, durationSchema, imageSchema, itemsPerPageSchema, limitSchema, listenersSchema, mbidSchema, pageSchema, playcountSchema, reachSchema, tagNameSchema, totalPagesSchema, totalSchema, trackNameSchema, urlSchema } from
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { artistNameSchema, durationSchema, imageSchema, itemsPerPageSchema, limitSchema, listenersSchema, mbidSchema, pageSchema, playcountSchema, reachSchema, tagNameSchema, totalPagesSchema, totalSchema, trackNameSchema, urlSchema, } from './schemas/index.js';
|
|
3
3
|
export const chartGetTopArtistsRequestSchema = z.object({
|
|
4
4
|
limit: limitSchema.optional(),
|
|
5
|
-
page: pageSchema.optional()
|
|
5
|
+
page: pageSchema.optional(),
|
|
6
6
|
});
|
|
7
7
|
export const chartGetTopArtistsResponseSchema = z.object({
|
|
8
8
|
artists: z.object({
|
|
@@ -12,19 +12,19 @@ export const chartGetTopArtistsResponseSchema = z.object({
|
|
|
12
12
|
mbid: mbidSchema,
|
|
13
13
|
listeners: listenersSchema,
|
|
14
14
|
url: urlSchema,
|
|
15
|
-
image: z.array(imageSchema)
|
|
15
|
+
image: z.array(imageSchema),
|
|
16
16
|
})),
|
|
17
|
-
|
|
17
|
+
'@attr': z.object({
|
|
18
18
|
page: pageSchema,
|
|
19
19
|
perPage: itemsPerPageSchema,
|
|
20
20
|
totalPages: totalPagesSchema,
|
|
21
|
-
total: totalSchema
|
|
22
|
-
})
|
|
23
|
-
})
|
|
21
|
+
total: totalSchema,
|
|
22
|
+
}),
|
|
23
|
+
}),
|
|
24
24
|
});
|
|
25
25
|
export const chartGetTopTagsRequestSchema = z.object({
|
|
26
26
|
limit: limitSchema.optional(),
|
|
27
|
-
page: pageSchema.optional()
|
|
27
|
+
page: pageSchema.optional(),
|
|
28
28
|
});
|
|
29
29
|
export const chartGetTopTagsResponseSchema = z.object({
|
|
30
30
|
tags: z.object({
|
|
@@ -32,19 +32,19 @@ export const chartGetTopTagsResponseSchema = z.object({
|
|
|
32
32
|
name: tagNameSchema,
|
|
33
33
|
url: urlSchema,
|
|
34
34
|
reach: reachSchema,
|
|
35
|
-
taggings: z.string()
|
|
35
|
+
taggings: z.string(),
|
|
36
36
|
})),
|
|
37
|
-
|
|
37
|
+
'@attr': z.object({
|
|
38
38
|
page: pageSchema,
|
|
39
39
|
perPage: itemsPerPageSchema,
|
|
40
40
|
totalPages: totalPagesSchema,
|
|
41
|
-
total: totalSchema
|
|
42
|
-
})
|
|
43
|
-
})
|
|
41
|
+
total: totalSchema,
|
|
42
|
+
}),
|
|
43
|
+
}),
|
|
44
44
|
});
|
|
45
45
|
export const chartGetTopTracksRequestSchema = z.object({
|
|
46
46
|
limit: limitSchema.optional(),
|
|
47
|
-
page: pageSchema.optional()
|
|
47
|
+
page: pageSchema.optional(),
|
|
48
48
|
});
|
|
49
49
|
export const chartGetTopTracksResponseSchema = z.object({
|
|
50
50
|
tracks: z.object({
|
|
@@ -58,16 +58,16 @@ export const chartGetTopTracksResponseSchema = z.object({
|
|
|
58
58
|
artist: z.object({
|
|
59
59
|
name: artistNameSchema,
|
|
60
60
|
mbid: mbidSchema,
|
|
61
|
-
url: urlSchema
|
|
61
|
+
url: urlSchema,
|
|
62
62
|
}),
|
|
63
|
-
image: z.array(imageSchema)
|
|
63
|
+
image: z.array(imageSchema),
|
|
64
64
|
})),
|
|
65
|
-
|
|
65
|
+
'@attr': z.object({
|
|
66
66
|
page: pageSchema,
|
|
67
67
|
perPage: itemsPerPageSchema,
|
|
68
68
|
totalPages: totalPagesSchema,
|
|
69
|
-
total: totalSchema
|
|
70
|
-
})
|
|
71
|
-
})
|
|
69
|
+
total: totalSchema,
|
|
70
|
+
}),
|
|
71
|
+
}),
|
|
72
72
|
});
|
|
73
73
|
//# sourceMappingURL=chart.schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.schemas.js","sourceRoot":"","sources":["../../src/services/chart.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"chart.schemas.js","sourceRoot":"","sources":["../../src/services/chart.schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/services/geo.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { GeoGetTopArtistsRequest, GeoGetTopArtistsResponse, GeoGetTopTracksRequest, GeoGetTopTracksResponse } from './geo.schemas.js';
|
|
2
1
|
import type { LastFmConfig } from '../config.js';
|
|
2
|
+
import type { GeoGetTopArtistsRequest, GeoGetTopArtistsResponse, GeoGetTopTracksRequest, GeoGetTopTracksResponse } from './geo.schemas.js';
|
|
3
3
|
export interface GeoService {
|
|
4
4
|
/**
|
|
5
5
|
* Get the most popular artists on Last.fm by country.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../../src/services/geo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../../src/services/geo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EACX,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,WAAW,UAAU;IAC1B;;;;;;SAMK;IACL,aAAa,EAAE,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACzG;;;;;;SAMK;IACL,YAAY,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;CACtG;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAOjE"}
|
package/dist/services/geo.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { buildUrl, fetcher } from '../utils.js';
|
|
2
2
|
export function createGeoService(config) {
|
|
3
3
|
return {
|
|
4
4
|
getTopArtists: (params, init) => fetcher(buildUrl(config, 'geo.getTopArtists', params), init),
|
|
5
|
-
getTopTracks: (params, init) => fetcher(buildUrl(config, 'geo.getTopTracks', params), init)
|
|
5
|
+
getTopTracks: (params, init) => fetcher(buildUrl(config, 'geo.getTopTracks', params), init),
|
|
6
6
|
};
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=geo.js.map
|
package/dist/services/geo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo.js","sourceRoot":"","sources":["../../src/services/geo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"geo.js","sourceRoot":"","sources":["../../src/services/geo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AA2B/C,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACpD,OAAO;QACN,aAAa,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC/B,OAAO,CAA2B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACvF,YAAY,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC9B,OAAO,CAA0B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;KACrF,CAAA;AACF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { z } from
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
export declare const geoGetTopArtistsRequestSchema: z.ZodObject<{
|
|
3
3
|
country: z.ZodString;
|
|
4
4
|
limit: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
@@ -12,11 +12,11 @@ export declare const geoGetTopArtistsResponseSchema: z.ZodObject<{
|
|
|
12
12
|
mbid: z.ZodString;
|
|
13
13
|
url: z.ZodString;
|
|
14
14
|
image: z.ZodArray<z.ZodObject<{
|
|
15
|
-
|
|
15
|
+
'#text': z.ZodString;
|
|
16
16
|
size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
|
|
17
17
|
}, z.core.$strip>>;
|
|
18
18
|
}, z.core.$strip>>;
|
|
19
|
-
|
|
19
|
+
'@attr': z.ZodObject<{
|
|
20
20
|
country: z.ZodString;
|
|
21
21
|
page: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
22
22
|
perPage: z.ZodString;
|
|
@@ -45,14 +45,14 @@ export declare const geoGetTopTracksResponseSchema: z.ZodObject<{
|
|
|
45
45
|
url: z.ZodString;
|
|
46
46
|
}, z.core.$strip>;
|
|
47
47
|
image: z.ZodArray<z.ZodObject<{
|
|
48
|
-
|
|
48
|
+
'#text': z.ZodString;
|
|
49
49
|
size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
|
|
50
50
|
}, z.core.$strip>>;
|
|
51
|
-
|
|
51
|
+
'@attr': z.ZodObject<{
|
|
52
52
|
rank: z.ZodString;
|
|
53
53
|
}, z.core.$strip>;
|
|
54
54
|
}, z.core.$strip>>;
|
|
55
|
-
|
|
55
|
+
'@attr': z.ZodObject<{
|
|
56
56
|
country: z.ZodString;
|
|
57
57
|
page: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
58
58
|
perPage: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo.schemas.d.ts","sourceRoot":"","sources":["../../src/services/geo.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"geo.schemas.d.ts","sourceRoot":"","sources":["../../src/services/geo.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAmBvB,eAAO,MAAM,6BAA6B;;;;iBAIxC,CAAA;AAEF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;iBAmBzC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;iBAKvC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4BxC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACnF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AACrF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AACjF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { z } from
|
|
2
|
-
import { artistNameSchema, countrySchema, durationSchema, imageSchema, itemsPerPageSchema, limitSchema, listenersSchema, locSchema, mbidSchema, pageSchema, rankSchema, totalPagesSchema, totalSchema, trackNameSchema, urlSchema } from
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { artistNameSchema, countrySchema, durationSchema, imageSchema, itemsPerPageSchema, limitSchema, listenersSchema, locSchema, mbidSchema, pageSchema, rankSchema, totalPagesSchema, totalSchema, trackNameSchema, urlSchema, } from './schemas/index.js';
|
|
3
3
|
export const geoGetTopArtistsRequestSchema = z.object({
|
|
4
4
|
country: countrySchema,
|
|
5
5
|
limit: limitSchema.optional(),
|
|
6
|
-
page: pageSchema.optional()
|
|
6
|
+
page: pageSchema.optional(),
|
|
7
7
|
});
|
|
8
8
|
export const geoGetTopArtistsResponseSchema = z.object({
|
|
9
9
|
topartists: z.object({
|
|
@@ -12,22 +12,22 @@ export const geoGetTopArtistsResponseSchema = z.object({
|
|
|
12
12
|
listeners: listenersSchema,
|
|
13
13
|
mbid: mbidSchema,
|
|
14
14
|
url: urlSchema,
|
|
15
|
-
image: z.array(imageSchema)
|
|
15
|
+
image: z.array(imageSchema),
|
|
16
16
|
})),
|
|
17
|
-
|
|
17
|
+
'@attr': z.object({
|
|
18
18
|
country: countrySchema,
|
|
19
19
|
page: pageSchema,
|
|
20
20
|
perPage: itemsPerPageSchema,
|
|
21
21
|
totalPages: totalPagesSchema,
|
|
22
|
-
total: totalSchema
|
|
23
|
-
})
|
|
24
|
-
})
|
|
22
|
+
total: totalSchema,
|
|
23
|
+
}),
|
|
24
|
+
}),
|
|
25
25
|
});
|
|
26
26
|
export const geoGetTopTracksRequestSchema = z.object({
|
|
27
27
|
country: countrySchema,
|
|
28
28
|
location: locSchema.optional(),
|
|
29
29
|
limit: limitSchema.optional(),
|
|
30
|
-
page: pageSchema.optional()
|
|
30
|
+
page: pageSchema.optional(),
|
|
31
31
|
});
|
|
32
32
|
export const geoGetTopTracksResponseSchema = z.object({
|
|
33
33
|
tracks: z.object({
|
|
@@ -40,20 +40,20 @@ export const geoGetTopTracksResponseSchema = z.object({
|
|
|
40
40
|
artist: z.object({
|
|
41
41
|
name: artistNameSchema,
|
|
42
42
|
mbid: mbidSchema,
|
|
43
|
-
url: urlSchema
|
|
43
|
+
url: urlSchema,
|
|
44
44
|
}),
|
|
45
45
|
image: z.array(imageSchema),
|
|
46
|
-
|
|
47
|
-
rank: rankSchema
|
|
48
|
-
})
|
|
46
|
+
'@attr': z.object({
|
|
47
|
+
rank: rankSchema,
|
|
48
|
+
}),
|
|
49
49
|
})),
|
|
50
|
-
|
|
50
|
+
'@attr': z.object({
|
|
51
51
|
country: countrySchema,
|
|
52
52
|
page: pageSchema,
|
|
53
53
|
perPage: itemsPerPageSchema,
|
|
54
54
|
totalPages: totalPagesSchema,
|
|
55
|
-
total: totalSchema
|
|
56
|
-
})
|
|
57
|
-
})
|
|
55
|
+
total: totalSchema,
|
|
56
|
+
}),
|
|
57
|
+
}),
|
|
58
58
|
});
|
|
59
59
|
//# sourceMappingURL=geo.schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo.schemas.js","sourceRoot":"","sources":["../../src/services/geo.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"geo.schemas.js","sourceRoot":"","sources":["../../src/services/geo.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,SAAS,GACT,MAAM,oBAAoB,CAAA;AAE3B,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,eAAe;YAC1B,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;SAC3B,CAAC,CACF;QACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,kBAAkB;YAC3B,UAAU,EAAE,gBAAgB;YAC5B,KAAK,EAAE,WAAW;SAClB,CAAC;KACF,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,KAAK,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,cAAc;YACxB,SAAS,EAAE,eAAe;YAC1B,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;gBAChB,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE,SAAS;aACd,CAAC;YACF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;YAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;gBACjB,IAAI,EAAE,UAAU;aAChB,CAAC;SACF,CAAC,CACF;QACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,kBAAkB;YAC3B,UAAU,EAAE,gBAAgB;YAC5B,KAAK,EAAE,WAAW;SAClB,CAAC;KACF,CAAC;CACF,CAAC,CAAA"}
|