@optima-chat/commerce-cli 1.12.13 → 1.12.15
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/api/rest/base.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/api/rest/base.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAA0C,MAAM,OAAO,CAAC;AAerF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAmExE"}
|
package/dist/api/rest/base.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import { ensureValidToken } from '../../utils/config.js';
|
|
3
|
+
// ============== 容器环境 401 标记 ==============
|
|
4
|
+
const TOKEN_REFRESH_MARKER = '__TOKEN_REFRESH_NEEDED__';
|
|
5
|
+
/**
|
|
6
|
+
* 检测是否运行在 AI 容器环境中
|
|
7
|
+
* ws-bridge.js 在容器启动时设置 WORKSPACE_DIR=/home/aiuser
|
|
8
|
+
*/
|
|
9
|
+
function isContainerEnv() {
|
|
10
|
+
return !!process.env.WORKSPACE_DIR;
|
|
11
|
+
}
|
|
3
12
|
/**
|
|
4
13
|
* 创建带认证的 API 客户端
|
|
5
14
|
* 自动在请求前检查 token 有效性
|
|
@@ -19,7 +28,7 @@ export function createAuthenticatedClient(baseURL) {
|
|
|
19
28
|
'/api/v1/oauth/device/authorize',
|
|
20
29
|
'/api/v1/oauth/device/token',
|
|
21
30
|
'/api/v1/oauth/token',
|
|
22
|
-
'/api/v1/public/',
|
|
31
|
+
'/api/v1/public/',
|
|
23
32
|
];
|
|
24
33
|
const url = config.url || '';
|
|
25
34
|
if (skipAuth.some(path => url.includes(path))) {
|
|
@@ -33,20 +42,30 @@ export function createAuthenticatedClient(baseURL) {
|
|
|
33
42
|
config.headers.Authorization = `Bearer ${token}`;
|
|
34
43
|
}
|
|
35
44
|
else {
|
|
36
|
-
// 没有 token,需要登录
|
|
37
45
|
const { AuthenticationError } = await import('../../utils/error.js');
|
|
38
46
|
throw new AuthenticationError('未登录,请先执行 optima auth login');
|
|
39
47
|
}
|
|
40
48
|
}
|
|
41
49
|
catch (error) {
|
|
42
|
-
// Token 过期或未登录,直接拒绝请求
|
|
43
|
-
// 错误会被传递到命令的 catch 块,由 handleError() 统一处理
|
|
44
50
|
return Promise.reject(error);
|
|
45
51
|
}
|
|
46
52
|
return config;
|
|
47
53
|
}, (error) => {
|
|
48
54
|
return Promise.reject(error);
|
|
49
55
|
});
|
|
56
|
+
// 响应拦截器:401 时输出标记供 ws-bridge 检测,然后立即失败
|
|
57
|
+
// AI 通过系统提示词中的重试策略(等 5 秒后重试)来恢复
|
|
58
|
+
client.interceptors.response.use((response) => response, async (error) => {
|
|
59
|
+
const originalRequest = error.config;
|
|
60
|
+
if (error.response?.status === 401 && originalRequest && !originalRequest._markerSent) {
|
|
61
|
+
originalRequest._markerSent = true;
|
|
62
|
+
if (isContainerEnv()) {
|
|
63
|
+
// 输出标记:ws-bridge 在 stdout 中检测到后发送 token_refresh_needed 事件给前端
|
|
64
|
+
process.stderr.write(TOKEN_REFRESH_MARKER + '\n');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return Promise.reject(error);
|
|
68
|
+
});
|
|
50
69
|
return client;
|
|
51
70
|
}
|
|
52
71
|
//# sourceMappingURL=base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/api/rest/base.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/api/rest/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAgE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,4CAA4C;AAE5C,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAExD;;;GAGG;AACH,SAAS,cAAc;IACrB,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,OAAO;QACP,OAAO,EAAE,KAAK;QACd,OAAO,EAAE;YACP,YAAY,EAAE,kBAAkB;SACjC;KACF,CAAC,CAAC;IAEH,mBAAmB;IACnB,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAC7B,KAAK,EAAE,MAAkC,EAAE,EAAE;QAC3C,aAAa;QACb,MAAM,QAAQ,GAAG;YACf,gCAAgC;YAChC,4BAA4B;YAC5B,qBAAqB;YACrB,iBAAiB;SAClB,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,aAAa;QACb,yDAAyD;QACzD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;YACvC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;gBACrE,MAAM,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;QACR,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CACF,CAAC;IAEF,uCAAuC;IACvC,gCAAgC;IAChC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC9B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,KAAK,EAAE,KAAiB,EAAE,EAAE;QAC1B,MAAM,eAAe,GAAG,KAAK,CAAC,MAAgE,CAAC;QAE/F,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACtF,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC;YAEnC,IAAI,cAAc,EAAE,EAAE,CAAC;gBACrB,6DAA6D;gBAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|