feat: adjust keepAlive token
This commit is contained in:
parent
12604fe17e
commit
7bcf16207a
@ -7,7 +7,7 @@ import { CookieJar } from "tough-cookie";
|
|||||||
const logger = pino();
|
const logger = pino();
|
||||||
|
|
||||||
|
|
||||||
interface AudioInfo {
|
export interface AudioInfo {
|
||||||
id: string;
|
id: string;
|
||||||
title?: string;
|
title?: string;
|
||||||
image_url?: string;
|
image_url?: string;
|
||||||
@ -63,21 +63,15 @@ class SunoApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async init(): Promise<SunoApi> {
|
public async init(): Promise<SunoApi> {
|
||||||
const token = await this.getAuthToken();
|
await this.getAuthToken();
|
||||||
this.client.interceptors.request.use(function (config) {
|
await this.keepAlive();
|
||||||
config.headers['Authorization'] = `Bearer ${token}`
|
|
||||||
return config;
|
|
||||||
})
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async getAuthToken(): Promise<string> {
|
private async getAuthToken() {
|
||||||
// 获取会话ID的URL
|
// 获取会话ID的URL
|
||||||
const getSessionUrl = `${SunoApi.CLERK_BASE_URL}/v1/client?_clerk_js_version=4.70.5`;
|
const getSessionUrl = `${SunoApi.CLERK_BASE_URL}/v1/client?_clerk_js_version=4.70.5`;
|
||||||
// 交换令牌的URL模板
|
|
||||||
const exchangeTokenUrlTemplate = `${SunoApi.CLERK_BASE_URL}/v1/client/sessions/{sid}/tokens/api?_clerk_js_version=4.70.0`;
|
|
||||||
|
|
||||||
// 获取会话ID
|
// 获取会话ID
|
||||||
const sessionResponse = await this.client.get(getSessionUrl);
|
const sessionResponse = await this.client.get(getSessionUrl);
|
||||||
const sid = sessionResponse.data.response['last_active_session_id'];
|
const sid = sessionResponse.data.response['last_active_session_id'];
|
||||||
@ -86,14 +80,9 @@ class SunoApi {
|
|||||||
}
|
}
|
||||||
// 保存会话ID以备后用
|
// 保存会话ID以备后用
|
||||||
this.sid = sid;
|
this.sid = sid;
|
||||||
|
|
||||||
// 使用会话ID获取JWT令牌
|
|
||||||
const exchangeTokenUrl = exchangeTokenUrlTemplate.replace('{sid}', sid);
|
|
||||||
const tokenResponse = await this.client.post(exchangeTokenUrl);
|
|
||||||
return tokenResponse.data['jwt'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async KeepAlive(): Promise<void> {
|
public async keepAlive(isWait?: boolean): Promise<void> {
|
||||||
if (!this.sid) {
|
if (!this.sid) {
|
||||||
throw new Error("Session ID is not set. Cannot renew token.");
|
throw new Error("Session ID is not set. Cannot renew token.");
|
||||||
}
|
}
|
||||||
@ -102,7 +91,9 @@ class SunoApi {
|
|||||||
// 续订会话令牌
|
// 续订会话令牌
|
||||||
const renewResponse = await this.client.post(renewUrl);
|
const renewResponse = await this.client.post(renewUrl);
|
||||||
logger.info("KeepAlive...\n");
|
logger.info("KeepAlive...\n");
|
||||||
await sleep(1, 2);
|
if (isWait) {
|
||||||
|
await sleep(1, 2);
|
||||||
|
}
|
||||||
const newToken = renewResponse.data['jwt'];
|
const newToken = renewResponse.data['jwt'];
|
||||||
// 更新请求头中的Authorization字段,使用新的JWT令牌
|
// 更新请求头中的Authorization字段,使用新的JWT令牌
|
||||||
this.client.interceptors.request.use(function (config) {
|
this.client.interceptors.request.use(function (config) {
|
||||||
@ -216,11 +207,11 @@ class SunoApi {
|
|||||||
}
|
}
|
||||||
lastResponse = response;
|
lastResponse = response;
|
||||||
await sleep(3, 6);
|
await sleep(3, 6);
|
||||||
await this.KeepAlive();
|
await this.keepAlive(true);
|
||||||
}
|
}
|
||||||
return lastResponse;
|
return lastResponse;
|
||||||
} else {
|
} else {
|
||||||
await this.KeepAlive();
|
await this.keepAlive(true);
|
||||||
return response.data['clips'].map((audio: any) => ({
|
return response.data['clips'].map((audio: any) => ({
|
||||||
id: audio.id,
|
id: audio.id,
|
||||||
title: audio.title,
|
title: audio.title,
|
||||||
|
Loading…
Reference in New Issue
Block a user