@ansango/lastfm-api 3.2.0 → 3.3.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 +36 -0
- package/README.md +4 -19
- package/dist/services/album.d.ts +2 -4
- package/dist/services/album.d.ts.map +1 -1
- package/dist/services/album.js.map +1 -1
- package/dist/services/artist.d.ts +2 -4
- package/dist/services/artist.d.ts.map +1 -1
- package/dist/services/artist.js.map +1 -1
- package/dist/services/auth.d.ts +1 -38
- package/dist/services/auth.d.ts.map +1 -1
- package/dist/services/auth.js +1 -19
- package/dist/services/auth.js.map +1 -1
- package/dist/services/auth.schemas.d.ts +0 -13
- package/dist/services/auth.schemas.d.ts.map +1 -1
- package/dist/services/auth.schemas.js +0 -7
- package/dist/services/auth.schemas.js.map +1 -1
- package/dist/services/track.d.ts +6 -12
- package/dist/services/track.d.ts.map +1 -1
- package/dist/services/track.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
> [ansango/lastfm-api](https://github.com/ansango/lastfm-api). Entries below preserve the
|
|
10
10
|
> historical package and repository names used by their original releases.
|
|
11
11
|
|
|
12
|
+
## [3.3.0] - 2026-08-28
|
|
13
|
+
|
|
14
|
+
### ✨ Features
|
|
15
|
+
|
|
16
|
+
- `auth.getToken()` now returns a pre-built `authUrl` so consumers don't have to
|
|
17
|
+
construct the browser-flow URL themselves. The CLI prints it; Scalar renders it
|
|
18
|
+
in the response. (#115) ([c69cd53](https://github.com/ansango/lastfm-api/commit/c69cd53))
|
|
19
|
+
|
|
20
|
+
### ⚠️ Breaking Changes
|
|
21
|
+
|
|
22
|
+
- `auth.getMobileSession` has been **removed**. The method was deprecated in 3.2.0
|
|
23
|
+
(PR #106) with the warning that it would be removed in a future major release.
|
|
24
|
+
Last.fm restricts this endpoint to mobile-classified API keys, which are not
|
|
25
|
+
exposed through the public self-service create form. Every consumer can use the
|
|
26
|
+
browser flow (`auth.getToken` + `auth.getSession`) instead. (#117) ([99c4466](https://github.com/ansango/lastfm-api/commit/99c4466))
|
|
27
|
+
|
|
28
|
+
**Migration:**
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
// 3.2.x — no longer compiles
|
|
32
|
+
const { session } = await client.auth.getMobileSession({
|
|
33
|
+
username: "...",
|
|
34
|
+
password: "...",
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// 3.3.0 — use the browser flow
|
|
38
|
+
const { token, authUrl } = await client.auth.getToken();
|
|
39
|
+
// open authUrl in a browser, authorize, copy token from URL bar
|
|
40
|
+
const { session } = await client.auth.getSession({ token });
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The Scalar tool surface no longer exposes `POST /auth/get-mobile-session`. The
|
|
44
|
+
`x-lastfm-sk` header description and the `AUTH_TAG_DESCRIPTION` were rewritten
|
|
45
|
+
to point at the browser flow + `authUrl`. The 57-method surface is now 56.
|
|
46
|
+
|
|
47
|
+
|
|
12
48
|
## [3.2.0] - 2026-08-28
|
|
13
49
|
|
|
14
50
|
### ✨ Features
|
package/README.md
CHANGED
|
@@ -131,11 +131,6 @@ const libraryArtists = await client.library.getArtists({ user: 'ansango' });
|
|
|
131
131
|
const session = await client.auth.getSession({ token: 'AUTH_TOKEN' });
|
|
132
132
|
// Request an auth token (signed GET, no sk)
|
|
133
133
|
const { token } = await client.auth.getToken();
|
|
134
|
-
// Username/password login (signed POST, no sk) — server-side / trusted only
|
|
135
|
-
const { session: mobileSession } = await client.auth.getMobileSession({
|
|
136
|
-
username: 'someone',
|
|
137
|
-
password: process.env.LASTFM_PASSWORD!
|
|
138
|
-
});
|
|
139
134
|
|
|
140
135
|
// Now-playing and tag/love mutations (all require an authenticated session)
|
|
141
136
|
await client.track.updateNowPlaying({
|
|
@@ -310,13 +305,13 @@ const client = new LastFmClient({
|
|
|
310
305
|
|
|
311
306
|
Methods that mutate user state require an authenticated session. The full list of write methods is:
|
|
312
307
|
|
|
313
|
-
- `auth.getSession`, `auth.getToken
|
|
308
|
+
- `auth.getSession`, `auth.getToken`
|
|
314
309
|
- `track.scrobble`, `track.updateNowPlaying`
|
|
315
310
|
- `track.addTags`, `track.removeTag`, `track.love`, `track.unlove`
|
|
316
311
|
- `album.addTags`, `album.removeTag`
|
|
317
312
|
- `artist.addTags`, `artist.removeTag`
|
|
318
313
|
|
|
319
|
-
|
|
314
|
+
The browser flow below works for every self-service API key — there is no mobile flow in this package anymore.
|
|
320
315
|
|
|
321
316
|
### Browser flow (recommended — works for all self-service keys)
|
|
322
317
|
|
|
@@ -357,17 +352,7 @@ Before the browser flow works end-to-end, set a callback URL on your API account
|
|
|
357
352
|
|
|
358
353
|
If you skip this step, the redirect after **Allow access** lands on a Last.fm error page instead of your URL, and the token is lost. You have to call `auth.getToken` again and re-authorize.
|
|
359
354
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
`auth.getMobileSession` exchanges a username + password for a session key in a single call, but it only works for API keys classified as **mobile / standalone** in the API account settings. Last.fm's self-service create form does not expose this classification; every new key is a web key by default. If you registered your key as a web app, this method will fail with `error: 4 — Authentication Failed`. To get a mobile-class key, you need to email `partners@last.fm` and ask for a reclassification.
|
|
363
|
-
|
|
364
|
-
```typescript
|
|
365
|
-
// Only works for mobile-class API keys.
|
|
366
|
-
const { session } = await client.auth.getMobileSession({
|
|
367
|
-
username: process.env.LASTFM_USERNAME!,
|
|
368
|
-
password: process.env.LASTFM_PASSWORD!,
|
|
369
|
-
});
|
|
370
|
-
```
|
|
355
|
+
> **Note:** `auth.getMobileSession` was removed in v4.0.0. Last.fm restricts that endpoint to mobile-classified API keys, which are not exposed through the public self-service create form; the browser flow above works for every API key Last.fm issues today.
|
|
371
356
|
|
|
372
357
|
### Passing the session key to write methods
|
|
373
358
|
|
|
@@ -475,7 +460,7 @@ The package covers all 57 canonical Last.fm API methods across 9 namespaces. See
|
|
|
475
460
|
- **ChartService**: 3 methods — `getTopArtists`, `getTopTags`, `getTopTracks`
|
|
476
461
|
- **GeoService**: 2 methods — `getTopArtists`, `getTopTracks`
|
|
477
462
|
- **LibraryService**: 1 method — `getArtists`
|
|
478
|
-
- **AuthService**:
|
|
463
|
+
- **AuthService**: 2 methods — `getSession`, `getToken` (removed `getMobileSession` in v4.0.0)
|
|
479
464
|
|
|
480
465
|
¹ Requires an authenticated session.
|
|
481
466
|
|
package/dist/services/album.d.ts
CHANGED
|
@@ -47,8 +47,7 @@ export interface AlbumService {
|
|
|
47
47
|
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
48
48
|
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
49
49
|
* the client (preferred for long-lived clients). Obtain a session key
|
|
50
|
-
* via `auth.getToken` + the browser-based `auth.getSession` flow
|
|
51
|
-
* via `auth.getMobileSession` (mobile-class API keys only).
|
|
50
|
+
* via `auth.getToken` + the browser-based `auth.getSession` flow.
|
|
52
51
|
*
|
|
53
52
|
* @param {AlbumAddTagsRequest} params
|
|
54
53
|
* @param {RequestInit} init
|
|
@@ -66,8 +65,7 @@ export interface AlbumService {
|
|
|
66
65
|
*
|
|
67
66
|
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
68
67
|
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
69
|
-
* the client. Obtain a session key via `auth.getToken` +
|
|
70
|
-
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
68
|
+
* the client. Obtain a session key via `auth.getToken` + `auth.getSession`.
|
|
71
69
|
*
|
|
72
70
|
* @param {AlbumRemoveTagRequest} params
|
|
73
71
|
* @param {RequestInit} init
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"album.d.ts","sourceRoot":"","sources":["../../src/services/album.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,WAAW,YAAY;IAC5B;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC3F;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC3F;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACpG;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACxF
|
|
1
|
+
{"version":3,"file":"album.d.ts","sourceRoot":"","sources":["../../src/services/album.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,WAAW,YAAY;IAC5B;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC3F;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC3F;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACpG;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACxF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3E;;;;;;;;;;;;;;;;OAgBG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/E;AAiBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAmCrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"album.js","sourceRoot":"","sources":["../../src/services/album.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"album.js","sourceRoot":"","sources":["../../src/services/album.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAyF3E,SAAS,+BAA+B,CACvC,MAAoB,EACpB,SAA6B,EAC7B,MAA+B;IAE/B,MAAM,EAAE,GAAG,SAAS,IAAI,MAAM,CAAC,UAAU,CAAA;IACzC,IAAI,CAAC,EAAE,EAAE,CAAC;QACT,MAAM,IAAI,cAAc,CACvB,+CAA+C,MAAM,gFAAgF,EACrI,CAAC,CACD,CAAA;IACF,CAAC;IACD,OAAO,EAAE,CAAA;AACV,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACtD,MAAM,WAAW,GAAG,CAAC,MAA2B,EAAE,IAAkB,EAAE,EAAE;QACvE,MAAM,EAAE,GAAG,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QACxE,OAAO,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE;YAC1C,MAAM,EAAE;gBACP,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC3B,EAAE;aACF;YACD,IAAI;SACJ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,CAAC,MAA6B,EAAE,IAAkB,EAAE,EAAE;QAC3E,MAAM,EAAE,GAAG,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;QAC1E,OAAO,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE;YAC5C,MAAM,EAAE;gBACP,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,EAAE;aACF;YACD,IAAI;SACJ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,OAAO;QACN,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAuB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACzG,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAuB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACzG,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAA0B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAClH,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACtG,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,aAAa;KACxB,CAAA;AACF,CAAC"}
|
|
@@ -80,8 +80,7 @@ export interface ArtistService {
|
|
|
80
80
|
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
81
81
|
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
82
82
|
* the client (preferred for long-lived clients). Obtain a session key
|
|
83
|
-
* via `auth.getToken` + the browser-based `auth.getSession` flow
|
|
84
|
-
* via `auth.getMobileSession` (mobile-class API keys only).
|
|
83
|
+
* via `auth.getToken` + the browser-based `auth.getSession` flow.
|
|
85
84
|
*
|
|
86
85
|
* @param {ArtistAddTagsRequest} params
|
|
87
86
|
* @param {RequestInit} init
|
|
@@ -97,8 +96,7 @@ export interface ArtistService {
|
|
|
97
96
|
*
|
|
98
97
|
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
99
98
|
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
100
|
-
* the client. Obtain a session key via `auth.getToken` +
|
|
101
|
-
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
99
|
+
* the client. Obtain a session key via `auth.getToken` + `auth.getSession`.
|
|
102
100
|
*
|
|
103
101
|
* @param {ArtistRemoveTagRequest} params
|
|
104
102
|
* @param {RequestInit} init
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artist.d.ts","sourceRoot":"","sources":["../../src/services/artist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EACX,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,aAAa;IAC7B;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC7F;;;;;;SAMK;IACL,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC7F;;;;;;SAMK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACtG;;;;;;SAMK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACtG;;;;;;SAMK;IACL,YAAY,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC5G;;;;;;SAMK;IACL,YAAY,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC5G;;;;;;SAMK;IACL,MAAM,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC1F;;;;;;;;OAQG;IACH,aAAa,EAAE,CAAC,MAAM,EAAE,0BAA0B,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAA;IAC/G
|
|
1
|
+
{"version":3,"file":"artist.d.ts","sourceRoot":"","sources":["../../src/services/artist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EACX,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,aAAa;IAC7B;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC7F;;;;;;SAMK;IACL,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC7F;;;;;;SAMK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACtG;;;;;;SAMK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACtG;;;;;;SAMK;IACL,YAAY,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC5G;;;;;;SAMK;IACL,YAAY,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC5G;;;;;;SAMK;IACL,MAAM,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC1F;;;;;;;;OAQG;IACH,aAAa,EAAE,CAAC,MAAM,EAAE,0BAA0B,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAA;IAC/G;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5E;;;;;;;;;;;;;;OAcG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAChF;AAiBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CA0CvE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artist.js","sourceRoot":"","sources":["../../src/services/artist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"artist.js","sourceRoot":"","sources":["../../src/services/artist.ts"],"names":[],"mappings":"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"}
|
package/dist/services/auth.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { LastFmConfig } from '../config.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { 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.
|
|
@@ -43,43 +43,6 @@ export interface AuthService {
|
|
|
43
43
|
* https://www.last.fm/api/show/auth.getToken
|
|
44
44
|
*/
|
|
45
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>;
|
|
83
46
|
}
|
|
84
47
|
export declare function createAuthService(config: LastFmConfig): AuthService;
|
|
85
48
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE5G,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;CAC/D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,CAsBnE"}
|
package/dist/services/auth.js
CHANGED
|
@@ -1,22 +1,5 @@
|
|
|
1
|
-
import { buildAuthUrl, fetcher
|
|
1
|
+
import { buildAuthUrl, fetcher } 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
|
-
};
|
|
20
3
|
return {
|
|
21
4
|
getSession: (params, init) => fetcher(buildAuthUrl(config, 'auth.getSession', params), init),
|
|
22
5
|
getToken: async (init) => {
|
|
@@ -36,7 +19,6 @@ export function createAuthService(config) {
|
|
|
36
19
|
authUrl: authUrl.toString(),
|
|
37
20
|
};
|
|
38
21
|
},
|
|
39
|
-
getMobileSession: getMobileSessionImpl,
|
|
40
22
|
};
|
|
41
23
|
}
|
|
42
24
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAgDnD,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACrD,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;KACD,CAAA;AACF,CAAC"}
|
|
@@ -2,10 +2,6 @@ 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>;
|
|
9
5
|
export declare const sessionSchema: z.ZodObject<{
|
|
10
6
|
name: z.ZodString;
|
|
11
7
|
key: z.ZodString;
|
|
@@ -25,18 +21,9 @@ export declare const authGetTokenResponseSchema: z.ZodObject<{
|
|
|
25
21
|
token: z.ZodString;
|
|
26
22
|
authUrl: z.ZodOptional<z.ZodString>;
|
|
27
23
|
}, 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>;
|
|
35
24
|
export type AuthGetSessionRequest = z.infer<typeof authGetSessionRequestSchema>;
|
|
36
|
-
export type AuthGetMobileSessionRequest = z.infer<typeof authGetMobileSessionRequestSchema>;
|
|
37
25
|
export type Session = z.infer<typeof sessionSchema>;
|
|
38
26
|
export type Token = z.infer<typeof tokenSchema>;
|
|
39
27
|
export type AuthGetSessionResponse = z.infer<typeof authGetSessionResponseSchema>;
|
|
40
28
|
export type AuthGetTokenResponse = z.infer<typeof authGetTokenResponseSchema>;
|
|
41
|
-
export type AuthGetMobileSessionResponse = z.infer<typeof authGetMobileSessionResponseSchema>;
|
|
42
29
|
//# 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,CAAA;AAGvB,eAAO,MAAM,2BAA2B;;iBAEtC,CAAA;
|
|
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;AAGF,eAAO,MAAM,aAAa;;;;iBAIxB,CAAA;AAEF,eAAO,MAAM,WAAW;;iBAEtB,CAAA;AAGF,eAAO,MAAM,4BAA4B;;;;;;iBAEvC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;iBASrC,CAAA;AAGF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,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"}
|
|
@@ -3,10 +3,6 @@ import { z } from 'zod';
|
|
|
3
3
|
export const authGetSessionRequestSchema = z.object({
|
|
4
4
|
token: z.string(),
|
|
5
5
|
});
|
|
6
|
-
export const authGetMobileSessionRequestSchema = z.object({
|
|
7
|
-
username: z.string(),
|
|
8
|
-
password: z.string(),
|
|
9
|
-
});
|
|
10
6
|
// Entity schemas
|
|
11
7
|
export const sessionSchema = z.object({
|
|
12
8
|
name: z.string(),
|
|
@@ -28,7 +24,4 @@ export const authGetTokenResponseSchema = z.object({
|
|
|
28
24
|
.optional()
|
|
29
25
|
.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
26
|
});
|
|
31
|
-
export const authGetMobileSessionResponseSchema = z.object({
|
|
32
|
-
session: sessionSchema,
|
|
33
|
-
});
|
|
34
27
|
//# 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,CAAA;AAEvB,kBAAkB;AAClB,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAA;AAEF,
|
|
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,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"}
|
package/dist/services/track.d.ts
CHANGED
|
@@ -62,8 +62,7 @@ export interface TrackService {
|
|
|
62
62
|
* ad-hoc calls) or set `sessionKey` on the `LastFmConfig` when
|
|
63
63
|
* constructing the client (preferred for long-lived clients). Obtain a
|
|
64
64
|
* session key via `auth.getToken` + the browser-based `auth.getSession`
|
|
65
|
-
* flow (works for self-service API keys)
|
|
66
|
-
* (requires a mobile-class API key — not self-service).
|
|
65
|
+
* flow (works for self-service API keys).
|
|
67
66
|
*
|
|
68
67
|
* @param {TrackScrobbleRequest} params - `artist`, `track`, `timestamp`, and optional `sk` and `album`
|
|
69
68
|
* @param {RequestInit} init
|
|
@@ -104,8 +103,7 @@ export interface TrackService {
|
|
|
104
103
|
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
105
104
|
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
106
105
|
* the client (preferred for long-lived clients). Obtain a session key
|
|
107
|
-
* via `auth.getToken` + the browser-based `auth.getSession` flow
|
|
108
|
-
* via `auth.getMobileSession` (mobile-class API keys only).
|
|
106
|
+
* via `auth.getToken` + the browser-based `auth.getSession` flow.
|
|
109
107
|
*
|
|
110
108
|
* @param {TrackAddTagsRequest} params
|
|
111
109
|
* @param {RequestInit} init
|
|
@@ -121,8 +119,7 @@ export interface TrackService {
|
|
|
121
119
|
*
|
|
122
120
|
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
123
121
|
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
124
|
-
* the client. Obtain a session key via `auth.getToken` +
|
|
125
|
-
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
122
|
+
* the client. Obtain a session key via `auth.getToken` + `auth.getSession`.
|
|
126
123
|
*
|
|
127
124
|
* @param {TrackRemoveTagRequest} params
|
|
128
125
|
* @param {RequestInit} init
|
|
@@ -139,8 +136,7 @@ export interface TrackService {
|
|
|
139
136
|
*
|
|
140
137
|
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
141
138
|
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
142
|
-
* the client. Obtain a session key via `auth.getToken` +
|
|
143
|
-
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
139
|
+
* the client. Obtain a session key via `auth.getToken` + `auth.getSession`.
|
|
144
140
|
*
|
|
145
141
|
* @param {TrackLoveRequest} params
|
|
146
142
|
* @param {RequestInit} init
|
|
@@ -156,8 +152,7 @@ export interface TrackService {
|
|
|
156
152
|
*
|
|
157
153
|
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
158
154
|
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
159
|
-
* the client. Obtain a session key via `auth.getToken` +
|
|
160
|
-
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
155
|
+
* the client. Obtain a session key via `auth.getToken` + `auth.getSession`.
|
|
161
156
|
*
|
|
162
157
|
* @param {TrackUnloveRequest} params
|
|
163
158
|
* @param {RequestInit} init
|
|
@@ -184,8 +179,7 @@ export interface TrackService {
|
|
|
184
179
|
*
|
|
185
180
|
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
186
181
|
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
187
|
-
* the client. Obtain a session key via `auth.getToken` +
|
|
188
|
-
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
182
|
+
* the client. Obtain a session key via `auth.getToken` + `auth.getSession`.
|
|
189
183
|
*
|
|
190
184
|
* @param {TrackUpdateNowPlayingRequest} params
|
|
191
185
|
* @param {RequestInit} init
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EACX,0BAA0B,EAC1B,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAC5B,6BAA6B,EAC7B,MAAM,oBAAoB,CAAA;AAI3B,MAAM,WAAW,YAAY;IAC5B;;;;;;SAMK;IACL,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC3F;;;;;;SAMK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACpG;;;;;;SAMK;IACL,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC3F;;;;;;SAMK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACpG;;;;;;;;;;;OAWG;IACH,aAAa,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC7G;;;;;;SAMK;IACL,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAExF
|
|
1
|
+
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAwB3E,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ export interface SignedRequestOptions {
|
|
|
39
39
|
* Whether this method requires a session key. When true, `sk` is resolved
|
|
40
40
|
* from `params.sk` (request) or `config.sessionKey` and is included in
|
|
41
41
|
* the signature and the body. When false, the transport signs and sends
|
|
42
|
-
* without an `sk` (used by `auth.getToken`
|
|
42
|
+
* without an `sk` (used by `auth.getToken`).
|
|
43
43
|
* @default true
|
|
44
44
|
*/
|
|
45
45
|
requiresSession?: boolean;
|