@lovrabet/sdk 1.1.8 → 1.1.12
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/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/src/auth/auth-manager.d.ts +1 -1
- package/dist/src/auth/auth-utils.d.ts +72 -0
- package/dist/src/auth/index.d.ts +1 -0
- package/dist/src/auth/openapi-auth.d.ts +0 -2
- package/dist/src/auth/token-generator.d.ts +117 -0
- package/dist/src/client/client.d.ts +4 -1
- package/dist/src/types/index.d.ts +9 -3
- package/package.json +6 -5
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI 认证工具函数
|
|
3
|
+
*
|
|
4
|
+
* 包含认证相关的共享工具函数和常量
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 默认的 Secret Access Key
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEFAULT_SECRET_KEY = "sk-9Wc0wdYTNdEYXX1nFLcx0zPDU3wVNrSDroByjrgAbU4";
|
|
11
|
+
/**
|
|
12
|
+
* Token 有效期(毫秒)
|
|
13
|
+
*/
|
|
14
|
+
export declare const TOKEN_VALIDITY_MS: number;
|
|
15
|
+
/**
|
|
16
|
+
* 生成 HMAC-SHA256 签名
|
|
17
|
+
*
|
|
18
|
+
* @param data 要签名的数据
|
|
19
|
+
* @param key 密钥
|
|
20
|
+
* @returns Base64 编码的签名
|
|
21
|
+
*/
|
|
22
|
+
export declare function hmacSha256(data: string, key: string): Promise<string>;
|
|
23
|
+
/**
|
|
24
|
+
* 构建签名字符串
|
|
25
|
+
*
|
|
26
|
+
* @param params 参数对象
|
|
27
|
+
* @returns 按字母顺序排序的查询字符串
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildSignatureString(params: Record<string, string>): string;
|
|
30
|
+
/**
|
|
31
|
+
* 生成 OpenAPI Token
|
|
32
|
+
*
|
|
33
|
+
* @param params Token 生成参数
|
|
34
|
+
* @returns 生成的 token 字符串
|
|
35
|
+
*/
|
|
36
|
+
export declare function generateToken(params: {
|
|
37
|
+
accessKey: string;
|
|
38
|
+
timestamp: number;
|
|
39
|
+
appCode: string;
|
|
40
|
+
datasetCode: string;
|
|
41
|
+
secretKey?: string;
|
|
42
|
+
}): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* 验证必需的参数
|
|
45
|
+
*
|
|
46
|
+
* @param params 参数对象
|
|
47
|
+
* @param required 必需的参数名列表
|
|
48
|
+
* @throws 当缺少必需参数时抛出错误
|
|
49
|
+
*/
|
|
50
|
+
export declare function validateRequiredParams(params: Record<string, any>, required: string[]): void;
|
|
51
|
+
/**
|
|
52
|
+
* 计算 Token 过期时间
|
|
53
|
+
*
|
|
54
|
+
* @param timestamp Token 创建时间戳
|
|
55
|
+
* @returns 过期时间戳
|
|
56
|
+
*/
|
|
57
|
+
export declare function calculateExpiresAt(timestamp: number): number;
|
|
58
|
+
/**
|
|
59
|
+
* 检查 Token 是否即将过期
|
|
60
|
+
*
|
|
61
|
+
* @param timestamp Token 的时间戳
|
|
62
|
+
* @param bufferMinutes 提前多少分钟认为过期(默认1分钟)
|
|
63
|
+
* @returns 是否即将过期
|
|
64
|
+
*/
|
|
65
|
+
export declare function isTokenExpiring(timestamp: number, bufferMinutes?: number): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* 计算 Token 剩余有效时间
|
|
68
|
+
*
|
|
69
|
+
* @param timestamp Token 的时间戳
|
|
70
|
+
* @returns 剩余有效时间(毫秒),如果已过期返回 0
|
|
71
|
+
*/
|
|
72
|
+
export declare function getTokenRemainingTime(timestamp: number): number;
|
package/dist/src/auth/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { AuthManager } from './auth-manager';
|
|
2
2
|
export { OpenApiAuth } from './openapi-auth';
|
|
3
3
|
export type { AuthHeaders, OpenApiAuthConfig } from '../types';
|
|
4
|
+
export { generateOpenApiToken, TokenGenerator, isTokenExpiring, getTokenRemainingTime, type GenerateTokenParams, type TokenResult } from './token-generator';
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI Token 生成工具
|
|
3
|
+
*
|
|
4
|
+
* 为 Node.js 服务端提供 token 生成功能,用于:
|
|
5
|
+
* 1. 后端生成 token 和 timestamp 配对
|
|
6
|
+
* 2. 返回给前端使用,避免前端存储 accessKey
|
|
7
|
+
* 3. 保证 token 和 timestamp 的正确配对
|
|
8
|
+
*/
|
|
9
|
+
import { isTokenExpiring as isTokenExpiringInternal, getTokenRemainingTime as getTokenRemainingTimeInternal } from './auth-utils';
|
|
10
|
+
/**
|
|
11
|
+
* Token 生成参数
|
|
12
|
+
*/
|
|
13
|
+
export interface GenerateTokenParams {
|
|
14
|
+
/** 应用代码 */
|
|
15
|
+
appCode: string;
|
|
16
|
+
/** 数据集代码 */
|
|
17
|
+
datasetCode: string;
|
|
18
|
+
/** API 访问密钥 */
|
|
19
|
+
accessKey: string;
|
|
20
|
+
/** API 密钥(可选,有默认值) */
|
|
21
|
+
secretKey?: string;
|
|
22
|
+
/** 自定义时间戳(可选,默认为当前时间) */
|
|
23
|
+
timestamp?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Token 生成结果
|
|
27
|
+
*/
|
|
28
|
+
export interface TokenResult {
|
|
29
|
+
/** 生成的 token */
|
|
30
|
+
token: string;
|
|
31
|
+
/** 配对的时间戳 */
|
|
32
|
+
timestamp: number;
|
|
33
|
+
/** Token 过期时间(10分钟后) */
|
|
34
|
+
expiresAt: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 生成 OpenAPI 认证 Token
|
|
38
|
+
*
|
|
39
|
+
* @description
|
|
40
|
+
* 用于后端生成 token 和 timestamp 配对,返回给前端使用。
|
|
41
|
+
* Token 有效期为 10 分钟,由服务端验证。
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // Node.js 后端代码
|
|
46
|
+
* import { generateOpenApiToken } from '@lovrabet/sdk';
|
|
47
|
+
*
|
|
48
|
+
* // 生成 token
|
|
49
|
+
* const result = await generateOpenApiToken({
|
|
50
|
+
* appCode: 'app-123',
|
|
51
|
+
* datasetCode: 'dataset-456',
|
|
52
|
+
* accessKey: process.env.ACCESS_KEY,
|
|
53
|
+
* secretKey: process.env.SECRET_KEY // 可选
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* // 返回给前端
|
|
57
|
+
* res.json({
|
|
58
|
+
* token: result.token,
|
|
59
|
+
* timestamp: result.timestamp,
|
|
60
|
+
* expiresAt: result.expiresAt
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @param params Token 生成参数
|
|
65
|
+
* @returns Token 和配对的 timestamp
|
|
66
|
+
*/
|
|
67
|
+
export declare function generateOpenApiToken(params: GenerateTokenParams): Promise<TokenResult>;
|
|
68
|
+
/**
|
|
69
|
+
* Token 生成器类(可选的面向对象接口)
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const generator = new TokenGenerator({
|
|
74
|
+
* accessKey: 'ak-xxx',
|
|
75
|
+
* secretKey: 'sk-xxx'
|
|
76
|
+
* });
|
|
77
|
+
*
|
|
78
|
+
* const result = await generator.generate({
|
|
79
|
+
* appCode: 'app-123',
|
|
80
|
+
* datasetCode: 'dataset-456'
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare class TokenGenerator {
|
|
85
|
+
private accessKey;
|
|
86
|
+
private secretKey;
|
|
87
|
+
constructor(config: {
|
|
88
|
+
accessKey: string;
|
|
89
|
+
secretKey?: string;
|
|
90
|
+
});
|
|
91
|
+
/**
|
|
92
|
+
* 生成 Token
|
|
93
|
+
*/
|
|
94
|
+
generate(params: {
|
|
95
|
+
appCode: string;
|
|
96
|
+
datasetCode: string;
|
|
97
|
+
timestamp?: number;
|
|
98
|
+
}): Promise<TokenResult>;
|
|
99
|
+
/**
|
|
100
|
+
* 批量生成 Token(为多个数据集生成 token)
|
|
101
|
+
*/
|
|
102
|
+
generateBatch(params: {
|
|
103
|
+
appCode: string;
|
|
104
|
+
datasetCodes: string[];
|
|
105
|
+
timestamp?: number;
|
|
106
|
+
}): Promise<Map<string, TokenResult>>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 验证 Token 是否即将过期
|
|
110
|
+
* @description 重新导出共享工具函数
|
|
111
|
+
*/
|
|
112
|
+
export declare const isTokenExpiring: typeof isTokenExpiringInternal;
|
|
113
|
+
/**
|
|
114
|
+
* 计算 Token 剩余有效时间
|
|
115
|
+
* @description 重新导出共享工具函数
|
|
116
|
+
*/
|
|
117
|
+
export declare const getTokenRemainingTime: typeof getTokenRemainingTimeInternal;
|
|
@@ -29,8 +29,11 @@ export declare class LovrabetClient implements ILovrabetClient {
|
|
|
29
29
|
* 1. 用户登录后可能需要更新 token
|
|
30
30
|
* 2. token 可能会过期需要刷新
|
|
31
31
|
* 3. 支持动态认证切换(比如用户切换账号)
|
|
32
|
+
*
|
|
33
|
+
* @param token - 认证 token
|
|
34
|
+
* @param timestamp - 与 token 配对的时间戳(OpenAPI 模式必需)
|
|
32
35
|
*/
|
|
33
|
-
setToken(token: string): void;
|
|
36
|
+
setToken(token: string, timestamp?: number): void;
|
|
34
37
|
/**
|
|
35
38
|
* 获取当前配置的副本
|
|
36
39
|
* 为什么返回副本而不是原始对象:
|
|
@@ -98,6 +98,8 @@ export interface ClientConfig {
|
|
|
98
98
|
env?: Environment;
|
|
99
99
|
/** 用户 Token,用于 Bearer 认证 */
|
|
100
100
|
token?: string;
|
|
101
|
+
/** 与 token 配对的时间戳(OpenAPI 模式必需) */
|
|
102
|
+
timestamp?: number;
|
|
101
103
|
/** API 访问密钥,用于签名认证 */
|
|
102
104
|
accessKey?: string;
|
|
103
105
|
/** API 密钥,用于签名认证 */
|
|
@@ -259,7 +261,7 @@ export interface AuthHeaders {
|
|
|
259
261
|
* OpenAPI 密钥认证配置
|
|
260
262
|
* @description 用于签名认证方式,支持两种模式:
|
|
261
263
|
* 1. Server 端:传入 accessKey,内部生成 token
|
|
262
|
-
* 2. Client 端:直接传入预计算的 token
|
|
264
|
+
* 2. Client 端:直接传入预计算的 token 和对应的 timestamp
|
|
263
265
|
*/
|
|
264
266
|
export interface OpenApiAuthConfig {
|
|
265
267
|
/** API 访问密钥(Server 端使用) */
|
|
@@ -268,6 +270,8 @@ export interface OpenApiAuthConfig {
|
|
|
268
270
|
secretKey?: string;
|
|
269
271
|
/** 预计算的 token(Client 端使用,避免在浏览器暴露 accessKey) */
|
|
270
272
|
token?: string;
|
|
273
|
+
/** 与 token 配对的时间戳(Client 端使用,必须与 token 一起使用) */
|
|
274
|
+
timestamp?: number;
|
|
271
275
|
}
|
|
272
276
|
/**
|
|
273
277
|
* 认证管理器接口
|
|
@@ -300,8 +304,9 @@ export interface AuthManager {
|
|
|
300
304
|
/**
|
|
301
305
|
* 设置用户 Token
|
|
302
306
|
* @param token 用户认证 Token
|
|
307
|
+
* @param timestamp 与 token 配对的时间戳(OpenAPI 模式必需)
|
|
303
308
|
*/
|
|
304
|
-
setToken(token: string): void;
|
|
309
|
+
setToken(token: string, timestamp?: number): void;
|
|
305
310
|
/**
|
|
306
311
|
* 检查是否使用 Cookie 认证
|
|
307
312
|
* @description 当没有 Token 和 API 密钥时,会降级到 Cookie 认证
|
|
@@ -347,9 +352,10 @@ export interface LovrabetClient {
|
|
|
347
352
|
/**
|
|
348
353
|
* 设置用户认证 Token
|
|
349
354
|
* @param token 用户认证 Token
|
|
355
|
+
* @param timestamp 与 token 配对的时间戳(OpenAPI 模式必需)
|
|
350
356
|
* @description 设置后所有 API 请求将使用此 Token 进行认证
|
|
351
357
|
*/
|
|
352
|
-
setToken(token: string): void;
|
|
358
|
+
setToken(token: string, timestamp?: number): void;
|
|
353
359
|
/**
|
|
354
360
|
* 获取客户端配置
|
|
355
361
|
* @returns 当前客户端的完整配置信息
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lovrabet/sdk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.12",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,11 +33,12 @@
|
|
|
33
33
|
],
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/bun": "latest",
|
|
36
|
-
"
|
|
37
|
-
"chokidar-cli": "^3.0.0",
|
|
38
|
-
"vitest": "^2.1.8",
|
|
36
|
+
"@vitest/coverage-v8": "^2.1.9",
|
|
39
37
|
"@vitest/ui": "^2.1.8",
|
|
40
|
-
"c8": "^10.1.2"
|
|
38
|
+
"c8": "^10.1.2",
|
|
39
|
+
"chokidar-cli": "^3.0.0",
|
|
40
|
+
"javascript-obfuscator": "^4.1.1",
|
|
41
|
+
"vitest": "^2.1.8"
|
|
41
42
|
},
|
|
42
43
|
"peerDependencies": {
|
|
43
44
|
"typescript": "^5"
|