@boteteam/utils 0.0.19 → 0.0.20-alpha.0.2
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/cjs/CookieUtils.d.ts +3 -0
- package/dist/cjs/CookieUtils.js +91 -5
- package/dist/cjs/CookieUtils.js.map +2 -2
- package/dist/cjs/environment.d.ts +11 -0
- package/dist/cjs/environment.js +78 -0
- package/dist/cjs/environment.js.map +7 -0
- package/dist/cjs/formatModule/formatModuleData.js +13 -13
- package/dist/cjs/formatModule/formatModuleData.js.map +2 -2
- package/dist/cjs/http.d.ts +40 -0
- package/dist/cjs/http.js +295 -0
- package/dist/cjs/http.js.map +7 -0
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/pathArgsUtils.js +15 -2
- package/dist/cjs/pathArgsUtils.js.map +2 -2
- package/dist/cjs/securityUtils.d.ts +0 -3
- package/dist/cjs/securityUtils.js +31 -4
- package/dist/cjs/securityUtils.js.map +2 -2
- package/dist/esm/CookieUtils.d.ts +3 -0
- package/dist/esm/CookieUtils.js +170 -5
- package/dist/esm/CookieUtils.js.map +1 -1
- package/dist/esm/environment.d.ts +11 -0
- package/dist/esm/environment.js +56 -0
- package/dist/esm/environment.js.map +1 -0
- package/dist/esm/formatModule/formatModuleData.js +16 -15
- package/dist/esm/formatModule/formatModuleData.js.map +1 -1
- package/dist/esm/http.d.ts +40 -0
- package/dist/esm/http.js +315 -0
- package/dist/esm/http.js.map +1 -0
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pathArgsUtils.js +18 -3
- package/dist/esm/pathArgsUtils.js.map +1 -1
- package/dist/esm/securityUtils.d.ts +0 -3
- package/dist/esm/securityUtils.js +34 -4
- package/dist/esm/securityUtils.js.map +1 -1
- package/dist/umd/index.min.js +1 -1
- package/dist/umd/index.min.js.map +1 -1
- package/package.json +5 -4
package/dist/esm/http.js
ADDED
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
var _excluded = ["params"],
|
|
2
|
+
_excluded2 = ["data", "params"];
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
7
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
8
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
9
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
10
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
11
|
+
// import CookieUtil from './CookieUtils';
|
|
12
|
+
import security from '@lingxiteam/security';
|
|
13
|
+
import { getLocation, isReactNative } from "./environment";
|
|
14
|
+
export var tenantIdSessionKey = 'botSelectedTenantID';
|
|
15
|
+
|
|
16
|
+
// React Native 环境下的存储替代方案
|
|
17
|
+
var getStorage = function getStorage() {
|
|
18
|
+
if (isReactNative()) {
|
|
19
|
+
try {
|
|
20
|
+
return require('@react-native-async-storage/async-storage').default;
|
|
21
|
+
} catch (_unused) {
|
|
22
|
+
console.warn('AsyncStorage not available in React Native environment');
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
};
|
|
28
|
+
var http = function http(url, config) {
|
|
29
|
+
// const token = localStorage.getItem('X-Auth-Token');
|
|
30
|
+
// config.headers['X-Auth-Token'] = token;
|
|
31
|
+
config.headers['content-type'] = 'application/json;charset=UTF-8';
|
|
32
|
+
|
|
33
|
+
// 获取 token
|
|
34
|
+
var token = null;
|
|
35
|
+
if (isReactNative()) {
|
|
36
|
+
var AsyncStorage = getStorage();
|
|
37
|
+
if (AsyncStorage) {
|
|
38
|
+
// 在 React Native 中,我们需要异步获取 token
|
|
39
|
+
// 这里简化处理,实际使用时可能需要异步版本
|
|
40
|
+
token = null; // 同步版本暂时返回 null
|
|
41
|
+
}
|
|
42
|
+
} else {
|
|
43
|
+
token = sessionStorage.getItem('token');
|
|
44
|
+
}
|
|
45
|
+
if (token) {
|
|
46
|
+
config.headers.Authorization = "Bearer ".concat(token);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// 兼容生产环境
|
|
50
|
+
config.headers['Tenant-Id'] = currentTenantId;
|
|
51
|
+
return new Promise(function (resolve, rejects) {
|
|
52
|
+
fetch(url, config).then(function (response) {
|
|
53
|
+
var contentType = response.headers.get('content-type');
|
|
54
|
+
if (contentType) {
|
|
55
|
+
if (/application\/octet-stream/.test(contentType) || /application\/zip/.test(contentType) || /application\/vnd\.ms-excel/.test(contentType)) {
|
|
56
|
+
return response.blob();
|
|
57
|
+
}
|
|
58
|
+
if (/application\/json/.test(contentType)) {
|
|
59
|
+
return response.json();
|
|
60
|
+
}
|
|
61
|
+
if (/text\/html/.test(contentType)) {
|
|
62
|
+
return response.text();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return response;
|
|
66
|
+
}).then(function (data) {
|
|
67
|
+
if (Object.prototype.toString.call(data) === '[object Blob]') {
|
|
68
|
+
if (_typeof(data) === 'object' && Object.hasOwnProperty.call(data, 'resultCode') && String(data.resultCode) !== '0') {
|
|
69
|
+
return Promise.reject(data);
|
|
70
|
+
}
|
|
71
|
+
return data;
|
|
72
|
+
}
|
|
73
|
+
if (Array.isArray(data)) return data;
|
|
74
|
+
if (String(data === null || data === void 0 ? void 0 : data.resultCode) === '0') {
|
|
75
|
+
resolve(data === null || data === void 0 ? void 0 : data.resultObject);
|
|
76
|
+
}
|
|
77
|
+
return data;
|
|
78
|
+
}).catch(function (err) {
|
|
79
|
+
rejects(err);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
var baseUrl = "".concat(process.env.REACT_APP_REQ_PREFIX, "/bote");
|
|
84
|
+
var getUrl = function getUrl(url) {
|
|
85
|
+
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
86
|
+
var paramsArr = '';
|
|
87
|
+
if (params && Object.keys(params).length > 0) {
|
|
88
|
+
paramsArr = Object.keys(params).map(function (item) {
|
|
89
|
+
return "".concat(item, "=").concat(params[item]);
|
|
90
|
+
}).join('&');
|
|
91
|
+
}
|
|
92
|
+
return "".concat(baseUrl).concat(url).concat(paramsArr ? "?".concat(paramsArr) : '');
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// 当前租户ID
|
|
96
|
+
var currentTenantId = '';
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* 构造管理平台或机器人工程的完整访问地址
|
|
100
|
+
* @param url 环境变量中配置的地址
|
|
101
|
+
*/
|
|
102
|
+
export var getAccessUrl = function getAccessUrl(url) {
|
|
103
|
+
// 未配置,表示使用当前工程地址,去掉 hash 部分
|
|
104
|
+
if (!url) {
|
|
105
|
+
if (isReactNative()) {
|
|
106
|
+
// React Native 环境中无法获取当前 URL,返回默认值
|
|
107
|
+
return 'http://localhost/';
|
|
108
|
+
}
|
|
109
|
+
var _location = getLocation();
|
|
110
|
+
if (_location) {
|
|
111
|
+
return new URL('', _location.href).toString();
|
|
112
|
+
}
|
|
113
|
+
return 'http://localhost/';
|
|
114
|
+
}
|
|
115
|
+
// 一串数字表示是端口号,与当前工程使用相同的 hostname 以兼容使用不同 IP (回环地址、内网 IP)访问的情况
|
|
116
|
+
if (/^\d+$/.test(url)) {
|
|
117
|
+
if (isReactNative()) {
|
|
118
|
+
// React Native 环境中无法获取 hostname,使用默认值
|
|
119
|
+
return "http://localhost:".concat(url, "/");
|
|
120
|
+
}
|
|
121
|
+
var _location2 = getLocation();
|
|
122
|
+
if (_location2) {
|
|
123
|
+
return "http://".concat(_location2.hostname, ":").concat(url, "/");
|
|
124
|
+
}
|
|
125
|
+
return "http://localhost:".concat(url, "/");
|
|
126
|
+
}
|
|
127
|
+
// 完整地址/相对路径/绝对路径,根据当前工程地址解析
|
|
128
|
+
if (isReactNative()) {
|
|
129
|
+
// React Native 环境中无法获取当前 URL,直接返回原 URL
|
|
130
|
+
return url;
|
|
131
|
+
}
|
|
132
|
+
var location = getLocation();
|
|
133
|
+
if (location) {
|
|
134
|
+
return new URL(url, location.href).toString();
|
|
135
|
+
}
|
|
136
|
+
return url;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// 管理平台访问地址
|
|
140
|
+
var managerUrl = getAccessUrl(process.env.BOTE_MANAGER_URL);
|
|
141
|
+
// 机器人工程访问地址
|
|
142
|
+
var botUrl = getAccessUrl(process.env.BOTE_BOT_URL);
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* 获取管理平台地址
|
|
146
|
+
*
|
|
147
|
+
* @param route 路由("#" 后面的部分),可选
|
|
148
|
+
*/
|
|
149
|
+
var getManagerUrl = function getManagerUrl(route) {
|
|
150
|
+
return route ? "".concat(managerUrl, "#").concat(route) : managerUrl;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* 获取机器人工程访问地址
|
|
155
|
+
*
|
|
156
|
+
* @param route 路由("#" 后面的部分),可选
|
|
157
|
+
*/
|
|
158
|
+
var getBotUrl = function getBotUrl(route) {
|
|
159
|
+
return route ? "".concat(botUrl, "#").concat(route) : botUrl;
|
|
160
|
+
};
|
|
161
|
+
var request = {
|
|
162
|
+
getBaseUrl: function getBaseUrl() {
|
|
163
|
+
return baseUrl;
|
|
164
|
+
},
|
|
165
|
+
setUrlPrefix: function setUrlPrefix(prefix) {
|
|
166
|
+
baseUrl = "".concat(prefix).concat(baseUrl);
|
|
167
|
+
},
|
|
168
|
+
setTenantId: function setTenantId(tenantId) {
|
|
169
|
+
currentTenantId = tenantId;
|
|
170
|
+
},
|
|
171
|
+
getManagerUrl: getManagerUrl,
|
|
172
|
+
getBotUrl: getBotUrl,
|
|
173
|
+
// 获取智能应用图标地址
|
|
174
|
+
getBotIconUrl: function getBotIconUrl(tenantId, botId, updatedTime) {
|
|
175
|
+
if (tenantId && botId) {
|
|
176
|
+
var url = "".concat(baseUrl, "/manager/bot/botIcon?tenantId=").concat(tenantId, "&botId=").concat(botId);
|
|
177
|
+
// 管理平台构造图标链接时加上更新时间参数,可以确保修改图标后浏览器能立即请求新图标
|
|
178
|
+
// 浏览器的缓存策略有些激进,不刷新页面不会重新请求图片(单页应用很少会刷新页面),即使后端返回了 Cache-Control: no-cache
|
|
179
|
+
if (updatedTime) {
|
|
180
|
+
url += "&_=".concat(updatedTime.replace(/\D/g, ''));
|
|
181
|
+
}
|
|
182
|
+
return url;
|
|
183
|
+
}
|
|
184
|
+
return undefined;
|
|
185
|
+
},
|
|
186
|
+
// 获取智能体图标地址
|
|
187
|
+
getSceneIconUrl: function getSceneIconUrl(tenantId, sceneId, updatedTime) {
|
|
188
|
+
if (tenantId && sceneId) {
|
|
189
|
+
var url = "".concat(baseUrl, "/manager/scene/sceneIcon?tenantId=").concat(tenantId, "&sceneId=").concat(sceneId);
|
|
190
|
+
if (updatedTime) {
|
|
191
|
+
url += "&_=".concat(updatedTime.replace(/\D/g, ''));
|
|
192
|
+
}
|
|
193
|
+
return url;
|
|
194
|
+
}
|
|
195
|
+
return undefined;
|
|
196
|
+
},
|
|
197
|
+
// 构造 DocChain 相关地址的辅助方法
|
|
198
|
+
docChain: {
|
|
199
|
+
referenceDocUrl: function referenceDocUrl(_ref) {
|
|
200
|
+
var tenantId = _ref.tenantId,
|
|
201
|
+
docId = _ref.docId,
|
|
202
|
+
token = _ref.token;
|
|
203
|
+
var url = "".concat(managerUrl, "#/referencesDetail?tenantId=").concat(tenantId, "&docId=").concat(docId);
|
|
204
|
+
if (token) {
|
|
205
|
+
url += "&token=".concat(token);
|
|
206
|
+
}
|
|
207
|
+
return url;
|
|
208
|
+
},
|
|
209
|
+
referenceDocChunkUrl: function referenceDocChunkUrl(_ref2) {
|
|
210
|
+
var tenantId = _ref2.tenantId,
|
|
211
|
+
docId = _ref2.docId,
|
|
212
|
+
chunkId = _ref2.chunkId,
|
|
213
|
+
token = _ref2.token,
|
|
214
|
+
score = _ref2.score,
|
|
215
|
+
rank = _ref2.rank,
|
|
216
|
+
docType = _ref2.docType;
|
|
217
|
+
var url = "".concat(managerUrl, "#/documentChunk?tenantId=").concat(tenantId, "&docId=").concat(docId, "&chunkId=").concat(chunkId, "&score=").concat(score, "&rank=").concat(rank, "&docType=").concat(docType);
|
|
218
|
+
if (token) {
|
|
219
|
+
url += "&token=".concat(token);
|
|
220
|
+
}
|
|
221
|
+
return url;
|
|
222
|
+
},
|
|
223
|
+
// 下载文档接口地址
|
|
224
|
+
downloadDocUrl: function downloadDocUrl(_ref3) {
|
|
225
|
+
var tenantId = _ref3.tenantId,
|
|
226
|
+
docId = _ref3.docId,
|
|
227
|
+
token = _ref3.token,
|
|
228
|
+
_ref3$isSecurity = _ref3.isSecurity,
|
|
229
|
+
isSecurity = _ref3$isSecurity === void 0 ? true : _ref3$isSecurity;
|
|
230
|
+
var url = "".concat(baseUrl, "/docchain/v1/doc/read?tenantId=").concat(tenantId, "&read_format=src&doc_id=").concat(docId);
|
|
231
|
+
if (token) {
|
|
232
|
+
url += "&token=".concat(token);
|
|
233
|
+
}
|
|
234
|
+
if (isSecurity) {
|
|
235
|
+
url = security.autoSecurityWithUrl(url);
|
|
236
|
+
}
|
|
237
|
+
return url;
|
|
238
|
+
},
|
|
239
|
+
// 图片地址
|
|
240
|
+
imageUrl: function imageUrl(_ref4) {
|
|
241
|
+
var tenantId = _ref4.tenantId,
|
|
242
|
+
docId = _ref4.docId,
|
|
243
|
+
token = _ref4.token,
|
|
244
|
+
path = _ref4.path,
|
|
245
|
+
_ref4$isSecurity = _ref4.isSecurity,
|
|
246
|
+
isSecurity = _ref4$isSecurity === void 0 ? true : _ref4$isSecurity;
|
|
247
|
+
var url = "".concat(baseUrl, "/docchain/v1/doc/read?tenantId=").concat(tenantId, "&read_format=path&doc_id=").concat(docId, "&path=").concat(encodeURIComponent(path));
|
|
248
|
+
if (token) {
|
|
249
|
+
url += "&token=".concat(token);
|
|
250
|
+
}
|
|
251
|
+
if (isSecurity) {
|
|
252
|
+
url = security.autoSecurityWithUrl(url);
|
|
253
|
+
}
|
|
254
|
+
return url;
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
// 构造 tenantKnowledge 相关地址的辅助方法
|
|
258
|
+
tenantKnowledge: {
|
|
259
|
+
referenceDocUrl: function referenceDocUrl(_ref5) {
|
|
260
|
+
var tenantId = _ref5.tenantId,
|
|
261
|
+
docId = _ref5.docId,
|
|
262
|
+
token = _ref5.token,
|
|
263
|
+
knowledgeType = _ref5.knowledgeType,
|
|
264
|
+
docName = _ref5.docName;
|
|
265
|
+
var url = "".concat(managerUrl, "#/referencesDetail?tenantId=").concat(tenantId, "&docId=").concat(docId, "&knowledgeType=").concat(knowledgeType, "&casPortal=true&docName=").concat(docName);
|
|
266
|
+
if (token) {
|
|
267
|
+
url += "&token=".concat(token);
|
|
268
|
+
}
|
|
269
|
+
return url;
|
|
270
|
+
},
|
|
271
|
+
// 下载文档接口地址
|
|
272
|
+
downloadDocUrl: function downloadDocUrl(_ref6) {
|
|
273
|
+
var knowledgeType = _ref6.knowledgeType,
|
|
274
|
+
docId = _ref6.docId;
|
|
275
|
+
var url = "".concat(baseUrl, "/knowledge/access/downloadKnowledgeDoc?knowledgeType=").concat(knowledgeType, "&docId=").concat(docId);
|
|
276
|
+
return url;
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
get: function get(url, cfg) {
|
|
280
|
+
var _ref7 = cfg || {},
|
|
281
|
+
params = _ref7.params,
|
|
282
|
+
rest = _objectWithoutProperties(_ref7, _excluded);
|
|
283
|
+
// 拼租户ID 到参数中
|
|
284
|
+
var tenantId = currentTenantId || params.tenantId;
|
|
285
|
+
params.tenantId = tenantId;
|
|
286
|
+
var _url = getUrl(url, params);
|
|
287
|
+
return http(_url, _objectSpread({
|
|
288
|
+
method: 'GET',
|
|
289
|
+
headers: {}
|
|
290
|
+
}, rest));
|
|
291
|
+
},
|
|
292
|
+
post: function post(url, cfg) {
|
|
293
|
+
var _ref8 = cfg || {},
|
|
294
|
+
data = _ref8.data,
|
|
295
|
+
params = _ref8.params,
|
|
296
|
+
rest = _objectWithoutProperties(_ref8, _excluded2);
|
|
297
|
+
// 拼租户ID 到参数中
|
|
298
|
+
var tenantId = currentTenantId || data.tenantId;
|
|
299
|
+
var _body;
|
|
300
|
+
if (data instanceof FormData) {
|
|
301
|
+
data.append('tenantId', tenantId);
|
|
302
|
+
_body = data;
|
|
303
|
+
} else {
|
|
304
|
+
_body = JSON.stringify(data || {});
|
|
305
|
+
}
|
|
306
|
+
var _url = getUrl(url, params);
|
|
307
|
+
return http(_url, _objectSpread({
|
|
308
|
+
body: _body,
|
|
309
|
+
method: 'POST',
|
|
310
|
+
headers: {}
|
|
311
|
+
}, rest));
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
export { request };
|
|
315
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["security","getLocation","isReactNative","tenantIdSessionKey","getStorage","require","default","_unused","console","warn","http","url","config","headers","token","AsyncStorage","sessionStorage","getItem","Authorization","concat","currentTenantId","Promise","resolve","rejects","fetch","then","response","contentType","get","test","blob","json","text","data","Object","prototype","toString","call","_typeof","hasOwnProperty","String","resultCode","reject","Array","isArray","resultObject","catch","err","baseUrl","process","env","REACT_APP_REQ_PREFIX","getUrl","params","arguments","length","undefined","paramsArr","keys","map","item","join","getAccessUrl","location","URL","href","hostname","managerUrl","BOTE_MANAGER_URL","botUrl","BOTE_BOT_URL","getManagerUrl","route","getBotUrl","request","getBaseUrl","setUrlPrefix","prefix","setTenantId","tenantId","getBotIconUrl","botId","updatedTime","replace","getSceneIconUrl","sceneId","docChain","referenceDocUrl","_ref","docId","referenceDocChunkUrl","_ref2","chunkId","score","rank","docType","downloadDocUrl","_ref3","_ref3$isSecurity","isSecurity","autoSecurityWithUrl","imageUrl","_ref4","path","_ref4$isSecurity","encodeURIComponent","tenantKnowledge","_ref5","knowledgeType","docName","_ref6","cfg","_ref7","rest","_objectWithoutProperties","_excluded","_url","_objectSpread","method","post","_ref8","_excluded2","_body","FormData","append","JSON","stringify","body"],"sources":["../../src/http.ts"],"sourcesContent":["// import CookieUtil from './CookieUtils';\nimport security from '@lingxiteam/security';\nimport { getLocation, isReactNative } from './environment';\n\nexport const tenantIdSessionKey: string = 'botSelectedTenantID';\n\n// React Native 环境下的存储替代方案\nconst getStorage = () => {\n if (isReactNative()) {\n try {\n return require('@react-native-async-storage/async-storage').default;\n } catch {\n console.warn('AsyncStorage not available in React Native environment');\n return null;\n }\n }\n return null;\n};\n\nconst http = (url: string, config: any) => {\n // const token = localStorage.getItem('X-Auth-Token');\n // config.headers['X-Auth-Token'] = token;\n config.headers['content-type'] = 'application/json;charset=UTF-8';\n \n // 获取 token\n let token: string | null = null;\n if (isReactNative()) {\n const AsyncStorage = getStorage();\n if (AsyncStorage) {\n // 在 React Native 中,我们需要异步获取 token\n // 这里简化处理,实际使用时可能需要异步版本\n token = null; // 同步版本暂时返回 null\n }\n } else {\n token = sessionStorage.getItem('token') as string;\n }\n \n if (token) {\n config.headers.Authorization = `Bearer ${token}`;\n }\n \n // 兼容生产环境\n config.headers['Tenant-Id'] = currentTenantId;\n\n return new Promise((resolve, rejects) => {\n fetch(url, config)\n .then((response) => {\n const contentType: string | null = response.headers.get('content-type');\n if (contentType) {\n if (\n /application\\/octet-stream/.test(contentType) ||\n /application\\/zip/.test(contentType) ||\n /application\\/vnd\\.ms-excel/.test(contentType)\n ) {\n return response.blob();\n }\n if (/application\\/json/.test(contentType)) {\n return response.json();\n }\n if (/text\\/html/.test(contentType)) {\n return response.text();\n }\n }\n return response;\n })\n .then((data) => {\n if (Object.prototype.toString.call(data) === '[object Blob]') {\n if (\n typeof data === 'object' &&\n Object.hasOwnProperty.call(data, 'resultCode') &&\n String(data.resultCode) !== '0'\n ) {\n return Promise.reject(data);\n }\n return data;\n }\n if (Array.isArray(data)) return data;\n if (String(data?.resultCode) === '0') {\n resolve(data?.resultObject);\n }\n return data;\n })\n .catch((err) => {\n rejects(err);\n });\n });\n};\n\nlet baseUrl = `${process.env.REACT_APP_REQ_PREFIX}/bote`;\nconst getUrl = (url: string, params: any = {}) => {\n let paramsArr = '';\n if (params && Object.keys(params).length > 0) {\n paramsArr = Object.keys(params)\n .map((item) => `${item}=${params[item]}`)\n .join('&');\n }\n return `${baseUrl}${url}${paramsArr ? `?${paramsArr}` : ''}`;\n};\n\n// 当前租户ID\nlet currentTenantId = '';\n\n/**\n * 构造管理平台或机器人工程的完整访问地址\n * @param url 环境变量中配置的地址\n */\nexport const getAccessUrl = (url: string | undefined) => {\n // 未配置,表示使用当前工程地址,去掉 hash 部分\n if (!url) {\n if (isReactNative()) {\n // React Native 环境中无法获取当前 URL,返回默认值\n return 'http://localhost/';\n }\n const location = getLocation();\n if (location) {\n return new URL('', location.href).toString();\n }\n return 'http://localhost/';\n }\n // 一串数字表示是端口号,与当前工程使用相同的 hostname 以兼容使用不同 IP (回环地址、内网 IP)访问的情况\n if (/^\\d+$/.test(url)) {\n if (isReactNative()) {\n // React Native 环境中无法获取 hostname,使用默认值\n return `http://localhost:${url}/`;\n }\n const location = getLocation();\n if (location) {\n return `http://${location.hostname}:${url}/`;\n }\n return `http://localhost:${url}/`;\n }\n // 完整地址/相对路径/绝对路径,根据当前工程地址解析\n if (isReactNative()) {\n // React Native 环境中无法获取当前 URL,直接返回原 URL\n return url;\n }\n const location = getLocation();\n if (location) {\n return new URL(url, location.href).toString();\n }\n return url;\n};\n\n// 管理平台访问地址\nconst managerUrl = getAccessUrl(process.env.BOTE_MANAGER_URL);\n// 机器人工程访问地址\nconst botUrl = getAccessUrl(process.env.BOTE_BOT_URL);\n\n/**\n * 获取管理平台地址\n *\n * @param route 路由(\"#\" 后面的部分),可选\n */\nconst getManagerUrl = (route?: string | null) => route ? `${managerUrl}#${route}` : managerUrl;\n\n/**\n * 获取机器人工程访问地址\n *\n * @param route 路由(\"#\" 后面的部分),可选\n */\nconst getBotUrl = (route?: string | null) => route ? `${botUrl}#${route}` : botUrl;\n\nconst request = {\n getBaseUrl: () => baseUrl,\n setUrlPrefix: (prefix: string) => {\n baseUrl = `${prefix}${baseUrl}`;\n },\n setTenantId: (tenantId: string) => {\n currentTenantId = tenantId;\n },\n getManagerUrl,\n getBotUrl,\n // 获取智能应用图标地址\n getBotIconUrl: (tenantId?: string, botId?: string, updatedTime?: string) => {\n if (tenantId && botId) {\n let url = `${baseUrl}/manager/bot/botIcon?tenantId=${tenantId}&botId=${botId}`;\n // 管理平台构造图标链接时加上更新时间参数,可以确保修改图标后浏览器能立即请求新图标\n // 浏览器的缓存策略有些激进,不刷新页面不会重新请求图片(单页应用很少会刷新页面),即使后端返回了 Cache-Control: no-cache\n if (updatedTime) {\n url += `&_=${updatedTime.replace(/\\D/g, '')}`;\n }\n return url;\n }\n return undefined;\n },\n // 获取智能体图标地址\n getSceneIconUrl: (\n tenantId?: string,\n sceneId?: string,\n updatedTime?: string,\n ) => {\n if (tenantId && sceneId) {\n let url = `${baseUrl}/manager/scene/sceneIcon?tenantId=${tenantId}&sceneId=${sceneId}`;\n if (updatedTime) {\n url += `&_=${updatedTime.replace(/\\D/g, '')}`;\n }\n return url;\n }\n return undefined;\n },\n // 构造 DocChain 相关地址的辅助方法\n docChain: {\n referenceDocUrl: ({\n tenantId,\n docId,\n token,\n }: {\n [key: string]: string;\n }) => {\n let url = `${managerUrl}#/referencesDetail?tenantId=${tenantId}&docId=${docId}`;\n if (token) {\n url += `&token=${token}`;\n }\n return url;\n },\n referenceDocChunkUrl: ({\n tenantId,\n docId,\n chunkId,\n token,\n score,\n rank,\n docType,\n }: {\n [key: string]: string;\n }) => {\n let url = `${managerUrl}#/documentChunk?tenantId=${tenantId}&docId=${docId}&chunkId=${chunkId}&score=${score}&rank=${rank}&docType=${docType}`;\n if (token) {\n url += `&token=${token}`;\n }\n return url;\n },\n // 下载文档接口地址\n downloadDocUrl: ({\n tenantId,\n docId,\n token,\n isSecurity = true,\n }: {\n [key: string]: string | boolean;\n }) => {\n let url = `${baseUrl}/docchain/v1/doc/read?tenantId=${tenantId}&read_format=src&doc_id=${docId}`;\n if (token) {\n url += `&token=${token}`;\n }\n if (isSecurity) {\n url = security.autoSecurityWithUrl(url);\n }\n return url;\n },\n // 图片地址\n imageUrl: ({\n tenantId,\n docId,\n token,\n path,\n isSecurity = true,\n }: {\n [key: string]: string | boolean;\n }) => {\n let url = `${baseUrl}/docchain/v1/doc/read?tenantId=${tenantId}&read_format=path&doc_id=${docId}&path=${encodeURIComponent(\n path,\n )}`;\n if (token) {\n url += `&token=${token}`;\n }\n if (isSecurity) {\n url = security.autoSecurityWithUrl(url);\n }\n return url;\n },\n },\n // 构造 tenantKnowledge 相关地址的辅助方法\n tenantKnowledge: {\n referenceDocUrl: ({\n tenantId,\n docId,\n token,\n knowledgeType,\n docName,\n }: {\n [key: string]: string;\n }) => {\n let url = `${managerUrl}#/referencesDetail?tenantId=${tenantId}&docId=${docId}&knowledgeType=${knowledgeType}&casPortal=true&docName=${docName}`;\n if (token) {\n url += `&token=${token}`;\n }\n return url;\n },\n // 下载文档接口地址\n downloadDocUrl: ({ knowledgeType, docId }: { [key: string]: string }) => {\n const url = `${baseUrl}/knowledge/access/downloadKnowledgeDoc?knowledgeType=${knowledgeType}&docId=${docId}`;\n\n return url;\n },\n },\n get: (url: string, cfg: any) => {\n const { params, ...rest }: any = cfg || {};\n // 拼租户ID 到参数中\n const tenantId = currentTenantId || params.tenantId;\n params.tenantId = tenantId;\n\n const _url = getUrl(url, params);\n return http(_url, {\n method: 'GET',\n headers: {},\n ...rest,\n });\n },\n post: (url: string, cfg: any) => {\n const { data, params, ...rest }: any = cfg || {};\n // 拼租户ID 到参数中\n const tenantId = currentTenantId || data.tenantId;\n let _body;\n if (data instanceof FormData) {\n data.append('tenantId', tenantId);\n _body = data;\n } else {\n _body = JSON.stringify(data || {});\n }\n\n const _url = getUrl(url, params);\n return http(_url, {\n body: _body,\n method: 'POST',\n headers: {},\n ...rest,\n });\n },\n};\n\nexport { request };\n"],"mappings":";;;;;;;;;;AAAA;AACA,OAAOA,QAAQ,MAAM,sBAAsB;AAC3C,SAASC,WAAW,EAAEC,aAAa;AAEnC,OAAO,IAAMC,kBAA0B,GAAG,qBAAqB;;AAE/D;AACA,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAA,EAAS;EACvB,IAAIF,aAAa,CAAC,CAAC,EAAE;IACnB,IAAI;MACF,OAAOG,OAAO,CAAC,2CAA2C,CAAC,CAACC,OAAO;IACrE,CAAC,CAAC,OAAAC,OAAA,EAAM;MACNC,OAAO,CAACC,IAAI,CAAC,wDAAwD,CAAC;MACtE,OAAO,IAAI;IACb;EACF;EACA,OAAO,IAAI;AACb,CAAC;AAED,IAAMC,IAAI,GAAG,SAAPA,IAAIA,CAAIC,GAAW,EAAEC,MAAW,EAAK;EACzC;EACA;EACAA,MAAM,CAACC,OAAO,CAAC,cAAc,CAAC,GAAG,gCAAgC;;EAEjE;EACA,IAAIC,KAAoB,GAAG,IAAI;EAC/B,IAAIZ,aAAa,CAAC,CAAC,EAAE;IACnB,IAAMa,YAAY,GAAGX,UAAU,CAAC,CAAC;IACjC,IAAIW,YAAY,EAAE;MAChB;MACA;MACAD,KAAK,GAAG,IAAI,CAAC,CAAC;IAChB;EACF,CAAC,MAAM;IACLA,KAAK,GAAGE,cAAc,CAACC,OAAO,CAAC,OAAO,CAAW;EACnD;EAEA,IAAIH,KAAK,EAAE;IACTF,MAAM,CAACC,OAAO,CAACK,aAAa,aAAAC,MAAA,CAAaL,KAAK,CAAE;EAClD;;EAEA;EACAF,MAAM,CAACC,OAAO,CAAC,WAAW,CAAC,GAAGO,eAAe;EAE7C,OAAO,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,OAAO,EAAK;IACvCC,KAAK,CAACb,GAAG,EAAEC,MAAM,CAAC,CACfa,IAAI,CAAC,UAACC,QAAQ,EAAK;MAClB,IAAMC,WAA0B,GAAGD,QAAQ,CAACb,OAAO,CAACe,GAAG,CAAC,cAAc,CAAC;MACvE,IAAID,WAAW,EAAE;QACf,IACE,2BAA2B,CAACE,IAAI,CAACF,WAAW,CAAC,IAC7C,kBAAkB,CAACE,IAAI,CAACF,WAAW,CAAC,IACpC,4BAA4B,CAACE,IAAI,CAACF,WAAW,CAAC,EAC9C;UACA,OAAOD,QAAQ,CAACI,IAAI,CAAC,CAAC;QACxB;QACA,IAAI,mBAAmB,CAACD,IAAI,CAACF,WAAW,CAAC,EAAE;UACzC,OAAOD,QAAQ,CAACK,IAAI,CAAC,CAAC;QACxB;QACA,IAAI,YAAY,CAACF,IAAI,CAACF,WAAW,CAAC,EAAE;UAClC,OAAOD,QAAQ,CAACM,IAAI,CAAC,CAAC;QACxB;MACF;MACA,OAAON,QAAQ;IACjB,CAAC,CAAC,CACDD,IAAI,CAAC,UAACQ,IAAI,EAAK;MACd,IAAIC,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACJ,IAAI,CAAC,KAAK,eAAe,EAAE;QAC5D,IACEK,OAAA,CAAOL,IAAI,MAAK,QAAQ,IACxBC,MAAM,CAACK,cAAc,CAACF,IAAI,CAACJ,IAAI,EAAE,YAAY,CAAC,IAC9CO,MAAM,CAACP,IAAI,CAACQ,UAAU,CAAC,KAAK,GAAG,EAC/B;UACA,OAAOpB,OAAO,CAACqB,MAAM,CAACT,IAAI,CAAC;QAC7B;QACA,OAAOA,IAAI;MACb;MACA,IAAIU,KAAK,CAACC,OAAO,CAACX,IAAI,CAAC,EAAE,OAAOA,IAAI;MACpC,IAAIO,MAAM,CAACP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEQ,UAAU,CAAC,KAAK,GAAG,EAAE;QACpCnB,OAAO,CAACW,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEY,YAAY,CAAC;MAC7B;MACA,OAAOZ,IAAI;IACb,CAAC,CAAC,CACDa,KAAK,CAAC,UAACC,GAAG,EAAK;MACdxB,OAAO,CAACwB,GAAG,CAAC;IACd,CAAC,CAAC;EACN,CAAC,CAAC;AACJ,CAAC;AAED,IAAIC,OAAO,MAAA7B,MAAA,CAAM8B,OAAO,CAACC,GAAG,CAACC,oBAAoB,UAAO;AACxD,IAAMC,MAAM,GAAG,SAATA,MAAMA,CAAIzC,GAAW,EAAuB;EAAA,IAArB0C,MAAW,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAC3C,IAAIG,SAAS,GAAG,EAAE;EAClB,IAAIJ,MAAM,IAAInB,MAAM,CAACwB,IAAI,CAACL,MAAM,CAAC,CAACE,MAAM,GAAG,CAAC,EAAE;IAC5CE,SAAS,GAAGvB,MAAM,CAACwB,IAAI,CAACL,MAAM,CAAC,CAC5BM,GAAG,CAAC,UAACC,IAAI;MAAA,UAAAzC,MAAA,CAAQyC,IAAI,OAAAzC,MAAA,CAAIkC,MAAM,CAACO,IAAI,CAAC;IAAA,CAAE,CAAC,CACxCC,IAAI,CAAC,GAAG,CAAC;EACd;EACA,UAAA1C,MAAA,CAAU6B,OAAO,EAAA7B,MAAA,CAAGR,GAAG,EAAAQ,MAAA,CAAGsC,SAAS,OAAAtC,MAAA,CAAOsC,SAAS,IAAK,EAAE;AAC5D,CAAC;;AAED;AACA,IAAIrC,eAAe,GAAG,EAAE;;AAExB;AACA;AACA;AACA;AACA,OAAO,IAAM0C,YAAY,GAAG,SAAfA,YAAYA,CAAInD,GAAuB,EAAK;EACvD;EACA,IAAI,CAACA,GAAG,EAAE;IACR,IAAIT,aAAa,CAAC,CAAC,EAAE;MACnB;MACA,OAAO,mBAAmB;IAC5B;IACA,IAAM6D,SAAQ,GAAG9D,WAAW,CAAC,CAAC;IAC9B,IAAI8D,SAAQ,EAAE;MACZ,OAAO,IAAIC,GAAG,CAAC,EAAE,EAAED,SAAQ,CAACE,IAAI,CAAC,CAAC7B,QAAQ,CAAC,CAAC;IAC9C;IACA,OAAO,mBAAmB;EAC5B;EACA;EACA,IAAI,OAAO,CAACP,IAAI,CAAClB,GAAG,CAAC,EAAE;IACrB,IAAIT,aAAa,CAAC,CAAC,EAAE;MACnB;MACA,2BAAAiB,MAAA,CAA2BR,GAAG;IAChC;IACA,IAAMoD,UAAQ,GAAG9D,WAAW,CAAC,CAAC;IAC9B,IAAI8D,UAAQ,EAAE;MACZ,iBAAA5C,MAAA,CAAiB4C,UAAQ,CAACG,QAAQ,OAAA/C,MAAA,CAAIR,GAAG;IAC3C;IACA,2BAAAQ,MAAA,CAA2BR,GAAG;EAChC;EACA;EACA,IAAIT,aAAa,CAAC,CAAC,EAAE;IACnB;IACA,OAAOS,GAAG;EACZ;EACA,IAAMoD,QAAQ,GAAG9D,WAAW,CAAC,CAAC;EAC9B,IAAI8D,QAAQ,EAAE;IACZ,OAAO,IAAIC,GAAG,CAACrD,GAAG,EAAEoD,QAAQ,CAACE,IAAI,CAAC,CAAC7B,QAAQ,CAAC,CAAC;EAC/C;EACA,OAAOzB,GAAG;AACZ,CAAC;;AAED;AACA,IAAMwD,UAAU,GAAGL,YAAY,CAACb,OAAO,CAACC,GAAG,CAACkB,gBAAgB,CAAC;AAC7D;AACA,IAAMC,MAAM,GAAGP,YAAY,CAACb,OAAO,CAACC,GAAG,CAACoB,YAAY,CAAC;;AAErD;AACA;AACA;AACA;AACA;AACA,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,KAAqB;EAAA,OAAKA,KAAK,MAAArD,MAAA,CAAMgD,UAAU,OAAAhD,MAAA,CAAIqD,KAAK,IAAKL,UAAU;AAAA;;AAE9F;AACA;AACA;AACA;AACA;AACA,IAAMM,SAAS,GAAG,SAAZA,SAASA,CAAID,KAAqB;EAAA,OAAKA,KAAK,MAAArD,MAAA,CAAMkD,MAAM,OAAAlD,MAAA,CAAIqD,KAAK,IAAKH,MAAM;AAAA;AAElF,IAAMK,OAAO,GAAG;EACdC,UAAU,EAAE,SAAAA,WAAA;IAAA,OAAM3B,OAAO;EAAA;EACzB4B,YAAY,EAAE,SAAAA,aAACC,MAAc,EAAK;IAChC7B,OAAO,MAAA7B,MAAA,CAAM0D,MAAM,EAAA1D,MAAA,CAAG6B,OAAO,CAAE;EACjC,CAAC;EACD8B,WAAW,EAAE,SAAAA,YAACC,QAAgB,EAAK;IACjC3D,eAAe,GAAG2D,QAAQ;EAC5B,CAAC;EACDR,aAAa,EAAbA,aAAa;EACbE,SAAS,EAATA,SAAS;EACT;EACAO,aAAa,EAAE,SAAAA,cAACD,QAAiB,EAAEE,KAAc,EAAEC,WAAoB,EAAK;IAC1E,IAAIH,QAAQ,IAAIE,KAAK,EAAE;MACrB,IAAItE,GAAG,MAAAQ,MAAA,CAAM6B,OAAO,oCAAA7B,MAAA,CAAiC4D,QAAQ,aAAA5D,MAAA,CAAU8D,KAAK,CAAE;MAC9E;MACA;MACA,IAAIC,WAAW,EAAE;QACfvE,GAAG,UAAAQ,MAAA,CAAU+D,WAAW,CAACC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAE;MAC/C;MACA,OAAOxE,GAAG;IACZ;IACA,OAAO6C,SAAS;EAClB,CAAC;EACD;EACA4B,eAAe,EAAE,SAAAA,gBACfL,QAAiB,EACjBM,OAAgB,EAChBH,WAAoB,EACjB;IACH,IAAIH,QAAQ,IAAIM,OAAO,EAAE;MACvB,IAAI1E,GAAG,MAAAQ,MAAA,CAAM6B,OAAO,wCAAA7B,MAAA,CAAqC4D,QAAQ,eAAA5D,MAAA,CAAYkE,OAAO,CAAE;MACtF,IAAIH,WAAW,EAAE;QACfvE,GAAG,UAAAQ,MAAA,CAAU+D,WAAW,CAACC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAE;MAC/C;MACA,OAAOxE,GAAG;IACZ;IACA,OAAO6C,SAAS;EAClB,CAAC;EACD;EACA8B,QAAQ,EAAE;IACRC,eAAe,EAAE,SAAAA,gBAAAC,IAAA,EAMX;MAAA,IALJT,QAAQ,GAAAS,IAAA,CAART,QAAQ;QACRU,KAAK,GAAAD,IAAA,CAALC,KAAK;QACL3E,KAAK,GAAA0E,IAAA,CAAL1E,KAAK;MAIL,IAAIH,GAAG,MAAAQ,MAAA,CAAMgD,UAAU,kCAAAhD,MAAA,CAA+B4D,QAAQ,aAAA5D,MAAA,CAAUsE,KAAK,CAAE;MAC/E,IAAI3E,KAAK,EAAE;QACTH,GAAG,cAAAQ,MAAA,CAAcL,KAAK,CAAE;MAC1B;MACA,OAAOH,GAAG;IACZ,CAAC;IACD+E,oBAAoB,EAAE,SAAAA,qBAAAC,KAAA,EAUhB;MAAA,IATJZ,QAAQ,GAAAY,KAAA,CAARZ,QAAQ;QACRU,KAAK,GAAAE,KAAA,CAALF,KAAK;QACLG,OAAO,GAAAD,KAAA,CAAPC,OAAO;QACP9E,KAAK,GAAA6E,KAAA,CAAL7E,KAAK;QACL+E,KAAK,GAAAF,KAAA,CAALE,KAAK;QACLC,IAAI,GAAAH,KAAA,CAAJG,IAAI;QACJC,OAAO,GAAAJ,KAAA,CAAPI,OAAO;MAIP,IAAIpF,GAAG,MAAAQ,MAAA,CAAMgD,UAAU,+BAAAhD,MAAA,CAA4B4D,QAAQ,aAAA5D,MAAA,CAAUsE,KAAK,eAAAtE,MAAA,CAAYyE,OAAO,aAAAzE,MAAA,CAAU0E,KAAK,YAAA1E,MAAA,CAAS2E,IAAI,eAAA3E,MAAA,CAAY4E,OAAO,CAAE;MAC9I,IAAIjF,KAAK,EAAE;QACTH,GAAG,cAAAQ,MAAA,CAAcL,KAAK,CAAE;MAC1B;MACA,OAAOH,GAAG;IACZ,CAAC;IACD;IACAqF,cAAc,EAAE,SAAAA,eAAAC,KAAA,EAOV;MAAA,IANJlB,QAAQ,GAAAkB,KAAA,CAARlB,QAAQ;QACRU,KAAK,GAAAQ,KAAA,CAALR,KAAK;QACL3E,KAAK,GAAAmF,KAAA,CAALnF,KAAK;QAAAoF,gBAAA,GAAAD,KAAA,CACLE,UAAU;QAAVA,UAAU,GAAAD,gBAAA,cAAG,IAAI,GAAAA,gBAAA;MAIjB,IAAIvF,GAAG,MAAAQ,MAAA,CAAM6B,OAAO,qCAAA7B,MAAA,CAAkC4D,QAAQ,8BAAA5D,MAAA,CAA2BsE,KAAK,CAAE;MAChG,IAAI3E,KAAK,EAAE;QACTH,GAAG,cAAAQ,MAAA,CAAcL,KAAK,CAAE;MAC1B;MACA,IAAIqF,UAAU,EAAE;QACdxF,GAAG,GAAGX,QAAQ,CAACoG,mBAAmB,CAACzF,GAAG,CAAC;MACzC;MACA,OAAOA,GAAG;IACZ,CAAC;IACD;IACA0F,QAAQ,EAAE,SAAAA,SAAAC,KAAA,EAQJ;MAAA,IAPJvB,QAAQ,GAAAuB,KAAA,CAARvB,QAAQ;QACRU,KAAK,GAAAa,KAAA,CAALb,KAAK;QACL3E,KAAK,GAAAwF,KAAA,CAALxF,KAAK;QACLyF,IAAI,GAAAD,KAAA,CAAJC,IAAI;QAAAC,gBAAA,GAAAF,KAAA,CACJH,UAAU;QAAVA,UAAU,GAAAK,gBAAA,cAAG,IAAI,GAAAA,gBAAA;MAIjB,IAAI7F,GAAG,MAAAQ,MAAA,CAAM6B,OAAO,qCAAA7B,MAAA,CAAkC4D,QAAQ,+BAAA5D,MAAA,CAA4BsE,KAAK,YAAAtE,MAAA,CAASsF,kBAAkB,CACxHF,IACF,CAAC,CAAE;MACH,IAAIzF,KAAK,EAAE;QACTH,GAAG,cAAAQ,MAAA,CAAcL,KAAK,CAAE;MAC1B;MACA,IAAIqF,UAAU,EAAE;QACdxF,GAAG,GAAGX,QAAQ,CAACoG,mBAAmB,CAACzF,GAAG,CAAC;MACzC;MACA,OAAOA,GAAG;IACZ;EACF,CAAC;EACD;EACA+F,eAAe,EAAE;IACfnB,eAAe,EAAE,SAAAA,gBAAAoB,KAAA,EAQX;MAAA,IAPJ5B,QAAQ,GAAA4B,KAAA,CAAR5B,QAAQ;QACRU,KAAK,GAAAkB,KAAA,CAALlB,KAAK;QACL3E,KAAK,GAAA6F,KAAA,CAAL7F,KAAK;QACL8F,aAAa,GAAAD,KAAA,CAAbC,aAAa;QACbC,OAAO,GAAAF,KAAA,CAAPE,OAAO;MAIP,IAAIlG,GAAG,MAAAQ,MAAA,CAAMgD,UAAU,kCAAAhD,MAAA,CAA+B4D,QAAQ,aAAA5D,MAAA,CAAUsE,KAAK,qBAAAtE,MAAA,CAAkByF,aAAa,8BAAAzF,MAAA,CAA2B0F,OAAO,CAAE;MAChJ,IAAI/F,KAAK,EAAE;QACTH,GAAG,cAAAQ,MAAA,CAAcL,KAAK,CAAE;MAC1B;MACA,OAAOH,GAAG;IACZ,CAAC;IACD;IACAqF,cAAc,EAAE,SAAAA,eAAAc,KAAA,EAAyD;MAAA,IAAtDF,aAAa,GAAAE,KAAA,CAAbF,aAAa;QAAEnB,KAAK,GAAAqB,KAAA,CAALrB,KAAK;MACrC,IAAM9E,GAAG,MAAAQ,MAAA,CAAM6B,OAAO,2DAAA7B,MAAA,CAAwDyF,aAAa,aAAAzF,MAAA,CAAUsE,KAAK,CAAE;MAE5G,OAAO9E,GAAG;IACZ;EACF,CAAC;EACDiB,GAAG,EAAE,SAAAA,IAACjB,GAAW,EAAEoG,GAAQ,EAAK;IAC9B,IAAAC,KAAA,GAAiCD,GAAG,IAAI,CAAC,CAAC;MAAlC1D,MAAM,GAAA2D,KAAA,CAAN3D,MAAM;MAAK4D,IAAI,GAAAC,wBAAA,CAAAF,KAAA,EAAAG,SAAA;IACvB;IACA,IAAMpC,QAAQ,GAAG3D,eAAe,IAAIiC,MAAM,CAAC0B,QAAQ;IACnD1B,MAAM,CAAC0B,QAAQ,GAAGA,QAAQ;IAE1B,IAAMqC,IAAI,GAAGhE,MAAM,CAACzC,GAAG,EAAE0C,MAAM,CAAC;IAChC,OAAO3C,IAAI,CAAC0G,IAAI,EAAAC,aAAA;MACdC,MAAM,EAAE,KAAK;MACbzG,OAAO,EAAE,CAAC;IAAC,GACRoG,IAAI,CACR,CAAC;EACJ,CAAC;EACDM,IAAI,EAAE,SAAAA,KAAC5G,GAAW,EAAEoG,GAAQ,EAAK;IAC/B,IAAAS,KAAA,GAAuCT,GAAG,IAAI,CAAC,CAAC;MAAxC9E,IAAI,GAAAuF,KAAA,CAAJvF,IAAI;MAAEoB,MAAM,GAAAmE,KAAA,CAANnE,MAAM;MAAK4D,IAAI,GAAAC,wBAAA,CAAAM,KAAA,EAAAC,UAAA;IAC7B;IACA,IAAM1C,QAAQ,GAAG3D,eAAe,IAAIa,IAAI,CAAC8C,QAAQ;IACjD,IAAI2C,KAAK;IACT,IAAIzF,IAAI,YAAY0F,QAAQ,EAAE;MAC5B1F,IAAI,CAAC2F,MAAM,CAAC,UAAU,EAAE7C,QAAQ,CAAC;MACjC2C,KAAK,GAAGzF,IAAI;IACd,CAAC,MAAM;MACLyF,KAAK,GAAGG,IAAI,CAACC,SAAS,CAAC7F,IAAI,IAAI,CAAC,CAAC,CAAC;IACpC;IAEA,IAAMmF,IAAI,GAAGhE,MAAM,CAACzC,GAAG,EAAE0C,MAAM,CAAC;IAChC,OAAO3C,IAAI,CAAC0G,IAAI,EAAAC,aAAA;MACdU,IAAI,EAAEL,KAAK;MACXJ,MAAM,EAAE,MAAM;MACdzG,OAAO,EAAE,CAAC;IAAC,GACRoG,IAAI,CACR,CAAC;EACJ;AACF,CAAC;AAED,SAASvC,OAAO"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -10,5 +10,7 @@ import loopPageStaticCodeMap from './loopPageStaticCodeMap';
|
|
|
10
10
|
import scriptExecution, { type scriptExecutionType } from './scriptExecution';
|
|
11
11
|
import { getFileUrlById, getRemoteComponentUrlByCode, getRemoteComponentUrlById } from './file';
|
|
12
12
|
import { isValidUrl, sanitizeRedirectUrl, safeRedirect, sanitizeEventHandler } from './securityUtils';
|
|
13
|
+
import { isReactNative, isWeb, isNode, getEnvironment, getWindow, getDocument, getLocation } from './environment';
|
|
14
|
+
import { request, tenantIdSessionKey } from './http';
|
|
13
15
|
export type { fileToBase64Type, asyncLocalStorageType, asyncSessionStorageType, scriptExecutionType, };
|
|
14
|
-
export { fileToBase64, CookieUtils, argsToString, argsToObject, getSearchObj, asyncLocalStorage, asyncSessionStorage, camelToSnake, underscoreToCamelCase, generateRandom18Int, formatModuleData, patternTransitionRegExp, stringPramarsValTransition, loopPageStaticCodeMap, getDataArr, replaceParamsValue, replaceParamsValueForEvent, getParamsContentByParamKeys, getFileUrlById, getRemoteComponentUrlByCode, getRemoteComponentUrlById, stringScriptExecution, scriptExecution, isValidUrl, sanitizeRedirectUrl, safeRedirect, sanitizeEventHandler, };
|
|
16
|
+
export { fileToBase64, CookieUtils, argsToString, argsToObject, getSearchObj, asyncLocalStorage, asyncSessionStorage, camelToSnake, underscoreToCamelCase, generateRandom18Int, formatModuleData, patternTransitionRegExp, stringPramarsValTransition, loopPageStaticCodeMap, getDataArr, replaceParamsValue, replaceParamsValueForEvent, getParamsContentByParamKeys, getFileUrlById, getRemoteComponentUrlByCode, getRemoteComponentUrlById, stringScriptExecution, scriptExecution, isValidUrl, sanitizeRedirectUrl, safeRedirect, sanitizeEventHandler, isReactNative, isWeb, isNode, getEnvironment, getWindow, getDocument, getLocation, request, tenantIdSessionKey, };
|
package/dist/esm/index.js
CHANGED
|
@@ -10,9 +10,11 @@ import loopPageStaticCodeMap from "./loopPageStaticCodeMap";
|
|
|
10
10
|
import scriptExecution from "./scriptExecution";
|
|
11
11
|
import { getFileUrlById, getRemoteComponentUrlByCode, getRemoteComponentUrlById } from "./file";
|
|
12
12
|
import { isValidUrl, sanitizeRedirectUrl, safeRedirect, sanitizeEventHandler } from "./securityUtils";
|
|
13
|
+
import { isReactNative, isWeb, isNode, getEnvironment, getWindow, getDocument, getLocation } from "./environment";
|
|
14
|
+
import { request, tenantIdSessionKey } from "./http";
|
|
13
15
|
|
|
14
16
|
// 避免 _对象 和其他库冲突
|
|
15
17
|
var _ = require('lodash');
|
|
16
18
|
_.noConflict();
|
|
17
|
-
export { fileToBase64, CookieUtils, argsToString, argsToObject, getSearchObj, asyncLocalStorage, asyncSessionStorage, camelToSnake, underscoreToCamelCase, generateRandom18Int, formatModuleData, patternTransitionRegExp, stringPramarsValTransition, loopPageStaticCodeMap, getDataArr, replaceParamsValue, replaceParamsValueForEvent, getParamsContentByParamKeys, getFileUrlById, getRemoteComponentUrlByCode, getRemoteComponentUrlById, stringScriptExecution, scriptExecution, isValidUrl, sanitizeRedirectUrl, safeRedirect, sanitizeEventHandler };
|
|
19
|
+
export { fileToBase64, CookieUtils, argsToString, argsToObject, getSearchObj, asyncLocalStorage, asyncSessionStorage, camelToSnake, underscoreToCamelCase, generateRandom18Int, formatModuleData, patternTransitionRegExp, stringPramarsValTransition, loopPageStaticCodeMap, getDataArr, replaceParamsValue, replaceParamsValueForEvent, getParamsContentByParamKeys, getFileUrlById, getRemoteComponentUrlByCode, getRemoteComponentUrlById, stringScriptExecution, scriptExecution, isValidUrl, sanitizeRedirectUrl, safeRedirect, sanitizeEventHandler, isReactNative, isWeb, isNode, getEnvironment, getWindow, getDocument, getLocation, request, tenantIdSessionKey };
|
|
18
20
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["fileToBase64","CookieUtils","argsToString","argsToObject","getSearchObj","asyncLocalStorage","asyncSessionStorage","camelToSnake","underscoreToCamelCase","generateRandom18Int","getDataArr","replaceParamsValue","getParamsContentByParamKeys","replaceParamsValueForEvent","formatModuleData","patternTransitionRegExp","stringPramarsValTransition","stringScriptExecution","loopPageStaticCodeMap","scriptExecution","getFileUrlById","getRemoteComponentUrlByCode","getRemoteComponentUrlById","isValidUrl","sanitizeRedirectUrl","safeRedirect","sanitizeEventHandler","_","require","noConflict"],"sources":["../../src/index.ts"],"sourcesContent":["import fileToBase64, { type fileToBase64Type } from './fileToBase64';\nimport CookieUtils from './CookieUtils';\nimport { argsToString, argsToObject, getSearchObj } from './pathArgsUtils';\nimport {\n asyncLocalStorage,\n asyncSessionStorage,\n type asyncLocalStorageType,\n type asyncSessionStorageType,\n} from './asyncStorage';\nimport {\n camelToSnake,\n underscoreToCamelCase,\n generateRandom18Int,\n} from './stringUtils';\nimport {\n getDataArr,\n replaceParamsValue,\n getParamsContentByParamKeys,\n replaceParamsValueForEvent,\n} from './treeUtils';\nimport formatModuleData from './formatModule/formatModuleData';\nimport {\n patternTransitionRegExp,\n stringPramarsValTransition,\n stringScriptExecution,\n} from './formatModule/helpers';\nimport loopPageStaticCodeMap from './loopPageStaticCodeMap';\nimport scriptExecution, { type scriptExecutionType } from './scriptExecution';\nimport {\n getFileUrlById,\n getRemoteComponentUrlByCode,\n getRemoteComponentUrlById,\n} from './file';\nimport {\n isValidUrl,\n sanitizeRedirectUrl,\n safeRedirect,\n sanitizeEventHandler,\n} from './securityUtils';\n\n// 避免 _对象 和其他库冲突\nconst _ = require('lodash');\n\n_.noConflict();\n\nexport type {\n fileToBase64Type,\n asyncLocalStorageType,\n asyncSessionStorageType,\n scriptExecutionType,\n};\n\nexport {\n fileToBase64,\n CookieUtils,\n argsToString,\n argsToObject,\n getSearchObj,\n asyncLocalStorage,\n asyncSessionStorage,\n camelToSnake,\n underscoreToCamelCase,\n generateRandom18Int,\n formatModuleData,\n patternTransitionRegExp,\n stringPramarsValTransition,\n loopPageStaticCodeMap,\n getDataArr,\n replaceParamsValue,\n replaceParamsValueForEvent,\n getParamsContentByParamKeys,\n getFileUrlById,\n getRemoteComponentUrlByCode,\n getRemoteComponentUrlById,\n stringScriptExecution,\n scriptExecution,\n isValidUrl,\n sanitizeRedirectUrl,\n safeRedirect,\n sanitizeEventHandler,\n};\n"],"mappings":"AAAA,OAAOA,YAAY;AACnB,OAAOC,WAAW;AAClB,SAASC,YAAY,EAAEC,YAAY,EAAEC,YAAY;AACjD,SACEC,iBAAiB,EACjBC,mBAAmB;AAIrB,SACEC,YAAY,EACZC,qBAAqB,EACrBC,mBAAmB;AAErB,SACEC,UAAU,EACVC,kBAAkB,EAClBC,2BAA2B,EAC3BC,0BAA0B;AAE5B,OAAOC,gBAAgB;AACvB,SACEC,uBAAuB,EACvBC,0BAA0B,EAC1BC,qBAAqB;AAEvB,OAAOC,qBAAqB;AAC5B,OAAOC,eAAe;AACtB,SACEC,cAAc,EACdC,2BAA2B,EAC3BC,yBAAyB;AAE3B,SACEC,UAAU,EACVC,mBAAmB,EACnBC,YAAY,EACZC,oBAAoB;;
|
|
1
|
+
{"version":3,"names":["fileToBase64","CookieUtils","argsToString","argsToObject","getSearchObj","asyncLocalStorage","asyncSessionStorage","camelToSnake","underscoreToCamelCase","generateRandom18Int","getDataArr","replaceParamsValue","getParamsContentByParamKeys","replaceParamsValueForEvent","formatModuleData","patternTransitionRegExp","stringPramarsValTransition","stringScriptExecution","loopPageStaticCodeMap","scriptExecution","getFileUrlById","getRemoteComponentUrlByCode","getRemoteComponentUrlById","isValidUrl","sanitizeRedirectUrl","safeRedirect","sanitizeEventHandler","isReactNative","isWeb","isNode","getEnvironment","getWindow","getDocument","getLocation","request","tenantIdSessionKey","_","require","noConflict"],"sources":["../../src/index.ts"],"sourcesContent":["import fileToBase64, { type fileToBase64Type } from './fileToBase64';\nimport CookieUtils from './CookieUtils';\nimport { argsToString, argsToObject, getSearchObj } from './pathArgsUtils';\nimport {\n asyncLocalStorage,\n asyncSessionStorage,\n type asyncLocalStorageType,\n type asyncSessionStorageType,\n} from './asyncStorage';\nimport {\n camelToSnake,\n underscoreToCamelCase,\n generateRandom18Int,\n} from './stringUtils';\nimport {\n getDataArr,\n replaceParamsValue,\n getParamsContentByParamKeys,\n replaceParamsValueForEvent,\n} from './treeUtils';\nimport formatModuleData from './formatModule/formatModuleData';\nimport {\n patternTransitionRegExp,\n stringPramarsValTransition,\n stringScriptExecution,\n} from './formatModule/helpers';\nimport loopPageStaticCodeMap from './loopPageStaticCodeMap';\nimport scriptExecution, { type scriptExecutionType } from './scriptExecution';\nimport {\n getFileUrlById,\n getRemoteComponentUrlByCode,\n getRemoteComponentUrlById,\n} from './file';\nimport {\n isValidUrl,\n sanitizeRedirectUrl,\n safeRedirect,\n sanitizeEventHandler,\n} from './securityUtils';\nimport {\n isReactNative,\n isWeb,\n isNode,\n getEnvironment,\n getWindow,\n getDocument,\n getLocation,\n} from './environment';\n\nimport { request, tenantIdSessionKey } from './http';\n\n// 避免 _对象 和其他库冲突\nconst _ = require('lodash');\n\n_.noConflict();\n\nexport type {\n fileToBase64Type,\n asyncLocalStorageType,\n asyncSessionStorageType,\n scriptExecutionType,\n};\n\nexport {\n fileToBase64,\n CookieUtils,\n argsToString,\n argsToObject,\n getSearchObj,\n asyncLocalStorage,\n asyncSessionStorage,\n camelToSnake,\n underscoreToCamelCase,\n generateRandom18Int,\n formatModuleData,\n patternTransitionRegExp,\n stringPramarsValTransition,\n loopPageStaticCodeMap,\n getDataArr,\n replaceParamsValue,\n replaceParamsValueForEvent,\n getParamsContentByParamKeys,\n getFileUrlById,\n getRemoteComponentUrlByCode,\n getRemoteComponentUrlById,\n stringScriptExecution,\n scriptExecution,\n isValidUrl,\n sanitizeRedirectUrl,\n safeRedirect,\n sanitizeEventHandler,\n isReactNative,\n isWeb,\n isNode,\n getEnvironment,\n getWindow,\n getDocument,\n getLocation,\n request,\n tenantIdSessionKey,\n};\n"],"mappings":"AAAA,OAAOA,YAAY;AACnB,OAAOC,WAAW;AAClB,SAASC,YAAY,EAAEC,YAAY,EAAEC,YAAY;AACjD,SACEC,iBAAiB,EACjBC,mBAAmB;AAIrB,SACEC,YAAY,EACZC,qBAAqB,EACrBC,mBAAmB;AAErB,SACEC,UAAU,EACVC,kBAAkB,EAClBC,2BAA2B,EAC3BC,0BAA0B;AAE5B,OAAOC,gBAAgB;AACvB,SACEC,uBAAuB,EACvBC,0BAA0B,EAC1BC,qBAAqB;AAEvB,OAAOC,qBAAqB;AAC5B,OAAOC,eAAe;AACtB,SACEC,cAAc,EACdC,2BAA2B,EAC3BC,yBAAyB;AAE3B,SACEC,UAAU,EACVC,mBAAmB,EACnBC,YAAY,EACZC,oBAAoB;AAEtB,SACEC,aAAa,EACbC,KAAK,EACLC,MAAM,EACNC,cAAc,EACdC,SAAS,EACTC,WAAW,EACXC,WAAW;AAGb,SAASC,OAAO,EAAEC,kBAAkB;;AAEpC;AACA,IAAMC,CAAC,GAAGC,OAAO,CAAC,QAAQ,CAAC;AAE3BD,CAAC,CAACE,UAAU,CAAC,CAAC;AASd,SACEtC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,YAAY,EACZC,YAAY,EACZC,iBAAiB,EACjBC,mBAAmB,EACnBC,YAAY,EACZC,qBAAqB,EACrBC,mBAAmB,EACnBK,gBAAgB,EAChBC,uBAAuB,EACvBC,0BAA0B,EAC1BE,qBAAqB,EACrBR,UAAU,EACVC,kBAAkB,EAClBE,0BAA0B,EAC1BD,2BAA2B,EAC3BQ,cAAc,EACdC,2BAA2B,EAC3BC,yBAAyB,EACzBL,qBAAqB,EACrBE,eAAe,EACfI,UAAU,EACVC,mBAAmB,EACnBC,YAAY,EACZC,oBAAoB,EACpBC,aAAa,EACbC,KAAK,EACLC,MAAM,EACNC,cAAc,EACdC,SAAS,EACTC,WAAW,EACXC,WAAW,EACXC,OAAO,EACPC,kBAAkB"}
|
|
@@ -5,6 +5,8 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
5
5
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
6
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
7
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
8
|
+
import { getLocation, isReactNative } from "./environment";
|
|
9
|
+
|
|
8
10
|
/**
|
|
9
11
|
* 对象参数转字符串
|
|
10
12
|
* @param params
|
|
@@ -56,9 +58,22 @@ var argsToObject = function argsToObject(params) {
|
|
|
56
58
|
});
|
|
57
59
|
return res;
|
|
58
60
|
};
|
|
59
|
-
var getSearchObj = function getSearchObj() {
|
|
60
|
-
|
|
61
|
-
var
|
|
61
|
+
var getSearchObj = function getSearchObj(url) {
|
|
62
|
+
// 如果没有提供 url,尝试从当前环境获取
|
|
63
|
+
var targetUrl = url;
|
|
64
|
+
if (!targetUrl) {
|
|
65
|
+
if (isReactNative()) {
|
|
66
|
+
// React Native 环境中无法获取当前 URL,返回空对象
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
var location = getLocation();
|
|
70
|
+
if (location) {
|
|
71
|
+
targetUrl = location.href;
|
|
72
|
+
} else {
|
|
73
|
+
return {};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
var urlArr = targetUrl.split('?');
|
|
62
77
|
if (urlArr.length === 1) return {};
|
|
63
78
|
var search = urlArr.pop();
|
|
64
79
|
var objs = search ? search.split('&') : [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["argsToString","params","paramsAttr","Array","isArray","_typeof","Object","keys","length","forEach","item","push","concat","join","_unused","argsToObject","res","_params","paramsArr","startsWith","slice","split","itemArr","key","value","getSearchObj","url","
|
|
1
|
+
{"version":3,"names":["getLocation","isReactNative","argsToString","params","paramsAttr","Array","isArray","_typeof","Object","keys","length","forEach","item","push","concat","join","_unused","argsToObject","res","_params","paramsArr","startsWith","slice","split","itemArr","key","value","getSearchObj","url","targetUrl","location","href","urlArr","search","pop","objs","obj","_value$split","_value$split2","_slicedToArray","k","v","decodeURIComponent"],"sources":["../../src/pathArgsUtils.ts"],"sourcesContent":["import { getLocation, isReactNative } from './environment';\n\n/**\n * 对象参数转字符串\n * @param params\n * @returns\n */\nconst argsToString = (params: { [key: string]: any }) => {\n const paramsAttr: string[] = [];\n try {\n if (\n params &&\n !Array.isArray(params) &&\n typeof params === 'object' &&\n Object.keys(params).length > 0\n ) {\n Object.keys(params).forEach((item: string) => {\n paramsAttr.push(`${item}=${params[item]}`);\n });\n return paramsAttr?.join('&') as string;\n }\n return '';\n } catch {\n return '';\n }\n};\n\n/**\n * 路径参数转对象\n * @param params\n * @returns\n */\nconst argsToObject = (params: string) => {\n const res: { [key: string]: any } = {};\n const _params = typeof params === 'string' && params ? params : '';\n const paramsArr = _params.startsWith('?') ? _params.slice(1).split('&') : _params.split('&');\n paramsArr.forEach((item: string) => {\n const itemArr: any[] = item.split('=');\n const key = itemArr[0];\n let value = itemArr[1];\n switch (value) {\n case 'false':\n value = false;\n break;\n case 'true':\n value = true;\n break;\n case 'undefined':\n case 'null':\n value = '';\n break;\n default:\n break;\n }\n res[key] = value;\n });\n return res as { [key: string]: any };\n};\n\nconst getSearchObj = (url?: string) => {\n // 如果没有提供 url,尝试从当前环境获取\n let targetUrl = url;\n if (!targetUrl) {\n if (isReactNative()) {\n // React Native 环境中无法获取当前 URL,返回空对象\n return {};\n }\n const location = getLocation();\n if (location) {\n targetUrl = location.href;\n } else {\n return {};\n }\n }\n\n const urlArr = targetUrl.split('?');\n if (urlArr.length === 1) return {};\n const search = urlArr.pop();\n const objs = search ? search.split('&') : [];\n const obj: { [key: string]: any } = {};\n\n objs.forEach((value) => {\n const [k, v] = value.split('=');\n if (v) {\n obj[decodeURIComponent(k)] = decodeURIComponent(v);\n }\n });\n\n return obj as any;\n};\n\nexport { argsToString, argsToObject, getSearchObj };\n"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 安全工具函数,用于防止XSS等安全漏洞
|
|
3
3
|
*/
|
|
4
|
+
import { getLocation, isReactNative } from "./environment";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* 验证URL是否安全,防止XSS攻击
|
|
@@ -12,7 +13,15 @@ export var isValidUrl = function isValidUrl(url) {
|
|
|
12
13
|
return false;
|
|
13
14
|
}
|
|
14
15
|
try {
|
|
15
|
-
var
|
|
16
|
+
var baseUrl;
|
|
17
|
+
if (isReactNative()) {
|
|
18
|
+
// React Native 环境中使用默认的 base URL
|
|
19
|
+
baseUrl = 'http://localhost';
|
|
20
|
+
} else {
|
|
21
|
+
var location = getLocation();
|
|
22
|
+
baseUrl = location ? location.origin : 'http://localhost';
|
|
23
|
+
}
|
|
24
|
+
var urlObj = new URL(url, baseUrl);
|
|
16
25
|
|
|
17
26
|
// 只允许http和https协议,防止javascript:等危险协议
|
|
18
27
|
if (!['http:', 'https:'].includes(urlObj.protocol)) {
|
|
@@ -47,8 +56,21 @@ export var sanitizeRedirectUrl = function sanitizeRedirectUrl(url) {
|
|
|
47
56
|
return defaultUrl;
|
|
48
57
|
}
|
|
49
58
|
try {
|
|
50
|
-
var
|
|
51
|
-
var currentHost
|
|
59
|
+
var baseUrl;
|
|
60
|
+
var currentHost;
|
|
61
|
+
if (isReactNative()) {
|
|
62
|
+
// React Native 环境中使用默认值
|
|
63
|
+
baseUrl = 'http://localhost';
|
|
64
|
+
currentHost = 'localhost';
|
|
65
|
+
} else {
|
|
66
|
+
var location = getLocation();
|
|
67
|
+
if (!location) {
|
|
68
|
+
return defaultUrl;
|
|
69
|
+
}
|
|
70
|
+
baseUrl = location.origin;
|
|
71
|
+
currentHost = location.hostname;
|
|
72
|
+
}
|
|
73
|
+
var urlObj = new URL(url, baseUrl);
|
|
52
74
|
|
|
53
75
|
// 如果没有指定允许的域名,只允许同源URL
|
|
54
76
|
if (allowedDomains.length === 0) {
|
|
@@ -78,7 +100,15 @@ export var sanitizeRedirectUrl = function sanitizeRedirectUrl(url) {
|
|
|
78
100
|
export var safeRedirect = function safeRedirect(url) {
|
|
79
101
|
var allowedDomains = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
80
102
|
var safeUrl = sanitizeRedirectUrl(url, allowedDomains);
|
|
81
|
-
|
|
103
|
+
if (isReactNative()) {
|
|
104
|
+
// React Native 环境中无法直接跳转,可以通过其他方式处理
|
|
105
|
+
console.warn('safeRedirect is not supported in React Native environment');
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
var win = typeof window !== 'undefined' ? window : null;
|
|
109
|
+
if (win) {
|
|
110
|
+
win.location.href = safeUrl;
|
|
111
|
+
}
|
|
82
112
|
};
|
|
83
113
|
|
|
84
114
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["getLocation","isReactNative","isValidUrl","url","baseUrl","location","origin","urlObj","URL","includes","protocol","dangerousPatterns","some","pattern","test","_unused","sanitizeRedirectUrl","allowedDomains","arguments","length","undefined","defaultUrl","currentHost","hostname","isAllowedDomain","domain","endsWith","concat","pathname","search","_unused2","safeRedirect","safeUrl","console","warn","win","window","href","sanitizeEventHandler","handler","apply","error"],"sources":["../../src/securityUtils.ts"],"sourcesContent":["/**\n * 安全工具函数,用于防止XSS等安全漏洞\n */\nimport { getLocation, isReactNative } from './environment';\n\n/**\n * 验证URL是否安全,防止XSS攻击\n * @param url 待验证的URL\n * @returns 是否为安全的URL\n */\nexport const isValidUrl = (url: string): boolean => {\n if (!url || typeof url !== 'string') {\n return false;\n }\n\n try {\n let baseUrl: string;\n if (isReactNative()) {\n // React Native 环境中使用默认的 base URL\n baseUrl = 'http://localhost';\n } else {\n const location = getLocation();\n baseUrl = location ? location.origin : 'http://localhost';\n }\n \n const urlObj = new URL(url, baseUrl);\n \n // 只允许http和https协议,防止javascript:等危险协议\n if (!['http:', 'https:'].includes(urlObj.protocol)) {\n return false;\n }\n\n // 检查是否包含危险字符\n const dangerousPatterns = [\n /javascript:/i,\n /vbscript:/i,\n /data:/i,\n /file:/i,\n /<script/i,\n /onload=/i,\n /onerror=/i,\n /onclick=/i,\n ];\n\n return !dangerousPatterns.some(pattern => pattern.test(url));\n } catch {\n return false;\n }\n};\n\n/**\n * 清理和验证重定向URL,确保安全\n * @param url 待清理的URL\n * @param allowedDomains 允许的域名列表,为空时允许同源URL\n * @returns 清理后的安全URL,如果不安全则返回默认URL\n */\nexport const sanitizeRedirectUrl = (\n url: string,\n allowedDomains: string[] = [],\n defaultUrl: string = '/'\n): string => {\n if (!url || typeof url !== 'string') {\n return defaultUrl;\n }\n\n // 基本URL验证\n if (!isValidUrl(url)) {\n return defaultUrl;\n }\n\n try {\n let baseUrl: string;\n let currentHost: string;\n \n if (isReactNative()) {\n // React Native 环境中使用默认值\n baseUrl = 'http://localhost';\n currentHost = 'localhost';\n } else {\n const location = getLocation();\n if (!location) {\n return defaultUrl;\n }\n baseUrl = location.origin;\n currentHost = location.hostname;\n }\n\n const urlObj = new URL(url, baseUrl);\n\n // 如果没有指定允许的域名,只允许同源URL\n if (allowedDomains.length === 0) {\n if (urlObj.hostname !== currentHost) {\n return defaultUrl;\n }\n } else {\n // 检查是否在允许的域名列表中\n const isAllowedDomain = allowedDomains.some(domain =>\n urlObj.hostname === domain || urlObj.hostname.endsWith(`.${domain}`)\n );\n \n if (!isAllowedDomain && urlObj.hostname !== currentHost) {\n return defaultUrl;\n }\n }\n\n return urlObj.pathname + urlObj.search;\n } catch {\n return defaultUrl;\n }\n};\n\n/**\n * 安全地设置window.location.href,防止XSS攻击\n * @param url 目标URL\n * @param allowedDomains 允许的域名列表\n */\nexport const safeRedirect = (url: string, allowedDomains: string[] = []): void => {\n const safeUrl = sanitizeRedirectUrl(url, allowedDomains);\n \n if (isReactNative()) {\n // React Native 环境中无法直接跳转,可以通过其他方式处理\n console.warn('safeRedirect is not supported in React Native environment');\n return;\n }\n \n const win = typeof window !== 'undefined' ? window : null;\n if (win) {\n win.location.href = safeUrl;\n }\n};\n\n/**\n * 验证和清理事件处理器,防止恶意代码注入\n * @param handler 事件处理函数\n * @returns 安全的事件处理函数\n */\nexport const sanitizeEventHandler = (handler: Function): Function => {\n if (typeof handler !== 'function') {\n return () => {};\n }\n \n return (...args: any[]) => {\n try {\n handler(...args);\n } catch (error) {\n console.error('Event handler error:', error);\n }\n };\n};\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,EAAEC,aAAa;;AAEnC;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,GAAW,EAAc;EAClD,IAAI,CAACA,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IACnC,OAAO,KAAK;EACd;EAEA,IAAI;IACF,IAAIC,OAAe;IACnB,IAAIH,aAAa,CAAC,CAAC,EAAE;MACnB;MACAG,OAAO,GAAG,kBAAkB;IAC9B,CAAC,MAAM;MACL,IAAMC,QAAQ,GAAGL,WAAW,CAAC,CAAC;MAC9BI,OAAO,GAAGC,QAAQ,GAAGA,QAAQ,CAACC,MAAM,GAAG,kBAAkB;IAC3D;IAEA,IAAMC,MAAM,GAAG,IAAIC,GAAG,CAACL,GAAG,EAAEC,OAAO,CAAC;;IAEpC;IACA,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAACK,QAAQ,CAACF,MAAM,CAACG,QAAQ,CAAC,EAAE;MAClD,OAAO,KAAK;IACd;;IAEA;IACA,IAAMC,iBAAiB,GAAG,CACxB,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,CACZ;IAED,OAAO,CAACA,iBAAiB,CAACC,IAAI,CAAC,UAAAC,OAAO;MAAA,OAAIA,OAAO,CAACC,IAAI,CAACX,GAAG,CAAC;IAAA,EAAC;EAC9D,CAAC,CAAC,OAAAY,OAAA,EAAM;IACN,OAAO,KAAK;EACd;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAC9Bb,GAAW,EAGA;EAAA,IAFXc,cAAwB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAAA,IAC7BG,UAAkB,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;EAExB,IAAI,CAACf,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IACnC,OAAOkB,UAAU;EACnB;;EAEA;EACA,IAAI,CAACnB,UAAU,CAACC,GAAG,CAAC,EAAE;IACpB,OAAOkB,UAAU;EACnB;EAEA,IAAI;IACF,IAAIjB,OAAe;IACnB,IAAIkB,WAAmB;IAEvB,IAAIrB,aAAa,CAAC,CAAC,EAAE;MACnB;MACAG,OAAO,GAAG,kBAAkB;MAC5BkB,WAAW,GAAG,WAAW;IAC3B,CAAC,MAAM;MACL,IAAMjB,QAAQ,GAAGL,WAAW,CAAC,CAAC;MAC9B,IAAI,CAACK,QAAQ,EAAE;QACb,OAAOgB,UAAU;MACnB;MACAjB,OAAO,GAAGC,QAAQ,CAACC,MAAM;MACzBgB,WAAW,GAAGjB,QAAQ,CAACkB,QAAQ;IACjC;IAEA,IAAMhB,MAAM,GAAG,IAAIC,GAAG,CAACL,GAAG,EAAEC,OAAO,CAAC;;IAEpC;IACA,IAAIa,cAAc,CAACE,MAAM,KAAK,CAAC,EAAE;MAC/B,IAAIZ,MAAM,CAACgB,QAAQ,KAAKD,WAAW,EAAE;QACnC,OAAOD,UAAU;MACnB;IACF,CAAC,MAAM;MACL;MACA,IAAMG,eAAe,GAAGP,cAAc,CAACL,IAAI,CAAC,UAAAa,MAAM;QAAA,OAChDlB,MAAM,CAACgB,QAAQ,KAAKE,MAAM,IAAIlB,MAAM,CAACgB,QAAQ,CAACG,QAAQ,KAAAC,MAAA,CAAKF,MAAM,CAAE,CAAC;MAAA,CACtE,CAAC;MAED,IAAI,CAACD,eAAe,IAAIjB,MAAM,CAACgB,QAAQ,KAAKD,WAAW,EAAE;QACvD,OAAOD,UAAU;MACnB;IACF;IAEA,OAAOd,MAAM,CAACqB,QAAQ,GAAGrB,MAAM,CAACsB,MAAM;EACxC,CAAC,CAAC,OAAAC,QAAA,EAAM;IACN,OAAOT,UAAU;EACnB;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMU,YAAY,GAAG,SAAfA,YAAYA,CAAI5B,GAAW,EAA0C;EAAA,IAAxCc,cAAwB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EACrE,IAAMc,OAAO,GAAGhB,mBAAmB,CAACb,GAAG,EAAEc,cAAc,CAAC;EAExD,IAAIhB,aAAa,CAAC,CAAC,EAAE;IACnB;IACAgC,OAAO,CAACC,IAAI,CAAC,2DAA2D,CAAC;IACzE;EACF;EAEA,IAAMC,GAAG,GAAG,OAAOC,MAAM,KAAK,WAAW,GAAGA,MAAM,GAAG,IAAI;EACzD,IAAID,GAAG,EAAE;IACPA,GAAG,CAAC9B,QAAQ,CAACgC,IAAI,GAAGL,OAAO;EAC7B;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMM,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,OAAiB,EAAe;EACnE,IAAI,OAAOA,OAAO,KAAK,UAAU,EAAE;IACjC,OAAO,YAAM,CAAC,CAAC;EACjB;EAEA,OAAO,YAAoB;IACzB,IAAI;MACFA,OAAO,CAAAC,KAAA,SAAAtB,SAAQ,CAAC;IAClB,CAAC,CAAC,OAAOuB,KAAK,EAAE;MACdR,OAAO,CAACQ,KAAK,CAAC,sBAAsB,EAAEA,KAAK,CAAC;IAC9C;EACF,CAAC;AACH,CAAC"}
|