ai-world-sdk 1.3.3 → 1.3.6

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.
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Resource Client
4
+ * 平台级共享资源客户端(与 ResourceClient 的插件级 ACL 资源不同)
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SharedResourceClient = void 0;
8
+ const config_1 = require("./config");
9
+ const log_1 = require("./log");
10
+ class SharedResourceClient {
11
+ constructor(config = {}) {
12
+ this.baseUrl =
13
+ config.baseUrl ||
14
+ config_1.sdkConfig.getServerUrl() ||
15
+ (typeof window !== "undefined" ? window.location.origin : "");
16
+ const globalHeaders = config_1.sdkConfig.getHeaders();
17
+ const globalToken = config.token || config_1.sdkConfig.getToken();
18
+ this.headers = {
19
+ "Content-Type": "application/json",
20
+ ...globalHeaders,
21
+ ...config.headers,
22
+ };
23
+ if (globalToken) {
24
+ this.headers["Authorization"] = `Bearer ${globalToken}`;
25
+ }
26
+ }
27
+ async handleErrorResponse(response) {
28
+ let errorMessage = `Request failed: ${response.status} ${response.statusText}`;
29
+ try {
30
+ const errorText = await response.text();
31
+ const errorJson = JSON.parse(errorText);
32
+ errorMessage = errorJson.detail || errorMessage;
33
+ }
34
+ catch { }
35
+ throw new Error(errorMessage);
36
+ }
37
+ buildUrl(path, params) {
38
+ const url = `${this.baseUrl}${path}`;
39
+ if (!params)
40
+ return url;
41
+ const sp = new URLSearchParams();
42
+ for (const [k, v] of Object.entries(params)) {
43
+ if (v !== undefined && v !== null)
44
+ sp.append(k, String(v));
45
+ }
46
+ const qs = sp.toString();
47
+ return qs ? `${url}?${qs}` : url;
48
+ }
49
+ async list(options = {}) {
50
+ config_1.sdkConfig.ensureVersionCompatible();
51
+ const url = this.buildUrl("/api/shared-resources/", {
52
+ page: options.page,
53
+ page_size: options.pageSize,
54
+ search: options.search,
55
+ category: options.category,
56
+ tag: options.tag,
57
+ });
58
+ (0, log_1.logRequest)("GET", url, this.headers);
59
+ const response = await fetch(url, { headers: this.headers });
60
+ if (!response.ok)
61
+ await this.handleErrorResponse(response);
62
+ const result = (await response.json());
63
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
64
+ return result;
65
+ }
66
+ async get(resourceId) {
67
+ config_1.sdkConfig.ensureVersionCompatible();
68
+ const url = `${this.baseUrl}/api/shared-resources/${resourceId}`;
69
+ (0, log_1.logRequest)("GET", url, this.headers);
70
+ const response = await fetch(url, { headers: this.headers });
71
+ if (!response.ok)
72
+ await this.handleErrorResponse(response);
73
+ const result = (await response.json());
74
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
75
+ return result;
76
+ }
77
+ async upload(file, options) {
78
+ config_1.sdkConfig.ensureVersionCompatible();
79
+ const url = this.buildUrl("/api/shared-resources/upload", {
80
+ name: options?.name,
81
+ description: options?.description,
82
+ tags: options?.tags,
83
+ });
84
+ const formData = new FormData();
85
+ formData.append("file", file);
86
+ const uploadHeaders = { ...this.headers };
87
+ delete uploadHeaders["Content-Type"];
88
+ (0, log_1.logRequest)("POST", url, uploadHeaders);
89
+ const response = await fetch(url, {
90
+ method: "POST",
91
+ headers: uploadHeaders,
92
+ body: formData,
93
+ });
94
+ if (!response.ok)
95
+ await this.handleErrorResponse(response);
96
+ return (await response.json());
97
+ }
98
+ async update(resourceId, data) {
99
+ config_1.sdkConfig.ensureVersionCompatible();
100
+ const url = `${this.baseUrl}/api/shared-resources/${resourceId}`;
101
+ (0, log_1.logRequest)("PUT", url, this.headers);
102
+ const response = await fetch(url, {
103
+ method: "PUT",
104
+ headers: this.headers,
105
+ body: JSON.stringify(data),
106
+ });
107
+ if (!response.ok)
108
+ await this.handleErrorResponse(response);
109
+ return (await response.json());
110
+ }
111
+ async delete(resourceId) {
112
+ config_1.sdkConfig.ensureVersionCompatible();
113
+ const url = `${this.baseUrl}/api/shared-resources/${resourceId}`;
114
+ (0, log_1.logRequest)("DELETE", url, this.headers);
115
+ const response = await fetch(url, {
116
+ method: "DELETE",
117
+ headers: this.headers,
118
+ });
119
+ if (!response.ok)
120
+ await this.handleErrorResponse(response);
121
+ return (await response.json());
122
+ }
123
+ async download(resourceId) {
124
+ config_1.sdkConfig.ensureVersionCompatible();
125
+ const url = `${this.baseUrl}/api/shared-resources/${resourceId}/download`;
126
+ (0, log_1.logRequest)("GET", url, this.headers);
127
+ const response = await fetch(url, { headers: this.headers });
128
+ if (!response.ok)
129
+ await this.handleErrorResponse(response);
130
+ return await response.blob();
131
+ }
132
+ }
133
+ exports.SharedResourceClient = SharedResourceClient;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Stats Client & Dashboard Client
3
+ * 统计客户端(管理员)和 Dashboard 客户端(普通用户)
4
+ */
5
+ export interface StatsClientConfig {
6
+ baseUrl?: string;
7
+ token?: string;
8
+ headers?: Record<string, string>;
9
+ }
10
+ export interface AiApiCallsOptions {
11
+ userId?: number;
12
+ apiType?: string;
13
+ provider?: string;
14
+ model?: string;
15
+ pluginId?: string;
16
+ page?: number;
17
+ pageSize?: number;
18
+ }
19
+ export interface AiApiCallsTrendOptions {
20
+ period?: "daily" | "weekly" | "monthly";
21
+ days?: number;
22
+ userId?: number;
23
+ apiType?: string;
24
+ provider?: string;
25
+ model?: string;
26
+ }
27
+ export interface AiApiCallsTrendByUserOptions {
28
+ period?: "daily" | "weekly" | "monthly";
29
+ days?: number;
30
+ apiType?: string;
31
+ provider?: string;
32
+ model?: string;
33
+ limit?: number;
34
+ }
35
+ export interface PluginAccessOptions {
36
+ userId?: number;
37
+ pluginId?: string;
38
+ page?: number;
39
+ pageSize?: number;
40
+ }
41
+ export declare class StatsClient {
42
+ private baseUrl;
43
+ private headers;
44
+ constructor(config?: StatsClientConfig);
45
+ private handleErrorResponse;
46
+ private buildUrl;
47
+ getAiApiCalls(options?: AiApiCallsOptions): Promise<any>;
48
+ getAiApiCallsSummary(): Promise<any>;
49
+ getAiApiCallsTrend(options?: AiApiCallsTrendOptions): Promise<any>;
50
+ getAiApiCallsTrendByUser(options?: AiApiCallsTrendByUserOptions): Promise<any>;
51
+ getPluginAccess(options?: PluginAccessOptions): Promise<any>;
52
+ getPluginAccessSummary(): Promise<any>;
53
+ }
54
+ export declare class DashboardClient {
55
+ private baseUrl;
56
+ private headers;
57
+ constructor(config?: StatsClientConfig);
58
+ private handleErrorResponse;
59
+ getMyStats(): Promise<any>;
60
+ }
package/dist/stats.js ADDED
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * Stats Client & Dashboard Client
4
+ * 统计客户端(管理员)和 Dashboard 客户端(普通用户)
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DashboardClient = exports.StatsClient = void 0;
8
+ const config_1 = require("./config");
9
+ const log_1 = require("./log");
10
+ class StatsClient {
11
+ constructor(config = {}) {
12
+ this.baseUrl =
13
+ config.baseUrl ||
14
+ config_1.sdkConfig.getServerUrl() ||
15
+ (typeof window !== "undefined" ? window.location.origin : "");
16
+ const globalHeaders = config_1.sdkConfig.getHeaders();
17
+ const globalToken = config.token || config_1.sdkConfig.getToken();
18
+ this.headers = {
19
+ "Content-Type": "application/json",
20
+ ...globalHeaders,
21
+ ...config.headers,
22
+ };
23
+ if (globalToken) {
24
+ this.headers["Authorization"] = `Bearer ${globalToken}`;
25
+ }
26
+ }
27
+ async handleErrorResponse(response) {
28
+ let errorMessage = `Request failed: ${response.status} ${response.statusText}`;
29
+ try {
30
+ const errorText = await response.text();
31
+ const errorJson = JSON.parse(errorText);
32
+ errorMessage = errorJson.detail || errorMessage;
33
+ }
34
+ catch { }
35
+ throw new Error(errorMessage);
36
+ }
37
+ buildUrl(path, params) {
38
+ const url = `${this.baseUrl}${path}`;
39
+ if (!params)
40
+ return url;
41
+ const sp = new URLSearchParams();
42
+ for (const [k, v] of Object.entries(params)) {
43
+ if (v !== undefined && v !== null)
44
+ sp.append(k, String(v));
45
+ }
46
+ const qs = sp.toString();
47
+ return qs ? `${url}?${qs}` : url;
48
+ }
49
+ // ==================== AI 接口调用统计(管理员) ====================
50
+ async getAiApiCalls(options = {}) {
51
+ config_1.sdkConfig.ensureVersionCompatible();
52
+ const url = this.buildUrl("/api/stats/ai-api-calls", {
53
+ user_id: options.userId,
54
+ api_type: options.apiType,
55
+ provider: options.provider,
56
+ model: options.model,
57
+ plugin_id: options.pluginId,
58
+ page: options.page,
59
+ page_size: options.pageSize,
60
+ });
61
+ (0, log_1.logRequest)("GET", url, this.headers);
62
+ const response = await fetch(url, { headers: this.headers });
63
+ if (!response.ok)
64
+ await this.handleErrorResponse(response);
65
+ return await response.json();
66
+ }
67
+ async getAiApiCallsSummary() {
68
+ config_1.sdkConfig.ensureVersionCompatible();
69
+ const url = `${this.baseUrl}/api/stats/ai-api-calls/summary`;
70
+ (0, log_1.logRequest)("GET", url, this.headers);
71
+ const response = await fetch(url, { headers: this.headers });
72
+ if (!response.ok)
73
+ await this.handleErrorResponse(response);
74
+ return await response.json();
75
+ }
76
+ async getAiApiCallsTrend(options = {}) {
77
+ config_1.sdkConfig.ensureVersionCompatible();
78
+ const url = this.buildUrl("/api/stats/ai-api-calls/trend", {
79
+ period: options.period,
80
+ days: options.days,
81
+ user_id: options.userId,
82
+ api_type: options.apiType,
83
+ provider: options.provider,
84
+ model: options.model,
85
+ });
86
+ (0, log_1.logRequest)("GET", url, this.headers);
87
+ const response = await fetch(url, { headers: this.headers });
88
+ if (!response.ok)
89
+ await this.handleErrorResponse(response);
90
+ return await response.json();
91
+ }
92
+ async getAiApiCallsTrendByUser(options = {}) {
93
+ config_1.sdkConfig.ensureVersionCompatible();
94
+ const url = this.buildUrl("/api/stats/ai-api-calls/trend/by-user", {
95
+ period: options.period,
96
+ days: options.days,
97
+ api_type: options.apiType,
98
+ provider: options.provider,
99
+ model: options.model,
100
+ limit: options.limit,
101
+ });
102
+ (0, log_1.logRequest)("GET", url, this.headers);
103
+ const response = await fetch(url, { headers: this.headers });
104
+ if (!response.ok)
105
+ await this.handleErrorResponse(response);
106
+ return await response.json();
107
+ }
108
+ // ==================== 插件访问统计(管理员) ====================
109
+ async getPluginAccess(options = {}) {
110
+ config_1.sdkConfig.ensureVersionCompatible();
111
+ const url = this.buildUrl("/api/stats/plugin-access", {
112
+ user_id: options.userId,
113
+ plugin_id: options.pluginId,
114
+ page: options.page,
115
+ page_size: options.pageSize,
116
+ });
117
+ (0, log_1.logRequest)("GET", url, this.headers);
118
+ const response = await fetch(url, { headers: this.headers });
119
+ if (!response.ok)
120
+ await this.handleErrorResponse(response);
121
+ return await response.json();
122
+ }
123
+ async getPluginAccessSummary() {
124
+ config_1.sdkConfig.ensureVersionCompatible();
125
+ const url = `${this.baseUrl}/api/stats/plugin-access/summary`;
126
+ (0, log_1.logRequest)("GET", url, this.headers);
127
+ const response = await fetch(url, { headers: this.headers });
128
+ if (!response.ok)
129
+ await this.handleErrorResponse(response);
130
+ return await response.json();
131
+ }
132
+ }
133
+ exports.StatsClient = StatsClient;
134
+ // ==================== Dashboard Client ====================
135
+ class DashboardClient {
136
+ constructor(config = {}) {
137
+ this.baseUrl =
138
+ config.baseUrl ||
139
+ config_1.sdkConfig.getServerUrl() ||
140
+ (typeof window !== "undefined" ? window.location.origin : "");
141
+ const globalHeaders = config_1.sdkConfig.getHeaders();
142
+ const globalToken = config.token || config_1.sdkConfig.getToken();
143
+ this.headers = {
144
+ "Content-Type": "application/json",
145
+ ...globalHeaders,
146
+ ...config.headers,
147
+ };
148
+ if (globalToken) {
149
+ this.headers["Authorization"] = `Bearer ${globalToken}`;
150
+ }
151
+ }
152
+ async handleErrorResponse(response) {
153
+ let errorMessage = `Request failed: ${response.status} ${response.statusText}`;
154
+ try {
155
+ const errorText = await response.text();
156
+ const errorJson = JSON.parse(errorText);
157
+ errorMessage = errorJson.detail || errorMessage;
158
+ }
159
+ catch { }
160
+ throw new Error(errorMessage);
161
+ }
162
+ async getMyStats() {
163
+ config_1.sdkConfig.ensureVersionCompatible();
164
+ const url = `${this.baseUrl}/api/dashboard/my-stats`;
165
+ (0, log_1.logRequest)("GET", url, this.headers);
166
+ const response = await fetch(url, { headers: this.headers });
167
+ if (!response.ok)
168
+ await this.handleErrorResponse(response);
169
+ return await response.json();
170
+ }
171
+ }
172
+ exports.DashboardClient = DashboardClient;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Versioned Resource Client
3
+ * 版本化资源管理客户端
4
+ * 通过后端 /api/versioned-resources 操作版本化资源系统
5
+ * 资源名称为全局唯一标识,支持语义化版本号管理
6
+ */
7
+ export interface VersionedResourceClientConfig {
8
+ baseUrl?: string;
9
+ token?: string;
10
+ headers?: Record<string, string>;
11
+ }
12
+ export interface VersionedResourceInfo {
13
+ id: number;
14
+ name: string;
15
+ version: string;
16
+ description?: string;
17
+ filename: string;
18
+ size: number;
19
+ content_type: string;
20
+ uploader_id: number;
21
+ uploader_name?: string;
22
+ created_at: string;
23
+ }
24
+ export interface VersionedResourceSummary {
25
+ name: string;
26
+ latest_version: string;
27
+ description?: string;
28
+ filename: string;
29
+ size: number;
30
+ content_type: string;
31
+ version_count: number;
32
+ latest_uploader_name?: string;
33
+ created_at: string;
34
+ }
35
+ export interface VersionedResourceListResponse {
36
+ items: VersionedResourceSummary[];
37
+ total: number;
38
+ page: number;
39
+ page_size: number;
40
+ }
41
+ export interface ListVersionedResourceOptions {
42
+ page?: number;
43
+ pageSize?: number;
44
+ search?: string;
45
+ }
46
+ /**
47
+ * Versioned Resource Client
48
+ * 版本化资源管理客户端类
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * import { VersionedResourceClient } from 'ai-world-sdk';
53
+ *
54
+ * const vr = new VersionedResourceClient();
55
+ *
56
+ * // 上传新版本
57
+ * const file = new File(['content'], 'config.json', { type: 'application/json' });
58
+ * const res = await vr.upload('my-config', '1.0.0', file, '初始版本');
59
+ *
60
+ * // 获取最新版本
61
+ * const latest = await vr.getLatest('my-config');
62
+ *
63
+ * // 列出所有版本
64
+ * const versions = await vr.listVersions('my-config');
65
+ *
66
+ * // 下载指定版本
67
+ * const blob = await vr.download('my-config', '1.0.0');
68
+ *
69
+ * // 下载最新版本
70
+ * const latestBlob = await vr.download('my-config', 'latest');
71
+ * ```
72
+ */
73
+ export declare class VersionedResourceClient {
74
+ private baseUrl;
75
+ private headers;
76
+ constructor(config?: VersionedResourceClientConfig);
77
+ private handleErrorResponse;
78
+ /**
79
+ * 上传新版本
80
+ * @param name 资源名称(全局唯一标识)
81
+ * @param version 语义化版本号(必须高于当前最新版本)
82
+ * @param file 文件
83
+ * @param description 可选的版本描述
84
+ */
85
+ upload(name: string, version: string, file: File | Blob, description?: string): Promise<VersionedResourceInfo>;
86
+ /**
87
+ * 分页列出所有版本化资源(聚合最新版本信息)
88
+ */
89
+ list(options?: ListVersionedResourceOptions): Promise<VersionedResourceListResponse>;
90
+ /**
91
+ * 列出指定资源的所有版本(按版本号降序)
92
+ */
93
+ listVersions(name: string): Promise<VersionedResourceInfo[]>;
94
+ /**
95
+ * 获取指定资源的最新版本信息
96
+ */
97
+ getLatest(name: string): Promise<VersionedResourceInfo>;
98
+ /**
99
+ * 获取指定版本信息
100
+ */
101
+ getVersion(name: string, version: string): Promise<VersionedResourceInfo>;
102
+ /**
103
+ * 下载指定版本文件(version 可传 "latest" 下载最新版本)
104
+ */
105
+ download(name: string, version: string): Promise<Blob>;
106
+ /**
107
+ * 删除指定版本
108
+ */
109
+ deleteVersion(name: string, version: string): Promise<{
110
+ name: string;
111
+ version: string;
112
+ deleted: boolean;
113
+ }>;
114
+ }
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ /**
3
+ * Versioned Resource Client
4
+ * 版本化资源管理客户端
5
+ * 通过后端 /api/versioned-resources 操作版本化资源系统
6
+ * 资源名称为全局唯一标识,支持语义化版本号管理
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.VersionedResourceClient = void 0;
10
+ const config_1 = require("./config");
11
+ const log_1 = require("./log");
12
+ // ==================== VersionedResourceClient ====================
13
+ /**
14
+ * Versioned Resource Client
15
+ * 版本化资源管理客户端类
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * import { VersionedResourceClient } from 'ai-world-sdk';
20
+ *
21
+ * const vr = new VersionedResourceClient();
22
+ *
23
+ * // 上传新版本
24
+ * const file = new File(['content'], 'config.json', { type: 'application/json' });
25
+ * const res = await vr.upload('my-config', '1.0.0', file, '初始版本');
26
+ *
27
+ * // 获取最新版本
28
+ * const latest = await vr.getLatest('my-config');
29
+ *
30
+ * // 列出所有版本
31
+ * const versions = await vr.listVersions('my-config');
32
+ *
33
+ * // 下载指定版本
34
+ * const blob = await vr.download('my-config', '1.0.0');
35
+ *
36
+ * // 下载最新版本
37
+ * const latestBlob = await vr.download('my-config', 'latest');
38
+ * ```
39
+ */
40
+ class VersionedResourceClient {
41
+ constructor(config = {}) {
42
+ this.baseUrl =
43
+ config.baseUrl ||
44
+ config_1.sdkConfig.getServerUrl() ||
45
+ (typeof window !== "undefined" ? window.location.origin : "");
46
+ const globalHeaders = config_1.sdkConfig.getHeaders();
47
+ const globalToken = config.token || config_1.sdkConfig.getToken();
48
+ this.headers = {
49
+ ...globalHeaders,
50
+ ...config.headers,
51
+ };
52
+ if (globalToken) {
53
+ this.headers["Authorization"] = `Bearer ${globalToken}`;
54
+ }
55
+ }
56
+ async handleErrorResponse(response) {
57
+ let errorMessage = `Request failed: ${response.status} ${response.statusText}`;
58
+ try {
59
+ const errorText = await response.text();
60
+ const errorJson = JSON.parse(errorText);
61
+ errorMessage = errorJson.detail || errorMessage;
62
+ }
63
+ catch {
64
+ // ignore parse error
65
+ }
66
+ throw new Error(errorMessage);
67
+ }
68
+ /**
69
+ * 上传新版本
70
+ * @param name 资源名称(全局唯一标识)
71
+ * @param version 语义化版本号(必须高于当前最新版本)
72
+ * @param file 文件
73
+ * @param description 可选的版本描述
74
+ */
75
+ async upload(name, version, file, description) {
76
+ const params = new URLSearchParams();
77
+ params.append("name", name);
78
+ params.append("version", version);
79
+ if (description)
80
+ params.append("description", description);
81
+ const url = `${this.baseUrl}/api/versioned-resources/upload?${params.toString()}`;
82
+ const formData = new FormData();
83
+ formData.append("file", file);
84
+ (0, log_1.debugLog)("VersionedResource", `Uploading ${name}@${version}`);
85
+ (0, log_1.logRequest)("POST", url);
86
+ const response = await fetch(url, {
87
+ method: "POST",
88
+ headers: {
89
+ ...this.headers,
90
+ },
91
+ body: formData,
92
+ });
93
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, response.body);
94
+ if (!response.ok) {
95
+ return this.handleErrorResponse(response);
96
+ }
97
+ return response.json();
98
+ }
99
+ /**
100
+ * 分页列出所有版本化资源(聚合最新版本信息)
101
+ */
102
+ async list(options = {}) {
103
+ const params = new URLSearchParams();
104
+ if (options.page)
105
+ params.append("page", options.page.toString());
106
+ if (options.pageSize)
107
+ params.append("page_size", options.pageSize.toString());
108
+ if (options.search)
109
+ params.append("search", options.search);
110
+ const url = `${this.baseUrl}/api/versioned-resources/?${params.toString()}`;
111
+ (0, log_1.debugLog)("VersionedResource", `Listing resources`);
112
+ (0, log_1.logRequest)("GET", url);
113
+ const response = await fetch(url, {
114
+ method: "GET",
115
+ headers: this.headers,
116
+ });
117
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, response.body);
118
+ if (!response.ok) {
119
+ return this.handleErrorResponse(response);
120
+ }
121
+ return response.json();
122
+ }
123
+ /**
124
+ * 列出指定资源的所有版本(按版本号降序)
125
+ */
126
+ async listVersions(name) {
127
+ const url = `${this.baseUrl}/api/versioned-resources/${encodeURIComponent(name)}/versions`;
128
+ (0, log_1.debugLog)("VersionedResource", `Listing versions of ${name}`);
129
+ (0, log_1.logRequest)("GET", url);
130
+ const response = await fetch(url, {
131
+ method: "GET",
132
+ headers: this.headers,
133
+ });
134
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, response.body);
135
+ if (!response.ok) {
136
+ return this.handleErrorResponse(response);
137
+ }
138
+ return response.json();
139
+ }
140
+ /**
141
+ * 获取指定资源的最新版本信息
142
+ */
143
+ async getLatest(name) {
144
+ const url = `${this.baseUrl}/api/versioned-resources/${encodeURIComponent(name)}/latest`;
145
+ (0, log_1.debugLog)("VersionedResource", `Getting latest version of ${name}`);
146
+ (0, log_1.logRequest)("GET", url);
147
+ const response = await fetch(url, {
148
+ method: "GET",
149
+ headers: this.headers,
150
+ });
151
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, response.body);
152
+ if (!response.ok) {
153
+ return this.handleErrorResponse(response);
154
+ }
155
+ return response.json();
156
+ }
157
+ /**
158
+ * 获取指定版本信息
159
+ */
160
+ async getVersion(name, version) {
161
+ const url = `${this.baseUrl}/api/versioned-resources/${encodeURIComponent(name)}/${encodeURIComponent(version)}`;
162
+ (0, log_1.debugLog)("VersionedResource", `Getting ${name}@${version}`);
163
+ (0, log_1.logRequest)("GET", url);
164
+ const response = await fetch(url, {
165
+ method: "GET",
166
+ headers: this.headers,
167
+ });
168
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, response.body);
169
+ if (!response.ok) {
170
+ return this.handleErrorResponse(response);
171
+ }
172
+ return response.json();
173
+ }
174
+ /**
175
+ * 下载指定版本文件(version 可传 "latest" 下载最新版本)
176
+ */
177
+ async download(name, version) {
178
+ const url = `${this.baseUrl}/api/versioned-resources/${encodeURIComponent(name)}/${encodeURIComponent(version)}/download`;
179
+ (0, log_1.debugLog)("VersionedResource", `Downloading ${name}@${version}`);
180
+ (0, log_1.logRequest)("GET", url);
181
+ const response = await fetch(url, {
182
+ method: "GET",
183
+ headers: this.headers,
184
+ });
185
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, response.body);
186
+ if (!response.ok) {
187
+ return this.handleErrorResponse(response);
188
+ }
189
+ return response.blob();
190
+ }
191
+ /**
192
+ * 删除指定版本
193
+ */
194
+ async deleteVersion(name, version) {
195
+ const url = `${this.baseUrl}/api/versioned-resources/${encodeURIComponent(name)}/${encodeURIComponent(version)}`;
196
+ (0, log_1.debugLog)("VersionedResource", `Deleting ${name}@${version}`);
197
+ (0, log_1.logRequest)("DELETE", url);
198
+ const response = await fetch(url, {
199
+ method: "DELETE",
200
+ headers: this.headers,
201
+ });
202
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, response.body);
203
+ if (!response.ok) {
204
+ return this.handleErrorResponse(response);
205
+ }
206
+ return response.json();
207
+ }
208
+ }
209
+ exports.VersionedResourceClient = VersionedResourceClient;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-world-sdk",
3
- "version": "1.3.3",
3
+ "version": "1.3.6",
4
4
  "description": "TypeScript SDK for AI World Platform - Chat Models, Image Generation, and Video Generation",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",