Compare commits

...
10 Commits
Author SHA1 Message Date
xrain 1597c98f39 支持了localstorage存储token
Publish to npm / publish (push) Failing after 8s
2026-08-10 22:58:28 +08:00
xrain 7dbb48ad90 fix config
Publish to npm / publish (push) Failing after 10s
2026-08-10 21:15:53 +08:00
xrain 88af4a2d96 fix config
Publish to npm / publish (push) Failing after 10s
2026-08-10 21:03:44 +08:00
xrain 9e44c6fcaf fix config
Publish to npm / publish (push) Failing after 10s
2026-08-10 21:01:21 +08:00
xrain 592607f1e2 fix config
Publish to npm / publish (push) Failing after 8s
2026-08-10 20:46:40 +08:00
xrain 7aee4b708d fix config
Publish to npm / publish (push) Failing after 8s
2026-08-10 20:44:33 +08:00
xrain 1af5900593 fix config
Publish to npm / publish (push) Failing after 8s
2026-08-10 20:37:23 +08:00
xrain 78ef6d9ca0 fix cookie
Publish to npm / publish (push) Failing after 7s
2026-05-05 07:16:29 +08:00
xrain cee0bc4cfe fix cookie
Publish to npm / publish (push) Failing after 7s
2026-05-05 07:06:34 +08:00
xrain 9a8510d833 fix cookie
Publish to npm / publish (push) Failing after 5s
2026-05-05 07:01:21 +08:00
3 changed files with 72 additions and 70 deletions
+34 -34
View File
@@ -83,7 +83,9 @@ export class SimApiCore {
check_url: '/user/info', check_url: '/user/info',
logout_url: '/auth/logout', logout_url: '/auth/logout',
login_url: '/auth/login', login_url: '/auth/login',
tokenStore: "localstorage"
} }
private webConfig: Map<string, Record<string, object>> = new Map();
private api: SimApiApiConfig = { private api: SimApiApiConfig = {
endpoints: {default: ''}, endpoints: {default: ''},
@@ -98,7 +100,7 @@ export class SimApiCore {
error: (_err: any) => { error: (_err: any) => {
}, },
}, },
timeout: 10000, timeout: 10000
} }
constructor(options?: SimApiOptions) { constructor(options?: SimApiOptions) {
@@ -178,19 +180,30 @@ export class SimApiCore {
} }
getToken(): string { getToken(): string {
if (this.auth.tokenStore === 'localstorage') {
return localStorage.getItem(this.auth.token_name) ?? ''
}
const name = this.auth.token_name const name = this.auth.token_name
const match = document.cookie.match(new RegExp(`(?:^|;)\\s?${name}=([^;]+)`)) const match = document.cookie.match(new RegExp(`(?:^|;)\\s?${name}=([^;]+)`))
return match ? match[1] : '' return match ? match[1] : ''
} }
setToken(token: string): void { setToken(token: string): void {
const name = this.auth.token_name if (this.auth.tokenStore === 'localstorage') {
document.cookie = `${name}=${token}; path=/; max-age=315360000; samesite=none` localStorage.setItem(this.auth.token_name, token)
} else {
const name = this.auth.token_name
document.cookie = `${name}=${token}; path=/; max-age=315360000; secure; samesite=none`
}
} }
removeToken(): void { removeToken(): void {
const name = this.auth.token_name if (this.auth.tokenStore === 'localstorage') {
document.cookie = `${name}=; path=/; max-age=0; samesite=none` localStorage.removeItem(this.auth.token_name)
} else {
const name = this.auth.token_name
document.cookie = `${name}=; path=/; max-age=0; secure; samesite=none`
}
} }
@@ -212,32 +225,19 @@ export class SimApiCore {
console.log('[DEBUG]', ...args) console.log('[DEBUG]', ...args)
} }
/** async getConfig(reload: boolean = false, endpointName: string = 'default'): Promise<Record<string, object>> {
* 获取版本信息 if (!this.webConfig.has(endpointName) || reload) {
* const versions: SimApiVersions = {
* @param endpointName - 指定从哪个 endpoint 获取版本,默认使用 default endpoint uiApp: typeof AppVersion === 'undefined' ? "0.0.0-develop" : AppVersion,
* @returns 版本信息对象 uiSimApi: typeof SimApiVersion === 'undefined' ? "0.0.0-develop" : SimApiVersion,
* apiApp: '0.0.0',
* @example apiSimApi: '0.0.0',
* // 从默认 endpoint 获取 apiAppFull: '0.0.0',
* const versions = await api.getVersion() apiSimApiFull: '0.0.0',
* };
* // 从指定 endpoint 获取 const resp = await this.query<any>('/config', {}, endpointName)
* const versions = await api.getVersion('backup')
*/
async getVersion(endpointName?: string): Promise<SimApiVersions> {
const versions: SimApiVersions = {
uiApp: typeof AppVersion === 'undefined' ? "0.0.0-develop" : AppVersion,
uiSimApi: typeof SimApiVersion === 'undefined' ? "0.0.0-develop" : SimApiVersion,
apiApp: '0.0.0',
apiSimApi: '0.0.0',
apiAppFull: '0.0.0',
apiSimApiFull: '0.0.0',
};
try {
const resp = await this.query<any>('/versions', {}, endpointName)
if (resp?.data) { if (resp?.data) {
const d = resp.data const d = resp.data.Versions;
versions.apiApp = d.App?.split('+')[0] ?? '0.0.0'; versions.apiApp = d.App?.split('+')[0] ?? '0.0.0';
versions.apiSimApi = d.SimApi?.split('+')[0] ?? '0.0.0'; versions.apiSimApi = d.SimApi?.split('+')[0] ?? '0.0.0';
versions.apiAppFull = d.App ?? '0.0.0'; versions.apiAppFull = d.App ?? '0.0.0';
@@ -245,12 +245,12 @@ export class SimApiCore {
if (this.debug) { if (this.debug) {
console.log(`UI主应用版本: ${versions.uiApp}\nUISimApi版本: ${versions.uiSimApi}\nAPI主应用版本: ${versions.apiApp}\nAPISimApi版本: ${versions.apiSimApi}`) console.log(`UI主应用版本: ${versions.uiApp}\nUISimApi版本: ${versions.uiSimApi}\nAPI主应用版本: ${versions.apiApp}\nAPISimApi版本: ${versions.apiSimApi}`)
} }
return versions const conf = JSON.parse(JSON.stringify(resp.data));
conf.Versions = versions;
this.webConfig.set(endpointName, conf);
} }
} catch {
// 版本获取失败返回默认值
} }
return versions; return this.webConfig.get(endpointName)!;
} }
async query<T = any>( async query<T = any>(
+3 -3
View File
@@ -15,7 +15,7 @@ export const useSimApi = defineStore('simapi', {
}, },
actions: { actions: {
// 所有方法直接代理到 core // 所有方法直接代理到 core
async loadFromFile(file: string = 'config.json'): Promise<void> { async loadFromFile(file: string = '/config.json'): Promise<void> {
return this._core.loadFromFile(file) return this._core.loadFromFile(file)
}, },
@@ -76,8 +76,8 @@ export const useSimApi = defineStore('simapi', {
return this._core.getEndpoint(name) return this._core.getEndpoint(name)
}, },
async getVersion(endpointName?: string): Promise<SimApiVersions> { async getConfig(reload = false, endpointName?: string): Promise<Record<string, object>> {
return this._core.getVersion(endpointName) return this._core.getConfig(reload, endpointName)
}, },
}, },
}) })
+35 -33
View File
@@ -4,61 +4,63 @@
/** 版本信息 */ /** 版本信息 */
export interface SimApiVersions { export interface SimApiVersions {
uiApp: string uiApp: string
uiSimApi: string uiSimApi: string
apiApp: string apiApp: string
apiSimApi: string apiSimApi: string
apiAppFull: string apiAppFull: string
apiSimApiFull: string apiSimApiFull: string
} }
/** 认证配置 */ /** 认证配置 */
export interface SimApiAuthConfig { export interface SimApiAuthConfig {
/** localStorage key,默认 'simapi-auth-token' */ /** localStorage key,默认 'simapi-auth-token' */
token_name: string token_name: string
/** 检查登录接口,默认 '/auth/check' */ /** 检查登录接口,默认 '/auth/check' */
check_url: string check_url: string
/** 登出接口,默认 '/auth/logout' */ /** 登出接口,默认 '/auth/logout' */
logout_url: string logout_url: string
/** 登录接口,默认 '/auth/login' */ /** 登录接口,默认 '/auth/login' */
login_url: string login_url: string
/** Token 存储位置 */
tokenStore: string
} }
/** 业务错误码回调 */ /** 业务错误码回调 */
export interface SimApiBusinessCallback { export interface SimApiBusinessCallback {
[key: number | string]: (data: any) => void [key: number | string]: (data: any) => void
} }
/** 响应拦截回调 */ /** 响应拦截回调 */
export interface SimApiResponseCallback { export interface SimApiResponseCallback {
success: (response: any) => any success: (response: any) => any
error: (err: any) => void error: (err: any) => void
} }
/** API 配置 */ /** API 配置 */
export interface SimApiApiConfig { export interface SimApiApiConfig {
/** 多端点映射 */ /** 多端点映射 */
endpoints: { [name: string]: string } endpoints: { [name: string]: string }
/** 默认端点名称 */ /** 默认端点名称 */
defaultEndpoint: string defaultEndpoint: string
/** 业务错误码回调 */ /** 业务错误码回调 */
businessCallback: SimApiBusinessCallback businessCallback: SimApiBusinessCallback
/** 响应拦截器 */ /** 响应拦截器 */
responseCallback: SimApiResponseCallback responseCallback: SimApiResponseCallback
/** 请求超时时间(毫秒),默认 10000 */ /** 请求超时时间(毫秒),默认 10000 */
timeout?: number timeout?: number
} }
/** SimApi 完整配置 */ /** SimApi 完整配置 */
export interface SimApiOptions { export interface SimApiOptions {
debug?: boolean debug?: boolean
auth?: Partial<SimApiAuthConfig> auth?: Partial<SimApiAuthConfig>
api?: Partial<SimApiApiConfig> api?: Partial<SimApiApiConfig>
} }
/** SimApi 标准响应格式 */ /** SimApi 标准响应格式 */
export interface SimApiBaseResponse<T = any> { export interface SimApiBaseResponse<T = any> {
code: number code: number
message: string message: string
data?: T data?: T
} }