mirror of
https://github.com/vastxie/99AI.git
synced 2025-11-12 11:43:42 +08:00
v3.5.0
This commit is contained in:
14
dist/common/auth/jwt.strategy.js
vendored
14
dist/common/auth/jwt.strategy.js
vendored
@@ -10,17 +10,17 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.JwtStrategy = void 0;
|
||||
const nestjs_config_1 = require("nestjs-config");
|
||||
const passport_jwt_1 = require("passport-jwt");
|
||||
const passport_1 = require("@nestjs/passport");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const passport_1 = require("@nestjs/passport");
|
||||
const passport_jwt_1 = require("passport-jwt");
|
||||
const redisCache_service_1 = require("../../modules/redisCache/redisCache.service");
|
||||
let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(passport_jwt_1.Strategy) {
|
||||
constructor(configService) {
|
||||
constructor(redisService) {
|
||||
super({
|
||||
jwtFromRequest: passport_jwt_1.ExtractJwt.fromAuthHeaderAsBearerToken(),
|
||||
secretOrKey: configService.get('jwt').secret,
|
||||
secretOrKey: redisService.getJwtSecret(),
|
||||
});
|
||||
this.configService = configService;
|
||||
this.redisService = redisService;
|
||||
}
|
||||
async validate(payload) {
|
||||
return payload;
|
||||
@@ -28,6 +28,6 @@ let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(pas
|
||||
};
|
||||
JwtStrategy = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__metadata("design:paramtypes", [nestjs_config_1.ConfigService])
|
||||
__metadata("design:paramtypes", [redisCache_service_1.RedisCacheService])
|
||||
], JwtStrategy);
|
||||
exports.JwtStrategy = JwtStrategy;
|
||||
|
||||
17
dist/common/auth/jwtAuth.guard.js
vendored
17
dist/common/auth/jwtAuth.guard.js
vendored
@@ -10,12 +10,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.JwtAuthGuard = void 0;
|
||||
const globalConfig_service_1 = require("../../modules/globalConfig/globalConfig.service");
|
||||
const redisCache_service_1 = require("../../modules/redisCache/redisCache.service");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const core_1 = require("@nestjs/core");
|
||||
const passport_1 = require("@nestjs/passport");
|
||||
const jwt = require("jsonwebtoken");
|
||||
const core_1 = require("@nestjs/core");
|
||||
const globalConfig_service_1 = require("../../modules/globalConfig/globalConfig.service");
|
||||
const auth_service_1 = require("../../modules/auth/auth.service");
|
||||
let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
||||
constructor(redisCacheService, moduleRef, globalConfigService, authService) {
|
||||
@@ -27,13 +27,14 @@ let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
||||
}
|
||||
async canActivate(context) {
|
||||
if (!this.redisCacheService) {
|
||||
this.redisCacheService = this.moduleRef.get(redisCache_service_1.RedisCacheService, { strict: false });
|
||||
this.redisCacheService = this.moduleRef.get(redisCache_service_1.RedisCacheService, {
|
||||
strict: false,
|
||||
});
|
||||
}
|
||||
const request = context.switchToHttp().getRequest();
|
||||
const domain = request.headers['x-website-domain'];
|
||||
const token = this.extractToken(request);
|
||||
request.user = this.validateToken(token);
|
||||
const auth = this.globalConfigService.getNineAiToken();
|
||||
request.user = await this.validateToken(token);
|
||||
await this.redisCacheService.checkTokenAuth(token, request);
|
||||
return true;
|
||||
}
|
||||
@@ -56,9 +57,11 @@ let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
||||
}
|
||||
return parts[1];
|
||||
}
|
||||
validateToken(token) {
|
||||
async validateToken(token) {
|
||||
try {
|
||||
return jwt.verify(token, process.env.JWT_SECRET);
|
||||
const secret = await this.redisCacheService.getJwtSecret();
|
||||
const decoded = await jwt.verify(token, secret);
|
||||
return decoded;
|
||||
}
|
||||
catch (error) {
|
||||
throw new common_1.HttpException('亲爱的用户,请登录后继续操作,我们正在等您的到来!', common_1.HttpStatus.UNAUTHORIZED);
|
||||
|
||||
45
dist/common/logger/custom-logger.service.js
vendored
Normal file
45
dist/common/logger/custom-logger.service.js
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.CustomLoggerService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
let CustomLoggerService = class CustomLoggerService extends common_1.ConsoleLogger {
|
||||
constructor() {
|
||||
super();
|
||||
this.isDev = process.env.ISDEV === 'TRUE';
|
||||
}
|
||||
log(message, context) {
|
||||
super.log(message, context);
|
||||
}
|
||||
error(message, trace, context) {
|
||||
super.error(message, trace, context);
|
||||
}
|
||||
warn(message, context) {
|
||||
if (this.isDev) {
|
||||
super.warn(message, context);
|
||||
}
|
||||
}
|
||||
debug(message, context) {
|
||||
if (this.isDev) {
|
||||
super.debug(message, context);
|
||||
}
|
||||
}
|
||||
verbose(message, context) {
|
||||
if (this.isDev) {
|
||||
super.verbose(message, context);
|
||||
}
|
||||
}
|
||||
};
|
||||
CustomLoggerService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__metadata("design:paramtypes", [])
|
||||
], CustomLoggerService);
|
||||
exports.CustomLoggerService = CustomLoggerService;
|
||||
6
dist/common/swagger/index.js
vendored
6
dist/common/swagger/index.js
vendored
@@ -3,13 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.createSwagger = void 0;
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const swaggerOptions = new swagger_1.DocumentBuilder()
|
||||
.setTitle('Nine Team api document')
|
||||
.setDescription('Nine Team api document')
|
||||
.setTitle('AIWeb Team api document')
|
||||
.setDescription('AIWeb Team api document')
|
||||
.setVersion('1.0.0')
|
||||
.addBearerAuth()
|
||||
.build();
|
||||
function createSwagger(app) {
|
||||
const document = swagger_1.SwaggerModule.createDocument(app, swaggerOptions);
|
||||
swagger_1.SwaggerModule.setup('/nineai/swagger/docs', app, document);
|
||||
swagger_1.SwaggerModule.setup('/swagger/docs', app, document);
|
||||
}
|
||||
exports.createSwagger = createSwagger;
|
||||
|
||||
41
dist/common/utils/compileNetwork.js
vendored
41
dist/common/utils/compileNetwork.js
vendored
@@ -1,41 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.compileNetwork = void 0;
|
||||
const axios_1 = require("axios");
|
||||
function formatSearchData(searchData, question) {
|
||||
const formatStr = searchData.results.map(({ title, body, href }) => `'${title}' : ${body} ; (${href})`).join('\n\n');
|
||||
const currentDate = new Date().toISOString().split('T')[0];
|
||||
const instructions = '你的任务是优先利用网络搜索结果来回答问题,并使用提问时的语言风格进行回复。你应该提供一个全面而有条理的回答,在每条答案后面明确指出来源于哪个链接,使用 [[数字](链接)] 格式进行标注。以下是搜索结果:';
|
||||
return `${instructions}\n今天是${currentDate}\n${formatStr}`;
|
||||
}
|
||||
async function compileNetwork(question) {
|
||||
const currentDate = new Date().toISOString().split('T')[0];
|
||||
console.log(`Current date: ${currentDate}`);
|
||||
console.log(`开始对问题“${question}”进行网络编译`);
|
||||
const datedQuestion = `${currentDate} ${question}`;
|
||||
let searchData = { results: [] };
|
||||
try {
|
||||
const url = ``;
|
||||
console.log(`正在向搜索API发送请求,URL为:${url}`);
|
||||
const responseData = await axios_1.default.get(url);
|
||||
searchData = responseData.data;
|
||||
console.log(`已成功接收问题“${question}”的搜索结果,结果数量:${searchData.results.length}`);
|
||||
searchData.results.forEach((result, index) => {
|
||||
console.log(`结果 ${index + 1}: 标题: ${result.title}, 链接: ${result.href}, 摘要: ${result.body.substring(0, 100)}...`);
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
console.log(`在对问题“${question}”进行网络编译时出错:`, error);
|
||||
}
|
||||
let formattedData = "";
|
||||
if (searchData.results.length === 0) {
|
||||
console.log(`未找到问题“${question}”的搜索结果,将返回原问题`);
|
||||
return question;
|
||||
}
|
||||
else {
|
||||
formattedData = formatSearchData(searchData, question);
|
||||
console.log(`格式化后的搜索结果为:\n${formattedData}`);
|
||||
return formattedData;
|
||||
}
|
||||
}
|
||||
exports.compileNetwork = compileNetwork;
|
||||
11
dist/common/utils/fromatUrl.js
vendored
Normal file
11
dist/common/utils/fromatUrl.js
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.formatUrl = void 0;
|
||||
function formatUrl(url) {
|
||||
let formattedUrl = url.replace(/\s+/g, '');
|
||||
if (formattedUrl.endsWith('/')) {
|
||||
formattedUrl = formattedUrl.slice(0, -1);
|
||||
}
|
||||
return formattedUrl;
|
||||
}
|
||||
exports.formatUrl = formatUrl;
|
||||
51
dist/common/utils/getClientIp.js
vendored
51
dist/common/utils/getClientIp.js
vendored
@@ -1,43 +1,22 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getClientIp = void 0;
|
||||
function getClientIp(request) {
|
||||
let ipAddress = '';
|
||||
const headerList = [
|
||||
'X-Client-IP',
|
||||
'X-Real-IP',
|
||||
'X-Forwarded-For',
|
||||
'CF-Connecting-IP',
|
||||
'True-Client-IP',
|
||||
'X-Cluster-Client-IP',
|
||||
'Proxy-Client-IP',
|
||||
'WL-Proxy-Client-IP',
|
||||
'HTTP_CLIENT_IP',
|
||||
'HTTP_X_FORWARDED_FOR',
|
||||
];
|
||||
for (const header of headerList) {
|
||||
const value = request.headers[header];
|
||||
if (value && typeof value === 'string') {
|
||||
const ips = value.split(',');
|
||||
ipAddress = ips[0].trim();
|
||||
break;
|
||||
}
|
||||
function getFirstValidIp(ipString) {
|
||||
const ips = ipString.split(',').map(ip => ip.trim());
|
||||
return ips.find(ip => isValidIp(ip)) || '';
|
||||
}
|
||||
function isValidIp(ip) {
|
||||
return /^\d{1,3}(\.\d{1,3}){3}$/.test(ip) || /^::ffff:\d{1,3}(\.\d{1,3}){3}$/.test(ip);
|
||||
}
|
||||
function getClientIp(req) {
|
||||
const forwardedFor = req.header('x-forwarded-for');
|
||||
let clientIp = forwardedFor ? getFirstValidIp(forwardedFor) : '';
|
||||
if (!clientIp) {
|
||||
clientIp = req.connection.remoteAddress || req.socket.remoteAddress || '';
|
||||
}
|
||||
if (!ipAddress) {
|
||||
ipAddress = request.connection.remoteAddress || '';
|
||||
if (clientIp.startsWith('::ffff:')) {
|
||||
clientIp = clientIp.substring(7);
|
||||
}
|
||||
if (ipAddress && ipAddress.includes('::')) {
|
||||
const isLocal = /^(::1|fe80(:1)?::1(%.*)?)$/i.test(ipAddress);
|
||||
if (isLocal) {
|
||||
ipAddress = '';
|
||||
}
|
||||
else if (ipAddress.includes('::ffff:')) {
|
||||
ipAddress = ipAddress.split(':').pop() || '';
|
||||
}
|
||||
}
|
||||
if (!ipAddress || !/\d+\.\d+\.\d+\.\d+/.test(ipAddress)) {
|
||||
ipAddress = '';
|
||||
}
|
||||
return ipAddress;
|
||||
return clientIp;
|
||||
}
|
||||
exports.getClientIp = getClientIp;
|
||||
|
||||
31
dist/common/utils/getTokenCount.js
vendored
Normal file
31
dist/common/utils/getTokenCount.js
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getTokenCount = void 0;
|
||||
const tiktoken_1 = require("@dqbd/tiktoken");
|
||||
const getTokenCount = async (input) => {
|
||||
let text = '';
|
||||
if (Array.isArray(input)) {
|
||||
text = input.reduce((pre, cur) => {
|
||||
if (Array.isArray(cur.content)) {
|
||||
const contentText = cur.content
|
||||
.filter((item) => item.type === 'text')
|
||||
.map((item) => item.text)
|
||||
.join(' ');
|
||||
return pre + contentText;
|
||||
}
|
||||
else {
|
||||
return pre + (cur.content || '');
|
||||
}
|
||||
}, '');
|
||||
}
|
||||
else if (typeof input === 'string') {
|
||||
text = input;
|
||||
}
|
||||
else if (input) {
|
||||
text = String(input);
|
||||
}
|
||||
text = text.replace(/<\|endoftext\|>/g, '');
|
||||
const tokenizer = (0, tiktoken_1.get_encoding)('cl100k_base');
|
||||
return tokenizer.encode(text).length;
|
||||
};
|
||||
exports.getTokenCount = getTokenCount;
|
||||
43
dist/common/utils/handleError.js
vendored
Normal file
43
dist/common/utils/handleError.js
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.handleError = void 0;
|
||||
const axios_1 = require("axios");
|
||||
function handleError(error) {
|
||||
let message = '发生未知错误,请稍后再试';
|
||||
if (axios_1.default.isAxiosError(error) && error.response) {
|
||||
switch (error.response.status) {
|
||||
case 400:
|
||||
message =
|
||||
'发生错误:400 Bad Request - 请求因格式错误无法被服务器处理。';
|
||||
break;
|
||||
case 401:
|
||||
message = '发生错误:401 Unauthorized - 请求要求进行身份验证。';
|
||||
break;
|
||||
case 403:
|
||||
message = '发生错误:403 Forbidden - 服务器拒绝执行请求。';
|
||||
break;
|
||||
case 404:
|
||||
message = '发生错误:404 Not Found - 请求的资源无法在服务器上找到。';
|
||||
break;
|
||||
case 500:
|
||||
message =
|
||||
'发生错误:500 Internal Server Error - 服务器内部错误,无法完成请求。';
|
||||
break;
|
||||
case 502:
|
||||
message =
|
||||
'发生错误:502 Bad Gateway - 作为网关或代理工作的服务器从上游服务器收到无效响应。';
|
||||
break;
|
||||
case 503:
|
||||
message =
|
||||
'发生错误:503 Service Unavailable - 服务器暂时处于超负载或维护状态,无法处理请求。';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
message = error.message || message;
|
||||
}
|
||||
return message;
|
||||
}
|
||||
exports.handleError = handleError;
|
||||
37
dist/common/utils/index.js
vendored
37
dist/common/utils/index.js
vendored
@@ -14,25 +14,26 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
__exportStar(require("./date"), exports);
|
||||
__exportStar(require("./createRandomCode"), exports);
|
||||
__exportStar(require("./tools"), exports);
|
||||
__exportStar(require("./createRandomInviteCode"), exports);
|
||||
__exportStar(require("./maskEmail"), exports);
|
||||
__exportStar(require("./createRandomUid"), exports);
|
||||
__exportStar(require("./generateCrami"), exports);
|
||||
__exportStar(require("./base"), exports);
|
||||
__exportStar(require("./hideString"), exports);
|
||||
__exportStar(require("./createOrderId"), exports);
|
||||
__exportStar(require("./createRandomCode"), exports);
|
||||
__exportStar(require("./createRandomInviteCode"), exports);
|
||||
__exportStar(require("./createRandomNonceStr"), exports);
|
||||
__exportStar(require("./createRandomUid"), exports);
|
||||
__exportStar(require("./date"), exports);
|
||||
__exportStar(require("./encrypt"), exports);
|
||||
__exportStar(require("./fromatUrl"), exports);
|
||||
__exportStar(require("./generateCrami"), exports);
|
||||
__exportStar(require("./getClientIp"), exports);
|
||||
__exportStar(require("./getDiffArray"), exports);
|
||||
__exportStar(require("./getRandomItem"), exports);
|
||||
__exportStar(require("./getClientIp"), exports);
|
||||
__exportStar(require("./maskIpAddress"), exports);
|
||||
__exportStar(require("./maskCrami"), exports);
|
||||
__exportStar(require("./selectKeyWithWeight"), exports);
|
||||
__exportStar(require("./createOrderId"), exports);
|
||||
__exportStar(require("./createRandomNonceStr"), exports);
|
||||
__exportStar(require("./utcformatTime"), exports);
|
||||
__exportStar(require("./removeSpecialCharacters"), exports);
|
||||
__exportStar(require("./encrypt"), exports);
|
||||
__exportStar(require("./compileNetwork"), exports);
|
||||
__exportStar(require("./getRandomItemFromArray"), exports);
|
||||
__exportStar(require("./getTokenCount"), exports);
|
||||
__exportStar(require("./handleError"), exports);
|
||||
__exportStar(require("./hideString"), exports);
|
||||
__exportStar(require("./maskCrami"), exports);
|
||||
__exportStar(require("./maskEmail"), exports);
|
||||
__exportStar(require("./maskIpAddress"), exports);
|
||||
__exportStar(require("./removeSpecialCharacters"), exports);
|
||||
__exportStar(require("./tools"), exports);
|
||||
__exportStar(require("./utcformatTime"), exports);
|
||||
|
||||
17
dist/common/utils/selectKeyWithWeight.js
vendored
17
dist/common/utils/selectKeyWithWeight.js
vendored
@@ -1,17 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.selectKeyWithWeight = void 0;
|
||||
function selectKeyWithWeight(data) {
|
||||
if (data.length === 0)
|
||||
return undefined;
|
||||
const totalWeight = data.reduce((sum, item) => sum + item.weight, 0);
|
||||
let randomWeight = Math.random() * totalWeight;
|
||||
for (const item of data) {
|
||||
randomWeight -= item.weight;
|
||||
if (randomWeight < 0) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return data[data.length - 1];
|
||||
}
|
||||
exports.selectKeyWithWeight = selectKeyWithWeight;
|
||||
Reference in New Issue
Block a user