@zhin.js/plugin-music 1.1.0 → 1.1.3

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.
Files changed (73) hide show
  1. package/README.md +27 -27
  2. package/commands/cookie/delete/{[source].js → [source]/index.js} +4 -4
  3. package/commands/cookie/delete/{[source].ts → [source]/index.ts} +5 -5
  4. package/commands/cookie/get/{[source].js → [source]/index.js} +4 -4
  5. package/commands/cookie/get/{[source].ts → [source]/index.ts} +5 -5
  6. package/commands/cookie/set/{[source].js → [source]/index.js} +4 -4
  7. package/commands/cookie/set/{[source].ts → [source]/index.ts} +5 -5
  8. package/commands/cookie/{status.js → status/index.js} +4 -4
  9. package/commands/cookie/{status.ts → status/index.ts} +5 -5
  10. package/commands/login/{[platform].js → [platform]/index.js} +10 -8
  11. package/commands/login/{[platform].ts → [platform]/index.ts} +10 -12
  12. package/commands//347/202/271/346/255/214/{[keyword].js → [keyword]/index.js} +7 -6
  13. package/commands//347/202/271/346/255/214/{[keyword].ts → [keyword]/index.ts} +8 -7
  14. package/components/{share-music.js → share-music/index.js} +4 -4
  15. package/components/{share-music.ts → share-music/index.ts} +5 -5
  16. package/lib/credential-store.d.ts +10 -7
  17. package/lib/credential-store.d.ts.map +1 -1
  18. package/lib/credential-store.js +44 -70
  19. package/lib/credential-store.js.map +1 -1
  20. package/lib/index.d.ts +5 -4
  21. package/lib/index.d.ts.map +1 -1
  22. package/lib/index.js +5 -4
  23. package/lib/index.js.map +1 -1
  24. package/lib/login/index.d.ts +18 -11
  25. package/lib/login/index.d.ts.map +1 -1
  26. package/lib/login/index.js +103 -79
  27. package/lib/login/index.js.map +1 -1
  28. package/lib/music-lib.d.ts +3 -2
  29. package/lib/music-lib.d.ts.map +1 -1
  30. package/lib/music-lib.js +4 -5
  31. package/lib/music-lib.js.map +1 -1
  32. package/lib/runtime.d.ts +12 -0
  33. package/lib/runtime.d.ts.map +1 -0
  34. package/lib/runtime.js +3 -0
  35. package/lib/runtime.js.map +1 -0
  36. package/lib/session.d.ts +10 -4
  37. package/lib/session.d.ts.map +1 -1
  38. package/lib/session.js +33 -21
  39. package/lib/session.js.map +1 -1
  40. package/lib/sources/index.d.ts +2 -1
  41. package/lib/sources/index.d.ts.map +1 -1
  42. package/lib/sources/index.js +8 -6
  43. package/lib/sources/index.js.map +1 -1
  44. package/lib/sources/kugou.d.ts.map +1 -1
  45. package/lib/sources/kugou.js +16 -1
  46. package/lib/sources/kugou.js.map +1 -1
  47. package/lib/sources/netease.d.ts +3 -0
  48. package/lib/sources/netease.d.ts.map +1 -1
  49. package/lib/sources/netease.js +5 -2
  50. package/lib/sources/netease.js.map +1 -1
  51. package/lib/sources/qq.d.ts +3 -0
  52. package/lib/sources/qq.d.ts.map +1 -1
  53. package/lib/sources/qq.js +6 -3
  54. package/lib/sources/qq.js.map +1 -1
  55. package/middlewares/{music-selection.js → music-selection/index.js} +9 -7
  56. package/middlewares/{music-selection.ts → music-selection/index.ts} +13 -7
  57. package/package.json +16 -11
  58. package/plugin.js +23 -9
  59. package/{agent/skills/music.md → skills/music/SKILL.md} +2 -2
  60. package/{tools/music-search.js → skills/music/tools/music-search/index.js} +4 -3
  61. package/{tools/music-search.ts → skills/music/tools/music-search/index.ts} +11 -5
  62. package/{tools/music-share.js → skills/music/tools/music-share/index.js} +4 -3
  63. package/{tools/music-share.ts → skills/music/tools/music-share/index.ts} +6 -4
  64. package/src/credential-store.ts +43 -87
  65. package/src/index.ts +8 -16
  66. package/src/login/index.ts +111 -92
  67. package/src/music-lib.ts +5 -4
  68. package/src/runtime.ts +17 -0
  69. package/src/session.ts +38 -21
  70. package/src/sources/index.ts +9 -6
  71. package/src/sources/kugou.ts +15 -1
  72. package/src/sources/netease.ts +8 -2
  73. package/src/sources/qq.ts +9 -3
@@ -1,4 +1,3 @@
1
- import { createGenerationStore, } from 'zhin.js';
2
1
  export const MUSIC_CREDENTIALS_TABLE = 'music_credentials';
3
2
  function createMemoryModel() {
4
3
  const rows = [];
@@ -34,78 +33,53 @@ function createMemoryModel() {
34
33
  }),
35
34
  };
36
35
  }
37
- const credentialDbStore = createGenerationStore('music/credential-db');
38
- let _memoryDb = null;
39
- export function provideCredentialDb(context, db) {
40
- return credentialDbStore.provide(context, db);
36
+ export function createInMemoryCredentialDb() {
37
+ const model = createMemoryModel();
38
+ return {
39
+ models: {
40
+ get: (name) => name === MUSIC_CREDENTIALS_TABLE ? model : undefined,
41
+ },
42
+ };
41
43
  }
42
- function getDb() {
43
- const provided = credentialDbStore.tryUse();
44
- if (provided)
45
- return provided;
46
- if (!_memoryDb) {
47
- _memoryDb = {
48
- models: {
49
- get: (name) => name === MUSIC_CREDENTIALS_TABLE ? memoryModel : undefined,
50
- },
51
- };
44
+ export class CredentialStore {
45
+ #db;
46
+ constructor(db) {
47
+ this.#db = db;
52
48
  }
53
- return _memoryDb;
54
- }
55
- const memoryModel = createMemoryModel();
56
- function getModel() {
57
- return getDb().models.get(MUSIC_CREDENTIALS_TABLE) ?? null;
58
- }
59
- export async function getCredential(source, key) {
60
- const model = getModel();
61
- if (!model)
62
- return null;
63
- const rows = await model.select().where({ source, key });
64
- if (rows.length === 0)
65
- return null;
66
- return String(rows[0].value ?? '');
67
- }
68
- export async function setCredential(source, key, value) {
69
- const model = getModel();
70
- if (!model)
71
- return;
72
- const existing = await model.select().where({ source, key });
73
- if (existing.length > 0) {
74
- await model
75
- .update({ value, updated_at: new Date().toISOString() })
76
- .where({ source, key });
49
+ get model() {
50
+ return this.#db.models.get(MUSIC_CREDENTIALS_TABLE) ?? null;
77
51
  }
78
- else {
79
- await model.insert({
80
- source,
81
- key,
82
- value,
83
- updated_at: new Date().toISOString(),
84
- });
52
+ async get(source, key) {
53
+ const rows = await this.model?.select().where({ source, key });
54
+ if (!rows?.length)
55
+ return null;
56
+ return String(rows[0].value ?? '');
57
+ }
58
+ async set(source, key, value) {
59
+ const model = this.model;
60
+ if (!model)
61
+ return;
62
+ const existing = await model.select().where({ source, key });
63
+ if (existing.length > 0) {
64
+ await model.update({ value, updated_at: new Date().toISOString() }).where({ source, key });
65
+ return;
66
+ }
67
+ await model.insert({ source, key, value, updated_at: new Date().toISOString() });
68
+ }
69
+ async delete(source, key) {
70
+ await this.model?.delete().where({ source, key });
71
+ }
72
+ async list(source) {
73
+ const model = this.model;
74
+ if (!model)
75
+ return [];
76
+ const rows = source ? await model.select().where({ source }) : await model.select();
77
+ return rows.map((row) => ({
78
+ source: String(row.source),
79
+ key: String(row.key),
80
+ value: String(row.value),
81
+ updated_at: String(row.updated_at ?? ''),
82
+ }));
85
83
  }
86
- }
87
- export async function deleteCredential(source, key) {
88
- const model = getModel();
89
- if (!model)
90
- return;
91
- await model.delete().where({ source, key });
92
- }
93
- export async function listCredentials(source) {
94
- const model = getModel();
95
- if (!model)
96
- return [];
97
- const rows = source
98
- ? await model.select().where({ source })
99
- : await model.select();
100
- return rows.map((r) => ({
101
- source: String(r.source),
102
- key: String(r.key),
103
- value: String(r.value),
104
- updated_at: String(r.updated_at ?? ''),
105
- }));
106
- }
107
- export function resetCredentialDb() {
108
- credentialDbStore.clear();
109
- _memoryDb = null;
110
84
  }
111
85
  //# sourceMappingURL=credential-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../src/credential-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../src/credential-store.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  export { formatDuration, formatMusicInfo, sourceConfigMap, SOURCE_ALIASES, SOURCE_DISPLAY_NAME, resolveSourceAlias, } from './config.js';
2
2
  export { searchMusic, shareMusicDetail, formatSearchResults, buildMusicShareSegment, } from './music-lib.js';
3
- export { musicServices } from './sources/index.js';
4
- export { sessionKey, resolveMessageIds, setPending, getPending, clearPending, cleanExpired, type PendingSearch, } from './session.js';
5
- export { getCredential, setCredential, deleteCredential, listCredentials, MUSIC_CREDENTIALS_TABLE, provideCredentialDb, resetCredentialDb, } from './credential-store.js';
6
- export { startLogin, pollLogin, cancelLogin, getActiveLogin, loginSessionKey, cleanExpiredLogins, type QrLoginSource, type QrLoginSession, type QrPollResult, } from './login/index.js';
3
+ export { createMusicServices } from './sources/index.js';
4
+ export { sessionKey, resolveMessageIds, MusicSearchSessions, type PendingSearch, } from './session.js';
5
+ export { CredentialStore, createInMemoryCredentialDb, MUSIC_CREDENTIALS_TABLE, type CredentialDb, type CredentialRow, } from './credential-store.js';
6
+ export { musicRuntimeToken, type MusicRuntime } from './runtime.js';
7
+ export { QrLoginRuntime, loginSessionKey, type QrLoginSource, type QrLoginSession, type QrPollResult, } from './login/index.js';
7
8
  export type { MusicDetail, MusicInfo, MusicSource, MusicSourceConfig } from './types.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
package/lib/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  export { formatDuration, formatMusicInfo, sourceConfigMap, SOURCE_ALIASES, SOURCE_DISPLAY_NAME, resolveSourceAlias, } from './config.js';
2
2
  export { searchMusic, shareMusicDetail, formatSearchResults, buildMusicShareSegment, } from './music-lib.js';
3
- export { musicServices } from './sources/index.js';
4
- export { sessionKey, resolveMessageIds, setPending, getPending, clearPending, cleanExpired, } from './session.js';
5
- export { getCredential, setCredential, deleteCredential, listCredentials, MUSIC_CREDENTIALS_TABLE, provideCredentialDb, resetCredentialDb, } from './credential-store.js';
6
- export { startLogin, pollLogin, cancelLogin, getActiveLogin, loginSessionKey, cleanExpiredLogins, } from './login/index.js';
3
+ export { createMusicServices } from './sources/index.js';
4
+ export { sessionKey, resolveMessageIds, MusicSearchSessions, } from './session.js';
5
+ export { CredentialStore, createInMemoryCredentialDb, MUSIC_CREDENTIALS_TABLE, } from './credential-store.js';
6
+ export { musicRuntimeToken } from './runtime.js';
7
+ export { QrLoginRuntime, loginSessionKey, } from './login/index.js';
7
8
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,GAEb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,GAInB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,GAGxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAqB,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,cAAc,EACd,eAAe,GAIhB,MAAM,kBAAkB,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { QrLoginSource, QrPollResult } from './types.js';
1
+ import type { QrLoginProvider, QrLoginSource, QrPollResult } from './types.js';
2
+ import type { CredentialStore } from '../credential-store.js';
2
3
  export type { QrLoginSource, QrPollResult, QrLoginProvider } from './types.js';
3
4
  export interface QrLoginSession {
4
5
  source: QrLoginSource;
@@ -7,14 +8,20 @@ export interface QrLoginSession {
7
8
  aborted: boolean;
8
9
  }
9
10
  export declare function loginSessionKey(endpointId: string, conversationId: string, senderId: string): string;
10
- export declare function getActiveLogin(key: string): QrLoginSession | undefined;
11
- export declare function cancelLogin(key: string): boolean;
12
- export declare function startLogin(source: QrLoginSource, key: string): Promise<{
13
- imageSegment: {
14
- type: 'image';
15
- data: Record<string, unknown>;
16
- };
17
- }>;
18
- export declare function pollLogin(key: string, onStatus: (result: QrPollResult) => Promise<void>): Promise<QrPollResult>;
19
- export declare function cleanExpiredLogins(): void;
11
+ /** Generation-owned QR login coordinator. */
12
+ export declare class QrLoginRuntime {
13
+ #private;
14
+ constructor(credentials: CredentialStore, providers?: Readonly<Record<QrLoginSource, QrLoginProvider>>, now?: () => number, sleep?: (ms: number) => Promise<void>);
15
+ get(key: string): QrLoginSession | undefined;
16
+ cancel(key: string): boolean;
17
+ start(source: QrLoginSource, key: string): Promise<{
18
+ imageSegment: {
19
+ type: 'image';
20
+ data: Record<string, unknown>;
21
+ };
22
+ }>;
23
+ poll(key: string, onStatus: (result: QrPollResult) => Promise<void>): Promise<QrPollResult>;
24
+ pruneExpired(): void;
25
+ dispose(): void;
26
+ }
20
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAO/E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAQD,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAQtE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMhD;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,YAAY,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAAE,CAAC,CAiB7E;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAChD,OAAO,CAAC,YAAY,CAAC,CAgDvB;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,6CAA6C;AAC7C,qBAAa,cAAc;;gBAQvB,WAAW,EAAE,eAAe,EAC5B,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,EAC5D,GAAG,GAAE,MAAM,MAAiB,EAC5B,KAAK,GAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAA6D;IAWlG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAW5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQtB,KAAK,CACT,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;QAAE,YAAY,EAAE;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;IAwBxE,IAAI,CACR,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAChD,OAAO,CAAC,YAAY,CAAC;IAyCxB,YAAY,IAAI,IAAI;IAUpB,OAAO,IAAI,IAAI;CAIhB"}
@@ -1,100 +1,124 @@
1
1
  import { QQLoginProvider } from './qq.js';
2
2
  import { NeteaseLoginProvider } from './netease.js';
3
- import { setCredential } from '../credential-store.js';
4
- const providers = {
5
- qq: new QQLoginProvider(),
6
- netease: new NeteaseLoginProvider(),
7
- };
8
3
  const LOGIN_TIMEOUT_MS = 2 * 60 * 1000;
9
4
  const POLL_INTERVAL_MS = 3_000;
10
5
  const MAX_POLLS = Math.ceil(LOGIN_TIMEOUT_MS / POLL_INTERVAL_MS);
11
- const activeLogins = new Map();
12
6
  export function loginSessionKey(endpointId, conversationId, senderId) {
13
7
  return `login:${endpointId}:${conversationId}:${senderId}`;
14
8
  }
15
- export function getActiveLogin(key) {
16
- const session = activeLogins.get(key);
17
- if (!session)
18
- return undefined;
19
- if (Date.now() - session.timestamp > LOGIN_TIMEOUT_MS) {
20
- activeLogins.delete(key);
21
- return undefined;
9
+ /** Generation-owned QR login coordinator. */
10
+ export class QrLoginRuntime {
11
+ #active = new Map();
12
+ #providers;
13
+ #credentials;
14
+ #now;
15
+ #sleep;
16
+ constructor(credentials, providers, now = Date.now, sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))) {
17
+ this.#credentials = credentials;
18
+ this.#now = now;
19
+ this.#sleep = sleep;
20
+ this.#providers = providers ?? {
21
+ qq: new QQLoginProvider(),
22
+ netease: new NeteaseLoginProvider(),
23
+ };
22
24
  }
23
- return session;
24
- }
25
- export function cancelLogin(key) {
26
- const session = activeLogins.get(key);
27
- if (!session)
28
- return false;
29
- session.aborted = true;
30
- activeLogins.delete(key);
31
- return true;
32
- }
33
- export async function startLogin(source, key) {
34
- const existing = activeLogins.get(key);
35
- if (existing && !existing.aborted) {
36
- existing.aborted = true;
25
+ get(key) {
26
+ const session = this.#active.get(key);
27
+ if (!session)
28
+ return undefined;
29
+ if (this.#now() - session.timestamp > LOGIN_TIMEOUT_MS) {
30
+ session.aborted = true;
31
+ this.#active.delete(key);
32
+ return undefined;
33
+ }
34
+ return session;
37
35
  }
38
- const provider = providers[source];
39
- const result = await provider.createQr();
40
- activeLogins.set(key, {
41
- source,
42
- pollData: result.pollData,
43
- timestamp: Date.now(),
44
- aborted: false,
45
- });
46
- return { imageSegment: result.imageSegment };
47
- }
48
- export async function pollLogin(key, onStatus) {
49
- const session = activeLogins.get(key);
50
- if (!session) {
51
- return { status: 'error', message: '没有进行中的登录会话' };
36
+ cancel(key) {
37
+ const session = this.#active.get(key);
38
+ if (!session)
39
+ return false;
40
+ session.aborted = true;
41
+ this.#active.delete(key);
42
+ return true;
52
43
  }
53
- const provider = providers[session.source];
54
- let lastStatus = '';
55
- try {
56
- for (let i = 0; i < MAX_POLLS; i++) {
57
- if (session.aborted) {
58
- activeLogins.delete(key);
59
- return { status: 'error', message: '登录已取消' };
60
- }
61
- const result = await provider.pollQr(session.pollData);
62
- if (result.status !== lastStatus) {
63
- lastStatus = result.status;
64
- await onStatus(result);
44
+ async start(source, key) {
45
+ const existing = this.#active.get(key);
46
+ if (existing && !existing.aborted)
47
+ existing.aborted = true;
48
+ const session = {
49
+ source,
50
+ pollData: {},
51
+ timestamp: this.#now(),
52
+ aborted: false,
53
+ };
54
+ this.#active.set(key, session);
55
+ try {
56
+ const result = await this.#providers[source].createQr();
57
+ if (session.aborted || this.#active.get(key) !== session) {
58
+ throw new Error('登录已取消');
65
59
  }
66
- if (result.status === 'confirmed') {
67
- activeLogins.delete(key);
68
- if (result.cookie) {
69
- await setCredential(session.source, 'cookie', result.cookie);
60
+ session.pollData = result.pollData;
61
+ return { imageSegment: result.imageSegment };
62
+ }
63
+ catch (error) {
64
+ if (this.#active.get(key) === session)
65
+ this.#active.delete(key);
66
+ throw error;
67
+ }
68
+ }
69
+ async poll(key, onStatus) {
70
+ const session = this.#active.get(key);
71
+ if (!session)
72
+ return { status: 'error', message: '没有进行中的登录会话' };
73
+ const provider = this.#providers[session.source];
74
+ let lastStatus = '';
75
+ try {
76
+ for (let i = 0; i < MAX_POLLS; i++) {
77
+ if (session.aborted) {
78
+ this.#active.delete(key);
79
+ return { status: 'error', message: '登录已取消' };
70
80
  }
71
- return result;
72
- }
73
- if (result.status === 'expired' || result.status === 'error') {
74
- activeLogins.delete(key);
75
- return result;
81
+ const result = await provider.pollQr(session.pollData);
82
+ if (result.status !== lastStatus) {
83
+ lastStatus = result.status;
84
+ await onStatus(result);
85
+ }
86
+ if (result.status === 'confirmed') {
87
+ this.#active.delete(key);
88
+ if (result.cookie)
89
+ await this.#credentials.set(session.source, 'cookie', result.cookie);
90
+ return result;
91
+ }
92
+ if (result.status === 'expired' || result.status === 'error') {
93
+ this.#active.delete(key);
94
+ return result;
95
+ }
96
+ await this.#sleep(POLL_INTERVAL_MS);
76
97
  }
77
- await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
78
98
  }
99
+ catch (error) {
100
+ this.#active.delete(key);
101
+ return {
102
+ status: 'error',
103
+ message: `轮询异常:${error instanceof Error ? error.message : String(error)}`,
104
+ };
105
+ }
106
+ this.#active.delete(key);
107
+ return { status: 'expired', message: '登录超时,请重试' };
79
108
  }
80
- catch (err) {
81
- console.error('[music-login] poll error:', err);
82
- activeLogins.delete(key);
83
- return {
84
- status: 'error',
85
- message: `轮询异常:${err instanceof Error ? err.message : String(err)}`,
86
- };
109
+ pruneExpired() {
110
+ const now = this.#now();
111
+ for (const [key, session] of this.#active) {
112
+ if (now - session.timestamp > LOGIN_TIMEOUT_MS) {
113
+ session.aborted = true;
114
+ this.#active.delete(key);
115
+ }
116
+ }
87
117
  }
88
- activeLogins.delete(key);
89
- return { status: 'expired', message: '登录超时,请重试' };
90
- }
91
- export function cleanExpiredLogins() {
92
- const now = Date.now();
93
- for (const [key, session] of activeLogins) {
94
- if (now - session.timestamp > LOGIN_TIMEOUT_MS) {
118
+ dispose() {
119
+ for (const session of this.#active.values())
95
120
  session.aborted = true;
96
- activeLogins.delete(key);
97
- }
121
+ this.#active.clear();
98
122
  }
99
123
  }
100
124
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import type { MusicInfo, MusicDetail, MusicSource } from './types.js';
2
- export declare function searchMusic(keyword: string, source?: MusicSource, limit?: number): Promise<{
2
+ import type { MusicRuntime } from './runtime.js';
3
+ export declare function searchMusic(runtime: MusicRuntime, keyword: string, source?: MusicSource, limit?: number): Promise<{
3
4
  success: true;
4
5
  keyword: string;
5
6
  source: MusicSource;
6
7
  results: MusicInfo[];
7
8
  total: number;
8
9
  }>;
9
- export declare function shareMusicDetail(id: string, source: MusicSource): Promise<{
10
+ export declare function shareMusicDetail(runtime: MusicRuntime, id: string, source: MusicSource): Promise<{
10
11
  success: false;
11
12
  error: string;
12
13
  music?: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"music-lib.d.ts","sourceRoot":"","sources":["../src/music-lib.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,SAAI,GACR,OAAO,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAWD;AAED,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;;;;;;;;GAcrE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAU9F;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW;;;;;;;;;;;EAczD"}
1
+ {"version":3,"file":"music-lib.d.ts","sourceRoot":"","sources":["../src/music-lib.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,SAAI,GACR,OAAO,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAWD;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;;;;;;;;GAc5F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAU9F;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW;;;;;;;;;;;EAczD"}
package/lib/music-lib.js CHANGED
@@ -1,8 +1,7 @@
1
- import { musicServices } from './sources/index.js';
2
1
  import { sourceConfigMap, SOURCE_DISPLAY_NAME, formatDuration } from './config.js';
3
- export async function searchMusic(keyword, source, limit = 5) {
2
+ export async function searchMusic(runtime, keyword, source, limit = 5) {
4
3
  const s = source ?? 'qq';
5
- const service = musicServices[s];
4
+ const service = runtime.services[s];
6
5
  const results = await service.search(keyword, limit);
7
6
  return {
8
7
  success: true,
@@ -12,8 +11,8 @@ export async function searchMusic(keyword, source, limit = 5) {
12
11
  total: results.length,
13
12
  };
14
13
  }
15
- export async function shareMusicDetail(id, source) {
16
- const service = musicServices[source];
14
+ export async function shareMusicDetail(runtime, id, source) {
15
+ const service = runtime.services[source];
17
16
  if (!service) {
18
17
  return { success: false, error: `不支持的音乐源: ${source}` };
19
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"music-lib.js","sourceRoot":"","sources":["../src/music-lib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"music-lib.js","sourceRoot":"","sources":["../src/music-lib.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CredentialStore } from './credential-store.js';
2
+ import type { MusicSearchService, MusicSource } from './types.js';
3
+ import type { MusicSearchSessions } from './session.js';
4
+ import type { QrLoginRuntime } from './login/index.js';
5
+ export interface MusicRuntime {
6
+ readonly credentials: CredentialStore;
7
+ readonly services: Readonly<Record<MusicSource, MusicSearchService>>;
8
+ readonly sessions: MusicSearchSessions;
9
+ readonly logins: QrLoginRuntime;
10
+ }
11
+ export declare const musicRuntimeToken: import("zhin.js").Token<MusicRuntime>;
12
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACrE,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CACjC;AAED,eAAO,MAAM,iBAAiB,uCAG7B,CAAC"}
package/lib/runtime.js ADDED
@@ -0,0 +1,3 @@
1
+ import { createToken } from 'zhin.js';
2
+ export const musicRuntimeToken = createToken('zhin.music.runtime', 'Owner-scoped Music runtime');
3
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAatC,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAC1C,oBAAoB,EACpB,4BAA4B,CAC7B,CAAC"}
package/lib/session.d.ts CHANGED
@@ -22,8 +22,14 @@ export declare function resolveMessageIds(input: {
22
22
  conversationId: string;
23
23
  senderId: string;
24
24
  } | null;
25
- export declare function setPending(key: string, search: PendingSearch): void;
26
- export declare function getPending(key: string): PendingSearch | undefined;
27
- export declare function clearPending(key: string): void;
28
- export declare function cleanExpired(): void;
25
+ /** Generation-owned pending music selections. */
26
+ export declare class MusicSearchSessions {
27
+ #private;
28
+ constructor(timeoutMs?: number, now?: () => number);
29
+ set(key: string, search: PendingSearch): void;
30
+ get(key: string): PendingSearch | undefined;
31
+ delete(key: string): void;
32
+ pruneExpired(): void;
33
+ dispose(): void;
34
+ }
29
35
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAMD,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3B,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO1E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAEnE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAQjE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,YAAY,IAAI,IAAI,CAOnC"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAID,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3B,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO1E;AAED,iDAAiD;AACjD,qBAAa,mBAAmB;;gBAM5B,SAAS,SAAoB,EAC7B,GAAG,GAAE,MAAM,MAAiB;IAM9B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAI7C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAU3C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,YAAY,IAAI,IAAI;IASpB,OAAO,IAAI,IAAI;CAGhB"}